@memberjunction/ng-dashboards 5.34.1 → 5.35.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 +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +781 -783
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +79 -30
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +196 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +107 -93
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +36 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +31 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -17,157 +17,46 @@ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
18
|
import * as i1 from "@memberjunction/ng-shared";
|
|
19
19
|
import * as i2 from "@memberjunction/ng-ai-test-harness";
|
|
20
|
-
import * as i3 from "@
|
|
21
|
-
import * as i4 from "
|
|
22
|
-
import * as i5 from "@
|
|
23
|
-
import * as i6 from "
|
|
24
|
-
import * as i7 from "../../../shared/pipes/highlight-search.pipe";
|
|
20
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
21
|
+
import * as i4 from "@memberjunction/ng-ui-components";
|
|
22
|
+
import * as i5 from "@angular/common";
|
|
23
|
+
import * as i6 from "../../../shared/pipes/highlight-search.pipe";
|
|
25
24
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
26
25
|
function PromptManagementComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
-
i0.ɵɵtext(0, " Hide Filters ");
|
|
28
|
-
} }
|
|
29
|
-
function PromptManagementComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
-
i0.ɵɵtext(0, " Show Filters ");
|
|
31
|
-
} }
|
|
32
|
-
function PromptManagementComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
33
26
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
34
|
-
i0.ɵɵelementStart(0, "button",
|
|
35
|
-
i0.ɵɵlistener("click", function
|
|
36
|
-
i0.ɵɵelement(1, "i",
|
|
27
|
+
i0.ɵɵelementStart(0, "button", 14);
|
|
28
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewPrompt()); });
|
|
29
|
+
i0.ɵɵelement(1, "i", 15);
|
|
37
30
|
i0.ɵɵtext(2, " New Prompt ");
|
|
38
31
|
i0.ɵɵelementEnd();
|
|
39
32
|
} }
|
|
40
|
-
function
|
|
41
|
-
i0.ɵɵelementStart(0, "
|
|
42
|
-
i0.ɵɵ
|
|
43
|
-
i0.ɵɵelementEnd();
|
|
44
|
-
} if (rf & 2) {
|
|
45
|
-
const category_r4 = ctx.$implicit;
|
|
46
|
-
i0.ɵɵproperty("value", category_r4.ID);
|
|
47
|
-
i0.ɵɵadvance();
|
|
48
|
-
i0.ɵɵtextInterpolate(category_r4.Name);
|
|
49
|
-
} }
|
|
50
|
-
function PromptManagementComponent_Conditional_21_For_35_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
-
i0.ɵɵelementStart(0, "option", 39);
|
|
52
|
-
i0.ɵɵtext(1);
|
|
53
|
-
i0.ɵɵelementEnd();
|
|
54
|
-
} if (rf & 2) {
|
|
55
|
-
const type_r5 = ctx.$implicit;
|
|
56
|
-
i0.ɵɵproperty("value", type_r5.ID);
|
|
57
|
-
i0.ɵɵadvance();
|
|
58
|
-
i0.ɵɵtextInterpolate(type_r5.Name);
|
|
59
|
-
} }
|
|
60
|
-
function PromptManagementComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
-
const _r3 = i0.ɵɵgetCurrentView();
|
|
62
|
-
i0.ɵɵelementStart(0, "as-split-area", 17)(1, "div", 24)(2, "div", 25)(3, "h3");
|
|
63
|
-
i0.ɵɵtext(4, "Prompt Filters");
|
|
64
|
-
i0.ɵɵelementEnd();
|
|
65
|
-
i0.ɵɵelementStart(5, "div", 26)(6, "span", 27);
|
|
66
|
-
i0.ɵɵtext(7);
|
|
67
|
-
i0.ɵɵelementEnd();
|
|
68
|
-
i0.ɵɵelementStart(8, "span", 28);
|
|
69
|
-
i0.ɵɵtext(9);
|
|
70
|
-
i0.ɵɵelementEnd()();
|
|
71
|
-
i0.ɵɵelementStart(10, "button", 29);
|
|
72
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_21_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFilterPanel()); });
|
|
73
|
-
i0.ɵɵelement(11, "i", 30);
|
|
74
|
-
i0.ɵɵelementEnd()();
|
|
75
|
-
i0.ɵɵelementStart(12, "div", 31)(13, "div", 32)(14, "label", 33);
|
|
76
|
-
i0.ɵɵelement(15, "i", 34);
|
|
77
|
-
i0.ɵɵtext(16, " Name ");
|
|
78
|
-
i0.ɵɵelementEnd();
|
|
79
|
-
i0.ɵɵelementStart(17, "input", 35);
|
|
80
|
-
i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_21_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchChange($event.target.value)); });
|
|
81
|
-
i0.ɵɵelementEnd()();
|
|
82
|
-
i0.ɵɵelementStart(18, "div", 32)(19, "label", 33);
|
|
83
|
-
i0.ɵɵelement(20, "i", 36);
|
|
84
|
-
i0.ɵɵtext(21, " Category ");
|
|
85
|
-
i0.ɵɵelementEnd();
|
|
86
|
-
i0.ɵɵelementStart(22, "select", 37);
|
|
87
|
-
i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_21_Template_select_change_22_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCategoryChange($event.target.value)); });
|
|
88
|
-
i0.ɵɵelementStart(23, "option", 38);
|
|
89
|
-
i0.ɵɵtext(24, "All Categories");
|
|
90
|
-
i0.ɵɵelementEnd();
|
|
91
|
-
i0.ɵɵrepeaterCreate(25, PromptManagementComponent_Conditional_21_For_26_Template, 2, 2, "option", 39, _forTrack0);
|
|
92
|
-
i0.ɵɵelementEnd()();
|
|
93
|
-
i0.ɵɵelementStart(27, "div", 32)(28, "label", 33);
|
|
94
|
-
i0.ɵɵelement(29, "i", 40);
|
|
95
|
-
i0.ɵɵtext(30, " Type ");
|
|
96
|
-
i0.ɵɵelementEnd();
|
|
97
|
-
i0.ɵɵelementStart(31, "select", 37);
|
|
98
|
-
i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_21_Template_select_change_31_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTypeChange($event.target.value)); });
|
|
99
|
-
i0.ɵɵelementStart(32, "option", 38);
|
|
100
|
-
i0.ɵɵtext(33, "All Types");
|
|
101
|
-
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵrepeaterCreate(34, PromptManagementComponent_Conditional_21_For_35_Template, 2, 2, "option", 39, _forTrack0);
|
|
103
|
-
i0.ɵɵelementEnd()();
|
|
104
|
-
i0.ɵɵelementStart(36, "div", 32)(37, "label", 33);
|
|
105
|
-
i0.ɵɵelement(38, "i", 41);
|
|
106
|
-
i0.ɵɵtext(39, " Status ");
|
|
107
|
-
i0.ɵɵelementEnd();
|
|
108
|
-
i0.ɵɵelementStart(40, "select", 37);
|
|
109
|
-
i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_21_Template_select_change_40_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onStatusChange($event.target.value)); });
|
|
110
|
-
i0.ɵɵelementStart(41, "option", 38);
|
|
111
|
-
i0.ɵɵtext(42, "All Statuses");
|
|
112
|
-
i0.ɵɵelementEnd();
|
|
113
|
-
i0.ɵɵelementStart(43, "option", 42);
|
|
114
|
-
i0.ɵɵtext(44, "Active");
|
|
115
|
-
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵelementStart(45, "option", 43);
|
|
117
|
-
i0.ɵɵtext(46, "Inactive");
|
|
118
|
-
i0.ɵɵelementEnd()()();
|
|
119
|
-
i0.ɵɵelementStart(47, "div", 44)(48, "button", 45);
|
|
120
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_21_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearFilters()); });
|
|
121
|
-
i0.ɵɵelement(49, "i", 46);
|
|
122
|
-
i0.ɵɵtext(50, " Reset Filters ");
|
|
123
|
-
i0.ɵɵelementEnd()()()()();
|
|
124
|
-
} if (rf & 2) {
|
|
125
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
126
|
-
i0.ɵɵproperty("size", 20)("minSize", 15)("maxSize", 30);
|
|
127
|
-
i0.ɵɵadvance(7);
|
|
128
|
-
i0.ɵɵtextInterpolate(ctx_r1.filteredPrompts.length);
|
|
129
|
-
i0.ɵɵadvance(2);
|
|
130
|
-
i0.ɵɵtextInterpolate1("of ", ctx_r1.prompts.length);
|
|
131
|
-
i0.ɵɵadvance(8);
|
|
132
|
-
i0.ɵɵproperty("value", ctx_r1.searchTerm);
|
|
133
|
-
i0.ɵɵadvance(5);
|
|
134
|
-
i0.ɵɵproperty("value", ctx_r1.selectedCategory);
|
|
135
|
-
i0.ɵɵadvance(3);
|
|
136
|
-
i0.ɵɵrepeater(ctx_r1.categories);
|
|
137
|
-
i0.ɵɵadvance(6);
|
|
138
|
-
i0.ɵɵproperty("value", ctx_r1.selectedType);
|
|
139
|
-
i0.ɵɵadvance(3);
|
|
140
|
-
i0.ɵɵrepeater(ctx_r1.types);
|
|
141
|
-
i0.ɵɵadvance(6);
|
|
142
|
-
i0.ɵɵproperty("value", ctx_r1.selectedStatus);
|
|
143
|
-
} }
|
|
144
|
-
function PromptManagementComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
-
i0.ɵɵelementStart(0, "div", 19);
|
|
146
|
-
i0.ɵɵelement(1, "mj-loading", 47);
|
|
33
|
+
function PromptManagementComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
35
|
+
i0.ɵɵelement(1, "mj-loading", 16);
|
|
147
36
|
i0.ɵɵelementEnd();
|
|
148
37
|
} if (rf & 2) {
|
|
149
38
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
150
39
|
i0.ɵɵadvance();
|
|
151
40
|
i0.ɵɵproperty("text", ctx_r1.currentLoadingMessage);
|
|
152
41
|
} }
|
|
153
|
-
function
|
|
154
|
-
const
|
|
155
|
-
i0.ɵɵelementStart(0, "button",
|
|
156
|
-
i0.ɵɵlistener("click", function
|
|
157
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
function PromptManagementComponent_Conditional_13_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "button", 20);
|
|
45
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewPrompt()); });
|
|
46
|
+
i0.ɵɵelement(1, "i", 15);
|
|
158
47
|
i0.ɵɵtext(2, " Create New Prompt ");
|
|
159
48
|
i0.ɵɵelementEnd();
|
|
160
49
|
} }
|
|
161
|
-
function
|
|
162
|
-
i0.ɵɵelementStart(0, "div",
|
|
163
|
-
i0.ɵɵelement(1, "i",
|
|
50
|
+
function PromptManagementComponent_Conditional_13_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
51
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
52
|
+
i0.ɵɵelement(1, "i", 18);
|
|
164
53
|
i0.ɵɵelementStart(2, "h3");
|
|
165
54
|
i0.ɵɵtext(3, "No prompts found");
|
|
166
55
|
i0.ɵɵelementEnd();
|
|
167
56
|
i0.ɵɵelementStart(4, "p");
|
|
168
57
|
i0.ɵɵtext(5);
|
|
169
58
|
i0.ɵɵelementEnd();
|
|
170
|
-
i0.ɵɵconditionalCreate(6,
|
|
59
|
+
i0.ɵɵconditionalCreate(6, PromptManagementComponent_Conditional_13_Conditional_0_Conditional_6_Template, 3, 0, "button", 19);
|
|
171
60
|
i0.ɵɵelementEnd();
|
|
172
61
|
} if (rf & 2) {
|
|
173
62
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -176,168 +65,168 @@ function PromptManagementComponent_Conditional_25_Conditional_0_Template(rf, ctx
|
|
|
176
65
|
i0.ɵɵadvance();
|
|
177
66
|
i0.ɵɵconditional(!ctx_r1.hasActiveFilters && ctx_r1.UserCanCreatePrompts ? 6 : -1);
|
|
178
67
|
} }
|
|
179
|
-
function
|
|
180
|
-
i0.ɵɵelementStart(0, "span",
|
|
181
|
-
i0.ɵɵelement(1, "i",
|
|
68
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
70
|
+
i0.ɵɵelement(1, "i", 42);
|
|
182
71
|
i0.ɵɵtext(2);
|
|
183
72
|
i0.ɵɵelementEnd();
|
|
184
73
|
} if (rf & 2) {
|
|
185
|
-
const
|
|
186
|
-
i0.ɵɵclassMap("status-" +
|
|
74
|
+
const prompt_r5 = i0.ɵɵnextContext().$implicit;
|
|
75
|
+
i0.ɵɵclassMap("status-" + prompt_r5.Status.toLowerCase());
|
|
187
76
|
i0.ɵɵadvance(2);
|
|
188
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
77
|
+
i0.ɵɵtextInterpolate1(" ", prompt_r5.Status, " ");
|
|
189
78
|
} }
|
|
190
|
-
function
|
|
191
|
-
i0.ɵɵelement(0, "p",
|
|
79
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelement(0, "p", 36);
|
|
192
81
|
i0.ɵɵpipe(1, "highlightSearch");
|
|
193
82
|
} if (rf & 2) {
|
|
194
|
-
const
|
|
83
|
+
const prompt_r5 = i0.ɵɵnextContext().$implicit;
|
|
195
84
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
196
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1,
|
|
85
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1, prompt_r5.Description, ctx_r1.searchTerm), i0.ɵɵsanitizeHtml);
|
|
197
86
|
} }
|
|
198
|
-
function
|
|
199
|
-
i0.ɵɵelementStart(0, "p",
|
|
87
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelementStart(0, "p", 37);
|
|
200
89
|
i0.ɵɵtext(1, "No description provided");
|
|
201
90
|
i0.ɵɵelementEnd();
|
|
202
91
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵelement(0, "i",
|
|
92
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
+
i0.ɵɵelement(0, "i", 47);
|
|
205
94
|
i0.ɵɵtext(1, " Yes ");
|
|
206
95
|
} }
|
|
207
|
-
function
|
|
208
|
-
i0.ɵɵelement(0, "i",
|
|
96
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
97
|
+
i0.ɵɵelement(0, "i", 48);
|
|
209
98
|
i0.ɵɵtext(1, " No ");
|
|
210
99
|
} }
|
|
211
|
-
function
|
|
212
|
-
i0.ɵɵelementStart(0, "div",
|
|
100
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
i0.ɵɵelementStart(0, "div", 38)(1, "div", 43)(2, "div", 44)(3, "span", 45);
|
|
213
102
|
i0.ɵɵtext(4, "Type");
|
|
214
103
|
i0.ɵɵelementEnd();
|
|
215
|
-
i0.ɵɵelementStart(5, "span",
|
|
104
|
+
i0.ɵɵelementStart(5, "span", 46);
|
|
216
105
|
i0.ɵɵtext(6);
|
|
217
106
|
i0.ɵɵelementEnd()();
|
|
218
|
-
i0.ɵɵelementStart(7, "div",
|
|
107
|
+
i0.ɵɵelementStart(7, "div", 44)(8, "span", 45);
|
|
219
108
|
i0.ɵɵtext(9, "Template");
|
|
220
109
|
i0.ɵɵelementEnd();
|
|
221
|
-
i0.ɵɵelementStart(10, "span",
|
|
222
|
-
i0.ɵɵconditionalCreate(11,
|
|
110
|
+
i0.ɵɵelementStart(10, "span", 46);
|
|
111
|
+
i0.ɵɵconditionalCreate(11, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_11_Template, 2, 0)(12, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_12_Template, 2, 0);
|
|
223
112
|
i0.ɵɵelementEnd()()()();
|
|
224
113
|
} if (rf & 2) {
|
|
225
|
-
const
|
|
114
|
+
const prompt_r5 = i0.ɵɵnextContext().$implicit;
|
|
226
115
|
i0.ɵɵadvance(6);
|
|
227
|
-
i0.ɵɵtextInterpolate(
|
|
116
|
+
i0.ɵɵtextInterpolate(prompt_r5.TypeName);
|
|
228
117
|
i0.ɵɵadvance(5);
|
|
229
|
-
i0.ɵɵconditional(
|
|
118
|
+
i0.ɵɵconditional(prompt_r5.MJTemplateEntity ? 11 : 12);
|
|
230
119
|
} }
|
|
231
|
-
function
|
|
232
|
-
const
|
|
233
|
-
i0.ɵɵelementStart(0, "button",
|
|
234
|
-
i0.ɵɵlistener("click", function
|
|
235
|
-
i0.ɵɵelement(1, "i",
|
|
120
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
121
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
122
|
+
i0.ɵɵelementStart(0, "button", 49);
|
|
123
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_19_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const prompt_r5 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.showPromptDetails(prompt_r5, $event)); });
|
|
124
|
+
i0.ɵɵelement(1, "i", 50);
|
|
236
125
|
i0.ɵɵtext(2, " Details ");
|
|
237
126
|
i0.ɵɵelementEnd();
|
|
238
127
|
} }
|
|
239
|
-
function
|
|
240
|
-
const
|
|
241
|
-
i0.ɵɵelementStart(0, "button",
|
|
242
|
-
i0.ɵɵlistener("click", function
|
|
243
|
-
i0.ɵɵelement(1, "i",
|
|
128
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
130
|
+
i0.ɵɵelementStart(0, "button", 51);
|
|
131
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_20_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const prompt_r5 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testPrompt(prompt_r5.ID, $event)); });
|
|
132
|
+
i0.ɵɵelement(1, "i", 52);
|
|
244
133
|
i0.ɵɵtext(2, " Run ");
|
|
245
134
|
i0.ɵɵelementEnd();
|
|
246
135
|
} }
|
|
247
|
-
function
|
|
248
|
-
const
|
|
249
|
-
i0.ɵɵelementStart(0, "div",
|
|
250
|
-
i0.ɵɵlistener("click", function
|
|
251
|
-
i0.ɵɵelementStart(2, "div",
|
|
136
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
138
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "div", 25);
|
|
139
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Template_div_click_1_listener() { const prompt_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.togglePromptExpansion(prompt_r5.ID)); });
|
|
140
|
+
i0.ɵɵelementStart(2, "div", 26)(3, "div", 27);
|
|
252
141
|
i0.ɵɵelement(4, "i");
|
|
253
142
|
i0.ɵɵelementEnd();
|
|
254
|
-
i0.ɵɵelementStart(5, "div",
|
|
255
|
-
i0.ɵɵelement(6, "h4",
|
|
143
|
+
i0.ɵɵelementStart(5, "div", 28);
|
|
144
|
+
i0.ɵɵelement(6, "h4", 29);
|
|
256
145
|
i0.ɵɵpipe(7, "highlightSearch");
|
|
257
|
-
i0.ɵɵelementStart(8, "div",
|
|
258
|
-
i0.ɵɵelement(10, "i",
|
|
146
|
+
i0.ɵɵelementStart(8, "div", 30)(9, "span", 31);
|
|
147
|
+
i0.ɵɵelement(10, "i", 32);
|
|
259
148
|
i0.ɵɵtext(11);
|
|
260
149
|
i0.ɵɵelementEnd();
|
|
261
|
-
i0.ɵɵconditionalCreate(12,
|
|
150
|
+
i0.ɵɵconditionalCreate(12, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_12_Template, 3, 3, "span", 33);
|
|
262
151
|
i0.ɵɵelementEnd()()();
|
|
263
|
-
i0.ɵɵelement(13, "i",
|
|
152
|
+
i0.ɵɵelement(13, "i", 34);
|
|
264
153
|
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵelementStart(14, "div",
|
|
266
|
-
i0.ɵɵconditionalCreate(15,
|
|
267
|
-
i0.ɵɵconditionalCreate(17,
|
|
154
|
+
i0.ɵɵelementStart(14, "div", 35);
|
|
155
|
+
i0.ɵɵconditionalCreate(15, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_15_Template, 2, 4, "p", 36)(16, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_16_Template, 2, 0, "p", 37);
|
|
156
|
+
i0.ɵɵconditionalCreate(17, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_17_Template, 13, 2, "div", 38);
|
|
268
157
|
i0.ɵɵelementEnd();
|
|
269
|
-
i0.ɵɵelementStart(18, "div",
|
|
270
|
-
i0.ɵɵconditionalCreate(19,
|
|
271
|
-
i0.ɵɵconditionalCreate(20,
|
|
158
|
+
i0.ɵɵelementStart(18, "div", 39);
|
|
159
|
+
i0.ɵɵconditionalCreate(19, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_19_Template, 3, 0, "button", 40);
|
|
160
|
+
i0.ɵɵconditionalCreate(20, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Conditional_20_Template, 3, 0, "button", 41);
|
|
272
161
|
i0.ɵɵelementEnd()();
|
|
273
162
|
} if (rf & 2) {
|
|
274
|
-
const
|
|
163
|
+
const prompt_r5 = ctx.$implicit;
|
|
275
164
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
276
|
-
i0.ɵɵclassProp("expanded", ctx_r1.expandedPromptId ===
|
|
165
|
+
i0.ɵɵclassProp("expanded", ctx_r1.expandedPromptId === prompt_r5.ID);
|
|
277
166
|
i0.ɵɵadvance(4);
|
|
278
|
-
i0.ɵɵclassMap(ctx_r1.getPromptIcon(
|
|
167
|
+
i0.ɵɵclassMap(ctx_r1.getPromptIcon(prompt_r5));
|
|
279
168
|
i0.ɵɵadvance(2);
|
|
280
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(7, 13,
|
|
169
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(7, 13, prompt_r5.Name, ctx_r1.searchTerm), i0.ɵɵsanitizeHtml);
|
|
281
170
|
i0.ɵɵadvance(5);
|
|
282
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
171
|
+
i0.ɵɵtextInterpolate1(" ", prompt_r5.CategoryName, " ");
|
|
283
172
|
i0.ɵɵadvance();
|
|
284
|
-
i0.ɵɵconditional(
|
|
173
|
+
i0.ɵɵconditional(prompt_r5.Status ? 12 : -1);
|
|
285
174
|
i0.ɵɵadvance();
|
|
286
|
-
i0.ɵɵclassProp("rotated", ctx_r1.expandedPromptId ===
|
|
175
|
+
i0.ɵɵclassProp("rotated", ctx_r1.expandedPromptId === prompt_r5.ID);
|
|
287
176
|
i0.ɵɵadvance(2);
|
|
288
|
-
i0.ɵɵconditional(
|
|
177
|
+
i0.ɵɵconditional(prompt_r5.Description ? 15 : 16);
|
|
289
178
|
i0.ɵɵadvance(2);
|
|
290
|
-
i0.ɵɵconditional(ctx_r1.expandedPromptId ===
|
|
179
|
+
i0.ɵɵconditional(ctx_r1.expandedPromptId === prompt_r5.ID ? 17 : -1);
|
|
291
180
|
i0.ɵɵadvance(2);
|
|
292
181
|
i0.ɵɵconditional(ctx_r1.UserCanReadPrompts ? 19 : -1);
|
|
293
182
|
i0.ɵɵadvance();
|
|
294
|
-
i0.ɵɵconditional(
|
|
183
|
+
i0.ɵɵconditional(prompt_r5.Status === "Active" && ctx_r1.UserCanReadPrompts ? 20 : -1);
|
|
295
184
|
} }
|
|
296
|
-
function
|
|
297
|
-
i0.ɵɵelementStart(0, "div",
|
|
298
|
-
i0.ɵɵrepeaterCreate(1,
|
|
185
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
187
|
+
i0.ɵɵrepeaterCreate(1, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_For_2_Template, 21, 16, "div", 23, _forTrack0);
|
|
299
188
|
i0.ɵɵelementEnd();
|
|
300
189
|
} if (rf & 2) {
|
|
301
190
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
302
191
|
i0.ɵɵadvance();
|
|
303
192
|
i0.ɵɵrepeater(ctx_r1.filteredPrompts);
|
|
304
193
|
} }
|
|
305
|
-
function
|
|
306
|
-
i0.ɵɵelement(0, "div",
|
|
194
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
195
|
+
i0.ɵɵelement(0, "div", 59);
|
|
307
196
|
i0.ɵɵpipe(1, "highlightSearch");
|
|
308
197
|
} if (rf & 2) {
|
|
309
|
-
const
|
|
198
|
+
const prompt_r9 = i0.ɵɵnextContext().$implicit;
|
|
310
199
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
311
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1,
|
|
200
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(1, 1, prompt_r9.Description, ctx_r1.searchTerm), i0.ɵɵsanitizeHtml);
|
|
312
201
|
} }
|
|
313
|
-
function
|
|
314
|
-
i0.ɵɵelement(0, "i",
|
|
202
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
+
i0.ɵɵelement(0, "i", 61);
|
|
315
204
|
} }
|
|
316
|
-
function
|
|
317
|
-
i0.ɵɵelement(0, "i",
|
|
205
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
i0.ɵɵelement(0, "i", 62);
|
|
318
207
|
} }
|
|
319
|
-
function
|
|
320
|
-
const
|
|
321
|
-
i0.ɵɵelementStart(0, "button",
|
|
322
|
-
i0.ɵɵlistener("click", function
|
|
323
|
-
i0.ɵɵelement(1, "i",
|
|
208
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
210
|
+
i0.ɵɵelementStart(0, "button", 66);
|
|
211
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const prompt_r9 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.showPromptDetails(prompt_r9)); });
|
|
212
|
+
i0.ɵɵelement(1, "i", 50);
|
|
324
213
|
i0.ɵɵelementEnd();
|
|
325
214
|
} }
|
|
326
|
-
function
|
|
327
|
-
const
|
|
328
|
-
i0.ɵɵelementStart(0, "button",
|
|
329
|
-
i0.ɵɵlistener("click", function
|
|
330
|
-
i0.ɵɵelement(1, "i",
|
|
215
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
216
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
217
|
+
i0.ɵɵelementStart(0, "button", 67);
|
|
218
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_22_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); const prompt_r9 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testPrompt(prompt_r9.ID, $event)); });
|
|
219
|
+
i0.ɵɵelement(1, "i", 52);
|
|
331
220
|
i0.ɵɵelementEnd();
|
|
332
221
|
} }
|
|
333
|
-
function
|
|
334
|
-
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div",
|
|
222
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 57)(3, "div", 58);
|
|
335
224
|
i0.ɵɵelement(4, "i");
|
|
336
225
|
i0.ɵɵelementEnd();
|
|
337
226
|
i0.ɵɵelementStart(5, "div");
|
|
338
|
-
i0.ɵɵelement(6, "div",
|
|
227
|
+
i0.ɵɵelement(6, "div", 29);
|
|
339
228
|
i0.ɵɵpipe(7, "highlightSearch");
|
|
340
|
-
i0.ɵɵconditionalCreate(8,
|
|
229
|
+
i0.ɵɵconditionalCreate(8, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_8_Template, 2, 4, "div", 59);
|
|
341
230
|
i0.ɵɵelementEnd()()();
|
|
342
231
|
i0.ɵɵelementStart(9, "td");
|
|
343
232
|
i0.ɵɵtext(10);
|
|
@@ -345,65 +234,65 @@ function PromptManagementComponent_Conditional_25_Conditional_1_Conditional_1_Fo
|
|
|
345
234
|
i0.ɵɵelementStart(11, "td");
|
|
346
235
|
i0.ɵɵtext(12);
|
|
347
236
|
i0.ɵɵelementEnd();
|
|
348
|
-
i0.ɵɵelementStart(13, "td")(14, "span",
|
|
237
|
+
i0.ɵɵelementStart(13, "td")(14, "span", 60);
|
|
349
238
|
i0.ɵɵtext(15);
|
|
350
239
|
i0.ɵɵelementEnd()();
|
|
351
240
|
i0.ɵɵelementStart(16, "td");
|
|
352
|
-
i0.ɵɵconditionalCreate(17,
|
|
241
|
+
i0.ɵɵconditionalCreate(17, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_17_Template, 1, 0, "i", 61)(18, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_18_Template, 1, 0, "i", 62);
|
|
353
242
|
i0.ɵɵelementEnd();
|
|
354
|
-
i0.ɵɵelementStart(19, "td")(20, "div",
|
|
355
|
-
i0.ɵɵconditionalCreate(21,
|
|
356
|
-
i0.ɵɵconditionalCreate(22,
|
|
243
|
+
i0.ɵɵelementStart(19, "td")(20, "div", 63);
|
|
244
|
+
i0.ɵɵconditionalCreate(21, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_21_Template, 2, 0, "button", 64);
|
|
245
|
+
i0.ɵɵconditionalCreate(22, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Conditional_22_Template, 2, 0, "button", 65);
|
|
357
246
|
i0.ɵɵelementEnd()()();
|
|
358
247
|
} if (rf & 2) {
|
|
359
|
-
const
|
|
248
|
+
const prompt_r9 = ctx.$implicit;
|
|
360
249
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
361
250
|
i0.ɵɵadvance(4);
|
|
362
|
-
i0.ɵɵclassMap(ctx_r1.getPromptIcon(
|
|
251
|
+
i0.ɵɵclassMap(ctx_r1.getPromptIcon(prompt_r9));
|
|
363
252
|
i0.ɵɵadvance(2);
|
|
364
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(7, 12,
|
|
253
|
+
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind2(7, 12, prompt_r9.Name, ctx_r1.searchTerm), i0.ɵɵsanitizeHtml);
|
|
365
254
|
i0.ɵɵadvance(2);
|
|
366
|
-
i0.ɵɵconditional(
|
|
255
|
+
i0.ɵɵconditional(prompt_r9.Description ? 8 : -1);
|
|
367
256
|
i0.ɵɵadvance(2);
|
|
368
|
-
i0.ɵɵtextInterpolate(
|
|
257
|
+
i0.ɵɵtextInterpolate(prompt_r9.CategoryName);
|
|
369
258
|
i0.ɵɵadvance(2);
|
|
370
|
-
i0.ɵɵtextInterpolate(
|
|
259
|
+
i0.ɵɵtextInterpolate(prompt_r9.TypeName);
|
|
371
260
|
i0.ɵɵadvance(2);
|
|
372
|
-
i0.ɵɵclassMap("status-" + (
|
|
261
|
+
i0.ɵɵclassMap("status-" + (prompt_r9.Status || "unknown").toLowerCase());
|
|
373
262
|
i0.ɵɵadvance();
|
|
374
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
263
|
+
i0.ɵɵtextInterpolate1(" ", prompt_r9.Status || "Unknown", " ");
|
|
375
264
|
i0.ɵɵadvance(2);
|
|
376
|
-
i0.ɵɵconditional(
|
|
265
|
+
i0.ɵɵconditional(prompt_r9.MJTemplateEntity ? 17 : 18);
|
|
377
266
|
i0.ɵɵadvance(4);
|
|
378
267
|
i0.ɵɵconditional(ctx_r1.UserCanReadPrompts ? 21 : -1);
|
|
379
268
|
i0.ɵɵadvance();
|
|
380
|
-
i0.ɵɵconditional(
|
|
269
|
+
i0.ɵɵconditional(prompt_r9.Status === "Active" && ctx_r1.UserCanReadPrompts ? 22 : -1);
|
|
381
270
|
} }
|
|
382
|
-
function
|
|
383
|
-
const
|
|
384
|
-
i0.ɵɵelementStart(0, "div",
|
|
385
|
-
i0.ɵɵlistener("click", function
|
|
386
|
-
i0.ɵɵelementStart(5, "span",
|
|
271
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
272
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
273
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "table", 53)(2, "thead")(3, "tr")(4, "th", 54);
|
|
274
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_Template_th_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Name")); });
|
|
275
|
+
i0.ɵɵelementStart(5, "span", 55);
|
|
387
276
|
i0.ɵɵtext(6, " Name ");
|
|
388
|
-
i0.ɵɵelement(7, "i",
|
|
277
|
+
i0.ɵɵelement(7, "i", 56);
|
|
389
278
|
i0.ɵɵelementEnd()();
|
|
390
|
-
i0.ɵɵelementStart(8, "th",
|
|
391
|
-
i0.ɵɵlistener("click", function
|
|
392
|
-
i0.ɵɵelementStart(9, "span",
|
|
279
|
+
i0.ɵɵelementStart(8, "th", 54);
|
|
280
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_Template_th_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Category")); });
|
|
281
|
+
i0.ɵɵelementStart(9, "span", 55);
|
|
393
282
|
i0.ɵɵtext(10, " Category ");
|
|
394
|
-
i0.ɵɵelement(11, "i",
|
|
283
|
+
i0.ɵɵelement(11, "i", 56);
|
|
395
284
|
i0.ɵɵelementEnd()();
|
|
396
|
-
i0.ɵɵelementStart(12, "th",
|
|
397
|
-
i0.ɵɵlistener("click", function
|
|
398
|
-
i0.ɵɵelementStart(13, "span",
|
|
285
|
+
i0.ɵɵelementStart(12, "th", 54);
|
|
286
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_Template_th_click_12_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Type")); });
|
|
287
|
+
i0.ɵɵelementStart(13, "span", 55);
|
|
399
288
|
i0.ɵɵtext(14, " Type ");
|
|
400
|
-
i0.ɵɵelement(15, "i",
|
|
289
|
+
i0.ɵɵelement(15, "i", 56);
|
|
401
290
|
i0.ɵɵelementEnd()();
|
|
402
|
-
i0.ɵɵelementStart(16, "th",
|
|
403
|
-
i0.ɵɵlistener("click", function
|
|
404
|
-
i0.ɵɵelementStart(17, "span",
|
|
291
|
+
i0.ɵɵelementStart(16, "th", 54);
|
|
292
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_Template_th_click_16_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortBy("Status")); });
|
|
293
|
+
i0.ɵɵelementStart(17, "span", 55);
|
|
405
294
|
i0.ɵɵtext(18, " Status ");
|
|
406
|
-
i0.ɵɵelement(19, "i",
|
|
295
|
+
i0.ɵɵelement(19, "i", 56);
|
|
407
296
|
i0.ɵɵelementEnd()();
|
|
408
297
|
i0.ɵɵelementStart(20, "th");
|
|
409
298
|
i0.ɵɵtext(21, "Template");
|
|
@@ -412,7 +301,7 @@ function PromptManagementComponent_Conditional_25_Conditional_1_Conditional_1_Te
|
|
|
412
301
|
i0.ɵɵtext(23, "Actions");
|
|
413
302
|
i0.ɵɵelementEnd()()();
|
|
414
303
|
i0.ɵɵelementStart(24, "tbody");
|
|
415
|
-
i0.ɵɵrepeaterCreate(25,
|
|
304
|
+
i0.ɵɵrepeaterCreate(25, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_For_26_Template, 23, 15, "tr", null, _forTrack0);
|
|
416
305
|
i0.ɵɵelementEnd()()();
|
|
417
306
|
} if (rf & 2) {
|
|
418
307
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -427,39 +316,39 @@ function PromptManagementComponent_Conditional_25_Conditional_1_Conditional_1_Te
|
|
|
427
316
|
i0.ɵɵadvance(9);
|
|
428
317
|
i0.ɵɵrepeater(ctx_r1.filteredPrompts);
|
|
429
318
|
} }
|
|
430
|
-
function
|
|
431
|
-
i0.ɵɵconditionalCreate(0,
|
|
432
|
-
i0.ɵɵconditionalCreate(1,
|
|
319
|
+
function PromptManagementComponent_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
+
i0.ɵɵconditionalCreate(0, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_0_Template, 3, 0, "div", 21);
|
|
321
|
+
i0.ɵɵconditionalCreate(1, PromptManagementComponent_Conditional_13_Conditional_1_Conditional_1_Template, 27, 16, "div", 22);
|
|
433
322
|
} if (rf & 2) {
|
|
434
323
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
435
324
|
i0.ɵɵconditional(ctx_r1.viewMode === "grid" ? 0 : -1);
|
|
436
325
|
i0.ɵɵadvance();
|
|
437
326
|
i0.ɵɵconditional(ctx_r1.viewMode === "list" ? 1 : -1);
|
|
438
327
|
} }
|
|
439
|
-
function
|
|
440
|
-
i0.ɵɵconditionalCreate(0,
|
|
328
|
+
function PromptManagementComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
329
|
+
i0.ɵɵconditionalCreate(0, PromptManagementComponent_Conditional_13_Conditional_0_Template, 7, 2, "div", 17)(1, PromptManagementComponent_Conditional_13_Conditional_1_Template, 2, 2);
|
|
441
330
|
} if (rf & 2) {
|
|
442
331
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
443
332
|
i0.ɵɵconditional(ctx_r1.filteredPrompts.length === 0 ? 0 : 1);
|
|
444
333
|
} }
|
|
445
|
-
function
|
|
446
|
-
const
|
|
447
|
-
i0.ɵɵelementStart(0, "div",
|
|
448
|
-
i0.ɵɵlistener("click", function
|
|
334
|
+
function PromptManagementComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
336
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
337
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_14_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
449
338
|
i0.ɵɵelementEnd();
|
|
450
339
|
} }
|
|
451
|
-
function
|
|
452
|
-
i0.ɵɵelementStart(0, "span",
|
|
453
|
-
i0.ɵɵelement(1, "i",
|
|
340
|
+
function PromptManagementComponent_Conditional_16_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
+
i0.ɵɵelementStart(0, "span", 79);
|
|
342
|
+
i0.ɵɵelement(1, "i", 91);
|
|
454
343
|
i0.ɵɵtext(2, " Has Template ");
|
|
455
344
|
i0.ɵɵelementEnd();
|
|
456
345
|
} }
|
|
457
|
-
function
|
|
458
|
-
i0.ɵɵelementStart(0, "div",
|
|
459
|
-
i0.ɵɵelement(2, "i",
|
|
346
|
+
function PromptManagementComponent_Conditional_16_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
347
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "h4", 80);
|
|
348
|
+
i0.ɵɵelement(2, "i", 92);
|
|
460
349
|
i0.ɵɵtext(3, " Description ");
|
|
461
350
|
i0.ɵɵelementEnd();
|
|
462
|
-
i0.ɵɵelementStart(4, "p",
|
|
351
|
+
i0.ɵɵelementStart(4, "p", 93);
|
|
463
352
|
i0.ɵɵtext(5);
|
|
464
353
|
i0.ɵɵelementEnd()();
|
|
465
354
|
} if (rf & 2) {
|
|
@@ -467,11 +356,11 @@ function PromptManagementComponent_Conditional_28_Conditional_18_Template(rf, ct
|
|
|
467
356
|
i0.ɵɵadvance(5);
|
|
468
357
|
i0.ɵɵtextInterpolate(ctx_r1.selectedPrompt.Description);
|
|
469
358
|
} }
|
|
470
|
-
function
|
|
471
|
-
i0.ɵɵelementStart(0, "div",
|
|
359
|
+
function PromptManagementComponent_Conditional_16_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
+
i0.ɵɵelementStart(0, "div", 83)(1, "span", 84);
|
|
472
361
|
i0.ɵɵtext(2, "Min Power Rank");
|
|
473
362
|
i0.ɵɵelementEnd();
|
|
474
|
-
i0.ɵɵelementStart(3, "span",
|
|
363
|
+
i0.ɵɵelementStart(3, "span", 85);
|
|
475
364
|
i0.ɵɵtext(4);
|
|
476
365
|
i0.ɵɵelementEnd()();
|
|
477
366
|
} if (rf & 2) {
|
|
@@ -479,95 +368,95 @@ function PromptManagementComponent_Conditional_28_Conditional_49_Template(rf, ct
|
|
|
479
368
|
i0.ɵɵadvance(4);
|
|
480
369
|
i0.ɵɵtextInterpolate(ctx_r1.selectedPrompt.MinPowerRank);
|
|
481
370
|
} }
|
|
482
|
-
function
|
|
483
|
-
const
|
|
484
|
-
i0.ɵɵelementStart(0, "button",
|
|
485
|
-
i0.ɵɵlistener("click", function
|
|
486
|
-
i0.ɵɵelement(1, "i",
|
|
371
|
+
function PromptManagementComponent_Conditional_16_Conditional_68_Template(rf, ctx) { if (rf & 1) {
|
|
372
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
373
|
+
i0.ɵɵelementStart(0, "button", 94);
|
|
374
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_16_Conditional_68_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testPrompt(ctx_r1.selectedPrompt.ID)); });
|
|
375
|
+
i0.ɵɵelement(1, "i", 52);
|
|
487
376
|
i0.ɵɵtext(2, " Run Prompt ");
|
|
488
377
|
i0.ɵɵelementEnd();
|
|
489
378
|
} }
|
|
490
|
-
function
|
|
491
|
-
const
|
|
492
|
-
i0.ɵɵelementStart(0, "div",
|
|
379
|
+
function PromptManagementComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
380
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
381
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "div", 70)(2, "div", 71);
|
|
493
382
|
i0.ɵɵelement(3, "i");
|
|
494
383
|
i0.ɵɵelementEnd();
|
|
495
|
-
i0.ɵɵelementStart(4, "div",
|
|
384
|
+
i0.ɵɵelementStart(4, "div", 72)(5, "h3");
|
|
496
385
|
i0.ɵɵtext(6);
|
|
497
386
|
i0.ɵɵelementEnd();
|
|
498
|
-
i0.ɵɵelementStart(7, "span",
|
|
387
|
+
i0.ɵɵelementStart(7, "span", 73);
|
|
499
388
|
i0.ɵɵtext(8);
|
|
500
389
|
i0.ɵɵelementEnd()()();
|
|
501
|
-
i0.ɵɵelementStart(9, "button",
|
|
502
|
-
i0.ɵɵlistener("click", function
|
|
503
|
-
i0.ɵɵelement(10, "i",
|
|
390
|
+
i0.ɵɵelementStart(9, "button", 74);
|
|
391
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_16_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
392
|
+
i0.ɵɵelement(10, "i", 75);
|
|
504
393
|
i0.ɵɵelementEnd()();
|
|
505
|
-
i0.ɵɵelementStart(11, "div",
|
|
506
|
-
i0.ɵɵelement(15, "i",
|
|
394
|
+
i0.ɵɵelementStart(11, "div", 76)(12, "div", 77)(13, "div", 78)(14, "span", 60);
|
|
395
|
+
i0.ɵɵelement(15, "i", 42);
|
|
507
396
|
i0.ɵɵtext(16);
|
|
508
397
|
i0.ɵɵelementEnd();
|
|
509
|
-
i0.ɵɵconditionalCreate(17,
|
|
398
|
+
i0.ɵɵconditionalCreate(17, PromptManagementComponent_Conditional_16_Conditional_17_Template, 3, 0, "span", 79);
|
|
510
399
|
i0.ɵɵelementEnd()();
|
|
511
|
-
i0.ɵɵconditionalCreate(18,
|
|
512
|
-
i0.ɵɵelementStart(19, "div",
|
|
513
|
-
i0.ɵɵelement(21, "i",
|
|
400
|
+
i0.ɵɵconditionalCreate(18, PromptManagementComponent_Conditional_16_Conditional_18_Template, 6, 1, "div", 77);
|
|
401
|
+
i0.ɵɵelementStart(19, "div", 77)(20, "h4", 80);
|
|
402
|
+
i0.ɵɵelement(21, "i", 81);
|
|
514
403
|
i0.ɵɵtext(22, " Configuration ");
|
|
515
404
|
i0.ɵɵelementEnd();
|
|
516
|
-
i0.ɵɵelementStart(23, "div",
|
|
405
|
+
i0.ɵɵelementStart(23, "div", 82)(24, "div", 83)(25, "span", 84);
|
|
517
406
|
i0.ɵɵtext(26, "Category");
|
|
518
407
|
i0.ɵɵelementEnd();
|
|
519
|
-
i0.ɵɵelementStart(27, "span",
|
|
408
|
+
i0.ɵɵelementStart(27, "span", 85);
|
|
520
409
|
i0.ɵɵtext(28);
|
|
521
410
|
i0.ɵɵelementEnd()();
|
|
522
|
-
i0.ɵɵelementStart(29, "div",
|
|
411
|
+
i0.ɵɵelementStart(29, "div", 83)(30, "span", 84);
|
|
523
412
|
i0.ɵɵtext(31, "Type");
|
|
524
413
|
i0.ɵɵelementEnd();
|
|
525
|
-
i0.ɵɵelementStart(32, "span",
|
|
414
|
+
i0.ɵɵelementStart(32, "span", 85);
|
|
526
415
|
i0.ɵɵtext(33);
|
|
527
416
|
i0.ɵɵelementEnd()();
|
|
528
|
-
i0.ɵɵelementStart(34, "div",
|
|
417
|
+
i0.ɵɵelementStart(34, "div", 83)(35, "span", 84);
|
|
529
418
|
i0.ɵɵtext(36, "Response Format");
|
|
530
419
|
i0.ɵɵelementEnd();
|
|
531
|
-
i0.ɵɵelementStart(37, "span",
|
|
420
|
+
i0.ɵɵelementStart(37, "span", 85);
|
|
532
421
|
i0.ɵɵtext(38);
|
|
533
422
|
i0.ɵɵelementEnd()();
|
|
534
|
-
i0.ɵɵelementStart(39, "div",
|
|
423
|
+
i0.ɵɵelementStart(39, "div", 83)(40, "span", 84);
|
|
535
424
|
i0.ɵɵtext(41, "Selection Strategy");
|
|
536
425
|
i0.ɵɵelementEnd();
|
|
537
|
-
i0.ɵɵelementStart(42, "span",
|
|
426
|
+
i0.ɵɵelementStart(42, "span", 85);
|
|
538
427
|
i0.ɵɵtext(43);
|
|
539
428
|
i0.ɵɵelementEnd()();
|
|
540
|
-
i0.ɵɵelementStart(44, "div",
|
|
429
|
+
i0.ɵɵelementStart(44, "div", 83)(45, "span", 84);
|
|
541
430
|
i0.ɵɵtext(46, "Power Preference");
|
|
542
431
|
i0.ɵɵelementEnd();
|
|
543
|
-
i0.ɵɵelementStart(47, "span",
|
|
432
|
+
i0.ɵɵelementStart(47, "span", 85);
|
|
544
433
|
i0.ɵɵtext(48);
|
|
545
434
|
i0.ɵɵelementEnd()();
|
|
546
|
-
i0.ɵɵconditionalCreate(49,
|
|
435
|
+
i0.ɵɵconditionalCreate(49, PromptManagementComponent_Conditional_16_Conditional_49_Template, 5, 1, "div", 83);
|
|
547
436
|
i0.ɵɵelementEnd()();
|
|
548
|
-
i0.ɵɵelementStart(50, "div",
|
|
549
|
-
i0.ɵɵelement(52, "i",
|
|
437
|
+
i0.ɵɵelementStart(50, "div", 77)(51, "h4", 80);
|
|
438
|
+
i0.ɵɵelement(52, "i", 86);
|
|
550
439
|
i0.ɵɵtext(53, " Timestamps ");
|
|
551
440
|
i0.ɵɵelementEnd();
|
|
552
|
-
i0.ɵɵelementStart(54, "div",
|
|
441
|
+
i0.ɵɵelementStart(54, "div", 82)(55, "div", 83)(56, "span", 84);
|
|
553
442
|
i0.ɵɵtext(57, "Created");
|
|
554
443
|
i0.ɵɵelementEnd();
|
|
555
|
-
i0.ɵɵelementStart(58, "span",
|
|
444
|
+
i0.ɵɵelementStart(58, "span", 85);
|
|
556
445
|
i0.ɵɵtext(59);
|
|
557
446
|
i0.ɵɵpipe(60, "date");
|
|
558
447
|
i0.ɵɵelementEnd()();
|
|
559
|
-
i0.ɵɵelementStart(61, "div",
|
|
448
|
+
i0.ɵɵelementStart(61, "div", 83)(62, "span", 84);
|
|
560
449
|
i0.ɵɵtext(63, "Updated");
|
|
561
450
|
i0.ɵɵelementEnd();
|
|
562
|
-
i0.ɵɵelementStart(64, "span",
|
|
451
|
+
i0.ɵɵelementStart(64, "span", 85);
|
|
563
452
|
i0.ɵɵtext(65);
|
|
564
453
|
i0.ɵɵpipe(66, "date");
|
|
565
454
|
i0.ɵɵelementEnd()()()()();
|
|
566
|
-
i0.ɵɵelementStart(67, "div",
|
|
567
|
-
i0.ɵɵconditionalCreate(68,
|
|
568
|
-
i0.ɵɵelementStart(69, "button",
|
|
569
|
-
i0.ɵɵlistener("click", function
|
|
570
|
-
i0.ɵɵelement(70, "i",
|
|
455
|
+
i0.ɵɵelementStart(67, "div", 87);
|
|
456
|
+
i0.ɵɵconditionalCreate(68, PromptManagementComponent_Conditional_16_Conditional_68_Template, 3, 0, "button", 88);
|
|
457
|
+
i0.ɵɵelementStart(69, "button", 89);
|
|
458
|
+
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_16_Template_button_click_69_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openPromptFromPanel()); });
|
|
459
|
+
i0.ɵɵelement(70, "i", 90);
|
|
571
460
|
i0.ɵɵtext(71, " Open Full Record ");
|
|
572
461
|
i0.ɵɵelementEnd()();
|
|
573
462
|
} if (rf & 2) {
|
|
@@ -1101,6 +990,83 @@ let PromptManagementComponent = class PromptManagementComponent extends BaseReso
|
|
|
1101
990
|
this.selectedType !== 'all' ||
|
|
1102
991
|
this.selectedStatus !== 'all';
|
|
1103
992
|
}
|
|
993
|
+
/** Number of currently-applied filter criteria inside the popover (excludes searchTerm — surfaced separately in the header toolbar). */
|
|
994
|
+
get ActiveFilterCount() {
|
|
995
|
+
let n = 0;
|
|
996
|
+
if (this.selectedCategory && this.selectedCategory !== 'all')
|
|
997
|
+
n++;
|
|
998
|
+
if (this.selectedType && this.selectedType !== 'all')
|
|
999
|
+
n++;
|
|
1000
|
+
if (this.selectedStatus && this.selectedStatus !== 'all')
|
|
1001
|
+
n++;
|
|
1002
|
+
return n;
|
|
1003
|
+
}
|
|
1004
|
+
/** Reset only the filters inside the popover (not the toolbar search). */
|
|
1005
|
+
resetPopoverFilters() {
|
|
1006
|
+
this.selectedCategory = 'all';
|
|
1007
|
+
this.selectedType = 'all';
|
|
1008
|
+
this.selectedStatus = 'all';
|
|
1009
|
+
this.applyFilters();
|
|
1010
|
+
this.saveUserPreferencesDebounced();
|
|
1011
|
+
}
|
|
1012
|
+
/** View-mode options for the shared <mj-view-toggle>. */
|
|
1013
|
+
promptViewOptions = [
|
|
1014
|
+
{ key: 'grid', icon: 'fa-solid fa-grip', title: 'Grid View' },
|
|
1015
|
+
{ key: 'list', icon: 'fa-solid fa-list', title: 'List View' },
|
|
1016
|
+
];
|
|
1017
|
+
/** Values record consumed by the centralized <mj-filter-panel> (excludes searchTerm — surfaced in the page-header toolbar). */
|
|
1018
|
+
get promptFilterValues() {
|
|
1019
|
+
return {
|
|
1020
|
+
categoryId: this.selectedCategory,
|
|
1021
|
+
typeId: this.selectedType,
|
|
1022
|
+
status: this.selectedStatus,
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
/** Field config consumed by the centralized <mj-filter-panel>. */
|
|
1026
|
+
get promptFilterFields() {
|
|
1027
|
+
return [
|
|
1028
|
+
{
|
|
1029
|
+
key: 'categoryId',
|
|
1030
|
+
type: 'dropdown',
|
|
1031
|
+
label: 'Category',
|
|
1032
|
+
icon: 'fa-solid fa-folder',
|
|
1033
|
+
filterable: this.categories.length > 10,
|
|
1034
|
+
options: [
|
|
1035
|
+
{ text: 'All Categories', value: 'all' },
|
|
1036
|
+
...this.categories.map(c => ({ text: c.Name ?? '', value: c.ID })),
|
|
1037
|
+
],
|
|
1038
|
+
},
|
|
1039
|
+
{
|
|
1040
|
+
key: 'typeId',
|
|
1041
|
+
type: 'dropdown',
|
|
1042
|
+
label: 'Type',
|
|
1043
|
+
icon: 'fa-solid fa-tag',
|
|
1044
|
+
options: [
|
|
1045
|
+
{ text: 'All Types', value: 'all' },
|
|
1046
|
+
...this.types.map(t => ({ text: t.Name ?? '', value: t.ID })),
|
|
1047
|
+
],
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
key: 'status',
|
|
1051
|
+
type: 'dropdown',
|
|
1052
|
+
label: 'Status',
|
|
1053
|
+
icon: 'fa-solid fa-toggle-on',
|
|
1054
|
+
options: [
|
|
1055
|
+
{ text: 'All Statuses', value: 'all' },
|
|
1056
|
+
{ text: 'Active', value: 'active' },
|
|
1057
|
+
{ text: 'Inactive', value: 'inactive' },
|
|
1058
|
+
],
|
|
1059
|
+
},
|
|
1060
|
+
];
|
|
1061
|
+
}
|
|
1062
|
+
/** Receive the updated values record from <mj-filter-panel> and apply it. */
|
|
1063
|
+
onFilterValuesChange(values) {
|
|
1064
|
+
this.selectedCategory = values['categoryId'] ?? 'all';
|
|
1065
|
+
this.selectedType = values['typeId'] ?? 'all';
|
|
1066
|
+
this.selectedStatus = values['status'] ?? 'all';
|
|
1067
|
+
this.applyFilters();
|
|
1068
|
+
this.saveUserPreferencesDebounced();
|
|
1069
|
+
}
|
|
1104
1070
|
get filteredPromptsAsEntities() {
|
|
1105
1071
|
// The prompts are already MJAIPromptEntityExtended instances with extra properties
|
|
1106
1072
|
return this.filteredPrompts;
|
|
@@ -1122,63 +1088,57 @@ let PromptManagementComponent = class PromptManagementComponent extends BaseReso
|
|
|
1122
1088
|
return 'fa-solid fa-comment-dots';
|
|
1123
1089
|
}
|
|
1124
1090
|
static ɵfac = function PromptManagementComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PromptManagementComponent)(i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
1125
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementComponent, selectors: [["app-prompt-management"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
1126
|
-
i0.ɵɵelementStart(0, "
|
|
1127
|
-
i0.ɵɵelement(
|
|
1128
|
-
i0.ɵɵtext(5, " AI Prompts ");
|
|
1129
|
-
i0.ɵɵelementEnd();
|
|
1130
|
-
i0.ɵɵelementStart(6, "button", 5);
|
|
1131
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Template_button_click_6_listener() { return ctx.toggleFilters(); });
|
|
1132
|
-
i0.ɵɵelement(7, "i", 6);
|
|
1133
|
-
i0.ɵɵconditionalCreate(8, PromptManagementComponent_Conditional_8_Template, 1, 0)(9, PromptManagementComponent_Conditional_9_Template, 1, 0);
|
|
1091
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementComponent, selectors: [["app-prompt-management"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 17, vars: 16, consts: [["Title", "Prompts", "Icon", "fa-solid fa-comment-dots"], ["meta", ""], ["Label", "prompts", 3, "Count"], ["actions", ""], [3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Reset", "Fields", "Values"], [3, "KeyChange", "Options", "ActiveKey"], ["mjButton", "", "variant", "primary", "size", "sm", "title", "Create New Prompt"], ["toolbar", ""], ["Placeholder", "Search prompts...", 3, "ValueChange", "Value"], [3, "Flex"], [1, "loading-container"], [1, "detail-panel-overlay"], [1, "detail-panel"], ["mjButton", "", "variant", "primary", "size", "sm", "title", "Create New Prompt", 3, "click"], [1, "fa-solid", "fa-plus"], ["size", "large", 3, "text"], [1, "empty-state"], [1, "fa-solid", "fa-message"], ["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", 3, "innerHTML"], [1, "prompt-meta"], [1, "meta-item"], [1, "fa-solid", "fa-folder"], [1, "meta-item", 3, "class"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-body"], [1, "prompt-description", 3, "innerHTML"], [1, "prompt-description", "text-muted"], [1, "expanded-content"], [1, "card-actions"], ["type", "button", "title", "View Details", 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", "View Details", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-eye"], ["type", "button", "title", "Run Prompt", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-play"], [1, "prompts-table"], [3, "click"], [1, "sort-header"], [1, "fa-solid", "fa-chevron-up", "sort-icon"], [1, "prompt-name-cell"], [1, "prompt-icon-small"], [1, "prompt-description-small", 3, "innerHTML"], [1, "status-badge"], [1, "fa-solid", "fa-check-circle", 2, "color", "#28a745"], [1, "fa-solid", "fa-times-circle", 2, "color", "var(--mj-text-muted)"], [1, "table-actions"], ["type", "button", "title", "View Details", 1, "action-btn-small"], ["type", "button", "title", "Run Prompt", 1, "action-btn-small", "primary"], ["type", "button", "title", "View Details", 1, "action-btn-small", 3, "click"], ["type", "button", "title", "Run Prompt", 1, "action-btn-small", "primary", 3, "click"], [1, "detail-panel-overlay", 3, "click"], [1, "detail-panel-header"], [1, "detail-panel-title"], [1, "detail-icon"], [1, "detail-title-info"], [1, "detail-subtitle"], [1, "detail-panel-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-panel-content"], [1, "detail-section"], [1, "detail-badges"], [1, "feature-badge"], [1, "detail-section-title"], [1, "fa-solid", "fa-cog"], [1, "detail-grid"], [1, "detail-item"], [1, "detail-label"], [1, "detail-value"], [1, "fa-solid", "fa-clock"], [1, "detail-panel-actions"], ["type", "button", 1, "detail-action-btn", "secondary"], ["type", "button", 1, "detail-action-btn", "primary", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "fa-solid", "fa-file-code"], [1, "fa-solid", "fa-align-left"], [1, "detail-description"], ["type", "button", 1, "detail-action-btn", "secondary", 3, "click"]], template: function PromptManagementComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1092
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
|
|
1093
|
+
i0.ɵɵelement(3, "mj-stat-badge", 2);
|
|
1134
1094
|
i0.ɵɵelementEnd();
|
|
1135
|
-
i0.ɵɵelementStart(
|
|
1136
|
-
i0.ɵɵ
|
|
1095
|
+
i0.ɵɵelementStart(4, "div", 3)(5, "mj-filter-popover", 4);
|
|
1096
|
+
i0.ɵɵlistener("ClearAllRequested", function PromptManagementComponent_Template_mj_filter_popover_ClearAllRequested_5_listener() { return ctx.resetPopoverFilters(); });
|
|
1097
|
+
i0.ɵɵelementStart(6, "mj-filter-panel", 5);
|
|
1098
|
+
i0.ɵɵlistener("ValuesChange", function PromptManagementComponent_Template_mj_filter_panel_ValuesChange_6_listener($event) { return ctx.onFilterValuesChange($event); })("Reset", function PromptManagementComponent_Template_mj_filter_panel_Reset_6_listener() { return ctx.resetPopoverFilters(); });
|
|
1137
1099
|
i0.ɵɵelementEnd()();
|
|
1138
|
-
i0.ɵɵelementStart(
|
|
1139
|
-
i0.ɵɵlistener("
|
|
1140
|
-
i0.ɵɵelement(15, "i", 11);
|
|
1100
|
+
i0.ɵɵelementStart(7, "mj-view-toggle", 6);
|
|
1101
|
+
i0.ɵɵlistener("KeyChange", function PromptManagementComponent_Template_mj_view_toggle_KeyChange_7_listener($event) { return ctx.setViewMode($event); });
|
|
1141
1102
|
i0.ɵɵelementEnd();
|
|
1142
|
-
i0.ɵɵ
|
|
1143
|
-
i0.ɵɵ
|
|
1144
|
-
i0.ɵɵ
|
|
1145
|
-
i0.ɵɵ
|
|
1146
|
-
i0.ɵɵ
|
|
1147
|
-
i0.ɵɵ
|
|
1148
|
-
i0.ɵɵ
|
|
1149
|
-
i0.ɵɵconditionalCreate(
|
|
1150
|
-
i0.ɵɵ
|
|
1151
|
-
i0.ɵɵconditionalCreate(
|
|
1152
|
-
i0.ɵɵ
|
|
1153
|
-
i0.ɵɵ
|
|
1154
|
-
i0.ɵɵconditionalCreate(26, PromptManagementComponent_Conditional_26_Template, 1, 0, "div", 20);
|
|
1155
|
-
i0.ɵɵelementStart(27, "div", 21);
|
|
1156
|
-
i0.ɵɵconditionalCreate(28, PromptManagementComponent_Conditional_28_Template, 72, 24);
|
|
1103
|
+
i0.ɵɵconditionalCreate(8, PromptManagementComponent_Conditional_8_Template, 3, 0, "button", 7);
|
|
1104
|
+
i0.ɵɵelementEnd();
|
|
1105
|
+
i0.ɵɵelementStart(9, "div", 8)(10, "mj-page-search", 9);
|
|
1106
|
+
i0.ɵɵlistener("ValueChange", function PromptManagementComponent_Template_mj_page_search_ValueChange_10_listener($event) { return ctx.onSearchChange($event); });
|
|
1107
|
+
i0.ɵɵelementEnd()()();
|
|
1108
|
+
i0.ɵɵelementStart(11, "mj-page-body", 10);
|
|
1109
|
+
i0.ɵɵconditionalCreate(12, PromptManagementComponent_Conditional_12_Template, 2, 1, "div", 11);
|
|
1110
|
+
i0.ɵɵconditionalCreate(13, PromptManagementComponent_Conditional_13_Template, 2, 1);
|
|
1111
|
+
i0.ɵɵelementEnd();
|
|
1112
|
+
i0.ɵɵconditionalCreate(14, PromptManagementComponent_Conditional_14_Template, 1, 0, "div", 12);
|
|
1113
|
+
i0.ɵɵelementStart(15, "div", 13);
|
|
1114
|
+
i0.ɵɵconditionalCreate(16, PromptManagementComponent_Conditional_16_Template, 72, 24);
|
|
1157
1115
|
i0.ɵɵelementEnd()();
|
|
1158
1116
|
} if (rf & 2) {
|
|
1159
|
-
i0.ɵɵadvance(8);
|
|
1160
|
-
i0.ɵɵconditional(ctx.showFilters ? 8 : 9);
|
|
1161
|
-
i0.ɵɵadvance(3);
|
|
1162
|
-
i0.ɵɵtextInterpolate1("", ctx.filteredPrompts.length, " prompts");
|
|
1163
1117
|
i0.ɵɵadvance(3);
|
|
1164
|
-
i0.ɵɵ
|
|
1118
|
+
i0.ɵɵproperty("Count", ctx.filteredPrompts.length);
|
|
1165
1119
|
i0.ɵɵadvance(2);
|
|
1166
|
-
i0.ɵɵ
|
|
1120
|
+
i0.ɵɵproperty("ActiveCount", ctx.ActiveFilterCount)("ShowClearAll", ctx.ActiveFilterCount > 0);
|
|
1121
|
+
i0.ɵɵadvance();
|
|
1122
|
+
i0.ɵɵproperty("Fields", ctx.promptFilterFields)("Values", ctx.promptFilterValues);
|
|
1123
|
+
i0.ɵɵadvance();
|
|
1124
|
+
i0.ɵɵproperty("Options", ctx.promptViewOptions)("ActiveKey", ctx.viewMode);
|
|
1125
|
+
i0.ɵɵadvance();
|
|
1126
|
+
i0.ɵɵconditional(ctx.UserCanCreatePrompts ? 8 : -1);
|
|
1167
1127
|
i0.ɵɵadvance(2);
|
|
1168
|
-
i0.ɵɵ
|
|
1169
|
-
i0.ɵɵadvance(
|
|
1170
|
-
i0.ɵɵ
|
|
1171
|
-
i0.ɵɵadvance(
|
|
1172
|
-
i0.ɵɵconditional(ctx.isLoading ?
|
|
1128
|
+
i0.ɵɵproperty("Value", ctx.searchTerm);
|
|
1129
|
+
i0.ɵɵadvance();
|
|
1130
|
+
i0.ɵɵproperty("Flex", true);
|
|
1131
|
+
i0.ɵɵadvance();
|
|
1132
|
+
i0.ɵɵconditional(ctx.isLoading ? 12 : -1);
|
|
1173
1133
|
i0.ɵɵadvance();
|
|
1174
|
-
i0.ɵɵconditional(!ctx.isLoading ?
|
|
1134
|
+
i0.ɵɵconditional(!ctx.isLoading ? 13 : -1);
|
|
1175
1135
|
i0.ɵɵadvance();
|
|
1176
|
-
i0.ɵɵconditional(ctx.detailPanelVisible ?
|
|
1136
|
+
i0.ɵɵconditional(ctx.detailPanelVisible ? 14 : -1);
|
|
1177
1137
|
i0.ɵɵadvance();
|
|
1178
1138
|
i0.ɵɵclassProp("visible", ctx.detailPanelVisible);
|
|
1179
1139
|
i0.ɵɵadvance();
|
|
1180
|
-
i0.ɵɵconditional(ctx.selectedPrompt ?
|
|
1181
|
-
} }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.SplitComponent, i4.SplitAreaComponent, i5.LoadingComponent, i6.DatePipe, i7.HighlightSearchPipe], styles: ["\n\n\n\n\n\n\n\n.prompt-management-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n padding: 16px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n position: relative;\n z-index: 10;\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 22px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 13px;\n font-weight: 500;\n background: var(--mj-bg-surface-sunken);\n padding: 6px 12px;\n border-radius: 16px;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 14px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\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\nas-split[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%], \n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]:focus, \n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n\n\n.filter-input[_ngcontent-%COMP%], \n.filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-input[_ngcontent-%COMP%]:focus, \n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n\n\n.prompts-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 28px;\n background: var(--mj-bg-surface-card);\n}\n\n\n\n.prompts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.prompt-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n.prompt-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card.expanded[_ngcontent-%COMP%]::before {\n opacity: 1;\n}\n\n.card-header[_ngcontent-%COMP%] {\n padding: 24px;\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 var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-card);\n}\n\n.prompt-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.prompt-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.prompt-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\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: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n background: var(--mj-color-warning-100);\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 24px 24px 24px;\n}\n\n.prompt-description[_ngcontent-%COMP%] {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.prompt-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: _ngcontent-%COMP%_slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.prompt-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.prompts-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\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: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 16px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child {\n cursor: default;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.prompts-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.prompts-table[_ngcontent-%COMP%] th.sorted.desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.prompts-table[_ngcontent-%COMP%] .sort-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.prompts-table[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n.prompts-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.prompts-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.prompt-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.prompt-name-cell[_ngcontent-%COMP%] .prompt-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.prompt-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 8px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\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\n\n@media (max-width: 768px) {\n .dashboard-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n padding: 16px 20px;\n }\n\n .header-info[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .prompts-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .prompts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .prompt-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 18px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\n\n.detail-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.25s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible[_ngcontent-%COMP%] {\n right: 0;\n}\n\n\n\n.detail-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.detail-panel-actions[_ngcontent-%COMP%] {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn[_ngcontent-%COMP%] {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n@media (max-width: 520px) {\n .detail-panel[_ngcontent-%COMP%] {\n width: 100%;\n right: -100%;\n }\n\n .detail-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n[_nghost-%COMP%] .search-highlight, \n.search-highlight[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 35%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}"] });
|
|
1140
|
+
i0.ɵɵconditional(ctx.selectedPrompt ? 16 : -1);
|
|
1141
|
+
} }, dependencies: [i3.LoadingComponent, i4.MJButtonDirective, i4.MJPageHeaderComponent, i4.MJPageLayoutComponent, i4.MJPageBodyComponent, i4.MJFilterPopoverComponent, i4.MJPageSearchComponent, i4.MJFilterPanelComponent, i4.MJViewToggleComponent, i4.MJStatBadgeComponent, i5.DatePipe, i6.HighlightSearchPipe], styles: ["\n\n\n\n\n\n\n\n\n\n\n\n[_nghost-%COMP%] mj-page-body[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n}\n\n\n\n\n.control-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n\n.main-splitter[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\nas-split[_ngcontent-%COMP%] {\n background: transparent;\n}\n\n\n\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%], \n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]:focus, \n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group[_ngcontent-%COMP%] .filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n\n\n.filter-input[_ngcontent-%COMP%], \n.filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-input[_ngcontent-%COMP%]:focus, \n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] .fa-solid[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n\n\n\n.prompts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.prompt-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover::before {\n opacity: 1;\n}\n\n.prompt-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card.expanded[_ngcontent-%COMP%]::before {\n opacity: 1;\n}\n\n.card-header[_ngcontent-%COMP%] {\n padding: 24px;\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 var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-card);\n}\n\n.prompt-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.prompt-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.prompt-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\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: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n background: var(--mj-color-warning-100);\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 24px 24px 24px;\n}\n\n.prompt-description[_ngcontent-%COMP%] {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.prompt-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: _ngcontent-%COMP%_slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.prompt-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.prompts-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\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: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 16px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child {\n cursor: default;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.prompts-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.prompts-table[_ngcontent-%COMP%] th.sorted.desc[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.prompts-table[_ngcontent-%COMP%] .sort-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.prompts-table[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n.prompts-table[_ngcontent-%COMP%] th.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.prompts-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.prompt-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.prompt-name-cell[_ngcontent-%COMP%] .prompt-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.prompt-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.status-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 8px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\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\n\n@media (max-width: 768px) {\n .dashboard-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n padding: 16px 20px;\n }\n\n .header-info[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .prompts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .prompt-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-header[_ngcontent-%COMP%] {\n padding: 18px;\n }\n\n .card-body[_ngcontent-%COMP%] {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions[_ngcontent-%COMP%] {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\n\n.detail-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.25s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible[_ngcontent-%COMP%] {\n right: 0;\n}\n\n\n\n.detail-panel-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 28px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.detail-panel-actions[_ngcontent-%COMP%] {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn[_ngcontent-%COMP%] {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n@media (max-width: 520px) {\n .detail-panel[_ngcontent-%COMP%] {\n width: 100%;\n right: -100%;\n }\n\n .detail-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n[_nghost-%COMP%] .search-highlight, \n.search-highlight[_ngcontent-%COMP%] {\n background-color: color-mix(in srgb, var(--mj-status-warning) 35%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}"] });
|
|
1182
1142
|
};
|
|
1183
1143
|
PromptManagementComponent = __decorate([
|
|
1184
1144
|
RegisterClass(BaseResourceComponent, 'AIPromptsResource')
|
|
@@ -1186,7 +1146,7 @@ PromptManagementComponent = __decorate([
|
|
|
1186
1146
|
export { PromptManagementComponent };
|
|
1187
1147
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptManagementComponent, [{
|
|
1188
1148
|
type: Component,
|
|
1189
|
-
args: [{ standalone: false, selector: 'app-prompt-management', 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 <as-split direction=\"horizontal\" class=\"main-splitter\">\n\n <!-- Filter Panel (Left) -->\n @if (showFilters) {\n <as-split-area [size]=\"20\" [minSize]=\"15\" [maxSize]=\"30\">\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 </as-split-area>\n }\n\n <!-- Prompts List Panel -->\n <as-split-area>\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\" [innerHTML]=\"prompt.Name | highlightSearch:searchTerm\"></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\" [innerHTML]=\"prompt.Description | highlightSearch:searchTerm\"></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.MJTemplateEntity) {\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)=\"showPromptDetails(prompt, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\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 (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Name\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Category')\"\n [class.sorted]=\"sortColumn === 'Category'\"\n [class.desc]=\"sortColumn === 'Category' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Category\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Type')\"\n [class.sorted]=\"sortColumn === 'Type'\"\n [class.desc]=\"sortColumn === 'Type' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Type\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </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\" [innerHTML]=\"prompt.Name | highlightSearch:searchTerm\"></div>\n @if (prompt.Description) {\n <div class=\"prompt-description-small\" [innerHTML]=\"prompt.Description | highlightSearch:searchTerm\"></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.MJTemplateEntity) {\n <i class=\"fa-solid fa-check-circle\" style=\"color: #28a745;\"></i>\n } @else {\n <i class=\"fa-solid fa-times-circle\" style=\"color: var(--mj-text-muted);\"></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)=\"showPromptDetails(prompt)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></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 </as-split-area>\n </as-split>\n </div>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedPrompt) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\">\n <i [class]=\"getPromptIcon(selectedPrompt)\"></i>\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedPrompt.Name }}</h3>\n <span class=\"detail-subtitle\">{{ selectedPrompt.TypeName || 'Prompt' }}</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [class]=\"'status-' + (selectedPrompt.Status || 'unknown').toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ selectedPrompt.Status || 'Unknown' }}\n </span>\n @if (selectedPrompt.MJTemplateEntity) {\n <span class=\"feature-badge\">\n <i class=\"fa-solid fa-file-code\"></i>\n Has Template\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedPrompt.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedPrompt.Description }}</p>\n </div>\n }\n\n <!-- Configuration Details -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n Configuration\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Category</span>\n <span class=\"detail-value\">{{ selectedPrompt.CategoryName || 'Uncategorized' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Type</span>\n <span class=\"detail-value\">{{ selectedPrompt.TypeName || 'Unknown' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Response Format</span>\n <span class=\"detail-value\">{{ selectedPrompt.ResponseFormat }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Selection Strategy</span>\n <span class=\"detail-value\">{{ selectedPrompt.SelectionStrategy }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Power Preference</span>\n <span class=\"detail-value\">{{ selectedPrompt.PowerPreference }}</span>\n </div>\n @if (selectedPrompt.MinPowerRank) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Min Power Rank</span>\n <span class=\"detail-value\">{{ selectedPrompt.MinPowerRank }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ selectedPrompt.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ selectedPrompt.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n @if (selectedPrompt.Status === 'Active') {\n <button\n type=\"button\"\n class=\"detail-action-btn secondary\"\n (click)=\"testPrompt(selectedPrompt.ID)\">\n <i class=\"fa-solid fa-play\"></i>\n Run Prompt\n </button>\n }\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openPromptFromPanel()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</div>\n", styles: ["/* ============================================\n AI Prompts Dashboard - World-Class Design\n Clean flat-color interface with brand blue theme\n ============================================ */\n\n/* Container */\n.prompt-management-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n}\n\n/* Dashboard Header - Clean White Style */\n.dashboard-header {\n background: var(--mj-bg-surface);\n padding: 16px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n position: relative;\n z-index: 10;\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.dashboard-title i {\n color: var(--mj-brand-primary);\n font-size: 22px;\n}\n\n.filter-toggle-btn {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.filter-toggle-btn i {\n font-size: 13px;\n color: var(--mj-brand-primary);\n}\n\n.item-count {\n color: var(--mj-text-muted);\n font-size: 13px;\n font-weight: 500;\n background: var(--mj-bg-surface-sunken);\n padding: 6px 12px;\n border-radius: 16px;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n padding: 3px;\n border: 1px solid var(--mj-border-default);\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 14px;\n}\n\n.view-btn:hover {\n color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.view-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.control-btn {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.control-btn.primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.control-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\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/* Splitter Styling */\nas-split {\n background: transparent;\n}\n\n/* Filter Panel */\n.filter-panel {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* Header */\n.filter-panel-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header .filter-summary-inline .summary-label {\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.filter-panel-header .close-btn {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header .close-btn .fa-solid {\n font-size: 14px;\n}\n\n/* Content Area */\n.filter-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n/* Filter Groups */\n.filter-group {\n margin-bottom: 24px;\n}\n\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group .filter-label .fa-solid {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group .filter-input,\n.filter-group .filter-select {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group .filter-input:focus,\n.filter-group .filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group .filter-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group .filter-select {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n/* Legacy support for non-scoped selectors */\n.filter-input,\n.filter-select {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-input:focus,\n.filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-select {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n/* Filter Actions */\n.filter-actions {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions .reset-btn {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions .reset-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions .reset-btn .fa-solid {\n font-size: 13px;\n}\n\n/* Scrollbar Styling */\n.filter-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n/* Prompts Content */\n.prompts-content {\n height: 100%;\n overflow-y: auto;\n padding: 28px;\n background: var(--mj-bg-surface-card);\n}\n\n/* Grid View */\n.prompts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.prompt-card {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.prompt-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.prompt-card:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card:hover::before {\n opacity: 1;\n}\n\n.prompt-card.expanded {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card.expanded::before {\n opacity: 1;\n}\n\n.card-header {\n padding: 24px;\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 var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header:hover {\n background-color: var(--mj-bg-surface-card);\n}\n\n.prompt-info {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.prompt-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.prompt-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.prompt-details {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-name {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active i {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending {\n color: var(--mj-color-warning-700);\n background: var(--mj-color-warning-100);\n}\n\n.meta-item.status-pending i {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-inactive {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-inactive i {\n color: var(--mj-text-muted);\n}\n\n.expand-icon {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body {\n padding: 0 24px 24px 24px;\n}\n\n.prompt-description {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.prompt-description.text-muted {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n/* Expanded Content */\n.expanded-content {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.prompt-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.action-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* List View */\n.prompts-list {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.prompts-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.prompts-table thead {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.prompts-table th {\n padding: 16px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.prompts-table th:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.prompts-table th:last-child {\n cursor: default;\n}\n\n.prompts-table th:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.prompts-table th.sorted {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.prompts-table th.sorted.desc .sort-icon {\n transform: rotate(180deg);\n}\n\n.prompts-table .sort-header {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.prompts-table .sort-icon {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.prompts-table th:hover .sort-icon {\n opacity: 0.5;\n}\n\n.prompts-table th.sorted .sort-icon {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.prompts-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.prompts-table tbody tr:last-child {\n border-bottom: none;\n}\n\n.prompts-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.prompts-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.prompt-name-cell {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.prompt-icon-small {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.prompt-icon-small i {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.prompt-name-cell .prompt-name {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.prompt-description-small {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.status-badge i {\n font-size: 8px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.table-actions {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.primary:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state h3 {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state p {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\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/* Responsive Design */\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n padding: 16px 20px;\n }\n\n .header-info {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls {\n justify-content: center;\n }\n\n .prompts-content {\n padding: 16px;\n }\n\n .prompts-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .prompt-stats {\n grid-template-columns: 1fr;\n }\n\n .card-header {\n padding: 18px;\n }\n\n .card-body {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\n}\n\n/* =============================================\n Detail Panel - Slide-in Overlay\n ============================================= */\n\n.detail-panel-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: fadeIn 0.25s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible {\n right: 0;\n}\n\n/* Detail Panel Header */\n.detail-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info h3 {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n/* Detail Panel Content */\n.detail-panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section {\n margin-bottom: 28px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge i {\n font-size: 11px;\n}\n\n.detail-section-title {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value i {\n font-size: 13px;\n}\n\n/* Detail Panel Actions */\n.detail-panel-actions {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail Panel Responsive */\n@media (max-width: 520px) {\n .detail-panel {\n width: 100%;\n right: -100%;\n }\n\n .detail-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* Search Highlight */\n:host ::ng-deep .search-highlight,\n.search-highlight {\n background-color: color-mix(in srgb, var(--mj-status-warning) 35%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n"] }]
|
|
1149
|
+
args: [{ standalone: false, selector: 'app-prompt-management', template: "<mj-page-layout>\n <!-- Header -->\n <mj-page-header\n Title=\"Prompts\"\n Icon=\"fa-solid fa-comment-dots\">\n <div meta>\n <mj-stat-badge [Count]=\"filteredPrompts.length\" Label=\"prompts\"></mj-stat-badge>\n </div>\n <div actions>\n <mj-filter-popover\n [ActiveCount]=\"ActiveFilterCount\"\n [ShowClearAll]=\"ActiveFilterCount > 0\"\n (ClearAllRequested)=\"resetPopoverFilters()\">\n <mj-filter-panel\n [Fields]=\"promptFilterFields\"\n [Values]=\"promptFilterValues\"\n (ValuesChange)=\"onFilterValuesChange($event)\"\n (Reset)=\"resetPopoverFilters()\">\n </mj-filter-panel>\n </mj-filter-popover>\n\n <mj-view-toggle\n [Options]=\"promptViewOptions\"\n [ActiveKey]=\"viewMode\"\n (KeyChange)=\"setViewMode($any($event))\">\n </mj-view-toggle>\n\n @if (UserCanCreatePrompts) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewPrompt()\" title=\"Create New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search prompts...\"\n [Value]=\"searchTerm\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <!-- Main Content (no sidebar \u2014 filters live in the popover above) -->\n <mj-page-body [Flex]=\"true\">\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\" [innerHTML]=\"prompt.Name | highlightSearch:searchTerm\"></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\" [innerHTML]=\"prompt.Description | highlightSearch:searchTerm\"></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.MJTemplateEntity) {\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)=\"showPromptDetails(prompt, $event)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></i>\n Details\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 (click)=\"sortBy('Name')\"\n [class.sorted]=\"sortColumn === 'Name'\"\n [class.desc]=\"sortColumn === 'Name' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Name\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Category')\"\n [class.sorted]=\"sortColumn === 'Category'\"\n [class.desc]=\"sortColumn === 'Category' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Category\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Type')\"\n [class.sorted]=\"sortColumn === 'Type'\"\n [class.desc]=\"sortColumn === 'Type' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Type\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </th>\n <th (click)=\"sortBy('Status')\"\n [class.sorted]=\"sortColumn === 'Status'\"\n [class.desc]=\"sortColumn === 'Status' && sortDirection === 'desc'\">\n <span class=\"sort-header\">\n Status\n <i class=\"fa-solid fa-chevron-up sort-icon\"></i>\n </span>\n </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\" [innerHTML]=\"prompt.Name | highlightSearch:searchTerm\"></div>\n @if (prompt.Description) {\n <div class=\"prompt-description-small\" [innerHTML]=\"prompt.Description | highlightSearch:searchTerm\"></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.MJTemplateEntity) {\n <i class=\"fa-solid fa-check-circle\" style=\"color: #28a745;\"></i>\n } @else {\n <i class=\"fa-solid fa-times-circle\" style=\"color: var(--mj-text-muted);\"></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)=\"showPromptDetails(prompt)\"\n title=\"View Details\">\n <i class=\"fa-solid fa-eye\"></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 </mj-page-body>\n\n <!-- Detail Panel Overlay -->\n @if (detailPanelVisible) {\n <div class=\"detail-panel-overlay\" (click)=\"closeDetailPanel()\"></div>\n }\n\n <!-- Detail Panel -->\n <div class=\"detail-panel\" [class.visible]=\"detailPanelVisible\">\n @if (selectedPrompt) {\n <!-- Panel Header -->\n <div class=\"detail-panel-header\">\n <div class=\"detail-panel-title\">\n <div class=\"detail-icon\">\n <i [class]=\"getPromptIcon(selectedPrompt)\"></i>\n </div>\n <div class=\"detail-title-info\">\n <h3>{{ selectedPrompt.Name }}</h3>\n <span class=\"detail-subtitle\">{{ selectedPrompt.TypeName || 'Prompt' }}</span>\n </div>\n </div>\n <button class=\"detail-panel-close\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Panel Content -->\n <div class=\"detail-panel-content\">\n <!-- Status Section -->\n <div class=\"detail-section\">\n <div class=\"detail-badges\">\n <span class=\"status-badge\" [class]=\"'status-' + (selectedPrompt.Status || 'unknown').toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ selectedPrompt.Status || 'Unknown' }}\n </span>\n @if (selectedPrompt.MJTemplateEntity) {\n <span class=\"feature-badge\">\n <i class=\"fa-solid fa-file-code\"></i>\n Has Template\n </span>\n }\n </div>\n </div>\n\n <!-- Description -->\n @if (selectedPrompt.Description) {\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h4>\n <p class=\"detail-description\">{{ selectedPrompt.Description }}</p>\n </div>\n }\n\n <!-- Configuration Details -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-cog\"></i>\n Configuration\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Category</span>\n <span class=\"detail-value\">{{ selectedPrompt.CategoryName || 'Uncategorized' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Type</span>\n <span class=\"detail-value\">{{ selectedPrompt.TypeName || 'Unknown' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Response Format</span>\n <span class=\"detail-value\">{{ selectedPrompt.ResponseFormat }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Selection Strategy</span>\n <span class=\"detail-value\">{{ selectedPrompt.SelectionStrategy }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Power Preference</span>\n <span class=\"detail-value\">{{ selectedPrompt.PowerPreference }}</span>\n </div>\n @if (selectedPrompt.MinPowerRank) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Min Power Rank</span>\n <span class=\"detail-value\">{{ selectedPrompt.MinPowerRank }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Timestamps -->\n <div class=\"detail-section\">\n <h4 class=\"detail-section-title\">\n <i class=\"fa-solid fa-clock\"></i>\n Timestamps\n </h4>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">{{ selectedPrompt.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Updated</span>\n <span class=\"detail-value\">{{ selectedPrompt.__mj_UpdatedAt | date:'medium' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Panel Actions -->\n <div class=\"detail-panel-actions\">\n @if (selectedPrompt.Status === 'Active') {\n <button\n type=\"button\"\n class=\"detail-action-btn secondary\"\n (click)=\"testPrompt(selectedPrompt.ID)\">\n <i class=\"fa-solid fa-play\"></i>\n Run Prompt\n </button>\n }\n <button\n type=\"button\"\n class=\"detail-action-btn primary\"\n (click)=\"openPromptFromPanel()\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open Full Record\n </button>\n </div>\n }\n </div>\n</mj-page-layout>\n", styles: ["/* ============================================\n AI Prompts Dashboard - World-Class Design\n Clean flat-color interface with brand blue theme\n ============================================ */\n\n/* Container is now provided by <mj-page-layout> */\n\n/* Tinted card background on the body \u2014 matches the original .prompts-content\n surface treatment so prompt cards sit on a lightly-tinted surface. */\n:host mj-page-body {\n background: var(--mj-bg-surface-card);\n}\n\n/* View toggle now provided by <mj-view-toggle>. */\n\n.control-btn {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.control-btn.primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.control-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n\n.main-splitter {\n flex: 1;\n min-height: 0;\n}\n\n/* Splitter Styling */\nas-split {\n background: transparent;\n}\n\n/* Filter Panel */\n.filter-panel {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* Header */\n.filter-panel-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--mj-bg-surface-card);\n}\n\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary);\n flex: 1;\n letter-spacing: -0.02em;\n}\n\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 16px;\n font-size: 13px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-radius: 20px;\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-bg-surface));\n}\n\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 700;\n color: var(--mj-brand-primary);\n}\n\n.filter-panel-header .filter-summary-inline .summary-label {\n color: var(--mj-brand-primary-hover);\n font-weight: 500;\n}\n\n.filter-panel-header .close-btn {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 8px;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.filter-panel-header .close-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.filter-panel-header .close-btn .fa-solid {\n font-size: 14px;\n}\n\n/* Content Area */\n.filter-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 20px;\n}\n\n/* Filter Groups */\n.filter-group {\n margin-bottom: 24px;\n}\n\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.75px;\n}\n\n.filter-group .filter-label .fa-solid {\n font-size: 13px;\n color: var(--mj-brand-primary);\n width: 16px;\n}\n\n.filter-group .filter-input,\n.filter-group .filter-select {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-group .filter-input:focus,\n.filter-group .filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-group .filter-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-group .filter-select {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n/* Legacy support for non-scoped selectors */\n.filter-input,\n.filter-select {\n width: 100%;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n font-size: 14px;\n background: var(--mj-bg-surface);\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n color: var(--mj-text-secondary);\n}\n\n.filter-input:focus,\n.filter-select:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.filter-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.filter-select {\n cursor: pointer;\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M2.5 4.5L6 8l3.5-3.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 14px center;\n padding-right: 36px;\n}\n\n/* Filter Actions */\n.filter-actions {\n margin-top: 28px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.filter-actions .reset-btn {\n width: 100%;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n box-sizing: border-box;\n}\n\n.filter-actions .reset-btn:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-actions .reset-btn .fa-solid {\n font-size: 13px;\n}\n\n/* Scrollbar Styling */\n.filter-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.filter-content::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.filter-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n\n/* Grid View */\n.prompts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));\n gap: 24px;\n}\n\n.prompt-card {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03);\n border: 1px solid var(--mj-border-default);\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n position: relative;\n}\n\n.prompt-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: var(--mj-brand-primary);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.prompt-card:hover {\n box-shadow: 0 20px 40px -15px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n transform: translateY(-4px);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card:hover::before {\n opacity: 1;\n}\n\n.prompt-card.expanded {\n box-shadow: 0 25px 50px -12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n}\n\n.prompt-card.expanded::before {\n opacity: 1;\n}\n\n.card-header {\n padding: 24px;\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 var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.card-header:hover {\n background-color: var(--mj-bg-surface-card);\n}\n\n.prompt-info {\n display: flex;\n gap: 18px;\n flex: 1;\n}\n\n.prompt-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.prompt-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.prompt-details {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-name {\n margin: 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 8px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta {\n display: flex;\n gap: 14px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 10px;\n border-radius: 6px;\n}\n\n.meta-item i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.meta-item.status-active {\n color: var(--mj-color-success-700);\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n}\n\n.meta-item.status-active i {\n color: var(--mj-color-success-700);\n}\n\n.meta-item.status-pending {\n color: var(--mj-color-warning-700);\n background: var(--mj-color-warning-100);\n}\n\n.meta-item.status-pending i {\n color: var(--mj-color-warning-700);\n}\n\n.meta-item.status-inactive {\n color: var(--mj-text-muted);\n background: var(--mj-border-default);\n}\n\n.meta-item.status-inactive i {\n color: var(--mj-text-muted);\n}\n\n.expand-icon {\n font-size: 16px;\n color: var(--mj-text-disabled);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n padding: 8px;\n border-radius: 8px;\n}\n\n.expand-icon:hover {\n color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n color: var(--mj-brand-primary);\n}\n\n.card-body {\n padding: 0 24px 24px 24px;\n}\n\n.prompt-description {\n margin: 18px 0 0 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-muted);\n}\n\n.prompt-description.text-muted {\n font-style: italic;\n color: var(--mj-text-disabled);\n}\n\n/* Expanded Content */\n.expanded-content {\n margin-top: 20px;\n padding-top: 20px;\n border-top: 1px solid var(--mj-border-default);\n animation: slideDown 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-12px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.prompt-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: 18px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 16px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.stat-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value {\n font-size: 15px;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 18px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 10px 20px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.action-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.action-btn-primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.action-btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-2px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* List View */\n.prompts-list {\n background: var(--mj-bg-surface);\n border-radius: 16px;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);\n border: 1px solid var(--mj-border-default);\n overflow: hidden;\n}\n\n.prompts-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.prompts-table thead {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.prompts-table th {\n padding: 16px 20px;\n text-align: left;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n cursor: pointer;\n user-select: none;\n transition: all 0.2s ease;\n}\n\n.prompts-table th:hover {\n background: var(--mj-border-default);\n color: var(--mj-brand-primary);\n}\n\n.prompts-table th:last-child {\n cursor: default;\n}\n\n.prompts-table th:last-child:hover {\n background: transparent;\n color: var(--mj-text-secondary);\n}\n\n.prompts-table th.sorted {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n}\n\n.prompts-table th.sorted.desc .sort-icon {\n transform: rotate(180deg);\n}\n\n.prompts-table .sort-header {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.prompts-table .sort-icon {\n font-size: 10px;\n opacity: 0;\n transition: all 0.2s ease;\n}\n\n.prompts-table th:hover .sort-icon {\n opacity: 0.5;\n}\n\n.prompts-table th.sorted .sort-icon {\n opacity: 1;\n color: var(--mj-brand-primary);\n}\n\n.prompts-table tbody tr {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n transition: background-color 0.2s;\n}\n\n.prompts-table tbody tr:last-child {\n border-bottom: none;\n}\n\n.prompts-table tbody tr:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.prompts-table td {\n padding: 18px 20px;\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.prompt-name-cell {\n display: flex;\n align-items: center;\n gap: 14px;\n}\n\n.prompt-icon-small {\n width: 42px;\n height: 42px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.prompt-icon-small i {\n color: var(--mj-text-inverse);\n font-size: 18px;\n}\n\n.prompt-name-cell .prompt-name {\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 0;\n white-space: normal;\n}\n\n.prompt-description-small {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n line-height: 1.4;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.status-badge i {\n font-size: 8px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-color-success-700);\n}\n\n.status-badge.status-pending {\n background: var(--mj-color-warning-100);\n color: var(--mj-color-warning-700);\n}\n\n.status-badge.status-inactive {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.status-unknown {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n}\n\n.table-actions {\n display: flex;\n gap: 10px;\n}\n\n.action-btn-small {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n padding: 8px 12px;\n border-radius: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n.action-btn-small.primary {\n background: var(--mj-brand-primary);\n border-color: transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.action-btn-small.primary:hover {\n background: var(--mj-brand-primary-hover);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 100px 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 80px;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n margin-bottom: 28px;\n display: block;\n}\n\n.empty-state h3 {\n color: var(--mj-text-primary);\n font-size: 24px;\n font-weight: 700;\n margin: 0 0 12px 0;\n}\n\n.empty-state p {\n font-size: 16px;\n line-height: 1.6;\n max-width: 420px;\n margin: 0 auto 32px;\n color: var(--mj-text-muted);\n}\n\n.empty-state-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 14px 28px;\n border-radius: 12px;\n font-size: 15px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: inline-flex;\n align-items: center;\n gap: 10px;\n box-shadow: 0 4px 15px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.empty-state-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 25px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\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/* Responsive Design */\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n padding: 16px 20px;\n }\n\n .header-info {\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .header-controls {\n justify-content: center;\n }\n\n .prompts-grid {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .prompt-stats {\n grid-template-columns: 1fr;\n }\n\n .card-header {\n padding: 18px;\n }\n\n .card-body {\n padding: 0 18px 18px 18px;\n }\n\n .card-actions {\n padding: 14px 18px;\n flex-wrap: wrap;\n }\n}\n\n/* =============================================\n Detail Panel - Slide-in Overlay\n ============================================= */\n\n.detail-panel-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.4);\n backdrop-filter: blur(4px);\n z-index: 1000;\n animation: fadeIn 0.25s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: -480px;\n width: 480px;\n height: 100vh;\n background: var(--mj-bg-surface);\n box-shadow: -8px 0 32px rgba(0, 0, 0, 0.15);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n transition: right 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n}\n\n.detail-panel.visible {\n right: 0;\n}\n\n/* Detail Panel Header */\n.detail-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.detail-panel-title {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.detail-icon {\n width: 56px;\n height: 56px;\n border-radius: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-icon i {\n color: var(--mj-text-inverse);\n font-size: 24px;\n}\n\n.detail-title-info h3 {\n margin: 0 0 4px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-panel-close {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n width: 40px;\n height: 40px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.detail-panel-close:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n/* Detail Panel Content */\n.detail-panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.detail-section {\n margin-bottom: 28px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-badges {\n display: flex;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.feature-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n font-size: 12px;\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.feature-badge i {\n font-size: 11px;\n}\n\n.detail-section-title {\n margin: 0 0 16px 0;\n font-size: 12px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-section-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.detail-description {\n margin: 0;\n font-size: 14px;\n line-height: 1.7;\n color: var(--mj-text-secondary);\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 16px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 14px;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n border: 1px solid var(--mj-border-default);\n}\n\n.detail-label {\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value i {\n font-size: 13px;\n}\n\n/* Detail Panel Actions */\n.detail-panel-actions {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n gap: 12px;\n flex-shrink: 0;\n}\n\n.detail-action-btn {\n flex: 1;\n padding: 14px 20px;\n border-radius: 12px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.detail-action-btn.secondary {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n color: var(--mj-text-secondary);\n}\n\n.detail-action-btn.secondary:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.detail-action-btn.primary {\n background: var(--mj-brand-primary);\n border: 2px solid transparent;\n color: var(--mj-text-inverse);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n.detail-action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n transform: translateY(-1px);\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail Panel Responsive */\n@media (max-width: 520px) {\n .detail-panel {\n width: 100%;\n right: -100%;\n }\n\n .detail-grid {\n grid-template-columns: 1fr;\n }\n}\n\n/* Search Highlight */\n:host ::ng-deep .search-highlight,\n.search-highlight {\n background-color: color-mix(in srgb, var(--mj-status-warning) 35%, var(--mj-bg-surface));\n padding: 1px 2px;\n border-radius: 2px;\n font-weight: inherit;\n}\n"] }]
|
|
1190
1150
|
}], () => [{ type: i1.SharedService }, { type: i2.AITestHarnessDialogService }, { type: i0.ChangeDetectorRef }], null); })();
|
|
1191
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementComponent, { className: "PromptManagementComponent", filePath: "src/AI/components/prompts/prompt-management.component.ts", lineNumber:
|
|
1151
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementComponent, { className: "PromptManagementComponent", filePath: "src/AI/components/prompts/prompt-management.component.ts", lineNumber: 47 }); })();
|
|
1192
1152
|
//# sourceMappingURL=prompt-management.component.js.map
|