@memberjunction/ng-dashboards 2.121.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
|
@@ -1,358 +1,296 @@
|
|
|
1
|
-
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Component } from '@angular/core';
|
|
2
8
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
3
9
|
import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
4
|
-
import { Metadata, RunView } from '@memberjunction/core';
|
|
10
|
+
import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
|
|
11
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
5
12
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
13
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
6
14
|
import * as i0 from "@angular/core";
|
|
7
15
|
import * as i1 from "@memberjunction/ng-shared";
|
|
8
16
|
import * as i2 from "@memberjunction/ng-ai-test-harness";
|
|
9
|
-
import * as i3 from "@angular/
|
|
10
|
-
import * as i4 from "@angular
|
|
11
|
-
import * as i5 from "@
|
|
12
|
-
import * as i6 from "./model-prompt-priority-matrix.component";
|
|
17
|
+
import * as i3 from "@angular/forms";
|
|
18
|
+
import * as i4 from "@progress/kendo-angular-layout";
|
|
19
|
+
import * as i5 from "@memberjunction/ng-shared-generic";
|
|
13
20
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
14
|
-
function
|
|
15
|
-
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3);
|
|
16
|
-
i0.ɵɵelement(3, "div", 4)(4, "div", 4)(5, "div", 4);
|
|
17
|
-
i0.ɵɵelementEnd();
|
|
18
|
-
i0.ɵɵelementStart(6, "div", 5);
|
|
19
|
-
i0.ɵɵtext(7);
|
|
20
|
-
i0.ɵɵelementEnd()()();
|
|
21
|
-
} if (rf & 2) {
|
|
22
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
23
|
-
i0.ɵɵadvance(7);
|
|
24
|
-
i0.ɵɵtextInterpolate(ctx_r0.currentLoadingMessage);
|
|
25
|
-
} }
|
|
26
|
-
function PromptManagementV2Component_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
function PromptManagementV2Component_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
27
22
|
i0.ɵɵtext(0, " Hide Filters ");
|
|
28
23
|
} }
|
|
29
|
-
function
|
|
24
|
+
function PromptManagementV2Component_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
30
25
|
i0.ɵɵtext(0, " Show Filters ");
|
|
31
26
|
} }
|
|
32
|
-
function
|
|
33
|
-
const
|
|
34
|
-
i0.ɵɵelementStart(0, "button",
|
|
35
|
-
i0.ɵɵlistener("click", function
|
|
36
|
-
i0.ɵɵelement(1, "i",
|
|
27
|
+
function PromptManagementV2Component_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
29
|
+
i0.ɵɵelementStart(0, "button", 44);
|
|
30
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewPrompt()); });
|
|
31
|
+
i0.ɵɵelement(1, "i", 45);
|
|
37
32
|
i0.ɵɵtext(2, " New Prompt ");
|
|
38
33
|
i0.ɵɵelementEnd();
|
|
39
34
|
} }
|
|
40
|
-
function
|
|
41
|
-
i0.ɵɵelementStart(0, "option",
|
|
35
|
+
function PromptManagementV2Component_For_47_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "option", 33);
|
|
42
37
|
i0.ɵɵtext(1);
|
|
43
38
|
i0.ɵɵelementEnd();
|
|
44
39
|
} if (rf & 2) {
|
|
45
|
-
const
|
|
46
|
-
i0.ɵɵproperty("value",
|
|
40
|
+
const category_r3 = ctx.$implicit;
|
|
41
|
+
i0.ɵɵproperty("value", category_r3.ID);
|
|
47
42
|
i0.ɵɵadvance();
|
|
48
|
-
i0.ɵɵtextInterpolate(
|
|
43
|
+
i0.ɵɵtextInterpolate(category_r3.Name);
|
|
49
44
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "option",
|
|
45
|
+
function PromptManagementV2Component_For_56_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
i0.ɵɵelementStart(0, "option", 33);
|
|
52
47
|
i0.ɵɵtext(1);
|
|
53
48
|
i0.ɵɵelementEnd();
|
|
54
49
|
} if (rf & 2) {
|
|
55
|
-
const
|
|
56
|
-
i0.ɵɵproperty("value",
|
|
50
|
+
const type_r4 = ctx.$implicit;
|
|
51
|
+
i0.ɵɵproperty("value", type_r4.ID);
|
|
57
52
|
i0.ɵɵadvance();
|
|
58
|
-
i0.ɵɵtextInterpolate(
|
|
53
|
+
i0.ɵɵtextInterpolate(type_r4.Name);
|
|
59
54
|
} }
|
|
60
|
-
function
|
|
61
|
-
|
|
62
|
-
i0.ɵɵ
|
|
63
|
-
i0.ɵɵtext(4, "Prompt Filters");
|
|
64
|
-
i0.ɵɵelementEnd();
|
|
65
|
-
i0.ɵɵelementStart(5, "div", 30)(6, "span", 31);
|
|
66
|
-
i0.ɵɵtext(7);
|
|
67
|
-
i0.ɵɵelementEnd();
|
|
68
|
-
i0.ɵɵelementStart(8, "span", 32);
|
|
69
|
-
i0.ɵɵtext(9);
|
|
70
|
-
i0.ɵɵelementEnd()();
|
|
71
|
-
i0.ɵɵelementStart(10, "button", 33);
|
|
72
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.toggleFilterPanel()); });
|
|
73
|
-
i0.ɵɵelement(11, "span", 34);
|
|
74
|
-
i0.ɵɵelementEnd()();
|
|
75
|
-
i0.ɵɵelementStart(12, "div", 35)(13, "div", 36)(14, "label", 37);
|
|
76
|
-
i0.ɵɵelement(15, "span", 38);
|
|
77
|
-
i0.ɵɵtext(16, " Name ");
|
|
78
|
-
i0.ɵɵelementEnd();
|
|
79
|
-
i0.ɵɵelementStart(17, "input", 39);
|
|
80
|
-
i0.ɵɵlistener("input", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSearchChange($event.target.value)); });
|
|
81
|
-
i0.ɵɵelementEnd()();
|
|
82
|
-
i0.ɵɵelementStart(18, "div", 36)(19, "label", 37);
|
|
83
|
-
i0.ɵɵelement(20, "span", 40);
|
|
84
|
-
i0.ɵɵtext(21, " Category ");
|
|
85
|
-
i0.ɵɵelementEnd();
|
|
86
|
-
i0.ɵɵelementStart(22, "select", 41);
|
|
87
|
-
i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_select_change_22_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCategoryChange($event.target.value)); });
|
|
88
|
-
i0.ɵɵelementStart(23, "option", 42);
|
|
89
|
-
i0.ɵɵtext(24, "All Categories");
|
|
90
|
-
i0.ɵɵelementEnd();
|
|
91
|
-
i0.ɵɵrepeaterCreate(25, PromptManagementV2Component_Conditional_2_Conditional_21_For_26_Template, 2, 2, "option", 43, _forTrack0);
|
|
92
|
-
i0.ɵɵelementEnd()();
|
|
93
|
-
i0.ɵɵelementStart(27, "div", 36)(28, "label", 37);
|
|
94
|
-
i0.ɵɵelement(29, "span", 44);
|
|
95
|
-
i0.ɵɵtext(30, " Type ");
|
|
96
|
-
i0.ɵɵelementEnd();
|
|
97
|
-
i0.ɵɵelementStart(31, "select", 41);
|
|
98
|
-
i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_select_change_31_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onTypeChange($event.target.value)); });
|
|
99
|
-
i0.ɵɵelementStart(32, "option", 42);
|
|
100
|
-
i0.ɵɵtext(33, "All Types");
|
|
101
|
-
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵrepeaterCreate(34, PromptManagementV2Component_Conditional_2_Conditional_21_For_35_Template, 2, 2, "option", 43, _forTrack0);
|
|
103
|
-
i0.ɵɵelementEnd()();
|
|
104
|
-
i0.ɵɵelementStart(36, "div", 36)(37, "label", 37);
|
|
105
|
-
i0.ɵɵelement(38, "span", 45);
|
|
106
|
-
i0.ɵɵtext(39, " Status ");
|
|
107
|
-
i0.ɵɵelementEnd();
|
|
108
|
-
i0.ɵɵelementStart(40, "select", 41);
|
|
109
|
-
i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_select_change_40_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onStatusChange($event.target.value)); });
|
|
110
|
-
i0.ɵɵelementStart(41, "option", 42);
|
|
111
|
-
i0.ɵɵtext(42, "All Statuses");
|
|
112
|
-
i0.ɵɵelementEnd();
|
|
113
|
-
i0.ɵɵelementStart(43, "option", 46);
|
|
114
|
-
i0.ɵɵtext(44, "Active");
|
|
55
|
+
function PromptManagementV2Component_Conditional_74_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
57
|
+
i0.ɵɵelement(1, "mj-loading", 46);
|
|
115
58
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵelementStart(45, "option", 47);
|
|
117
|
-
i0.ɵɵtext(46, "Inactive");
|
|
118
|
-
i0.ɵɵelementEnd()()();
|
|
119
|
-
i0.ɵɵelementStart(47, "div", 48)(48, "button", 49);
|
|
120
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.clearFilters()); });
|
|
121
|
-
i0.ɵɵelement(49, "span", 50);
|
|
122
|
-
i0.ɵɵtext(50, " Reset Filters ");
|
|
123
|
-
i0.ɵɵelementEnd()()()()();
|
|
124
59
|
} if (rf & 2) {
|
|
125
|
-
const
|
|
126
|
-
i0.ɵɵadvance(
|
|
127
|
-
i0.ɵɵ
|
|
128
|
-
i0.ɵɵadvance(2);
|
|
129
|
-
i0.ɵɵtextInterpolate1("of ", ctx_r0.prompts.length, "");
|
|
130
|
-
i0.ɵɵadvance(8);
|
|
131
|
-
i0.ɵɵproperty("value", ctx_r0.searchTerm);
|
|
132
|
-
i0.ɵɵadvance(5);
|
|
133
|
-
i0.ɵɵproperty("value", ctx_r0.selectedCategory);
|
|
134
|
-
i0.ɵɵadvance(3);
|
|
135
|
-
i0.ɵɵrepeater(ctx_r0.categories);
|
|
136
|
-
i0.ɵɵadvance(6);
|
|
137
|
-
i0.ɵɵproperty("value", ctx_r0.selectedType);
|
|
138
|
-
i0.ɵɵadvance(3);
|
|
139
|
-
i0.ɵɵrepeater(ctx_r0.types);
|
|
140
|
-
i0.ɵɵadvance(6);
|
|
141
|
-
i0.ɵɵproperty("value", ctx_r0.selectedStatus);
|
|
60
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
61
|
+
i0.ɵɵadvance();
|
|
62
|
+
i0.ɵɵproperty("text", ctx_r1.currentLoadingMessage);
|
|
142
63
|
} }
|
|
143
|
-
function
|
|
144
|
-
const
|
|
145
|
-
i0.ɵɵelementStart(0, "button",
|
|
146
|
-
i0.ɵɵlistener("click", function
|
|
147
|
-
i0.ɵɵelement(1, "i",
|
|
148
|
-
i0.ɵɵtext(2, " Create
|
|
64
|
+
function PromptManagementV2Component_Conditional_75_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
66
|
+
i0.ɵɵelementStart(0, "button", 49);
|
|
67
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewPrompt()); });
|
|
68
|
+
i0.ɵɵelement(1, "i", 45);
|
|
69
|
+
i0.ɵɵtext(2, " Create New Prompt ");
|
|
149
70
|
i0.ɵɵelementEnd();
|
|
150
71
|
} }
|
|
151
|
-
function
|
|
152
|
-
i0.ɵɵelementStart(0, "div",
|
|
153
|
-
i0.ɵɵelement(1, "i",
|
|
72
|
+
function PromptManagementV2Component_Conditional_75_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
73
|
+
i0.ɵɵelementStart(0, "div", 47);
|
|
74
|
+
i0.ɵɵelement(1, "i", 4);
|
|
154
75
|
i0.ɵɵelementStart(2, "h3");
|
|
155
76
|
i0.ɵɵtext(3, "No prompts found");
|
|
156
77
|
i0.ɵɵelementEnd();
|
|
157
78
|
i0.ɵɵelementStart(4, "p");
|
|
158
79
|
i0.ɵɵtext(5);
|
|
159
80
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵtemplate(6,
|
|
81
|
+
i0.ɵɵtemplate(6, PromptManagementV2Component_Conditional_75_Conditional_0_Conditional_6_Template, 3, 0, "button", 48);
|
|
161
82
|
i0.ɵɵelementEnd();
|
|
162
83
|
} if (rf & 2) {
|
|
163
|
-
const
|
|
84
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
164
85
|
i0.ɵɵadvance(5);
|
|
165
|
-
i0.ɵɵtextInterpolate(
|
|
86
|
+
i0.ɵɵtextInterpolate(ctx_r1.hasActiveFilters ? "Try adjusting your filters" : "Create your first AI prompt to get started");
|
|
166
87
|
i0.ɵɵadvance();
|
|
167
|
-
i0.ɵɵconditional(!
|
|
88
|
+
i0.ɵɵconditional(!ctx_r1.hasActiveFilters && ctx_r1.UserCanCreatePrompts ? 6 : -1);
|
|
89
|
+
} }
|
|
90
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
91
|
+
i0.ɵɵelementStart(0, "span", 60);
|
|
92
|
+
i0.ɵɵelement(1, "i", 70);
|
|
93
|
+
i0.ɵɵtext(2);
|
|
94
|
+
i0.ɵɵelementEnd();
|
|
95
|
+
} if (rf & 2) {
|
|
96
|
+
const prompt_r7 = i0.ɵɵnextContext().$implicit;
|
|
97
|
+
i0.ɵɵclassMap("status-" + prompt_r7.Status.toLowerCase());
|
|
98
|
+
i0.ɵɵadvance(2);
|
|
99
|
+
i0.ɵɵtextInterpolate1(" ", prompt_r7.Status, " ");
|
|
168
100
|
} }
|
|
169
|
-
function
|
|
170
|
-
i0.ɵɵelementStart(0, "p",
|
|
101
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
i0.ɵɵelementStart(0, "p", 64);
|
|
171
103
|
i0.ɵɵtext(1);
|
|
172
104
|
i0.ɵɵelementEnd();
|
|
173
105
|
} if (rf & 2) {
|
|
174
|
-
const
|
|
106
|
+
const prompt_r7 = i0.ɵɵnextContext().$implicit;
|
|
175
107
|
i0.ɵɵadvance();
|
|
176
|
-
i0.ɵɵtextInterpolate(
|
|
108
|
+
i0.ɵɵtextInterpolate(prompt_r7.Description);
|
|
109
|
+
} }
|
|
110
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
i0.ɵɵelementStart(0, "p", 65);
|
|
112
|
+
i0.ɵɵtext(1, "No description provided");
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
177
114
|
} }
|
|
178
|
-
function
|
|
179
|
-
i0.ɵɵelement(0, "i",
|
|
115
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
i0.ɵɵelement(0, "i", 75);
|
|
180
117
|
i0.ɵɵtext(1, " Yes ");
|
|
181
118
|
} }
|
|
182
|
-
function
|
|
183
|
-
i0.ɵɵelement(0, "i",
|
|
119
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
i0.ɵɵelement(0, "i", 76);
|
|
184
121
|
i0.ɵɵtext(1, " No ");
|
|
185
122
|
} }
|
|
186
|
-
function
|
|
187
|
-
|
|
188
|
-
i0.ɵɵ
|
|
189
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_30_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const prompt_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.testPrompt(prompt_r9.ID, $event)); });
|
|
190
|
-
i0.ɵɵelement(1, "i", 76);
|
|
191
|
-
i0.ɵɵtext(2, " Run ");
|
|
123
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "div", 71)(2, "div", 72)(3, "span", 73);
|
|
125
|
+
i0.ɵɵtext(4, "Type");
|
|
192
126
|
i0.ɵɵelementEnd();
|
|
193
|
-
i0.ɵɵelementStart(
|
|
194
|
-
i0.ɵɵ
|
|
195
|
-
i0.ɵɵ
|
|
196
|
-
i0.ɵɵ
|
|
127
|
+
i0.ɵɵelementStart(5, "span", 74);
|
|
128
|
+
i0.ɵɵtext(6);
|
|
129
|
+
i0.ɵɵelementEnd()();
|
|
130
|
+
i0.ɵɵelementStart(7, "div", 72)(8, "span", 73);
|
|
131
|
+
i0.ɵɵtext(9, "Template");
|
|
197
132
|
i0.ɵɵelementEnd();
|
|
133
|
+
i0.ɵɵelementStart(10, "span", 74);
|
|
134
|
+
i0.ɵɵtemplate(11, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_11_Template, 2, 0)(12, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_12_Template, 2, 0);
|
|
135
|
+
i0.ɵɵelementEnd()()()();
|
|
198
136
|
} if (rf & 2) {
|
|
199
|
-
const
|
|
200
|
-
i0.ɵɵ
|
|
137
|
+
const prompt_r7 = i0.ɵɵnextContext().$implicit;
|
|
138
|
+
i0.ɵɵadvance(6);
|
|
139
|
+
i0.ɵɵtextInterpolate(prompt_r7.TypeName);
|
|
140
|
+
i0.ɵɵadvance(5);
|
|
141
|
+
i0.ɵɵconditional(prompt_r7.TemplateEntity ? 11 : 12);
|
|
201
142
|
} }
|
|
202
|
-
function
|
|
203
|
-
|
|
204
|
-
i0.ɵɵ
|
|
143
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
145
|
+
i0.ɵɵelementStart(0, "button", 77);
|
|
146
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_19_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const prompt_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.openPrompt(prompt_r7.ID); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
147
|
+
i0.ɵɵelement(1, "i", 78);
|
|
148
|
+
i0.ɵɵtext(2, " Open ");
|
|
205
149
|
i0.ɵɵelementEnd();
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
i0.ɵɵ
|
|
209
|
-
i0.ɵɵelementStart(
|
|
210
|
-
i0.ɵɵ
|
|
150
|
+
} }
|
|
151
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
152
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
153
|
+
i0.ɵɵelementStart(0, "button", 79);
|
|
154
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_20_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r9); const prompt_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testPrompt(prompt_r7.ID, $event)); });
|
|
155
|
+
i0.ɵɵelement(1, "i", 80);
|
|
156
|
+
i0.ɵɵtext(2, " Run ");
|
|
157
|
+
i0.ɵɵelementEnd();
|
|
158
|
+
} }
|
|
159
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
161
|
+
i0.ɵɵelementStart(0, "div", 53)(1, "div", 54);
|
|
162
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Template_div_click_1_listener() { const prompt_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.togglePromptExpansion(prompt_r7.ID)); });
|
|
163
|
+
i0.ɵɵelementStart(2, "div", 55)(3, "div", 56);
|
|
164
|
+
i0.ɵɵelement(4, "i");
|
|
165
|
+
i0.ɵɵelementEnd();
|
|
166
|
+
i0.ɵɵelementStart(5, "div", 57)(6, "h4", 58);
|
|
167
|
+
i0.ɵɵtext(7);
|
|
211
168
|
i0.ɵɵelementEnd();
|
|
212
|
-
i0.ɵɵelementStart(
|
|
169
|
+
i0.ɵɵelementStart(8, "div", 59)(9, "span", 60);
|
|
170
|
+
i0.ɵɵelement(10, "i", 30);
|
|
213
171
|
i0.ɵɵtext(11);
|
|
214
|
-
i0.ɵɵelementEnd()();
|
|
215
|
-
i0.ɵɵelementStart(12, "div", 67)(13, "span", 68);
|
|
216
|
-
i0.ɵɵtext(14, "Status");
|
|
217
172
|
i0.ɵɵelementEnd();
|
|
218
|
-
i0.ɵɵ
|
|
219
|
-
i0.ɵɵtext(16);
|
|
173
|
+
i0.ɵɵtemplate(12, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_12_Template, 3, 3, "span", 61);
|
|
220
174
|
i0.ɵɵelementEnd()()();
|
|
221
|
-
i0.ɵɵ
|
|
222
|
-
i0.ɵɵtext(20, "Template");
|
|
175
|
+
i0.ɵɵelement(13, "i", 62);
|
|
223
176
|
i0.ɵɵelementEnd();
|
|
224
|
-
i0.ɵɵelementStart(
|
|
225
|
-
i0.ɵɵtemplate(
|
|
226
|
-
i0.ɵɵelementEnd()();
|
|
227
|
-
i0.ɵɵelementStart(24, "div", 67)(25, "span", 68);
|
|
228
|
-
i0.ɵɵtext(26, "Contents");
|
|
177
|
+
i0.ɵɵelementStart(14, "div", 63);
|
|
178
|
+
i0.ɵɵtemplate(15, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_15_Template, 2, 1, "p", 64)(16, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_16_Template, 2, 0, "p", 65)(17, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Template, 13, 2, "div", 66);
|
|
229
179
|
i0.ɵɵelementEnd();
|
|
230
|
-
i0.ɵɵelementStart(
|
|
231
|
-
i0.ɵɵ
|
|
232
|
-
i0.ɵɵelementEnd()()();
|
|
233
|
-
i0.ɵɵelementStart(29, "div", 72);
|
|
234
|
-
i0.ɵɵtemplate(30, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_30_Template, 6, 1);
|
|
180
|
+
i0.ɵɵelementStart(18, "div", 67);
|
|
181
|
+
i0.ɵɵtemplate(19, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_19_Template, 3, 0, "button", 68)(20, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_20_Template, 3, 0, "button", 69);
|
|
235
182
|
i0.ɵɵelementEnd()();
|
|
236
183
|
} if (rf & 2) {
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
i0.ɵɵ
|
|
240
|
-
i0.ɵɵ
|
|
241
|
-
i0.ɵɵ
|
|
242
|
-
i0.ɵɵ
|
|
184
|
+
const prompt_r7 = ctx.$implicit;
|
|
185
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
186
|
+
i0.ɵɵclassProp("expanded", ctx_r1.expandedPromptId === prompt_r7.ID);
|
|
187
|
+
i0.ɵɵadvance(4);
|
|
188
|
+
i0.ɵɵclassMap(ctx_r1.getPromptIcon(prompt_r7));
|
|
189
|
+
i0.ɵɵadvance(3);
|
|
190
|
+
i0.ɵɵtextInterpolate(prompt_r7.Name);
|
|
243
191
|
i0.ɵɵadvance(4);
|
|
244
|
-
i0.ɵɵ
|
|
192
|
+
i0.ɵɵtextInterpolate1(" ", prompt_r7.CategoryName, " ");
|
|
245
193
|
i0.ɵɵadvance();
|
|
246
|
-
i0.ɵɵ
|
|
247
|
-
i0.ɵɵadvance(
|
|
248
|
-
i0.ɵɵ
|
|
249
|
-
i0.ɵɵadvance(
|
|
250
|
-
i0.ɵɵ
|
|
194
|
+
i0.ɵɵconditional(prompt_r7.Status ? 12 : -1);
|
|
195
|
+
i0.ɵɵadvance();
|
|
196
|
+
i0.ɵɵclassProp("rotated", ctx_r1.expandedPromptId === prompt_r7.ID);
|
|
197
|
+
i0.ɵɵadvance(2);
|
|
198
|
+
i0.ɵɵconditional(prompt_r7.Description ? 15 : 16);
|
|
251
199
|
i0.ɵɵadvance(2);
|
|
252
|
-
i0.ɵɵconditional(
|
|
200
|
+
i0.ɵɵconditional(ctx_r1.expandedPromptId === prompt_r7.ID ? 17 : -1);
|
|
201
|
+
i0.ɵɵadvance(2);
|
|
202
|
+
i0.ɵɵconditional(ctx_r1.UserCanReadPrompts ? 19 : -1);
|
|
203
|
+
i0.ɵɵadvance();
|
|
204
|
+
i0.ɵɵconditional(prompt_r7.Status === "Active" && ctx_r1.UserCanReadPrompts ? 20 : -1);
|
|
253
205
|
} }
|
|
254
|
-
function
|
|
255
|
-
|
|
256
|
-
i0.ɵɵ
|
|
257
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template_div_click_1_listener() { const prompt_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.togglePromptExpansion(prompt_r9.ID)); });
|
|
258
|
-
i0.ɵɵelementStart(2, "div", 60);
|
|
259
|
-
i0.ɵɵelement(3, "i");
|
|
260
|
-
i0.ɵɵelementEnd();
|
|
261
|
-
i0.ɵɵelementStart(4, "div", 61)(5, "h4", 62);
|
|
262
|
-
i0.ɵɵtext(6);
|
|
263
|
-
i0.ɵɵelementEnd();
|
|
264
|
-
i0.ɵɵtemplate(7, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_7_Template, 2, 1, "p", 63);
|
|
265
|
-
i0.ɵɵelementEnd();
|
|
266
|
-
i0.ɵɵelement(8, "i", 64);
|
|
267
|
-
i0.ɵɵelementEnd();
|
|
268
|
-
i0.ɵɵtemplate(9, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Template, 31, 8, "div", 65);
|
|
206
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
207
|
+
i0.ɵɵelementStart(0, "div", 50);
|
|
208
|
+
i0.ɵɵrepeaterCreate(1, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Template, 21, 13, "div", 52, _forTrack0);
|
|
269
209
|
i0.ɵɵelementEnd();
|
|
270
210
|
} if (rf & 2) {
|
|
271
|
-
const
|
|
272
|
-
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
273
|
-
i0.ɵɵclassProp("expanded", ctx_r0.expandedPromptId === prompt_r9.ID);
|
|
274
|
-
i0.ɵɵadvance(3);
|
|
275
|
-
i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r9));
|
|
276
|
-
i0.ɵɵadvance(3);
|
|
277
|
-
i0.ɵɵtextInterpolate(prompt_r9.Name || "Unnamed Prompt");
|
|
278
|
-
i0.ɵɵadvance();
|
|
279
|
-
i0.ɵɵconditional(prompt_r9.Description ? 7 : -1);
|
|
211
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
280
212
|
i0.ɵɵadvance();
|
|
281
|
-
i0.ɵɵ
|
|
282
|
-
i0.ɵɵadvance();
|
|
283
|
-
i0.ɵɵconditional(ctx_r0.expandedPromptId === prompt_r9.ID ? 9 : -1);
|
|
213
|
+
i0.ɵɵrepeater(ctx_r1.filteredPrompts);
|
|
284
214
|
} }
|
|
285
|
-
function
|
|
286
|
-
i0.ɵɵelementStart(0, "div",
|
|
287
|
-
i0.ɵɵ
|
|
215
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
216
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
217
|
+
i0.ɵɵtext(1);
|
|
288
218
|
i0.ɵɵelementEnd();
|
|
289
219
|
} if (rf & 2) {
|
|
290
|
-
const
|
|
220
|
+
const prompt_r10 = i0.ɵɵnextContext().$implicit;
|
|
291
221
|
i0.ɵɵadvance();
|
|
292
|
-
i0.ɵɵ
|
|
222
|
+
i0.ɵɵtextInterpolate(prompt_r10.Description);
|
|
293
223
|
} }
|
|
294
|
-
function
|
|
295
|
-
i0.ɵɵelement(0, "i",
|
|
224
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
225
|
+
i0.ɵɵelement(0, "i", 86);
|
|
296
226
|
} }
|
|
297
|
-
function
|
|
298
|
-
i0.ɵɵelement(0, "i",
|
|
227
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
228
|
+
i0.ɵɵelement(0, "i", 87);
|
|
299
229
|
} }
|
|
300
|
-
function
|
|
230
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
301
231
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
302
|
-
i0.ɵɵelementStart(0, "button",
|
|
303
|
-
i0.ɵɵlistener("click", function
|
|
304
|
-
i0.ɵɵelement(1, "i",
|
|
232
|
+
i0.ɵɵelementStart(0, "button", 91);
|
|
233
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const prompt_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openPrompt(prompt_r10.ID)); });
|
|
234
|
+
i0.ɵɵelement(1, "i", 78);
|
|
305
235
|
i0.ɵɵelementEnd();
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
i0.ɵɵ
|
|
236
|
+
} }
|
|
237
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
239
|
+
i0.ɵɵelementStart(0, "button", 92);
|
|
240
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_22_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r12); const prompt_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testPrompt(prompt_r10.ID, $event)); });
|
|
241
|
+
i0.ɵɵelement(1, "i", 80);
|
|
309
242
|
i0.ɵɵelementEnd();
|
|
310
|
-
} if (rf & 2) {
|
|
311
|
-
const prompt_r12 = i0.ɵɵnextContext().$implicit;
|
|
312
|
-
i0.ɵɵproperty("disabled", prompt_r12.Status !== "Active");
|
|
313
243
|
} }
|
|
314
|
-
function
|
|
315
|
-
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div",
|
|
316
|
-
i0.ɵɵelement(
|
|
317
|
-
i0.ɵɵtext(4);
|
|
318
|
-
i0.ɵɵelementEnd()();
|
|
319
|
-
i0.ɵɵelementStart(5, "td");
|
|
320
|
-
i0.ɵɵtext(6);
|
|
244
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
245
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 82)(3, "div", 83);
|
|
246
|
+
i0.ɵɵelement(4, "i");
|
|
321
247
|
i0.ɵɵelementEnd();
|
|
322
|
-
i0.ɵɵelementStart(
|
|
323
|
-
i0.ɵɵtext(
|
|
248
|
+
i0.ɵɵelementStart(5, "div")(6, "div", 58);
|
|
249
|
+
i0.ɵɵtext(7);
|
|
324
250
|
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵ
|
|
326
|
-
i0.ɵɵ
|
|
327
|
-
i0.ɵɵ
|
|
328
|
-
i0.ɵɵ
|
|
329
|
-
i0.ɵɵ
|
|
251
|
+
i0.ɵɵtemplate(8, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_8_Template, 2, 1, "div", 84);
|
|
252
|
+
i0.ɵɵelementEnd()()();
|
|
253
|
+
i0.ɵɵelementStart(9, "td");
|
|
254
|
+
i0.ɵɵtext(10);
|
|
255
|
+
i0.ɵɵelementEnd();
|
|
256
|
+
i0.ɵɵelementStart(11, "td");
|
|
257
|
+
i0.ɵɵtext(12);
|
|
330
258
|
i0.ɵɵelementEnd();
|
|
331
|
-
i0.ɵɵelementStart(
|
|
332
|
-
i0.ɵɵ
|
|
259
|
+
i0.ɵɵelementStart(13, "td")(14, "span", 85);
|
|
260
|
+
i0.ɵɵtext(15);
|
|
333
261
|
i0.ɵɵelementEnd()();
|
|
262
|
+
i0.ɵɵelementStart(16, "td");
|
|
263
|
+
i0.ɵɵtemplate(17, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_17_Template, 1, 0, "i", 86)(18, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_18_Template, 1, 0, "i", 87);
|
|
264
|
+
i0.ɵɵelementEnd();
|
|
265
|
+
i0.ɵɵelementStart(19, "td")(20, "div", 88);
|
|
266
|
+
i0.ɵɵtemplate(21, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_21_Template, 2, 0, "button", 89)(22, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_22_Template, 2, 0, "button", 90);
|
|
267
|
+
i0.ɵɵelementEnd()()();
|
|
334
268
|
} if (rf & 2) {
|
|
335
|
-
const
|
|
336
|
-
const
|
|
269
|
+
const prompt_r10 = ctx.$implicit;
|
|
270
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
271
|
+
i0.ɵɵadvance(4);
|
|
272
|
+
i0.ɵɵclassMap(ctx_r1.getPromptIcon(prompt_r10));
|
|
337
273
|
i0.ɵɵadvance(3);
|
|
338
|
-
i0.ɵɵ
|
|
274
|
+
i0.ɵɵtextInterpolate(prompt_r10.Name);
|
|
339
275
|
i0.ɵɵadvance();
|
|
340
|
-
i0.ɵɵ
|
|
276
|
+
i0.ɵɵconditional(prompt_r10.Description ? 8 : -1);
|
|
341
277
|
i0.ɵɵadvance(2);
|
|
342
|
-
i0.ɵɵtextInterpolate(
|
|
278
|
+
i0.ɵɵtextInterpolate(prompt_r10.CategoryName);
|
|
343
279
|
i0.ɵɵadvance(2);
|
|
344
|
-
i0.ɵɵtextInterpolate(
|
|
280
|
+
i0.ɵɵtextInterpolate(prompt_r10.TypeName);
|
|
345
281
|
i0.ɵɵadvance(2);
|
|
346
|
-
i0.ɵɵclassMap(
|
|
282
|
+
i0.ɵɵclassMap("status-" + (prompt_r10.Status || "unknown").toLowerCase());
|
|
347
283
|
i0.ɵɵadvance();
|
|
348
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
284
|
+
i0.ɵɵtextInterpolate1(" ", prompt_r10.Status || "Unknown", " ");
|
|
349
285
|
i0.ɵɵadvance(2);
|
|
350
|
-
i0.ɵɵconditional(
|
|
351
|
-
i0.ɵɵadvance(
|
|
352
|
-
i0.ɵɵconditional(
|
|
286
|
+
i0.ɵɵconditional(prompt_r10.TemplateEntity ? 17 : 18);
|
|
287
|
+
i0.ɵɵadvance(4);
|
|
288
|
+
i0.ɵɵconditional(ctx_r1.UserCanReadPrompts ? 21 : -1);
|
|
289
|
+
i0.ɵɵadvance();
|
|
290
|
+
i0.ɵɵconditional(prompt_r10.Status === "Active" && ctx_r1.UserCanReadPrompts ? 22 : -1);
|
|
353
291
|
} }
|
|
354
|
-
function
|
|
355
|
-
i0.ɵɵelementStart(0, "div",
|
|
292
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelementStart(0, "div", 51)(1, "table", 81)(2, "thead")(3, "tr")(4, "th");
|
|
356
294
|
i0.ɵɵtext(5, "Name");
|
|
357
295
|
i0.ɵɵelementEnd();
|
|
358
296
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -371,97 +309,41 @@ function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_Templat
|
|
|
371
309
|
i0.ɵɵtext(15, "Actions");
|
|
372
310
|
i0.ɵɵelementEnd()()();
|
|
373
311
|
i0.ɵɵelementStart(16, "tbody");
|
|
374
|
-
i0.ɵɵrepeaterCreate(17,
|
|
312
|
+
i0.ɵɵrepeaterCreate(17, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Template, 23, 12, "tr", null, _forTrack0);
|
|
375
313
|
i0.ɵɵelementEnd()()();
|
|
376
314
|
} if (rf & 2) {
|
|
377
|
-
const
|
|
315
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
378
316
|
i0.ɵɵadvance(17);
|
|
379
|
-
i0.ɵɵrepeater(
|
|
317
|
+
i0.ɵɵrepeater(ctx_r1.filteredPrompts);
|
|
380
318
|
} }
|
|
381
|
-
function
|
|
382
|
-
|
|
383
|
-
i0.ɵɵelementStart(0, "app-model-prompt-priority-matrix", 85);
|
|
384
|
-
i0.ɵɵlistener("promptSelected", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Conditional_1_Template_app_model_prompt_priority_matrix_promptSelected_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.openPrompt($event.ID)); });
|
|
385
|
-
i0.ɵɵelementEnd();
|
|
319
|
+
function PromptManagementV2Component_Conditional_75_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
+
i0.ɵɵtemplate(0, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_Template, 3, 0, "div", 50)(1, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_Template, 19, 0, "div", 51);
|
|
386
321
|
} if (rf & 2) {
|
|
387
|
-
const
|
|
388
|
-
i0.ɵɵ
|
|
389
|
-
} }
|
|
390
|
-
function PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
-
i0.ɵɵelementStart(0, "div", 56);
|
|
392
|
-
i0.ɵɵtemplate(1, PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Conditional_1_Template, 1, 1, "app-model-prompt-priority-matrix", 84);
|
|
393
|
-
i0.ɵɵelementEnd();
|
|
394
|
-
} if (rf & 2) {
|
|
395
|
-
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
322
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
323
|
+
i0.ɵɵconditional(ctx_r1.viewMode === "grid" ? 0 : -1);
|
|
396
324
|
i0.ɵɵadvance();
|
|
397
|
-
i0.ɵɵconditional(
|
|
325
|
+
i0.ɵɵconditional(ctx_r1.viewMode === "list" ? 1 : -1);
|
|
398
326
|
} }
|
|
399
|
-
function
|
|
400
|
-
i0.ɵɵtemplate(0,
|
|
327
|
+
function PromptManagementV2Component_Conditional_75_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
i0.ɵɵtemplate(0, PromptManagementV2Component_Conditional_75_Conditional_0_Template, 7, 2, "div", 47)(1, PromptManagementV2Component_Conditional_75_Conditional_1_Template, 2, 2);
|
|
401
329
|
} if (rf & 2) {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
i0.ɵɵconditional((tmp_2_0 = ctx_r0.viewMode) === "grid" ? 0 : tmp_2_0 === "list" ? 1 : tmp_2_0 === "priority-matrix" ? 2 : -1);
|
|
330
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
331
|
+
i0.ɵɵconditional(ctx_r1.filteredPrompts.length === 0 ? 0 : 1);
|
|
405
332
|
} }
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
i0.ɵɵelementStart(9, "span", 12);
|
|
418
|
-
i0.ɵɵtext(10);
|
|
419
|
-
i0.ɵɵelementEnd()();
|
|
420
|
-
i0.ɵɵelementStart(11, "div", 13)(12, "div", 14)(13, "button", 15);
|
|
421
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("grid")); });
|
|
422
|
-
i0.ɵɵelement(14, "i", 16);
|
|
423
|
-
i0.ɵɵelementEnd();
|
|
424
|
-
i0.ɵɵelementStart(15, "button", 17);
|
|
425
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("list")); });
|
|
426
|
-
i0.ɵɵelement(16, "i", 18);
|
|
427
|
-
i0.ɵɵelementEnd();
|
|
428
|
-
i0.ɵɵelementStart(17, "button", 19);
|
|
429
|
-
i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("priority-matrix")); });
|
|
430
|
-
i0.ɵɵelement(18, "i", 20);
|
|
431
|
-
i0.ɵɵelementEnd()();
|
|
432
|
-
i0.ɵɵtemplate(19, PromptManagementV2Component_Conditional_2_Conditional_19_Template, 3, 0, "button", 21);
|
|
433
|
-
i0.ɵɵelementEnd()();
|
|
434
|
-
i0.ɵɵelementStart(20, "kendo-splitter", 22);
|
|
435
|
-
i0.ɵɵtemplate(21, PromptManagementV2Component_Conditional_2_Conditional_21_Template, 51, 6, "kendo-splitter-pane", 23);
|
|
436
|
-
i0.ɵɵelementStart(22, "kendo-splitter-pane")(23, "div", 24);
|
|
437
|
-
i0.ɵɵtemplate(24, PromptManagementV2Component_Conditional_2_Conditional_24_Template, 7, 2, "div", 25)(25, PromptManagementV2Component_Conditional_2_Conditional_25_Template, 3, 1);
|
|
438
|
-
i0.ɵɵelementEnd()()();
|
|
439
|
-
} if (rf & 2) {
|
|
440
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
441
|
-
i0.ɵɵadvance(7);
|
|
442
|
-
i0.ɵɵconditional(ctx_r0.showFilters ? 7 : 8);
|
|
443
|
-
i0.ɵɵadvance(3);
|
|
444
|
-
i0.ɵɵtextInterpolate1("", ctx_r0.filteredPrompts.length, " prompts");
|
|
445
|
-
i0.ɵɵadvance(3);
|
|
446
|
-
i0.ɵɵclassProp("active", ctx_r0.viewMode === "grid");
|
|
447
|
-
i0.ɵɵadvance(2);
|
|
448
|
-
i0.ɵɵclassProp("active", ctx_r0.viewMode === "list");
|
|
449
|
-
i0.ɵɵadvance(2);
|
|
450
|
-
i0.ɵɵclassProp("active", ctx_r0.viewMode === "priority-matrix");
|
|
451
|
-
i0.ɵɵadvance(2);
|
|
452
|
-
i0.ɵɵconditional(ctx_r0.UserCanCreatePrompts ? 19 : -1);
|
|
453
|
-
i0.ɵɵadvance(2);
|
|
454
|
-
i0.ɵɵconditional(ctx_r0.showFilters ? 21 : -1);
|
|
455
|
-
i0.ɵɵadvance(3);
|
|
456
|
-
i0.ɵɵconditional(ctx_r0.filteredPrompts.length === 0 ? 24 : 25);
|
|
457
|
-
} }
|
|
458
|
-
export class PromptManagementV2Component {
|
|
333
|
+
/**
|
|
334
|
+
* Tree-shaking prevention function - ensures component is included in builds
|
|
335
|
+
*/
|
|
336
|
+
export function LoadAIPromptsResource() {
|
|
337
|
+
// Force inclusion in production builds
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* AI Prompts Resource - displays AI prompt management
|
|
341
|
+
* Extends BaseResourceComponent to work with the resource type system
|
|
342
|
+
*/
|
|
343
|
+
let PromptManagementV2Component = class PromptManagementV2Component extends BaseResourceComponent {
|
|
459
344
|
sharedService;
|
|
460
345
|
testHarnessService;
|
|
461
|
-
|
|
462
|
-
openEntityRecord = new EventEmitter();
|
|
463
|
-
stateChange = new EventEmitter();
|
|
464
|
-
initialState = null;
|
|
346
|
+
navigationService;
|
|
465
347
|
// View state
|
|
466
348
|
viewMode = 'grid';
|
|
467
349
|
isLoading = true;
|
|
@@ -559,17 +441,18 @@ export class PromptManagementV2Component {
|
|
|
559
441
|
clearPermissionCache() {
|
|
560
442
|
this._permissionCache.clear();
|
|
561
443
|
}
|
|
562
|
-
constructor(sharedService, testHarnessService,
|
|
444
|
+
constructor(sharedService, testHarnessService, navigationService) {
|
|
445
|
+
super();
|
|
563
446
|
this.sharedService = sharedService;
|
|
564
447
|
this.testHarnessService = testHarnessService;
|
|
565
|
-
this.
|
|
448
|
+
this.navigationService = navigationService;
|
|
566
449
|
}
|
|
567
450
|
ngOnInit() {
|
|
568
451
|
this.setupSearchListener();
|
|
569
452
|
this.startLoadingMessages();
|
|
570
453
|
this.loadInitialData();
|
|
571
|
-
if (this.
|
|
572
|
-
this.applyInitialState(this.
|
|
454
|
+
if (this.Data?.Configuration) {
|
|
455
|
+
this.applyInitialState(this.Data.Configuration);
|
|
573
456
|
}
|
|
574
457
|
}
|
|
575
458
|
ngOnDestroy() {
|
|
@@ -644,7 +527,6 @@ export class PromptManagementV2Component {
|
|
|
644
527
|
});
|
|
645
528
|
this.filteredPrompts = [...this.prompts];
|
|
646
529
|
this.applyFilters();
|
|
647
|
-
this.emitStateChange();
|
|
648
530
|
}
|
|
649
531
|
catch (error) {
|
|
650
532
|
console.error('Error loading prompt data:', error);
|
|
@@ -655,6 +537,7 @@ export class PromptManagementV2Component {
|
|
|
655
537
|
if (this.loadingMessageInterval) {
|
|
656
538
|
clearInterval(this.loadingMessageInterval);
|
|
657
539
|
}
|
|
540
|
+
this.NotifyLoadComplete();
|
|
658
541
|
}
|
|
659
542
|
}
|
|
660
543
|
applyInitialState(state) {
|
|
@@ -676,16 +559,13 @@ export class PromptManagementV2Component {
|
|
|
676
559
|
}
|
|
677
560
|
toggleFilters() {
|
|
678
561
|
this.showFilters = !this.showFilters;
|
|
679
|
-
this.emitStateChange();
|
|
680
562
|
}
|
|
681
563
|
toggleFilterPanel() {
|
|
682
564
|
this.showFilters = !this.showFilters;
|
|
683
|
-
this.emitStateChange();
|
|
684
565
|
}
|
|
685
566
|
setViewMode(mode) {
|
|
686
567
|
this.viewMode = mode;
|
|
687
568
|
this.expandedPromptId = null;
|
|
688
|
-
this.emitStateChange();
|
|
689
569
|
}
|
|
690
570
|
togglePromptExpansion(promptId) {
|
|
691
571
|
this.expandedPromptId = this.expandedPromptId === promptId ? null : promptId;
|
|
@@ -720,7 +600,6 @@ export class PromptManagementV2Component {
|
|
|
720
600
|
}
|
|
721
601
|
return true;
|
|
722
602
|
});
|
|
723
|
-
this.emitStateChange();
|
|
724
603
|
}
|
|
725
604
|
onCategoryChange(categoryId) {
|
|
726
605
|
this.selectedCategory = categoryId;
|
|
@@ -735,10 +614,8 @@ export class PromptManagementV2Component {
|
|
|
735
614
|
this.applyFilters();
|
|
736
615
|
}
|
|
737
616
|
openPrompt(promptId) {
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
recordId: promptId
|
|
741
|
-
});
|
|
617
|
+
const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: promptId }]);
|
|
618
|
+
this.navigationService.OpenEntityRecord('AI Prompts', compositeKey);
|
|
742
619
|
}
|
|
743
620
|
testPrompt(promptId, event) {
|
|
744
621
|
if (event) {
|
|
@@ -752,21 +629,9 @@ export class PromptManagementV2Component {
|
|
|
752
629
|
this.selectedPromptForTest = null;
|
|
753
630
|
}
|
|
754
631
|
createNewPrompt() {
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
this.router.navigate(['resource', 'record', ''], // Empty record ID = new record
|
|
759
|
-
{
|
|
760
|
-
queryParams: {
|
|
761
|
-
Entity: 'AI Prompts'
|
|
762
|
-
// Could add NewRecordValues here for pre-populated defaults if needed
|
|
763
|
-
}
|
|
764
|
-
});
|
|
765
|
-
}
|
|
766
|
-
catch (error) {
|
|
767
|
-
console.error('Error navigating to new prompt form:', error);
|
|
768
|
-
MJNotificationService.Instance.CreateSimpleNotification('Error opening new prompt form', 'error', 3000);
|
|
769
|
-
}
|
|
632
|
+
// Use the standard MemberJunction pattern to open a new AI Prompt form
|
|
633
|
+
// Empty CompositeKey indicates a new record
|
|
634
|
+
this.navigationService.OpenEntityRecord('AI Prompts', new CompositeKey([]));
|
|
770
635
|
}
|
|
771
636
|
getPromptIcon(prompt) {
|
|
772
637
|
if (prompt.TypeName?.toLowerCase().includes('system')) {
|
|
@@ -783,17 +648,6 @@ export class PromptManagementV2Component {
|
|
|
783
648
|
getStatusClass(status) {
|
|
784
649
|
return status === 'Active' ? 'active' : 'inactive';
|
|
785
650
|
}
|
|
786
|
-
emitStateChange() {
|
|
787
|
-
this.stateChange.emit({
|
|
788
|
-
viewMode: this.viewMode,
|
|
789
|
-
showFilters: this.showFilters,
|
|
790
|
-
searchTerm: this.searchTerm,
|
|
791
|
-
selectedCategory: this.selectedCategory,
|
|
792
|
-
selectedType: this.selectedType,
|
|
793
|
-
selectedStatus: this.selectedStatus,
|
|
794
|
-
promptCount: this.filteredPrompts.length
|
|
795
|
-
});
|
|
796
|
-
}
|
|
797
651
|
get hasActiveFilters() {
|
|
798
652
|
return this.searchTerm !== '' ||
|
|
799
653
|
this.selectedCategory !== 'all' ||
|
|
@@ -812,25 +666,146 @@ export class PromptManagementV2Component {
|
|
|
812
666
|
this.searchSubject.next('');
|
|
813
667
|
this.applyFilters();
|
|
814
668
|
}
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
669
|
+
// BaseResourceComponent abstract method implementations
|
|
670
|
+
async GetResourceDisplayName(data) {
|
|
671
|
+
return 'Prompts';
|
|
672
|
+
}
|
|
673
|
+
async GetResourceIconClass(data) {
|
|
674
|
+
return 'fa-solid fa-comment-dots';
|
|
675
|
+
}
|
|
676
|
+
static ɵfac = function PromptManagementV2Component_Factory(t) { return new (t || PromptManagementV2Component)(i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i1.NavigationService)); };
|
|
677
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementV2Component, selectors: [["app-prompt-management-v2"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 76, vars: 22, consts: [[1, "prompt-management-container"], [1, "dashboard-header"], [1, "header-info"], [1, "dashboard-title"], [1, "fa-solid", "fa-message"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "item-count"], [1, "header-controls"], [1, "view-toggle"], ["type", "button", "title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["type", "button", "title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["type", "button", "title", "Create New Prompt", 1, "control-btn", "primary"], [1, "main-content"], ["orientation", "horizontal", 1, "main-splitter"], [3, "size", "collapsible", "resizable", "scrollable", "hidden"], [1, "filter-panel"], [1, "filter-panel-header"], [1, "filter-summary-inline"], [1, "summary-value"], [1, "summary-label"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "filter-content"], [1, "filter-group"], [1, "filter-label"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search prompts...", 1, "filter-input", 3, "input", "value"], [1, "fa-solid", "fa-folder"], [1, "filter-select", 3, "change", "value"], ["value", "all"], [3, "value"], [1, "fa-solid", "fa-tag"], [1, "fa-solid", "fa-toggle-on"], ["value", "active"], ["value", "inactive"], [1, "filter-actions"], ["title", "Reset all filters", 1, "reset-btn", 3, "click"], [1, "fa-solid", "fa-undo"], [3, "resizable", "scrollable"], [1, "prompts-content"], [1, "loading-container"], ["type", "button", "title", "Create New Prompt", 1, "control-btn", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["size", "large", 3, "text"], [1, "empty-state"], ["type", "button", 1, "empty-state-btn"], ["type", "button", 1, "empty-state-btn", 3, "click"], [1, "prompts-grid"], [1, "prompts-list"], [1, "prompt-card", 3, "expanded"], [1, "prompt-card"], [1, "card-header", 3, "click"], [1, "prompt-info"], [1, "prompt-icon"], [1, "prompt-details"], [1, "prompt-name"], [1, "prompt-meta"], [1, "meta-item"], [1, "meta-item", 3, "class"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-body"], [1, "prompt-description"], [1, "prompt-description", "text-muted"], [1, "expanded-content"], [1, "card-actions"], ["type", "button", "title", "Open Prompt", 1, "action-btn"], ["type", "button", "title", "Run Prompt", 1, "action-btn", "action-btn-primary"], [1, "fa-solid", "fa-circle", 2, "font-size", "8px"], [1, "prompt-stats"], [1, "stat-item"], [1, "stat-label"], [1, "stat-value"], [1, "fa-solid", "fa-check", 2, "color", "#28a745"], [1, "fa-solid", "fa-times", 2, "color", "#dc3545"], ["type", "button", "title", "Open Prompt", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], ["type", "button", "title", "Run Prompt", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-play"], [1, "prompts-table"], [1, "prompt-name-cell"], [1, "prompt-icon-small"], [1, "prompt-description-small"], [1, "status-badge"], [1, "fa-solid", "fa-check-circle", 2, "color", "#28a745"], [1, "fa-solid", "fa-times-circle", 2, "color", "#6c757d"], [1, "table-actions"], ["type", "button", "title", "Open Prompt", 1, "action-btn-small"], ["type", "button", "title", "Run Prompt", 1, "action-btn-small", "primary"], ["type", "button", "title", "Open Prompt", 1, "action-btn-small", 3, "click"], ["type", "button", "title", "Run Prompt", 1, "action-btn-small", "primary", 3, "click"]], template: function PromptManagementV2Component_Template(rf, ctx) { if (rf & 1) {
|
|
678
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h2", 3);
|
|
679
|
+
i0.ɵɵelement(4, "i", 4);
|
|
680
|
+
i0.ɵɵtext(5, " AI Prompts ");
|
|
681
|
+
i0.ɵɵelementEnd();
|
|
682
|
+
i0.ɵɵelementStart(6, "button", 5);
|
|
683
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_6_listener() { return ctx.toggleFilters(); });
|
|
684
|
+
i0.ɵɵelement(7, "i", 6);
|
|
685
|
+
i0.ɵɵtemplate(8, PromptManagementV2Component_Conditional_8_Template, 1, 0)(9, PromptManagementV2Component_Conditional_9_Template, 1, 0);
|
|
686
|
+
i0.ɵɵelementEnd();
|
|
687
|
+
i0.ɵɵelementStart(10, "span", 7);
|
|
688
|
+
i0.ɵɵtext(11);
|
|
689
|
+
i0.ɵɵelementEnd()();
|
|
690
|
+
i0.ɵɵelementStart(12, "div", 8)(13, "div", 9)(14, "button", 10);
|
|
691
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_14_listener() { return ctx.setViewMode("grid"); });
|
|
692
|
+
i0.ɵɵelement(15, "i", 11);
|
|
693
|
+
i0.ɵɵelementEnd();
|
|
694
|
+
i0.ɵɵelementStart(16, "button", 12);
|
|
695
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_16_listener() { return ctx.setViewMode("list"); });
|
|
696
|
+
i0.ɵɵelement(17, "i", 13);
|
|
697
|
+
i0.ɵɵelementEnd()();
|
|
698
|
+
i0.ɵɵtemplate(18, PromptManagementV2Component_Conditional_18_Template, 3, 0, "button", 14);
|
|
699
|
+
i0.ɵɵelementEnd()();
|
|
700
|
+
i0.ɵɵelementStart(19, "div", 15)(20, "kendo-splitter", 16)(21, "kendo-splitter-pane", 17)(22, "div", 18)(23, "div", 19)(24, "h3");
|
|
701
|
+
i0.ɵɵtext(25, "Prompt Filters");
|
|
702
|
+
i0.ɵɵelementEnd();
|
|
703
|
+
i0.ɵɵelementStart(26, "div", 20)(27, "span", 21);
|
|
704
|
+
i0.ɵɵtext(28);
|
|
705
|
+
i0.ɵɵelementEnd();
|
|
706
|
+
i0.ɵɵelementStart(29, "span", 22);
|
|
707
|
+
i0.ɵɵtext(30);
|
|
708
|
+
i0.ɵɵelementEnd()();
|
|
709
|
+
i0.ɵɵelementStart(31, "button", 23);
|
|
710
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_31_listener() { return ctx.toggleFilterPanel(); });
|
|
711
|
+
i0.ɵɵelement(32, "i", 24);
|
|
712
|
+
i0.ɵɵelementEnd()();
|
|
713
|
+
i0.ɵɵelementStart(33, "div", 25)(34, "div", 26)(35, "label", 27);
|
|
714
|
+
i0.ɵɵelement(36, "i", 28);
|
|
715
|
+
i0.ɵɵtext(37, " Name ");
|
|
819
716
|
i0.ɵɵelementEnd();
|
|
717
|
+
i0.ɵɵelementStart(38, "input", 29);
|
|
718
|
+
i0.ɵɵlistener("input", function PromptManagementV2Component_Template_input_input_38_listener($event) { return ctx.onSearchChange($event.target.value); });
|
|
719
|
+
i0.ɵɵelementEnd()();
|
|
720
|
+
i0.ɵɵelementStart(39, "div", 26)(40, "label", 27);
|
|
721
|
+
i0.ɵɵelement(41, "i", 30);
|
|
722
|
+
i0.ɵɵtext(42, " Category ");
|
|
723
|
+
i0.ɵɵelementEnd();
|
|
724
|
+
i0.ɵɵelementStart(43, "select", 31);
|
|
725
|
+
i0.ɵɵlistener("change", function PromptManagementV2Component_Template_select_change_43_listener($event) { return ctx.onCategoryChange($event.target.value); });
|
|
726
|
+
i0.ɵɵelementStart(44, "option", 32);
|
|
727
|
+
i0.ɵɵtext(45, "All Categories");
|
|
728
|
+
i0.ɵɵelementEnd();
|
|
729
|
+
i0.ɵɵrepeaterCreate(46, PromptManagementV2Component_For_47_Template, 2, 2, "option", 33, _forTrack0);
|
|
730
|
+
i0.ɵɵelementEnd()();
|
|
731
|
+
i0.ɵɵelementStart(48, "div", 26)(49, "label", 27);
|
|
732
|
+
i0.ɵɵelement(50, "i", 34);
|
|
733
|
+
i0.ɵɵtext(51, " Type ");
|
|
734
|
+
i0.ɵɵelementEnd();
|
|
735
|
+
i0.ɵɵelementStart(52, "select", 31);
|
|
736
|
+
i0.ɵɵlistener("change", function PromptManagementV2Component_Template_select_change_52_listener($event) { return ctx.onTypeChange($event.target.value); });
|
|
737
|
+
i0.ɵɵelementStart(53, "option", 32);
|
|
738
|
+
i0.ɵɵtext(54, "All Types");
|
|
739
|
+
i0.ɵɵelementEnd();
|
|
740
|
+
i0.ɵɵrepeaterCreate(55, PromptManagementV2Component_For_56_Template, 2, 2, "option", 33, _forTrack0);
|
|
741
|
+
i0.ɵɵelementEnd()();
|
|
742
|
+
i0.ɵɵelementStart(57, "div", 26)(58, "label", 27);
|
|
743
|
+
i0.ɵɵelement(59, "i", 35);
|
|
744
|
+
i0.ɵɵtext(60, " Status ");
|
|
745
|
+
i0.ɵɵelementEnd();
|
|
746
|
+
i0.ɵɵelementStart(61, "select", 31);
|
|
747
|
+
i0.ɵɵlistener("change", function PromptManagementV2Component_Template_select_change_61_listener($event) { return ctx.onStatusChange($event.target.value); });
|
|
748
|
+
i0.ɵɵelementStart(62, "option", 32);
|
|
749
|
+
i0.ɵɵtext(63, "All Statuses");
|
|
750
|
+
i0.ɵɵelementEnd();
|
|
751
|
+
i0.ɵɵelementStart(64, "option", 36);
|
|
752
|
+
i0.ɵɵtext(65, "Active");
|
|
753
|
+
i0.ɵɵelementEnd();
|
|
754
|
+
i0.ɵɵelementStart(66, "option", 37);
|
|
755
|
+
i0.ɵɵtext(67, "Inactive");
|
|
756
|
+
i0.ɵɵelementEnd()()();
|
|
757
|
+
i0.ɵɵelementStart(68, "div", 38)(69, "button", 39);
|
|
758
|
+
i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_69_listener() { return ctx.clearFilters(); });
|
|
759
|
+
i0.ɵɵelement(70, "i", 40);
|
|
760
|
+
i0.ɵɵtext(71, " Reset Filters ");
|
|
761
|
+
i0.ɵɵelementEnd()()()()();
|
|
762
|
+
i0.ɵɵelementStart(72, "kendo-splitter-pane", 41)(73, "div", 42);
|
|
763
|
+
i0.ɵɵtemplate(74, PromptManagementV2Component_Conditional_74_Template, 2, 1, "div", 43)(75, PromptManagementV2Component_Conditional_75_Template, 2, 1);
|
|
764
|
+
i0.ɵɵelementEnd()()()()();
|
|
820
765
|
} if (rf & 2) {
|
|
766
|
+
i0.ɵɵadvance(8);
|
|
767
|
+
i0.ɵɵconditional(ctx.showFilters ? 8 : 9);
|
|
768
|
+
i0.ɵɵadvance(3);
|
|
769
|
+
i0.ɵɵtextInterpolate1("", ctx.filteredPrompts.length, " prompts");
|
|
770
|
+
i0.ɵɵadvance(3);
|
|
771
|
+
i0.ɵɵclassProp("active", ctx.viewMode === "grid");
|
|
772
|
+
i0.ɵɵadvance(2);
|
|
773
|
+
i0.ɵɵclassProp("active", ctx.viewMode === "list");
|
|
774
|
+
i0.ɵɵadvance(2);
|
|
775
|
+
i0.ɵɵconditional(ctx.UserCanCreatePrompts ? 18 : -1);
|
|
776
|
+
i0.ɵɵadvance(3);
|
|
777
|
+
i0.ɵɵproperty("size", ctx.showFilters ? "320px" : "0px")("collapsible", false)("resizable", ctx.showFilters)("scrollable", false)("hidden", !ctx.showFilters);
|
|
778
|
+
i0.ɵɵadvance(7);
|
|
779
|
+
i0.ɵɵtextInterpolate(ctx.filteredPrompts.length);
|
|
780
|
+
i0.ɵɵadvance(2);
|
|
781
|
+
i0.ɵɵtextInterpolate1("of ", ctx.prompts.length, "");
|
|
782
|
+
i0.ɵɵadvance(8);
|
|
783
|
+
i0.ɵɵproperty("value", ctx.searchTerm);
|
|
784
|
+
i0.ɵɵadvance(5);
|
|
785
|
+
i0.ɵɵproperty("value", ctx.selectedCategory);
|
|
786
|
+
i0.ɵɵadvance(3);
|
|
787
|
+
i0.ɵɵrepeater(ctx.categories);
|
|
788
|
+
i0.ɵɵadvance(6);
|
|
789
|
+
i0.ɵɵproperty("value", ctx.selectedType);
|
|
790
|
+
i0.ɵɵadvance(3);
|
|
791
|
+
i0.ɵɵrepeater(ctx.types);
|
|
792
|
+
i0.ɵɵadvance(6);
|
|
793
|
+
i0.ɵɵproperty("value", ctx.selectedStatus);
|
|
794
|
+
i0.ɵɵadvance(11);
|
|
795
|
+
i0.ɵɵproperty("resizable", true)("scrollable", true);
|
|
796
|
+
i0.ɵɵadvance(2);
|
|
797
|
+
i0.ɵɵconditional(ctx.isLoading ? 74 : -1);
|
|
821
798
|
i0.ɵɵadvance();
|
|
822
|
-
i0.ɵɵconditional(ctx.isLoading ?
|
|
823
|
-
} }, dependencies: [i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i5.SplitterComponent, i5.SplitterPaneComponent, i6.ModelPromptPriorityMatrixComponent], styles: [".prompt-management-v2[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: #f5f7fa;\n}\n\n//[_ngcontent-%COMP%] Loading[_ngcontent-%COMP%] state\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background-color: #f5f7fa;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n position: relative;\n width: 80px;\n height: 80px;\n margin: 0 auto 20px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-top-color: #17a2b8;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;\n \n &:nth-child(2) {\n animation-delay: 0.15s;\n width: 70%;\n height: 70%;\n top: 15%;\n left: 15%;\n border-top-color: #28a745;\n }\n \n &:nth-child(3) {\n animation-delay: 0.3s;\n width: 40%;\n height: 40%;\n top: 30%;\n left: 30%;\n border-top-color: #ffc107;\n }\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 16px;\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 0.6; }\n 50% { opacity: 1; }\n}\n\n//[_ngcontent-%COMP%] Dashboard[_ngcontent-%COMP%] Header\n.dashboard-header[_ngcontent-%COMP%] {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n//[_ngcontent-%COMP%] View[_ngcontent-%COMP%] Toggle\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0,0,0,0.08);\n}\n\n//[_ngcontent-%COMP%] Control[_ngcontent-%COMP%] Buttons\n.control-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 10px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: #138496;\n border-color: #117a8b;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n//[_ngcontent-%COMP%] Splitter[_ngcontent-%COMP%] content\nkendo-splitter[_ngcontent-%COMP%] {\n flex: 1;\n background-color: #f5f7fa;\n margin-top: 8px;\n}\n\n//[_ngcontent-%COMP%] Filter[_ngcontent-%COMP%] panel\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: white;\n border-right: 1px solid #e0e0e0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n flex: 1;\n }\n \n .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 12px;\n font-size: 12px;\n \n .summary-value {\n font-weight: 600;\n color: #2196f3;\n }\n \n .summary-label {\n color: #666;\n }\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n color: #666;\n border-radius: 3px;\n transition: all 0.2s;\n \n &:hover {\n background: #f0f0f0;\n color: #333;\n }\n \n .fa-solid {\n font-size: 12px;\n }\n }\n}\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 12px;\n}\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n \n .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n \n .fa-solid {\n font-size: 11px;\n color: #2196f3;\n width: 12px;\n }\n }\n}\n\n.filter-input[_ngcontent-%COMP%], .filter-select[_ngcontent-%COMP%] {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n \n .reset-btn {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 12px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.2s;\n box-sizing: border-box;\n \n &:hover {\n background: #e9ecef;\n border-color: #ccc;\n color: #333;\n }\n \n .fa-solid {\n font-size: 11px;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Content[_ngcontent-%COMP%] area\n.content-area[_ngcontent-%COMP%] {\n height: 100%;\n padding: 24px;\n overflow-y: auto;\n background: #f5f7fa;\n}\n\n//[_ngcontent-%COMP%] Empty[_ngcontent-%COMP%] state\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #6c757d;\n \n i {\n margin-bottom: 24px;\n opacity: 0.3;\n }\n \n h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 16px;\n }\n}\n\n//[_ngcontent-%COMP%] Grid[_ngcontent-%COMP%] view\n.prompt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n .expand-icon {\n transform: rotate(180deg);\n }\n }\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 20px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-color: #e3f2fd;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 16px;\n flex-shrink: 0;\n \n i {\n font-size: 24px;\n color: #17a2b8;\n }\n}\n\n.card-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n\n .card-description {\n margin: 0;\n font-size: 13px;\n color: #6c757d;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n line-height: 1.4;\n }\n}\n\n\n.expand-icon[_ngcontent-%COMP%] {\n color: #adb5bd;\n transition: transform 0.3s ease;\n margin-left: 12px;\n}\n\n.card-content[_ngcontent-%COMP%] {\n padding: 0 20px 20px;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.description-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n \n h5 {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n color: #495057;\n line-height: 1.6;\n }\n}\n\n.stats-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.stat[_ngcontent-%COMP%] {\n text-align: center;\n \n .stat-label {\n display: block;\n font-size: 12px;\n color: #6c757d;\n margin-bottom: 4px;\n }\n \n .stat-value {\n display: block;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n }\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n \n &.active {\n background-color: #d4edda;\n color: #155724;\n }\n \n &.inactive {\n background-color: #f8d7da;\n color: #721c24;\n }\n}\n\n.card-footer[_ngcontent-%COMP%] {\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n display: flex;\n gap: 8px;\n}\n\n.action-button[_ngcontent-%COMP%] {\n padding: 6px 12px;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n color: #495057;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n background-color: #e9ecef;\n border-color: #adb5bd;\n color: #212529;\n }\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n \n &:hover {\n transform: none;\n box-shadow: none;\n background: #17a2b8;\n }\n }\n }\n \n &.small {\n padding: 4px 8px;\n font-size: 12px;\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n }\n }\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] view\n.prompt-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n \n thead {\n background-color: #f8f9fa;\n \n tr {\n border-bottom: 2px solid #dee2e6;\n }\n \n th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n }\n \n tbody {\n tr {\n border-bottom: 1px solid #e9ecef;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:last-child {\n border-bottom: none;\n }\n }\n \n td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n }\n }\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #2c3e50;\n \n i {\n color: #17a2b8;\n }\n}\n\n//[_ngcontent-%COMP%] Priority[_ngcontent-%COMP%] matrix[_ngcontent-%COMP%] container\n.priority-matrix-container[_ngcontent-%COMP%] {\n height: 100%;\n background-color: white;\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n//[_ngcontent-%COMP%] Responsive\n@media[_ngcontent-%COMP%] (max-width[_ngcontent-%COMP%]: 768px)[_ngcontent-%COMP%] {\n .prompt-header {\n flex-wrap: wrap;\n gap: 16px;\n }\n \n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n \n .prompt-grid {\n grid-template-columns: 1fr;\n }\n \n .stats-grid {\n grid-template-columns: 1fr;\n }\n}\n\n//[_ngcontent-%COMP%] Text[_ngcontent-%COMP%] utility[_ngcontent-%COMP%] classes\n.text-success[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.text-muted[_ngcontent-%COMP%] {\n color: #6c757d;\n}"] });
|
|
824
|
-
}
|
|
799
|
+
i0.ɵɵconditional(!ctx.isLoading ? 75 : -1);
|
|
800
|
+
} }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.SplitterComponent, i4.SplitterPaneComponent, i5.LoadingComponent], styles: ["\n\n.prompt-management-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f5f7fa;\n}\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.main-splitter[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: white;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n}\n.filter-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n font-size: 12px;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #17a2b8;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n color: #333;\n}\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #17a2b8;\n}\n\n.filter-input[_ngcontent-%COMP%], \n.filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n}\n.filter-input[_ngcontent-%COMP%]:focus, \n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.filter-input[_ngcontent-%COMP%]::placeholder, \n.filter-select[_ngcontent-%COMP%]::placeholder {\n color: #adb5bd;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 16px;\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n color: #6c757d;\n font-size: 14px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.2s;\n}\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n color: #495057;\n}\n\n\n\n.prompts-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 24px;\n background: #f5f7fa;\n}\n\n\n\n.prompts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\n.prompt-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n}\n\n.card-header[_ngcontent-%COMP%] {\n padding: 20px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompt-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n}\n\n.prompt-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\n font-size: 20px;\n}\n\n.prompt-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: #ffc107;\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6c757d;\n transition: transform 0.3s ease;\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 20px 20px 20px;\n}\n\n.prompt-description[_ngcontent-%COMP%] {\n margin: 16px 0 0 0;\n font-size: 14px;\n line-height: 1.6;\n color: #6c757d;\n}\n\n.prompt-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: #adb5bd;\n}\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #f0f4f8;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.prompt-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #495057;\n font-weight: 500;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f8f9fa;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 6px 16px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n\n\n.prompts-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.prompts-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.prompts-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-bottom: 2px solid #e0e6ed;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n}\n\n.prompts-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n}\n\n.prompt-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\n font-size: 16px;\n}\n\n.prompt-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: #f8f9fa;\n color: #6c757d;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 80px 20px;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 64px;\n color: #dee2e6;\n margin-bottom: 24px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: #495057;\n font-weight: 600;\n margin-bottom: 12px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 24px;\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: #17a2b8;\n color: white;\n border: none;\n padding: 10px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n display: inline-block;\n margin-bottom: 16px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n display: inline-block;\n width: 40px;\n height: 40px;\n margin: 3px;\n border-radius: 50%;\n border: 3px solid #17a2b8;\n border-color: #17a2b8 transparent #17a2b8 transparent;\n animation: _ngcontent-%COMP%_spinner-ring 1.2s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.loading-text[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n}\n\n\n\n@media (max-width: 768px) {\n .dashboard-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n .header-info[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .header-controls[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .prompts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .prompt-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] });
|
|
801
|
+
};
|
|
802
|
+
PromptManagementV2Component = __decorate([
|
|
803
|
+
RegisterClass(BaseResourceComponent, 'AIPromptsResource')
|
|
804
|
+
], PromptManagementV2Component);
|
|
805
|
+
export { PromptManagementV2Component };
|
|
825
806
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptManagementV2Component, [{
|
|
826
807
|
type: Component,
|
|
827
|
-
args: [{ selector: 'app-prompt-management-v2', template: "<div class=\"prompt-management-v2\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">{{ currentLoadingMessage }}</div>\n </div>\n </div>\n } @else {\n <div class=\"dashboard-header\" style=\"display: flex !important; justify-content: space-between !important; align-items: center !important; padding: 16px 24px !important; background: white !important;\">\n <div class=\"header-info\" style=\"display: flex !important; align-items: center !important; gap: 16px !important; flex: 1 !important;\">\n <h2 class=\"dashboard-title\" style=\"margin: 0 !important; display: flex !important; align-items: center !important; gap: 8px !important;\">\n <i class=\"fa-solid fa-message\"></i>\n AI Prompts\n </h2>\n <button \n type=\"button\" \n class=\"filter-toggle-btn\"\n (click)=\"toggleFilters()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (showFilters) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredPrompts.length }} prompts</span>\n </div>\n \n <div class=\"header-controls\" style=\"display: flex !important; align-items: center !important; gap: 16px !important;\">\n <div class=\"view-toggle\">\n <button \n type=\"button\" \n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button \n type=\"button\" \n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button \n type=\"button\" \n class=\"view-btn\"\n [class.active]=\"viewMode === 'priority-matrix'\"\n (click)=\"setViewMode('priority-matrix')\"\n title=\"Priority Matrix\">\n <i class=\"fa-solid fa-chart-scatter\"></i>\n </button>\n </div>\n \n @if (UserCanCreatePrompts) {\n <button \n type=\"button\" \n class=\"control-btn primary\"\n (click)=\"createNewPrompt()\"\n title=\"Create New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n }\n </div>\n </div>\n\n <kendo-splitter orientation=\"horizontal\">\n @if (showFilters) {\n <kendo-splitter-pane size=\"320\" min=\"250\" max=\"400\">\n <div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>Prompt Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredPrompts.length }}</span>\n <span class=\"summary-label\">of {{ prompts.length }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n \n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Name\n </label>\n <input \n type=\"text\"\n class=\"filter-input\"\n placeholder=\"Search prompts...\"\n [value]=\"searchTerm\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n </div>\n\n <!-- Category Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-folder\"></span>\n Category\n </label>\n <select class=\"filter-select\" [value]=\"selectedCategory\" (change)=\"onCategoryChange($any($event.target).value)\">\n <option value=\"all\">All Categories</option>\n @for (category of categories; track category.ID) {\n <option [value]=\"category.ID\">{{ category.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Type Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-tag\"></span>\n Type\n </label>\n <select class=\"filter-select\" [value]=\"selectedType\" (change)=\"onTypeChange($any($event.target).value)\">\n <option value=\"all\">All Types</option>\n @for (type of types; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Status Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n Status\n </label>\n <select class=\"filter-select\" [value]=\"selectedStatus\" (change)=\"onStatusChange($any($event.target).value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n </select>\n </div>\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button class=\"reset-btn\" (click)=\"clearFilters()\" title=\"Reset all filters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n }\n\n <kendo-splitter-pane>\n <div class=\"content-area\">\n @if (filteredPrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots fa-4x\"></i>\n <h3>No prompts found</h3>\n <p>{{ hasActiveFilters ? 'Try adjusting your filters' : 'Create your first AI prompt to get started' }}</p>\n @if (!hasActiveFilters && UserCanCreatePrompts) {\n <button class=\"primary-action\" (click)=\"createNewPrompt()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create First Prompt\n </button>\n }\n </div>\n } @else {\n @switch (viewMode) {\n @case ('grid') {\n <div class=\"prompt-grid\">\n @for (prompt of filteredPrompts; track prompt.ID) {\n <div class=\"prompt-card\" [class.expanded]=\"expandedPromptId === prompt.ID\">\n <div class=\"card-header\" (click)=\"togglePromptExpansion(prompt.ID)\">\n <div class=\"card-icon\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n </div>\n <div class=\"card-info\">\n <h4 class=\"prompt-name\">{{ prompt.Name || 'Unnamed Prompt' }}</h4>\n @if (prompt.Description) {\n <p class=\"card-description\">{{ prompt.Description }}</p>\n }\n </div>\n <i class=\"fa-solid fa-chevron-down expand-icon\" [class.rotated]=\"expandedPromptId === prompt.ID\"></i>\n </div>\n\n @if (expandedPromptId === prompt.ID) {\n <div class=\"card-content\">\n <div class=\"stats-grid\">\n <div class=\"stat\">\n <span class=\"stat-label\">Category</span>\n <span class=\"stat-value\">{{ prompt.CategoryName }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"stat-label\">Type</span>\n <span class=\"stat-value\">{{ prompt.TypeName }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"stat-label\">Status</span>\n <span class=\"stat-value status-badge\" [class]=\"getStatusClass(prompt.Status)\">\n {{ prompt.Status }}\n </span>\n </div>\n </div>\n\n <div class=\"stats-grid\" style=\"margin-top: 12px;\">\n <div class=\"stat\">\n <span class=\"stat-label\">Template</span>\n <span class=\"stat-value\">\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check-circle text-success\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times-circle text-muted\"></i> No\n }\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"stat-label\">Contents</span>\n <span class=\"stat-value\">{{ prompt.TemplateContents?.length || 0 }}</span>\n </div>\n </div>\n\n <div class=\"card-footer\">\n @if (UserCanReadPrompts) {\n <button class=\"action-button primary\" (click)=\"testPrompt(prompt.ID, $event)\" [disabled]=\"prompt.Status !== 'Active'\" title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n <button class=\"action-button\" (click)=\"openPrompt(prompt.ID); $event.stopPropagation()\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n \n @case ('list') {\n <div class=\"prompt-list\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Category</th>\n <th>Type</th>\n <th>Status</th>\n <th>Template</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (prompt of filteredPrompts; track prompt.ID) {\n <tr>\n <td>\n <div class=\"name-cell\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n {{ prompt.Name }}\n </div>\n </td>\n <td>{{ prompt.CategoryName }}</td>\n <td>{{ prompt.TypeName }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"getStatusClass(prompt.Status)\">\n {{ prompt.Status }}\n </span>\n </td>\n <td>\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check-circle text-success\"></i>\n } @else {\n <i class=\"fa-solid fa-times-circle text-muted\"></i>\n }\n </td>\n <td>\n @if (UserCanReadPrompts) {\n <button class=\"action-button small primary\" (click)=\"testPrompt(prompt.ID, $event)\" [disabled]=\"prompt.Status !== 'Active'\" title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button class=\"action-button small\" (click)=\"openPrompt(prompt.ID)\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n \n @case ('priority-matrix') {\n <div class=\"priority-matrix-container\">\n @if (UserCanReadPrompts) {\n <app-model-prompt-priority-matrix \n [selectedPrompts]=\"filteredPromptsAsEntities\"\n (promptSelected)=\"openPrompt($event.ID)\">\n </app-model-prompt-priority-matrix>\n }\n </div>\n }\n }\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n }\n</div>\n\n<!-- AI Prompt Test Harness - Now handled by service with minimize support -->", styles: [".prompt-management-v2 {\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: #f5f7fa;\n}\n\n// Loading state\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background-color: #f5f7fa;\n}\n\n.loading-content {\n text-align: center;\n}\n\n.loading-spinner {\n position: relative;\n width: 80px;\n height: 80px;\n margin: 0 auto 20px;\n}\n\n.spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-top-color: #17a2b8;\n border-radius: 50%;\n animation: spin 1.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;\n \n &:nth-child(2) {\n animation-delay: 0.15s;\n width: 70%;\n height: 70%;\n top: 15%;\n left: 15%;\n border-top-color: #28a745;\n }\n \n &:nth-child(3) {\n animation-delay: 0.3s;\n width: 40%;\n height: 40%;\n top: 30%;\n left: 30%;\n border-top-color: #ffc107;\n }\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text {\n color: #6c757d;\n font-size: 16px;\n animation: pulse 2s ease-in-out infinite;\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 0.6; }\n 50% { opacity: 1; }\n}\n\n// Dashboard Header\n.dashboard-header {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title i {\n color: #17a2b8;\n}\n\n.filter-toggle-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n// View Toggle\n.view-toggle {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn:hover {\n color: #495057;\n}\n\n.view-btn.active {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0,0,0,0.08);\n}\n\n// Control Buttons\n.control-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 10px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.control-btn.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary:hover {\n background: #138496;\n border-color: #117a8b;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n// Splitter content\nkendo-splitter {\n flex: 1;\n background-color: #f5f7fa;\n margin-top: 8px;\n}\n\n// Filter panel\n.filter-panel {\n height: 100%;\n background: white;\n border-right: 1px solid #e0e0e0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n flex: 1;\n }\n \n .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 12px;\n font-size: 12px;\n \n .summary-value {\n font-weight: 600;\n color: #2196f3;\n }\n \n .summary-label {\n color: #666;\n }\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n color: #666;\n border-radius: 3px;\n transition: all 0.2s;\n \n &:hover {\n background: #f0f0f0;\n color: #333;\n }\n \n .fa-solid {\n font-size: 12px;\n }\n }\n}\n\n.filter-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 12px;\n}\n\n.filter-group {\n margin-bottom: 20px;\n \n .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n \n .fa-solid {\n font-size: 11px;\n color: #2196f3;\n width: 12px;\n }\n }\n}\n\n.filter-input, .filter-select {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n}\n\n.filter-select {\n cursor: pointer;\n}\n\n.filter-actions {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n \n .reset-btn {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 12px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.2s;\n box-sizing: border-box;\n \n &:hover {\n background: #e9ecef;\n border-color: #ccc;\n color: #333;\n }\n \n .fa-solid {\n font-size: 11px;\n }\n }\n}\n\n// Content area\n.content-area {\n height: 100%;\n padding: 24px;\n overflow-y: auto;\n background: #f5f7fa;\n}\n\n// Empty state\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #6c757d;\n \n i {\n margin-bottom: 24px;\n opacity: 0.3;\n }\n \n h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 16px;\n }\n}\n\n// Grid view\n.prompt-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n .expand-icon {\n transform: rotate(180deg);\n }\n }\n}\n\n.card-header {\n display: flex;\n align-items: center;\n padding: 20px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n}\n\n.card-icon {\n width: 48px;\n height: 48px;\n background-color: #e3f2fd;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 16px;\n flex-shrink: 0;\n \n i {\n font-size: 24px;\n color: #17a2b8;\n }\n}\n\n.card-info {\n flex: 1;\n min-width: 0;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n\n .card-description {\n margin: 0;\n font-size: 13px;\n color: #6c757d;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n line-height: 1.4;\n }\n}\n\n\n.expand-icon {\n color: #adb5bd;\n transition: transform 0.3s ease;\n margin-left: 12px;\n}\n\n.card-content {\n padding: 0 20px 20px;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.description-section {\n margin-bottom: 16px;\n \n h5 {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n color: #495057;\n line-height: 1.6;\n }\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.stat {\n text-align: center;\n \n .stat-label {\n display: block;\n font-size: 12px;\n color: #6c757d;\n margin-bottom: 4px;\n }\n \n .stat-value {\n display: block;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n }\n}\n\n.status-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n \n &.active {\n background-color: #d4edda;\n color: #155724;\n }\n \n &.inactive {\n background-color: #f8d7da;\n color: #721c24;\n }\n}\n\n.card-footer {\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n display: flex;\n gap: 8px;\n}\n\n.action-button {\n padding: 6px 12px;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n color: #495057;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n background-color: #e9ecef;\n border-color: #adb5bd;\n color: #212529;\n }\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n \n &:hover {\n transform: none;\n box-shadow: none;\n background: #17a2b8;\n }\n }\n }\n \n &.small {\n padding: 4px 8px;\n font-size: 12px;\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n }\n }\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n}\n\n// List view\n.prompt-list {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n \n thead {\n background-color: #f8f9fa;\n \n tr {\n border-bottom: 2px solid #dee2e6;\n }\n \n th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n }\n \n tbody {\n tr {\n border-bottom: 1px solid #e9ecef;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:last-child {\n border-bottom: none;\n }\n }\n \n td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n }\n }\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #2c3e50;\n \n i {\n color: #17a2b8;\n }\n}\n\n// Priority matrix container\n.priority-matrix-container {\n height: 100%;\n background-color: white;\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n// Responsive\n@media (max-width: 768px) {\n .prompt-header {\n flex-wrap: wrap;\n gap: 16px;\n }\n \n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n \n .prompt-grid {\n grid-template-columns: 1fr;\n }\n \n .stats-grid {\n grid-template-columns: 1fr;\n }\n}\n\n// Text utility classes\n.text-success {\n color: #28a745;\n}\n\n.text-muted {\n color: #6c757d;\n}"] }]
|
|
828
|
-
}], () => [{ type: i1.SharedService }, { type: i2.AITestHarnessDialogService }, { type:
|
|
829
|
-
|
|
830
|
-
}], stateChange: [{
|
|
831
|
-
type: Output
|
|
832
|
-
}], initialState: [{
|
|
833
|
-
type: Input
|
|
834
|
-
}] }); })();
|
|
835
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementV2Component, { className: "PromptManagementV2Component", filePath: "src/AI/components/prompts/prompt-management-v2.component.ts", lineNumber: 24 }); })();
|
|
808
|
+
args: [{ selector: 'app-prompt-management-v2', template: "<div class=\"prompt-management-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-message\"></i>\n AI Prompts\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilters()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (showFilters) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredPrompts.length }} prompts</span>\n </div>\n\n <div class=\"header-controls\">\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n\n @if (UserCanCreatePrompts) {\n <button\n type=\"button\"\n class=\"control-btn primary\"\n (click)=\"createNewPrompt()\"\n title=\"Create New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n }\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <kendo-splitter\n class=\"main-splitter\"\n orientation=\"horizontal\">\n\n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane\n [size]=\"showFilters ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"showFilters\"\n [scrollable]=\"false\"\n [hidden]=\"!showFilters\">\n <div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>Prompt Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredPrompts.length }}</span>\n <span class=\"summary-label\">of {{ prompts.length }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-search\"></i>\n Name\n </label>\n <input\n type=\"text\"\n class=\"filter-input\"\n placeholder=\"Search prompts...\"\n [value]=\"searchTerm\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n </div>\n\n <!-- Category Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-folder\"></i>\n Category\n </label>\n <select class=\"filter-select\" [value]=\"selectedCategory\" (change)=\"onCategoryChange($any($event.target).value)\">\n <option value=\"all\">All Categories</option>\n @for (category of categories; track category.ID) {\n <option [value]=\"category.ID\">{{ category.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Type Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-tag\"></i>\n Type\n </label>\n <select class=\"filter-select\" [value]=\"selectedType\" (change)=\"onTypeChange($any($event.target).value)\">\n <option value=\"all\">All Types</option>\n @for (type of types; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Status Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Status\n </label>\n <select class=\"filter-select\" [value]=\"selectedStatus\" (change)=\"onStatusChange($any($event.target).value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n </select>\n </div>\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button class=\"reset-btn\" (click)=\"clearFilters()\" title=\"Reset all filters\">\n <i class=\"fa-solid fa-undo\"></i>\n Reset Filters\n </button>\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n\n <!-- Prompts List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"true\">\n <div class=\"prompts-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"currentLoadingMessage\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Prompts Display -->\n @if (!isLoading) {\n @if (filteredPrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-message\"></i>\n <h3>No prompts found</h3>\n <p>{{ hasActiveFilters ? 'Try adjusting your filters' : 'Create your first AI prompt to get started' }}</p>\n @if (!hasActiveFilters && UserCanCreatePrompts) {\n <button\n type=\"button\"\n class=\"empty-state-btn\"\n (click)=\"createNewPrompt()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\n </button>\n }\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"prompts-grid\">\n @for (prompt of filteredPrompts; track prompt.ID) {\n <div class=\"prompt-card\" [class.expanded]=\"expandedPromptId === prompt.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"togglePromptExpansion(prompt.ID)\">\n <div class=\"prompt-info\">\n <div class=\"prompt-icon\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n </div>\n <div class=\"prompt-details\">\n <h4 class=\"prompt-name\">{{ prompt.Name }}</h4>\n <div class=\"prompt-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ prompt.CategoryName }}\n </span>\n @if (prompt.Status) {\n <span class=\"meta-item\" [class]=\"'status-' + prompt.Status.toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ prompt.Status }}\n </span>\n }\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"expandedPromptId === prompt.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (prompt.Description) {\n <p class=\"prompt-description\">{{ prompt.Description }}</p>\n } @else {\n <p class=\"prompt-description text-muted\">No description provided</p>\n }\n\n <!-- Expandable Content -->\n @if (expandedPromptId === prompt.ID) {\n <div class=\"expanded-content\">\n <div class=\"prompt-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Type</span>\n <span class=\"stat-value\">{{ prompt.TypeName }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Template</span>\n <span class=\"stat-value\">\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check\" style=\"color: #28a745;\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #dc3545;\"></i> No\n }\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n @if (UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"openPrompt(prompt.ID); $event.stopPropagation()\"\n title=\"Open Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open\n </button>\n }\n\n @if (prompt.Status === 'Active' && UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"testPrompt(prompt.ID, $event)\"\n title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"prompts-list\">\n <table class=\"prompts-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Category</th>\n <th>Type</th>\n <th>Status</th>\n <th>Template</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (prompt of filteredPrompts; track prompt.ID) {\n <tr>\n <td>\n <div class=\"prompt-name-cell\">\n <div class=\"prompt-icon-small\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n </div>\n <div>\n <div class=\"prompt-name\">{{ prompt.Name }}</div>\n @if (prompt.Description) {\n <div class=\"prompt-description-small\">{{ prompt.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>{{ prompt.CategoryName }}</td>\n <td>{{ prompt.TypeName }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"'status-' + (prompt.Status || 'unknown').toLowerCase()\">\n {{ prompt.Status || 'Unknown' }}\n </span>\n </td>\n <td>\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check-circle\" style=\"color: #28a745;\"></i>\n } @else {\n <i class=\"fa-solid fa-times-circle\" style=\"color: #6c757d;\"></i>\n }\n </td>\n <td>\n <div class=\"table-actions\">\n @if (UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"openPrompt(prompt.ID)\"\n title=\"Open Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n @if (prompt.Status === 'Active' && UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"testPrompt(prompt.ID, $event)\"\n title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n</div>\n", styles: ["/* Prompt Management Component - Modern Design */\n.prompt-management-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f5f7fa;\n}\n\n/* Dashboard Header */\n.dashboard-header {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title i {\n color: #17a2b8;\n}\n\n.filter-toggle-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn:hover {\n color: #495057;\n}\n\n.view-btn.active {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.control-btn.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n/* Main Content */\n.main-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.main-splitter {\n flex: 1;\n min-height: 0;\n}\n\n/* Filter Panel */\n.filter-panel {\n height: 100%;\n background: white;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n}\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n font-size: 12px;\n}\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 600;\n color: #17a2b8;\n}\n.filter-panel-header .filter-summary-inline .summary-label {\n color: #6c757d;\n}\n.filter-panel-header .close-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n.filter-panel-header .close-btn:hover {\n background: #f0f0f0;\n color: #333;\n}\n\n.filter-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.filter-group {\n margin-bottom: 20px;\n}\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.filter-group .filter-label i {\n font-size: 12px;\n color: #17a2b8;\n}\n\n.filter-input,\n.filter-select {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n}\n.filter-input:focus,\n.filter-select:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.filter-input::placeholder,\n.filter-select::placeholder {\n color: #adb5bd;\n}\n\n.filter-select {\n cursor: pointer;\n}\n\n.filter-actions {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n.filter-actions .reset-btn {\n width: 100%;\n padding: 10px 16px;\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n color: #6c757d;\n font-size: 14px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.2s;\n}\n.filter-actions .reset-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n color: #495057;\n}\n\n/* Prompts Content */\n.prompts-content {\n height: 100%;\n overflow-y: auto;\n padding: 24px;\n background: #f5f7fa;\n}\n\n/* Grid View */\n.prompts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.prompt-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\n.prompt-card.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n}\n\n.card-header {\n padding: 20px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompt-info {\n display: flex;\n gap: 16px;\n flex: 1;\n}\n\n.prompt-icon {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon i {\n color: white;\n font-size: 20px;\n}\n\n.prompt-details {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-name {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item i {\n font-size: 12px;\n}\n\n.meta-item.status-active {\n color: #28a745;\n}\n\n.meta-item.status-pending {\n color: #ffc107;\n}\n\n.meta-item.status-inactive {\n color: #6c757d;\n}\n\n.expand-icon {\n font-size: 14px;\n color: #6c757d;\n transition: transform 0.3s ease;\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n}\n\n.card-body {\n padding: 0 20px 20px 20px;\n}\n\n.prompt-description {\n margin: 16px 0 0 0;\n font-size: 14px;\n line-height: 1.6;\n color: #6c757d;\n}\n\n.prompt-description.text-muted {\n font-style: italic;\n color: #adb5bd;\n}\n\n/* Expanded Content */\n.expanded-content {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #f0f4f8;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.prompt-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-label {\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value {\n font-size: 14px;\n color: #495057;\n font-weight: 500;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 16px 20px;\n background: #f8f9fa;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 6px 16px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n/* List View */\n.prompts-list {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.prompts-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.prompts-table thead {\n background: #f8f9fa;\n border-bottom: 2px solid #e0e6ed;\n}\n\n.prompts-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.prompts-table tbody tr {\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompts-table tbody tr:hover {\n background: #f8f9fa;\n}\n\n.prompts-table td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n}\n\n.prompt-name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.prompt-icon-small {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon-small i {\n color: white;\n font-size: 16px;\n}\n\n.prompt-description-small {\n font-size: 13px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge.status-inactive {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.status-unknown {\n background: #f8f9fa;\n color: #6c757d;\n}\n\n.table-actions {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small {\n background: white;\n border: 1px solid #dee2e6;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-small.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-small.primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 80px 20px;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 64px;\n color: #dee2e6;\n margin-bottom: 24px;\n display: block;\n}\n\n.empty-state h3 {\n color: #495057;\n font-weight: 600;\n margin-bottom: 12px;\n}\n\n.empty-state p {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 24px;\n}\n\n.empty-state-btn {\n background: #17a2b8;\n color: white;\n border: none;\n padding: 10px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.empty-state-btn:hover {\n background: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n/* Loading State */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\n\n.loading-content {\n text-align: center;\n}\n\n.loading-spinner {\n display: inline-block;\n margin-bottom: 16px;\n}\n\n.spinner-ring {\n display: inline-block;\n width: 40px;\n height: 40px;\n margin: 3px;\n border-radius: 50%;\n border: 3px solid #17a2b8;\n border-color: #17a2b8 transparent #17a2b8 transparent;\n animation: spinner-ring 1.2s linear infinite;\n}\n\n@keyframes spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.loading-text {\n color: #6c757d;\n font-size: 14px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n .header-info {\n justify-content: space-between;\n }\n .header-controls {\n justify-content: space-between;\n }\n .prompts-grid {\n grid-template-columns: 1fr;\n }\n .prompt-stats {\n grid-template-columns: 1fr;\n }\n}\n"] }]
|
|
809
|
+
}], () => [{ type: i1.SharedService }, { type: i2.AITestHarnessDialogService }, { type: i1.NavigationService }], null); })();
|
|
810
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementV2Component, { className: "PromptManagementV2Component", filePath: "src/AI/components/prompts/prompt-management-v2.component.ts", lineNumber: 36 }); })();
|
|
836
811
|
//# sourceMappingURL=prompt-management-v2.component.js.map
|