@memberjunction/ng-dashboards 5.11.0 → 5.12.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 +34 -2
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +586 -223
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +2 -2
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +8 -0
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +85 -52
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts +1 -0
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.js +27 -5
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.d.ts +5 -0
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.js +23 -8
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +2 -2
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +2 -2
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +83 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -0
- package/dist/AI/components/requests/agent-requests-resource.component.js +547 -0
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -0
- package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
- package/dist/AI/components/system/system-configuration.component.js +2 -2
- package/dist/AI/components/widgets/kpi-card.component.js +7 -7
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.js +6 -6
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +2 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +3 -3
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +3 -3
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +3 -3
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +1 -1
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +2 -2
- package/dist/APIKeys/api-usage-panel.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/execution-monitoring.component.js +2 -2
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +2 -2
- package/dist/Actions/components/explorer/action-card.component.js +2 -2
- package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
- package/dist/Actions/components/explorer/action-list-item.component.js +2 -2
- package/dist/Actions/components/explorer/action-toolbar.component.js +2 -2
- package/dist/Actions/components/explorer/action-tree-panel.component.js +2 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js +2 -2
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +2 -2
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +3 -3
- 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 +5 -5
- 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 +3 -3
- 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 +3 -3
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +2 -2
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +2 -2
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/browser/component-browser.component.js +2 -2
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +2 -2
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +2 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +2 -2
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +2 -2
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +2 -2
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +2 -2
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +2 -2
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +9 -9
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +11 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +2 -2
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +12 -11
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +9 -9
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +2 -2
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +2 -2
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +2 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +2 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.js +4 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +2 -2
- package/dist/Integration/components/activity/activity.component.d.ts +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +5 -5
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts +31 -2
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +753 -412
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -3
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts +0 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +3 -6
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +3 -3
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts +20 -0
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +97 -5
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/components/visual-editor/visual-editor.component.js +2 -2
- package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +5 -1
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
- package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +2 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +7 -3
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +27 -2
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +107 -4
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +2 -2
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +2 -2
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +2 -2
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +3 -3
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
- package/dist/MCP/components/mcp-log-detail-panel.component.js +2 -2
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +2 -2
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2 -2
- package/dist/MCP/mcp-filter-panel.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js +7 -7
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/index.d.ts +0 -1
- package/dist/Scheduling/components/index.d.ts.map +1 -1
- package/dist/Scheduling/components/index.js +0 -1
- package/dist/Scheduling/components/index.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +2 -2
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +6 -9
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +118 -110
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +3 -3
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +2 -2
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +4 -4
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +2 -2
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +5 -5
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +2 -2
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +2 -2
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.js +4 -4
- package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +2 -2
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +2 -2
- package/dist/VersionHistory/components/diff-resource.component.js +2 -2
- package/dist/VersionHistory/components/graph-resource.component.js +2 -2
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +3 -3
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/__tests__/integration-data-service.test.js +1 -0
- package/dist/__tests__/integration-data-service.test.js.map +1 -1
- package/dist/module.d.ts +52 -49
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +25 -6
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +42 -40
- package/dist/Scheduling/components/job-slideout.component.d.ts +0 -45
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +0 -1
- package/dist/Scheduling/components/job-slideout.component.js +0 -459
- package/dist/Scheduling/components/job-slideout.component.js.map +0 -1
|
@@ -1164,11 +1164,11 @@ export class PromptVersionControlComponent {
|
|
|
1164
1164
|
} if (rf & 2) {
|
|
1165
1165
|
i0.ɵɵadvance();
|
|
1166
1166
|
i0.ɵɵconditional(!ctx.prompt ? 1 : 2);
|
|
1167
|
-
} }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.RadioControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.JsonPipe, i4.DatePipe], styles: [".prompt-version-control[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: white;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #0d6efd;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] .prompt-name[_ngcontent-%COMP%] {\n font-weight: 400;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-select[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-select[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%] {\n min-width: 120px;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] {\n margin: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] .form-check-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] .form-check-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] .loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] .loading-content[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%] {\n margin-top: 1rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] {\n max-width: 800px;\n margin: 0 auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%]:hover .timeline-content[_ngcontent-%COMP%] {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n border-color: #0d6efd;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item.active[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n border-color: #28a745;\n background-color: #28a745;\n color: white;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: white;\n font-size: 1rem;\n z-index: 2;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-create[_ngcontent-%COMP%] {\n border-color: #28a745;\n color: #28a745;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-update[_ngcontent-%COMP%] {\n border-color: #0d6efd;\n color: #0d6efd;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-delete[_ngcontent-%COMP%] {\n border-color: #dc3545;\n color: #dc3545;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .timeline-line[_ngcontent-%COMP%] {\n width: 2px;\n flex: 1;\n background: #dee2e6;\n margin-top: 0.5rem;\n min-height: 2rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n flex: 1;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-label[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] .change-date[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-description[_ngcontent-%COMP%] {\n color: #495057;\n margin-bottom: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .field-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n margin-right: 0.75rem;\n min-width: 100px;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] .old-value[_ngcontent-%COMP%] {\n color: #dc3545;\n text-decoration: line-through;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] .new-value[_ngcontent-%COMP%] {\n color: #28a745;\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .selector-group[_ngcontent-%COMP%] {\n flex: 1;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .selector-group[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #495057;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .comparison-arrow[_ngcontent-%COMP%] {\n padding-bottom: 0.375rem;\n color: #6c757d;\n font-size: 1.25rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] .comparison-title[_ngcontent-%COMP%] {\n margin: 0;\n color: #495057;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] .changes-count[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #6c757d;\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] {\n border-bottom: 1px solid #f1f3f4;\n padding: 1.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-added[_ngcontent-%COMP%] {\n border-left: 4px solid #28a745;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-modified[_ngcontent-%COMP%] {\n border-left: 4px solid #ffc107;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-removed[_ngcontent-%COMP%] {\n border-left: 4px solid #dc3545;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .field-name[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: #495057;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .badge.template-badge[_ngcontent-%COMP%] {\n background-color: #6f42c1;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value.old-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value.old-value[_ngcontent-%COMP%] {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value.new-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value.new-value[_ngcontent-%COMP%] {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%] {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] .details-title[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] .details-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] {\n padding: 1.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 2rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n margin: 0 0 1rem 0;\n color: #495057;\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid #e9ecef;\n padding-bottom: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 500;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .json-viewer[_ngcontent-%COMP%] .json-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .json-viewer[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .template-viewer[_ngcontent-%COMP%] .json-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .template-viewer[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .error-container[_ngcontent-%COMP%] {\n padding: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .error-container[_ngcontent-%COMP%] .alert[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n@media (max-width: 1200px) {\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n min-width: 100%;\n justify-content: space-between;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .comparison-arrow[_ngcontent-%COMP%] {\n align-self: center;\n padding: 0.5rem 0;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n}\n@media (max-width: 768px) {\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n margin-right: 1rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] {\n align-self: flex-end;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%], \n .prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] {\n padding: 2rem;\n background: white;\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #007bff;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .input-group-text[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-color: #ced4da;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .input-group-text[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6c757d;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%] {\n border-color: #ced4da;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 2rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:hover {\n background-color: #f8f9fa;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] {\n flex: 1;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] .prompt-title[_ngcontent-%COMP%] {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: #495057;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] .prompt-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n line-height: 1.4;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-actions[_ngcontent-%COMP%] {\n color: #007bff;\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:hover .prompt-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n}"] });
|
|
1167
|
+
} }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.RadioControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent, i4.JsonPipe, i4.DatePipe], styles: [".prompt-version-control[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .toolbar-title[_ngcontent-%COMP%] .prompt-name[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-select[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-select[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%] {\n min-width: 120px;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] {\n margin: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .filter-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] .form-check-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .search-controls[_ngcontent-%COMP%] .form-check[_ngcontent-%COMP%] .form-check-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] .action-buttons[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] .loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n.prompt-version-control[_ngcontent-%COMP%] .loading-container[_ngcontent-%COMP%] .loading-content[_ngcontent-%COMP%] .loading-message[_ngcontent-%COMP%] {\n margin-top: 1rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] {\n max-width: 800px;\n margin: 0 auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%]:hover .timeline-content[_ngcontent-%COMP%] {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item.active[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n background-color: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: var(--mj-bg-surface);\n font-size: 1rem;\n z-index: 2;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-create[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-update[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon.change-delete[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .timeline-line[_ngcontent-%COMP%] {\n width: 2px;\n flex: 1;\n background: var(--mj-border-default);\n margin-top: 0.5rem;\n min-height: 2rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n flex: 1;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-label[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] .change-date[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-info[_ngcontent-%COMP%] .version-meta[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n margin-bottom: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: var(--mj-bg-surface-card);\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .field-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin-right: 0.75rem;\n min-width: 100px;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] .old-value[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: line-through;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] .new-value[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .changes-summary[_ngcontent-%COMP%] .changes-list[_ngcontent-%COMP%] .change-item[_ngcontent-%COMP%] .change-arrow[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .no-versions-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .selector-group[_ngcontent-%COMP%] {\n flex: 1;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .selector-group[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .comparison-arrow[_ngcontent-%COMP%] {\n padding-bottom: 0.375rem;\n color: var(--mj-text-muted);\n font-size: 1.25rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] .comparison-title[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .comparison-header[_ngcontent-%COMP%] .changes-count[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-default);\n padding: 1.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-added[_ngcontent-%COMP%] {\n border-left: 4px solid var(--mj-status-success);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-modified[_ngcontent-%COMP%] {\n border-left: 4px solid var(--mj-status-warning);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item.diff-removed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--mj-status-error);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] {\n margin-bottom: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .field-name[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-header[_ngcontent-%COMP%] .field-info[_ngcontent-%COMP%] .badge.template-badge[_ngcontent-%COMP%] {\n background-color: var(--mj-brand-primary-hover);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value.old-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value.old-value[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n color: var(--mj-status-error);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value.new-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value.new-value[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n color: var(--mj-color-success-700);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-old[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] .diff-new[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%] {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-added[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n color: var(--mj-color-success-700);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .diff-removed[_ngcontent-%COMP%] .diff-value[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n color: var(--mj-status-error);\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n}\n.prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .no-differences[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] {\n max-width: 800px;\n margin: 0 auto;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] .details-title[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-header[_ngcontent-%COMP%] .details-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] {\n padding: 1.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] {\n margin-bottom: 2rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n margin: 0 0 1rem 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n padding-bottom: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] .detail-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .detail-grid[_ngcontent-%COMP%] .detail-item[_ngcontent-%COMP%] .detail-value[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .json-viewer[_ngcontent-%COMP%] .json-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .json-viewer[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .template-viewer[_ngcontent-%COMP%] .json-content[_ngcontent-%COMP%], \n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .version-details[_ngcontent-%COMP%] .details-content[_ngcontent-%COMP%] .detail-section[_ngcontent-%COMP%] .template-viewer[_ngcontent-%COMP%] .template-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] {\n text-align: center;\n padding: 3rem 1rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] .no-selection-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control[_ngcontent-%COMP%] .error-container[_ngcontent-%COMP%] {\n padding: 1rem;\n}\n.prompt-version-control[_ngcontent-%COMP%] .error-container[_ngcontent-%COMP%] .alert[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n@media (max-width: 1200px) {\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n min-width: 100%;\n justify-content: space-between;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-selectors[_ngcontent-%COMP%] .comparison-arrow[_ngcontent-%COMP%] {\n align-self: center;\n padding: 0.5rem 0;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%] .comparison-results[_ngcontent-%COMP%] .differences-list[_ngcontent-%COMP%] .difference-item[_ngcontent-%COMP%] .diff-content[_ngcontent-%COMP%] .side-by-side-diff[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n}\n@media (max-width: 768px) {\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .version-toolbar[_ngcontent-%COMP%] .toolbar-section[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n margin-right: 1rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] .marker-icon[_ngcontent-%COMP%] {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n }\n .prompt-version-control[_ngcontent-%COMP%] .timeline-container[_ngcontent-%COMP%] .version-timeline[_ngcontent-%COMP%] .timeline-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] .version-header[_ngcontent-%COMP%] .version-actions[_ngcontent-%COMP%] {\n align-self: flex-end;\n }\n .prompt-version-control[_ngcontent-%COMP%] .comparison-container[_ngcontent-%COMP%], \n .prompt-version-control[_ngcontent-%COMP%] .details-container[_ngcontent-%COMP%] {\n padding: 0.75rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] {\n padding: 2rem;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .input-group-text[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-default);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .input-group-text[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .search-box[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 2rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background-color 0.2s;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-card);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] {\n flex: 1;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] .prompt-title[_ngcontent-%COMP%] {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-info[_ngcontent-%COMP%] .prompt-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%] .prompt-actions[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n .prompt-selector-section[_ngcontent-%COMP%] .prompt-selector[_ngcontent-%COMP%] .prompts-list[_ngcontent-%COMP%] .prompt-item[_ngcontent-%COMP%]:hover .prompt-actions[_ngcontent-%COMP%] {\n opacity: 1;\n }\n}"] });
|
|
1168
1168
|
}
|
|
1169
1169
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptVersionControlComponent, [{
|
|
1170
1170
|
type: Component,
|
|
1171
|
-
args: [{ standalone: false, selector: 'app-prompt-version-control', template: "<div class=\"prompt-version-control\">\n <!-- Prompt Selector (when no prompt selected) -->\n @if (!prompt) {\n <div class=\"prompt-selector-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n </h5>\n <p class=\"text-muted mb-3\">Select a prompt to view its version history</p>\n \n <div class=\"prompt-selector\">\n <div class=\"search-box mb-3\">\n <div class=\"input-group\">\n <span class=\"input-group-text\">\n <i class=\"fa-solid fa-search\"></i>\n </span>\n <input \n type=\"text\" \n class=\"form-control\" \n placeholder=\"Search prompts...\"\n [ngModel]=\"promptSearchTerm$.value\"\n (ngModelChange)=\"onPromptSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"prompts-list\">\n @if (availablePrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots text-muted\"></i>\n <p class=\"text-muted\">No prompts available</p>\n </div>\n } @else {\n @for (promptItem of filteredAvailablePrompts; track promptItem.ID) {\n <div class=\"prompt-item\" (click)=\"selectPromptForHistory(promptItem)\">\n <div class=\"prompt-info\">\n <h6 class=\"prompt-title\">{{ promptItem.Name }}</h6>\n @if (promptItem.Description) {\n <p class=\"prompt-description\">{{ promptItem.Description }}</p>\n }\n </div>\n <div class=\"prompt-actions\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else {\n <!-- Header toolbar -->\n <div class=\"version-toolbar\">\n <div class=\"toolbar-section\">\n <h5 class=\"toolbar-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n @if (prompt) {\n <span class=\"prompt-name\">- {{ prompt.Name }}</span>\n }\n </h5>\n \n <div class=\"view-mode-toggle\">\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"timelineView\" value=\"timeline\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"timelineView\">\n <i class=\"fa-solid fa-timeline\"></i>\n Timeline\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"comparisonView\" value=\"comparison\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"comparisonView\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Compare\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"detailsView\" value=\"details\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"detailsView\">\n <i class=\"fa-solid fa-list\"></i>\n Details\n </label>\n </div>\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"filter-controls\">\n <label class=\"form-label\">Filter:</label>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"filterBy\" (ngModelChange)=\"onFilterChange($event)\">\n <option value=\"all\">All Changes</option>\n <option value=\"updates\">Updates Only</option>\n <option value=\"major\">Major Changes</option>\n <option value=\"template\">Template Changes</option>\n </select>\n \n <div class=\"form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"showSystem\" [(ngModel)]=\"showSystemChanges\" (ngModelChange)=\"applyFiltersPublic()\">\n <label class=\"form-check-label\" for=\"showSystem\">System</label>\n </div>\n </div>\n \n <div class=\"search-controls\">\n <input \n type=\"text\" \n class=\"form-control form-control-sm\" \n placeholder=\"Search changes...\"\n [ngModel]=\"searchTerm$.value\" (ngModelChange)=\"onSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"onSortDirectionChange()\" [title]=\"'Sort ' + (sortDirection === 'asc' ? 'descending' : 'ascending')\">\n <i class=\"fa-solid\" [class.fa-sort-up]=\"sortDirection === 'asc'\" [class.fa-sort-down]=\"sortDirection === 'desc'\"></i>\n Sort\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"refreshHistory()\" [disabled]=\"isLoading\" title=\"Refresh history\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-info\" (click)=\"exportVersionHistory()\" title=\"Export history\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </div>\n </div>\n </div>\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n } @else {\n \n <!-- Timeline View -->\n @if (currentView === 'timeline') {\n <div class=\"timeline-container\">\n @if (versions.length > 0) {\n <div class=\"version-timeline\">\n @for (version of versions; track version.id; let i = $index) {\n <div class=\"timeline-item\" \n [class.selected]=\"selectedVersion?.id === version.id\"\n [class.active]=\"version.isActive\"\n (click)=\"onVersionSelect(version)\">\n \n <div class=\"timeline-marker\">\n <div class=\"marker-icon\" [class]=\"getChangeTypeClass(version.changeType)\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(version.changeType)\"></i>\n </div>\n @if (i < versions.length - 1) {\n <div class=\"timeline-line\"></div>\n }\n </div>\n \n <div class=\"timeline-content\">\n <div class=\"version-header\">\n <div class=\"version-info\">\n <h6 class=\"version-label\">{{ getVersionLabel(version) }}</h6>\n <div class=\"version-meta\">\n <span class=\"change-date\">{{ version.changedAt | date:'medium' }}</span>\n <span class=\"changed-by\">by {{ version.changedBy }}</span>\n <span class=\"change-source badge\" [class.badge-primary]=\"version.changeSource === 'Internal'\" [class.badge-secondary]=\"version.changeSource === 'External'\">\n {{ version.changeSource }}\n </span>\n </div>\n </div>\n \n <div class=\"version-actions\">\n @if (showComparison && i < versions.length - 1) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"$event.stopPropagation(); startComparison(version)\"\n title=\"Compare with next version\">\n <i class=\"fa-solid fa-code-compare\"></i>\n </button>\n }\n \n @if (showRestoreActions && version.canRestore) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-success\"\n (click)=\"$event.stopPropagation(); onVersionRestore(version)\"\n title=\"Restore this version\">\n <i class=\"fa-solid fa-undo\"></i>\n </button>\n }\n </div>\n </div>\n \n <div class=\"version-description\">\n {{ version.changesDescription }}\n </div>\n \n @if (version.changesJSON && timelineConfig.showDiffs) {\n <div class=\"changes-summary\">\n <div class=\"changes-list\">\n @for (field of getObjectKeys(version.changesJSON); track field) {\n <div class=\"change-item\">\n <span class=\"field-name\">{{ getFieldDisplayNamePublic(field) }}</span>\n @if (version.changesJSON[field].oldValue !== undefined) {\n <span class=\"change-arrow\">\n <span class=\"old-value\">{{ formatChangeValue(version.changesJSON[field].oldValue) }}</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n </span>\n } @else {\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-versions-message\">\n <i class=\"fa-solid fa-info-circle text-muted\"></i>\n <p class=\"text-muted\">No version history available for this prompt.</p>\n @if (prompt && !prompt.EntityInfo.TrackRecordChanges) {\n <p class=\"text-muted\"><small>Record changes tracking may not be enabled for prompts.</small></p>\n }\n </div>\n }\n </div>\n }\n \n <!-- Comparison View -->\n @if (currentView === 'comparison') {\n <div class=\"comparison-container\">\n <!-- Version selectors -->\n <div class=\"comparison-selectors\">\n <div class=\"selector-group\">\n <label class=\"form-label\">Compare from:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareFromVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n \n <div class=\"comparison-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n \n <div class=\"selector-group\">\n <label class=\"form-label\">Compare to:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareToVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n </div>\n \n <!-- Comparison results -->\n @if (comparisonResult) {\n <div class=\"comparison-results\">\n <div class=\"comparison-header\">\n <h6 class=\"comparison-title\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Changes between {{ getVersionLabel(comparisonResult.fromVersion) }} and {{ getVersionLabel(comparisonResult.toVersion) }}\n </h6>\n <div class=\"changes-count\">\n {{ comparisonResult.differences.length }} change(s) found\n </div>\n </div>\n \n @if (comparisonResult.differences.length > 0) {\n <div class=\"differences-list\">\n @for (diff of comparisonResult.differences; track diff.fieldName) {\n <div class=\"difference-item\" [class]=\"'diff-' + diff.changeType\">\n <div class=\"diff-header\">\n <div class=\"field-info\">\n <strong class=\"field-name\">{{ diff.displayName }}</strong>\n <span class=\"change-type badge\" \n [class.badge-success]=\"diff.changeType === 'added'\"\n [class.badge-warning]=\"diff.changeType === 'modified'\"\n [class.badge-danger]=\"diff.changeType === 'removed'\">\n {{ diff.changeType }}\n </span>\n @if (diff.isTemplate) {\n <span class=\"template-badge badge badge-info\">Template</span>\n }\n </div>\n </div>\n \n <div class=\"diff-content\">\n @if (diff.changeType === 'modified') {\n <div class=\"side-by-side-diff\">\n <div class=\"diff-old\">\n <h6 class=\"diff-label\">Before:</h6>\n <div class=\"diff-value old-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.oldValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.oldValue) }}\n }\n </div>\n </div>\n \n <div class=\"diff-new\">\n <h6 class=\"diff-label\">After:</h6>\n <div class=\"diff-value new-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.newValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.newValue) }}\n }\n </div>\n </div>\n </div>\n } @else if (diff.changeType === 'added') {\n <div class=\"diff-added\">\n <h6 class=\"diff-label\">Added:</h6>\n <div class=\"diff-value new-value\">{{ formatChangeValue(diff.newValue) }}</div>\n </div>\n } @else if (diff.changeType === 'removed') {\n <div class=\"diff-removed\">\n <h6 class=\"diff-label\">Removed:</h6>\n <div class=\"diff-value old-value\">{{ formatChangeValue(diff.oldValue) }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-differences\">\n <i class=\"fa-solid fa-check-circle text-success\"></i>\n <p class=\"text-muted\">No differences found between the selected versions.</p>\n </div>\n }\n </div>\n }\n </div>\n }\n \n <!-- Details View -->\n @if (currentView === 'details') {\n <div class=\"details-container\">\n @if (selectedVersion) {\n <div class=\"version-details\">\n <div class=\"details-header\">\n <h6 class=\"details-title\">{{ getVersionLabel(selectedVersion) }}</h6>\n <div class=\"details-meta\">\n <span class=\"change-date\">{{ selectedVersion.changedAt | date:'full' }}</span>\n <span class=\"changed-by\">Changed by {{ selectedVersion.changedBy }}</span>\n </div>\n </div>\n \n <div class=\"details-content\">\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Change Information</h6>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Type:</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(selectedVersion.changeType)\"></i>\n {{ selectedVersion.changeType }}\n </span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Source:</span>\n <span class=\"detail-value\">{{ selectedVersion.changeSource }}</span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Description:</span>\n <span class=\"detail-value\">{{ selectedVersion.changesDescription }}</span>\n </div>\n </div>\n </div>\n \n @if (selectedVersion.fullRecordJSON) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Record State</h6>\n <div class=\"json-viewer\">\n <pre class=\"json-content\">{{ selectedVersion.fullRecordJSON | json }}</pre>\n </div>\n </div>\n }\n \n @if (selectedVersion.templateContent) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Template Content</h6>\n <div class=\"template-viewer\">\n <pre class=\"template-content\">{{ selectedVersion.templateContent.TemplateText }}</pre>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"no-selection-message\">\n <i class=\"fa-solid fa-hand-pointer text-muted\"></i>\n <p class=\"text-muted\">Select a version from the timeline to view details.</p>\n </div>\n }\n </div>\n }\n }\n \n <!-- Error state -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"alert alert-danger\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger ms-2\" (click)=\"refreshHistory()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n }\n</div>", styles: [".prompt-version-control {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n}\n.prompt-version-control .version-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: white;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title {\n margin: 0;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title i {\n color: #0d6efd;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title .prompt-name {\n font-weight: 400;\n color: #6c757d;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-label,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-label {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-select,\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-control,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-select,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-control {\n min-width: 120px;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-check,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-check {\n margin: 0;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-check .form-check-label,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-check .form-check-label {\n font-size: 0.875rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .action-buttons {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .action-buttons .btn {\n font-size: 0.875rem;\n}\n.prompt-version-control .loading-container {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.prompt-version-control .loading-container .loading-content {\n text-align: center;\n}\n.prompt-version-control .loading-container .loading-content .loading-message {\n margin-top: 1rem;\n color: #6c757d;\n}\n.prompt-version-control .timeline-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .timeline-container .version-timeline {\n max-width: 800px;\n margin: 0 auto;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item:hover .timeline-content {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item.selected .timeline-content {\n border-color: #0d6efd;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.25);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item.active .timeline-marker .marker-icon {\n border-color: #28a745;\n background-color: #28a745;\n color: white;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: white;\n font-size: 1rem;\n z-index: 2;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-create {\n border-color: #28a745;\n color: #28a745;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-update {\n border-color: #0d6efd;\n color: #0d6efd;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-delete {\n border-color: #dc3545;\n color: #dc3545;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .timeline-line {\n width: 2px;\n flex: 1;\n background: #dee2e6;\n margin-top: 0.5rem;\n min-height: 2rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content {\n flex: 1;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-label {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta .change-date {\n font-weight: 500;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta .badge {\n font-size: 0.75rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-description {\n color: #495057;\n margin-bottom: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .field-name {\n font-weight: 500;\n color: #495057;\n margin-right: 0.75rem;\n min-width: 100px;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow .old-value {\n color: #dc3545;\n text-decoration: line-through;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow .new-value {\n color: #28a745;\n font-weight: 500;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow i {\n color: #6c757d;\n}\n.prompt-version-control .timeline-container .no-versions-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control .timeline-container .no-versions-message i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control .timeline-container .no-versions-message p {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .comparison-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .comparison-container .comparison-selectors {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n}\n.prompt-version-control .comparison-container .comparison-selectors .selector-group {\n flex: 1;\n}\n.prompt-version-control .comparison-container .comparison-selectors .selector-group .form-label {\n font-weight: 500;\n color: #495057;\n}\n.prompt-version-control .comparison-container .comparison-selectors .comparison-arrow {\n padding-bottom: 0.375rem;\n color: #6c757d;\n font-size: 1.25rem;\n}\n.prompt-version-control .comparison-container .comparison-results {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header .comparison-title {\n margin: 0;\n color: #495057;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header .changes-count {\n font-size: 0.875rem;\n color: #6c757d;\n font-weight: 500;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item {\n border-bottom: 1px solid #f1f3f4;\n padding: 1.5rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item:last-child {\n border-bottom: none;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-added {\n border-left: 4px solid #28a745;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-modified {\n border-left: 4px solid #ffc107;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-removed {\n border-left: 4px solid #dc3545;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header {\n margin-bottom: 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .field-name {\n font-size: 1rem;\n color: #495057;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .badge {\n font-size: 0.75rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .badge.template-badge {\n background-color: #6f42c1;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-label,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value.old-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value.old-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value.new-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value.new-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value .template-content,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value .template-content {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-label,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #6c757d;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-value {\n background: #f0fff4;\n border: 1px solid #9ae6b4;\n color: #2f855a;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-value {\n background: #fff5f5;\n border: 1px solid #fed7d7;\n color: #c53030;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences {\n text-align: center;\n padding: 3rem 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences p {\n margin: 0;\n font-size: 1rem;\n}\n.prompt-version-control .details-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .details-container .version-details {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control .details-container .version-details .details-header {\n padding: 1.5rem;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n}\n.prompt-version-control .details-container .version-details .details-header .details-title {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-weight: 600;\n}\n.prompt-version-control .details-container .version-details .details-header .details-meta {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n.prompt-version-control .details-container .version-details .details-content {\n padding: 1.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section {\n margin-bottom: 2rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section:last-child {\n margin-bottom: 0;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .section-title {\n margin: 0 0 1rem 0;\n color: #495057;\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid #e9ecef;\n padding-bottom: 0.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item .detail-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #6c757d;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item .detail-value {\n font-size: 0.875rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .json-viewer .json-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .json-viewer .template-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .template-viewer .json-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .template-viewer .template-content {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n}\n.prompt-version-control .details-container .no-selection-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n}\n.prompt-version-control .details-container .no-selection-message i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control .details-container .no-selection-message p {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .error-container {\n padding: 1rem;\n}\n.prompt-version-control .error-container .alert {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n@media (max-width: 1200px) {\n .prompt-version-control .version-toolbar .toolbar-section {\n min-width: 100%;\n justify-content: space-between;\n }\n .prompt-version-control .comparison-container .comparison-selectors {\n flex-direction: column;\n align-items: stretch;\n }\n .prompt-version-control .comparison-container .comparison-selectors .comparison-arrow {\n align-self: center;\n padding: 0.5rem 0;\n }\n .prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n}\n@media (max-width: 768px) {\n .prompt-version-control .version-toolbar {\n padding: 0.75rem;\n }\n .prompt-version-control .version-toolbar .toolbar-section {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .prompt-version-control .timeline-container {\n padding: 0.75rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker {\n margin-right: 1rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content {\n padding: 1rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions {\n align-self: flex-end;\n }\n .prompt-version-control .comparison-container,\n .prompt-version-control .details-container {\n padding: 0.75rem;\n }\n .prompt-selector-section {\n padding: 2rem;\n background: white;\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n .prompt-selector-section .section-title {\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section .section-title i {\n color: #007bff;\n }\n .prompt-selector-section .prompt-selector .search-box .input-group-text {\n background: #f8f9fa;\n border-color: #ced4da;\n }\n .prompt-selector-section .prompt-selector .search-box .input-group-text i {\n color: #6c757d;\n }\n .prompt-selector-section .prompt-selector .search-box .form-control {\n border-color: #ced4da;\n }\n .prompt-selector-section .prompt-selector .search-box .form-control:focus {\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n }\n .prompt-selector-section .prompt-selector .prompts-list {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n }\n .prompt-selector-section .prompt-selector .prompts-list .empty-state {\n text-align: center;\n padding: 2rem;\n }\n .prompt-selector-section .prompt-selector .prompts-list .empty-state i {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:last-child {\n border-bottom: none;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:hover {\n background-color: #f8f9fa;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info {\n flex: 1;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info .prompt-title {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: #495057;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info .prompt-description {\n margin: 0;\n font-size: 0.875rem;\n color: #6c757d;\n line-height: 1.4;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-actions {\n color: #007bff;\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:hover .prompt-actions {\n opacity: 1;\n }\n}\n"] }]
|
|
1171
|
+
args: [{ standalone: false, selector: 'app-prompt-version-control', template: "<div class=\"prompt-version-control\">\n <!-- Prompt Selector (when no prompt selected) -->\n @if (!prompt) {\n <div class=\"prompt-selector-section\">\n <h5 class=\"section-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n </h5>\n <p class=\"text-muted mb-3\">Select a prompt to view its version history</p>\n \n <div class=\"prompt-selector\">\n <div class=\"search-box mb-3\">\n <div class=\"input-group\">\n <span class=\"input-group-text\">\n <i class=\"fa-solid fa-search\"></i>\n </span>\n <input \n type=\"text\" \n class=\"form-control\" \n placeholder=\"Search prompts...\"\n [ngModel]=\"promptSearchTerm$.value\"\n (ngModelChange)=\"onPromptSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"prompts-list\">\n @if (availablePrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots text-muted\"></i>\n <p class=\"text-muted\">No prompts available</p>\n </div>\n } @else {\n @for (promptItem of filteredAvailablePrompts; track promptItem.ID) {\n <div class=\"prompt-item\" (click)=\"selectPromptForHistory(promptItem)\">\n <div class=\"prompt-info\">\n <h6 class=\"prompt-title\">{{ promptItem.Name }}</h6>\n @if (promptItem.Description) {\n <p class=\"prompt-description\">{{ promptItem.Description }}</p>\n }\n </div>\n <div class=\"prompt-actions\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else {\n <!-- Header toolbar -->\n <div class=\"version-toolbar\">\n <div class=\"toolbar-section\">\n <h5 class=\"toolbar-title\">\n <i class=\"fa-solid fa-history\"></i>\n Version History\n @if (prompt) {\n <span class=\"prompt-name\">- {{ prompt.Name }}</span>\n }\n </h5>\n \n <div class=\"view-mode-toggle\">\n <div class=\"btn-group btn-group-sm\" role=\"group\">\n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"timelineView\" value=\"timeline\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"timelineView\">\n <i class=\"fa-solid fa-timeline\"></i>\n Timeline\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"comparisonView\" value=\"comparison\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"comparisonView\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Compare\n </label>\n \n <input type=\"radio\" class=\"btn-check\" name=\"view\" id=\"detailsView\" value=\"details\" [(ngModel)]=\"currentView\" (ngModelChange)=\"onViewChange($event)\">\n <label class=\"btn btn-outline-primary\" for=\"detailsView\">\n <i class=\"fa-solid fa-list\"></i>\n Details\n </label>\n </div>\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"filter-controls\">\n <label class=\"form-label\">Filter:</label>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"filterBy\" (ngModelChange)=\"onFilterChange($event)\">\n <option value=\"all\">All Changes</option>\n <option value=\"updates\">Updates Only</option>\n <option value=\"major\">Major Changes</option>\n <option value=\"template\">Template Changes</option>\n </select>\n \n <div class=\"form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" id=\"showSystem\" [(ngModel)]=\"showSystemChanges\" (ngModelChange)=\"applyFiltersPublic()\">\n <label class=\"form-check-label\" for=\"showSystem\">System</label>\n </div>\n </div>\n \n <div class=\"search-controls\">\n <input \n type=\"text\" \n class=\"form-control form-control-sm\" \n placeholder=\"Search changes...\"\n [ngModel]=\"searchTerm$.value\" (ngModelChange)=\"onSearchChange($event)\">\n </div>\n </div>\n \n <div class=\"toolbar-section\">\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"onSortDirectionChange()\" [title]=\"'Sort ' + (sortDirection === 'asc' ? 'descending' : 'ascending')\">\n <i class=\"fa-solid\" [class.fa-sort-up]=\"sortDirection === 'asc'\" [class.fa-sort-down]=\"sortDirection === 'desc'\"></i>\n Sort\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\" (click)=\"refreshHistory()\" [disabled]=\"isLoading\" title=\"Refresh history\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n \n <button type=\"button\" class=\"btn btn-sm btn-outline-info\" (click)=\"exportVersionHistory()\" title=\"Export history\">\n <i class=\"fa-solid fa-download\"></i>\n Export\n </button>\n </div>\n </div>\n </div>\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"loadingMessage\" size=\"large\"></mj-loading>\n </div>\n } @else {\n \n <!-- Timeline View -->\n @if (currentView === 'timeline') {\n <div class=\"timeline-container\">\n @if (versions.length > 0) {\n <div class=\"version-timeline\">\n @for (version of versions; track version.id; let i = $index) {\n <div class=\"timeline-item\" \n [class.selected]=\"selectedVersion?.id === version.id\"\n [class.active]=\"version.isActive\"\n (click)=\"onVersionSelect(version)\">\n \n <div class=\"timeline-marker\">\n <div class=\"marker-icon\" [class]=\"getChangeTypeClass(version.changeType)\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(version.changeType)\"></i>\n </div>\n @if (i < versions.length - 1) {\n <div class=\"timeline-line\"></div>\n }\n </div>\n \n <div class=\"timeline-content\">\n <div class=\"version-header\">\n <div class=\"version-info\">\n <h6 class=\"version-label\">{{ getVersionLabel(version) }}</h6>\n <div class=\"version-meta\">\n <span class=\"change-date\">{{ version.changedAt | date:'medium' }}</span>\n <span class=\"changed-by\">by {{ version.changedBy }}</span>\n <span class=\"change-source badge\" [class.badge-primary]=\"version.changeSource === 'Internal'\" [class.badge-secondary]=\"version.changeSource === 'External'\">\n {{ version.changeSource }}\n </span>\n </div>\n </div>\n \n <div class=\"version-actions\">\n @if (showComparison && i < versions.length - 1) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"$event.stopPropagation(); startComparison(version)\"\n title=\"Compare with next version\">\n <i class=\"fa-solid fa-code-compare\"></i>\n </button>\n }\n \n @if (showRestoreActions && version.canRestore) {\n <button \n type=\"button\" \n class=\"btn btn-sm btn-outline-success\"\n (click)=\"$event.stopPropagation(); onVersionRestore(version)\"\n title=\"Restore this version\">\n <i class=\"fa-solid fa-undo\"></i>\n </button>\n }\n </div>\n </div>\n \n <div class=\"version-description\">\n {{ version.changesDescription }}\n </div>\n \n @if (version.changesJSON && timelineConfig.showDiffs) {\n <div class=\"changes-summary\">\n <div class=\"changes-list\">\n @for (field of getObjectKeys(version.changesJSON); track field) {\n <div class=\"change-item\">\n <span class=\"field-name\">{{ getFieldDisplayNamePublic(field) }}</span>\n @if (version.changesJSON[field].oldValue !== undefined) {\n <span class=\"change-arrow\">\n <span class=\"old-value\">{{ formatChangeValue(version.changesJSON[field].oldValue) }}</span>\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n </span>\n } @else {\n <span class=\"new-value\">{{ formatChangeValue(version.changesJSON[field].newValue) }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-versions-message\">\n <i class=\"fa-solid fa-info-circle text-muted\"></i>\n <p class=\"text-muted\">No version history available for this prompt.</p>\n @if (prompt && !prompt.EntityInfo.TrackRecordChanges) {\n <p class=\"text-muted\"><small>Record changes tracking may not be enabled for prompts.</small></p>\n }\n </div>\n }\n </div>\n }\n \n <!-- Comparison View -->\n @if (currentView === 'comparison') {\n <div class=\"comparison-container\">\n <!-- Version selectors -->\n <div class=\"comparison-selectors\">\n <div class=\"selector-group\">\n <label class=\"form-label\">Compare from:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareFromVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n \n <div class=\"comparison-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n \n <div class=\"selector-group\">\n <label class=\"form-label\">Compare to:</label>\n <select class=\"form-select\" [(ngModel)]=\"compareToVersion\" (ngModelChange)=\"generateComparisonPublic()\">\n @for (version of versions; track version.id) {\n <option [ngValue]=\"version\">{{ getVersionLabel(version) }} - {{ version.changedAt | date:'short' }}</option>\n }\n </select>\n </div>\n </div>\n \n <!-- Comparison results -->\n @if (comparisonResult) {\n <div class=\"comparison-results\">\n <div class=\"comparison-header\">\n <h6 class=\"comparison-title\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Changes between {{ getVersionLabel(comparisonResult.fromVersion) }} and {{ getVersionLabel(comparisonResult.toVersion) }}\n </h6>\n <div class=\"changes-count\">\n {{ comparisonResult.differences.length }} change(s) found\n </div>\n </div>\n \n @if (comparisonResult.differences.length > 0) {\n <div class=\"differences-list\">\n @for (diff of comparisonResult.differences; track diff.fieldName) {\n <div class=\"difference-item\" [class]=\"'diff-' + diff.changeType\">\n <div class=\"diff-header\">\n <div class=\"field-info\">\n <strong class=\"field-name\">{{ diff.displayName }}</strong>\n <span class=\"change-type badge\" \n [class.badge-success]=\"diff.changeType === 'added'\"\n [class.badge-warning]=\"diff.changeType === 'modified'\"\n [class.badge-danger]=\"diff.changeType === 'removed'\">\n {{ diff.changeType }}\n </span>\n @if (diff.isTemplate) {\n <span class=\"template-badge badge badge-info\">Template</span>\n }\n </div>\n </div>\n \n <div class=\"diff-content\">\n @if (diff.changeType === 'modified') {\n <div class=\"side-by-side-diff\">\n <div class=\"diff-old\">\n <h6 class=\"diff-label\">Before:</h6>\n <div class=\"diff-value old-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.oldValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.oldValue) }}\n }\n </div>\n </div>\n \n <div class=\"diff-new\">\n <h6 class=\"diff-label\">After:</h6>\n <div class=\"diff-value new-value\">\n @if (diff.isTemplate && diff.fieldName === 'TemplateText') {\n <pre class=\"template-content\">{{ diff.newValue }}</pre>\n } @else {\n {{ formatChangeValue(diff.newValue) }}\n }\n </div>\n </div>\n </div>\n } @else if (diff.changeType === 'added') {\n <div class=\"diff-added\">\n <h6 class=\"diff-label\">Added:</h6>\n <div class=\"diff-value new-value\">{{ formatChangeValue(diff.newValue) }}</div>\n </div>\n } @else if (diff.changeType === 'removed') {\n <div class=\"diff-removed\">\n <h6 class=\"diff-label\">Removed:</h6>\n <div class=\"diff-value old-value\">{{ formatChangeValue(diff.oldValue) }}</div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"no-differences\">\n <i class=\"fa-solid fa-check-circle text-success\"></i>\n <p class=\"text-muted\">No differences found between the selected versions.</p>\n </div>\n }\n </div>\n }\n </div>\n }\n \n <!-- Details View -->\n @if (currentView === 'details') {\n <div class=\"details-container\">\n @if (selectedVersion) {\n <div class=\"version-details\">\n <div class=\"details-header\">\n <h6 class=\"details-title\">{{ getVersionLabel(selectedVersion) }}</h6>\n <div class=\"details-meta\">\n <span class=\"change-date\">{{ selectedVersion.changedAt | date:'full' }}</span>\n <span class=\"changed-by\">Changed by {{ selectedVersion.changedBy }}</span>\n </div>\n </div>\n \n <div class=\"details-content\">\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Change Information</h6>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Type:</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid\" [class]=\"getChangeTypeIcon(selectedVersion.changeType)\"></i>\n {{ selectedVersion.changeType }}\n </span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Source:</span>\n <span class=\"detail-value\">{{ selectedVersion.changeSource }}</span>\n </div>\n \n <div class=\"detail-item\">\n <span class=\"detail-label\">Description:</span>\n <span class=\"detail-value\">{{ selectedVersion.changesDescription }}</span>\n </div>\n </div>\n </div>\n \n @if (selectedVersion.fullRecordJSON) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Record State</h6>\n <div class=\"json-viewer\">\n <pre class=\"json-content\">{{ selectedVersion.fullRecordJSON | json }}</pre>\n </div>\n </div>\n }\n \n @if (selectedVersion.templateContent) {\n <div class=\"detail-section\">\n <h6 class=\"section-title\">Template Content</h6>\n <div class=\"template-viewer\">\n <pre class=\"template-content\">{{ selectedVersion.templateContent.TemplateText }}</pre>\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <div class=\"no-selection-message\">\n <i class=\"fa-solid fa-hand-pointer text-muted\"></i>\n <p class=\"text-muted\">Select a version from the timeline to view details.</p>\n </div>\n }\n </div>\n }\n }\n \n <!-- Error state -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"alert alert-danger\" role=\"alert\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger ms-2\" (click)=\"refreshHistory()\">\n <i class=\"fa-solid fa-refresh\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n }\n</div>", styles: [".prompt-version-control {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n}\n.prompt-version-control .version-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section {\n display: flex;\n align-items: center;\n gap: 1rem;\n flex-wrap: wrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title {\n margin: 0;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title i {\n color: var(--mj-brand-primary);\n}\n.prompt-version-control .version-toolbar .toolbar-section .toolbar-title .prompt-name {\n font-weight: 400;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-label,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-label {\n margin: 0;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-select,\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-control,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-select,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-control {\n min-width: 120px;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-check,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-check {\n margin: 0;\n}\n.prompt-version-control .version-toolbar .toolbar-section .filter-controls .form-check .form-check-label,\n.prompt-version-control .version-toolbar .toolbar-section .search-controls .form-check .form-check-label {\n font-size: 0.875rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .action-buttons {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control .version-toolbar .toolbar-section .action-buttons .btn {\n font-size: 0.875rem;\n}\n.prompt-version-control .loading-container {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.prompt-version-control .loading-container .loading-content {\n text-align: center;\n}\n.prompt-version-control .loading-container .loading-content .loading-message {\n margin-top: 1rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .timeline-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .timeline-container .version-timeline {\n max-width: 800px;\n margin: 0 auto;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item {\n display: flex;\n position: relative;\n margin-bottom: 2rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item:hover .timeline-content {\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item.selected .timeline-content {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item.active .timeline-marker .marker-icon {\n border-color: var(--mj-status-success);\n background-color: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-right: 1.5rem;\n flex-shrink: 0;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 3px solid;\n background: var(--mj-bg-surface);\n font-size: 1rem;\n z-index: 2;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-create {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-update {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon.change-delete {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .timeline-line {\n width: 2px;\n flex: 1;\n background: var(--mj-border-default);\n margin-top: 0.5rem;\n min-height: 2rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content {\n flex: 1;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n padding: 1.5rem;\n transition: all 0.2s ease;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 1rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-label {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta .change-date {\n font-weight: 500;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-info .version-meta .badge {\n font-size: 0.75rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions {\n display: flex;\n gap: 0.5rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.75rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-description {\n color: var(--mj-text-secondary);\n margin-bottom: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n background: var(--mj-bg-surface-card);\n border-radius: 0.375rem;\n margin-bottom: 0.5rem;\n font-size: 0.875rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .field-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin-right: 0.75rem;\n min-width: 100px;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow .old-value {\n color: var(--mj-status-error);\n text-decoration: line-through;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow .new-value {\n color: var(--mj-status-success);\n font-weight: 500;\n}\n.prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .changes-summary .changes-list .change-item .change-arrow i {\n color: var(--mj-text-muted);\n}\n.prompt-version-control .timeline-container .no-versions-message {\n text-align: center;\n padding: 3rem 1rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .timeline-container .no-versions-message i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control .timeline-container .no-versions-message p {\n margin: 0.5rem 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .comparison-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .comparison-container .comparison-selectors {\n display: flex;\n align-items: end;\n gap: 1rem;\n margin-bottom: 2rem;\n padding: 1rem;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n}\n.prompt-version-control .comparison-container .comparison-selectors .selector-group {\n flex: 1;\n}\n.prompt-version-control .comparison-container .comparison-selectors .selector-group .form-label {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n.prompt-version-control .comparison-container .comparison-selectors .comparison-arrow {\n padding-bottom: 0.375rem;\n color: var(--mj-text-muted);\n font-size: 1.25rem;\n}\n.prompt-version-control .comparison-container .comparison-results {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header .comparison-title {\n margin: 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .comparison-container .comparison-results .comparison-header .changes-count {\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item {\n border-bottom: 1px solid var(--mj-border-default);\n padding: 1.5rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item:last-child {\n border-bottom: none;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-added {\n border-left: 4px solid var(--mj-status-success);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-modified {\n border-left: 4px solid var(--mj-status-warning);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item.diff-removed {\n border-left: 4px solid var(--mj-status-error);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header {\n margin-bottom: 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .field-name {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .badge {\n font-size: 0.75rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-header .field-info .badge.template-badge {\n background-color: var(--mj-brand-primary-hover);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-label,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value.old-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value.old-value {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n color: var(--mj-status-error);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value.new-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value.new-value {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n color: var(--mj-color-success-700);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-old .diff-value .template-content,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff .diff-new .diff-value .template-content {\n margin: 0;\n background: transparent;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n white-space: pre-wrap;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-label,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-label {\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-value,\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-value {\n padding: 1rem;\n border-radius: 0.375rem;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-added .diff-value {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n color: var(--mj-color-success-700);\n}\n.prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .diff-removed .diff-value {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n color: var(--mj-status-error);\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences {\n text-align: center;\n padding: 3rem 1rem;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n}\n.prompt-version-control .comparison-container .comparison-results .no-differences p {\n margin: 0;\n font-size: 1rem;\n}\n.prompt-version-control .details-container {\n flex: 1;\n padding: 1rem;\n overflow-y: auto;\n}\n.prompt-version-control .details-container .version-details {\n max-width: 800px;\n margin: 0 auto;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.5rem;\n overflow: hidden;\n}\n.prompt-version-control .details-container .version-details .details-header {\n padding: 1.5rem;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n}\n.prompt-version-control .details-container .version-details .details-header .details-title {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n.prompt-version-control .details-container .version-details .details-header .details-meta {\n display: flex;\n gap: 1rem;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n flex-wrap: wrap;\n}\n.prompt-version-control .details-container .version-details .details-content {\n padding: 1.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section {\n margin-bottom: 2rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section:last-child {\n margin-bottom: 0;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .section-title {\n margin: 0 0 1rem 0;\n color: var(--mj-text-secondary);\n font-weight: 600;\n font-size: 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n padding-bottom: 0.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 1rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item .detail-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .detail-grid .detail-item .detail-value {\n font-size: 0.875rem;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.prompt-version-control .details-container .version-details .details-content .detail-section .json-viewer .json-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .json-viewer .template-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .template-viewer .json-content,\n.prompt-version-control .details-container .version-details .details-content .detail-section .template-viewer .template-content {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 0.375rem;\n padding: 1rem;\n margin: 0;\n font-family: \"Fira Code\", Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.5;\n overflow-x: auto;\n max-height: 400px;\n overflow-y: auto;\n}\n.prompt-version-control .details-container .no-selection-message {\n text-align: center;\n padding: 3rem 1rem;\n color: var(--mj-text-muted);\n}\n.prompt-version-control .details-container .no-selection-message i {\n font-size: 3rem;\n margin-bottom: 1rem;\n display: block;\n opacity: 0.5;\n}\n.prompt-version-control .details-container .no-selection-message p {\n margin: 0;\n font-size: 1rem;\n line-height: 1.5;\n}\n.prompt-version-control .error-container {\n padding: 1rem;\n}\n.prompt-version-control .error-container .alert {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n@media (max-width: 1200px) {\n .prompt-version-control .version-toolbar .toolbar-section {\n min-width: 100%;\n justify-content: space-between;\n }\n .prompt-version-control .comparison-container .comparison-selectors {\n flex-direction: column;\n align-items: stretch;\n }\n .prompt-version-control .comparison-container .comparison-selectors .comparison-arrow {\n align-self: center;\n padding: 0.5rem 0;\n }\n .prompt-version-control .comparison-container .comparison-results .differences-list .difference-item .diff-content .side-by-side-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n}\n@media (max-width: 768px) {\n .prompt-version-control .version-toolbar {\n padding: 0.75rem;\n }\n .prompt-version-control .version-toolbar .toolbar-section {\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n .prompt-version-control .timeline-container {\n padding: 0.75rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker {\n margin-right: 1rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-marker .marker-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content {\n padding: 1rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.75rem;\n }\n .prompt-version-control .timeline-container .version-timeline .timeline-item .timeline-content .version-header .version-actions {\n align-self: flex-end;\n }\n .prompt-version-control .comparison-container,\n .prompt-version-control .details-container {\n padding: 0.75rem;\n }\n .prompt-selector-section {\n padding: 2rem;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n margin: 1rem;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n .prompt-selector-section .section-title {\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section .section-title i {\n color: var(--mj-brand-primary);\n }\n .prompt-selector-section .prompt-selector .search-box .input-group-text {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-border-default);\n }\n .prompt-selector-section .prompt-selector .search-box .input-group-text i {\n color: var(--mj-text-muted);\n }\n .prompt-selector-section .prompt-selector .search-box .form-control {\n border-color: var(--mj-border-default);\n }\n .prompt-selector-section .prompt-selector .search-box .form-control:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 0.2rem color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n }\n .prompt-selector-section .prompt-selector .prompts-list {\n max-height: 400px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n }\n .prompt-selector-section .prompt-selector .prompts-list .empty-state {\n text-align: center;\n padding: 2rem;\n }\n .prompt-selector-section .prompt-selector .prompts-list .empty-state i {\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.75rem 1rem;\n border-bottom: 1px solid var(--mj-border-default);\n cursor: pointer;\n transition: background-color 0.2s;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:last-child {\n border-bottom: none;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:hover {\n background-color: var(--mj-bg-surface-card);\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info {\n flex: 1;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info .prompt-title {\n margin: 0 0 0.25rem 0;\n font-weight: 600;\n color: var(--mj-text-secondary);\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-info .prompt-description {\n margin: 0;\n font-size: 0.875rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item .prompt-actions {\n color: var(--mj-brand-primary);\n opacity: 0.7;\n transition: opacity 0.2s;\n }\n .prompt-selector-section .prompt-selector .prompts-list .prompt-item:hover .prompt-actions {\n opacity: 1;\n }\n}\n"] }]
|
|
1172
1172
|
}], () => [{ type: i1.MJNotificationService }], { prompt: [{
|
|
1173
1173
|
type: Input
|
|
1174
1174
|
}], autoLoad: [{
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Agent Requests Resource Component
|
|
3
|
+
*
|
|
4
|
+
* Dashboard resource for the AI application's "Requests" tab.
|
|
5
|
+
* Displays all agent feedback requests with filtering by status, priority,
|
|
6
|
+
* request type, and agent. Opens the generic agent-request-panel for
|
|
7
|
+
* viewing details and responding.
|
|
8
|
+
*/
|
|
9
|
+
import { ChangeDetectorRef, OnDestroy, AfterViewInit } from '@angular/core';
|
|
10
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
11
|
+
import { MJAIAgentRequestEntity, MJAIAgentRequestTypeEntity } from '@memberjunction/core-entities';
|
|
12
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
13
|
+
import { AgentRequestPanelResult } from '@memberjunction/ng-agent-requests';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
interface RequestFilter {
|
|
16
|
+
SearchTerm: string;
|
|
17
|
+
Status: string;
|
|
18
|
+
RequestType: string;
|
|
19
|
+
Priority: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class AgentRequestsResourceComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {
|
|
22
|
+
private cdr;
|
|
23
|
+
private readonly USER_SETTINGS_KEY;
|
|
24
|
+
private settingsPersistSubject;
|
|
25
|
+
private destroy$;
|
|
26
|
+
private settingsLoaded;
|
|
27
|
+
IsLoading: boolean;
|
|
28
|
+
Requests: MJAIAgentRequestEntity[];
|
|
29
|
+
FilteredRequests: MJAIAgentRequestEntity[];
|
|
30
|
+
RequestTypes: MJAIAgentRequestTypeEntity[];
|
|
31
|
+
SelectedRequest: MJAIAgentRequestEntity | null;
|
|
32
|
+
ShowRequestPanel: boolean;
|
|
33
|
+
Filters: RequestFilter;
|
|
34
|
+
StatusOptions: string[];
|
|
35
|
+
PriorityOptions: {
|
|
36
|
+
Label: string;
|
|
37
|
+
Value: string;
|
|
38
|
+
}[];
|
|
39
|
+
private searchSubject;
|
|
40
|
+
constructor(cdr: ChangeDetectorRef);
|
|
41
|
+
ngAfterViewInit(): Promise<void>;
|
|
42
|
+
ngOnDestroy(): void;
|
|
43
|
+
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
44
|
+
GetResourceIconClass(data: ResourceData): Promise<string>;
|
|
45
|
+
/** Count of pending (Requested) items */
|
|
46
|
+
get PendingCount(): number;
|
|
47
|
+
/** Open the detail panel for a request */
|
|
48
|
+
OnRequestClick(request: MJAIAgentRequestEntity): void;
|
|
49
|
+
/** Handle panel close */
|
|
50
|
+
OnPanelClose(result: AgentRequestPanelResult): void;
|
|
51
|
+
/** Handle search input */
|
|
52
|
+
OnSearchChange(term: string): void;
|
|
53
|
+
/** Handle filter changes */
|
|
54
|
+
OnFilterChange(): void;
|
|
55
|
+
/** Clear all filters */
|
|
56
|
+
ClearFilters(): void;
|
|
57
|
+
/** Get the request type name by ID */
|
|
58
|
+
GetRequestTypeName(typeId: string | null): string;
|
|
59
|
+
/** Get the request type icon by ID */
|
|
60
|
+
GetRequestTypeIcon(typeId: string | null): string;
|
|
61
|
+
/** Get priority label from numeric value */
|
|
62
|
+
GetPriorityLabel(priority: number): string;
|
|
63
|
+
/** Get priority CSS class from numeric value */
|
|
64
|
+
GetPriorityClass(priority: number): string;
|
|
65
|
+
/** Whether a request is expired */
|
|
66
|
+
IsExpired(request: MJAIAgentRequestEntity): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* If a requestId was passed via configuration (e.g. from a notification click),
|
|
69
|
+
* auto-open that request in the detail panel.
|
|
70
|
+
*/
|
|
71
|
+
private autoOpenRequestFromQueryParams;
|
|
72
|
+
private loadData;
|
|
73
|
+
private applyFilters;
|
|
74
|
+
private setupSearchDebounce;
|
|
75
|
+
private loadUserSettings;
|
|
76
|
+
private saveUserSettings;
|
|
77
|
+
private persistUserSettings;
|
|
78
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AgentRequestsResourceComponent, never>;
|
|
79
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AgentRequestsResourceComponent, "app-agent-requests-resource", never, {}, {}, never, never, false, never>;
|
|
80
|
+
}
|
|
81
|
+
export declare function LoadAgentRequestsResource(): void;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=agent-requests-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-requests-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/AI/components/requests/agent-requests-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAa,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAIvF,OAAO,EAAE,YAAY,EAAkB,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;;AAE5E,UAAU,aAAa;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAWD,qBAOa,8BAA+B,SAAQ,qBAAsB,YAAW,aAAa,EAAE,SAAS;IAkC7F,OAAO,CAAC,GAAG;IAjCvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsC;IACxE,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAS;IAExB,SAAS,UAAS;IAClB,QAAQ,EAAE,sBAAsB,EAAE,CAAM;IACxC,gBAAgB,EAAE,sBAAsB,EAAE,CAAM;IAChD,YAAY,EAAE,0BAA0B,EAAE,CAAM;IAGhD,eAAe,EAAE,sBAAsB,GAAG,IAAI,CAAQ;IACtD,gBAAgB,UAAS;IAGzB,OAAO,EAAE,aAAa,CAK3B;IAGK,aAAa,WAA6E;IAC1F,eAAe;;;QAKpB;IAEF,OAAO,CAAC,aAAa,CAAyB;gBAE1B,GAAG,EAAE,iBAAiB;IAIpC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtC,WAAW,IAAI,IAAI;IAKb,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D,yCAAyC;IACzC,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,0CAA0C;IACnC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAM5D,yBAAyB;IAClB,YAAY,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAW1D,0BAA0B;IACnB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzC,4BAA4B;IACrB,cAAc,IAAI,IAAI;IAK7B,wBAAwB;IACjB,YAAY,IAAI,IAAI;IAM3B,sCAAsC;IAC/B,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAMxD,sCAAsC;IAC/B,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAMxD,4CAA4C;IACrC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOjD,gDAAgD;IACzC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOjD,mCAAmC;IAC5B,SAAS,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO;IAO1D;;;OAGG;IACH,OAAO,CAAC,8BAA8B;YAWxB,QAAQ;IAmCtB,OAAO,CAAC,YAAY;IA2CpB,OAAO,CAAC,mBAAmB;YAgBb,gBAAgB;IAe9B,OAAO,CAAC,gBAAgB;YAMV,mBAAmB;yCA7QxB,8BAA8B;2CAA9B,8BAA8B;CA4R1C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|