@memberjunction/ng-dashboards 5.10.1 → 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.
Files changed (231) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +34 -2
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +586 -223
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +8 -0
  7. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-filter-panel.component.js +85 -52
  9. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  10. package/dist/AI/components/charts/performance-heatmap.component.d.ts +1 -0
  11. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  12. package/dist/AI/components/charts/performance-heatmap.component.js +27 -5
  13. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  14. package/dist/AI/components/charts/time-series-chart.component.d.ts +5 -0
  15. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.js +23 -8
  17. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  18. package/dist/AI/components/execution-monitoring.component.js +2 -2
  19. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  20. package/dist/AI/components/models/model-management.component.js +2 -2
  21. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  22. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  23. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  24. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-version-control.component.js +2 -2
  26. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +83 -0
  27. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -0
  28. package/dist/AI/components/requests/agent-requests-resource.component.js +547 -0
  29. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -0
  30. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  31. package/dist/AI/components/system/system-configuration.component.js +2 -2
  32. package/dist/AI/components/widgets/kpi-card.component.js +7 -7
  33. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  34. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  35. package/dist/AI/components/widgets/live-execution-widget.component.js +6 -6
  36. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  37. package/dist/AI/index.d.ts +1 -0
  38. package/dist/AI/index.d.ts.map +1 -1
  39. package/dist/AI/index.js +2 -0
  40. package/dist/AI/index.js.map +1 -1
  41. package/dist/APIKeys/api-applications-panel.component.js +3 -3
  42. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  43. package/dist/APIKeys/api-key-create-dialog.component.js +3 -3
  44. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  45. package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
  46. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  47. package/dist/APIKeys/api-key-list.component.js +3 -3
  48. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  49. package/dist/APIKeys/api-keys-resource.component.js +1 -1
  50. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  51. package/dist/APIKeys/api-scopes-panel.component.js +2 -2
  52. package/dist/APIKeys/api-usage-panel.component.js +2 -2
  53. package/dist/Actions/components/actions-overview.component.js +2 -2
  54. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  55. package/dist/Actions/components/explorer/action-breadcrumb.component.js +2 -2
  56. package/dist/Actions/components/explorer/action-card.component.js +2 -2
  57. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  58. package/dist/Actions/components/explorer/action-list-item.component.js +2 -2
  59. package/dist/Actions/components/explorer/action-toolbar.component.js +2 -2
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +2 -2
  61. package/dist/Actions/components/explorer/new-action-panel.component.js +2 -2
  62. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  63. package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
  64. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  65. package/dist/Communication/communication-dashboard.component.js +2 -2
  66. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  67. package/dist/Communication/communication-logs-resource.component.js +3 -3
  68. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  69. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  70. package/dist/Communication/communication-monitor-resource.component.js +5 -5
  71. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  72. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  73. package/dist/Communication/communication-providers-resource.component.js +3 -3
  74. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  75. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  76. package/dist/Communication/communication-runs-resource.component.js +3 -3
  77. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  78. package/dist/Communication/communication-templates-resource.component.js +2 -2
  79. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  80. package/dist/ComponentStudio/component-studio-dashboard.component.js +2 -2
  81. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
  82. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
  83. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
  84. package/dist/ComponentStudio/components/browser/component-browser.component.js +2 -2
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +2 -2
  86. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +2 -2
  88. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +2 -2
  90. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js +2 -2
  92. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +2 -2
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +2 -2
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  96. package/dist/ComponentStudio/components/text-import-dialog.component.js +2 -2
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  98. package/dist/ComponentStudio/components/workspace/component-preview.component.js +2 -2
  99. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +2 -2
  100. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-audit-resource.component.js +9 -9
  102. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +11 -3
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.js +2 -2
  107. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-overview-resource.component.js +12 -11
  109. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-types-resource.component.js +9 -9
  111. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  112. package/dist/Credentials/credentials-dashboard.component.js +2 -2
  113. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +2 -2
  114. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
  115. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  116. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +2 -2
  117. package/dist/DataExplorer/components/view-selector/view-selector.component.js +2 -2
  118. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +6 -2
  119. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  120. package/dist/DataExplorer/data-explorer-dashboard.component.js +26 -8
  121. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  122. package/dist/Home/home-dashboard.component.js +2 -2
  123. package/dist/Integration/components/activity/activity.component.d.ts +1 -1
  124. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  125. package/dist/Integration/components/activity/activity.component.js +5 -5
  126. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  127. package/dist/Integration/components/connections/connections.component.d.ts +31 -2
  128. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  129. package/dist/Integration/components/connections/connections.component.js +753 -412
  130. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  131. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -3
  132. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  133. package/dist/Integration/components/overview/overview.component.d.ts +0 -1
  134. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  135. package/dist/Integration/components/overview/overview.component.js +3 -6
  136. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  137. package/dist/Integration/components/pipelines/pipelines.component.js +3 -3
  138. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  139. package/dist/Integration/components/schedules/schedules.component.d.ts +20 -0
  140. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  141. package/dist/Integration/components/schedules/schedules.component.js +97 -5
  142. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  143. package/dist/Integration/components/visual-editor/visual-editor.component.js +2 -2
  144. package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
  145. package/dist/Integration/components/widgets/integration-card.component.js +5 -1
  146. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  147. package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
  148. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  149. package/dist/Integration/integration.module.d.ts +2 -1
  150. package/dist/Integration/integration.module.d.ts.map +1 -1
  151. package/dist/Integration/integration.module.js +7 -3
  152. package/dist/Integration/integration.module.js.map +1 -1
  153. package/dist/Integration/services/integration-data.service.d.ts +27 -2
  154. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  155. package/dist/Integration/services/integration-data.service.js +107 -4
  156. package/dist/Integration/services/integration-data.service.js.map +1 -1
  157. package/dist/Lists/components/lists-browse-resource.component.js +2 -2
  158. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  159. package/dist/Lists/components/lists-categories-resource.component.js +2 -2
  160. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  161. package/dist/Lists/components/lists-my-lists-resource.component.js +2 -2
  162. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  163. package/dist/Lists/components/lists-operations-resource.component.js +2 -2
  164. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  165. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +3 -3
  166. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  167. package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
  168. package/dist/MCP/components/mcp-log-detail-panel.component.js +2 -2
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  170. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  171. package/dist/MCP/components/mcp-test-tool-dialog.component.js +2 -2
  172. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  173. package/dist/MCP/mcp-dashboard.component.js +2 -2
  174. package/dist/MCP/mcp-filter-panel.component.js +2 -2
  175. package/dist/QueryBrowser/query-browser-resource.component.d.ts +55 -1
  176. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  177. package/dist/QueryBrowser/query-browser-resource.component.js +664 -199
  178. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  179. package/dist/Scheduling/components/index.d.ts +0 -1
  180. package/dist/Scheduling/components/index.d.ts.map +1 -1
  181. package/dist/Scheduling/components/index.js +0 -1
  182. package/dist/Scheduling/components/index.js.map +1 -1
  183. package/dist/Scheduling/components/scheduling-activity.component.js +2 -2
  184. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +6 -9
  185. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  186. package/dist/Scheduling/components/scheduling-jobs.component.js +118 -110
  187. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  188. package/dist/Scheduling/components/scheduling-overview.component.js +3 -3
  189. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  190. package/dist/Scheduling/scheduling-dashboard.component.js +2 -2
  191. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
  192. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  193. package/dist/Testing/components/testing-analytics.component.js +2 -2
  194. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  195. package/dist/Testing/components/testing-dashboard-tab.component.js +4 -4
  196. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  197. package/dist/Testing/components/testing-explorer.component.js +2 -2
  198. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  199. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  200. package/dist/Testing/components/testing-review.component.js +5 -5
  201. package/dist/Testing/components/testing-review.component.js.map +1 -1
  202. package/dist/Testing/components/testing-runs.component.js +2 -2
  203. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  204. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +2 -2
  205. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  206. package/dist/Testing/components/widgets/suite-tree.component.js +4 -4
  207. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  208. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +2 -2
  209. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  210. package/dist/Testing/testing-dashboard.component.js +2 -2
  211. package/dist/VersionHistory/components/diff-resource.component.js +2 -2
  212. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  213. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  214. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  215. package/dist/VersionHistory/components/restore-resource.component.js +3 -3
  216. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  217. package/dist/__tests__/integration-data-service.test.js +1 -0
  218. package/dist/__tests__/integration-data-service.test.js.map +1 -1
  219. package/dist/module.d.ts +52 -49
  220. package/dist/module.d.ts.map +1 -1
  221. package/dist/module.js +25 -6
  222. package/dist/module.js.map +1 -1
  223. package/dist/public-api.d.ts +1 -1
  224. package/dist/public-api.d.ts.map +1 -1
  225. package/dist/public-api.js +1 -1
  226. package/dist/public-api.js.map +1 -1
  227. package/package.json +42 -40
  228. package/dist/Scheduling/components/job-slideout.component.d.ts +0 -45
  229. package/dist/Scheduling/components/job-slideout.component.d.ts.map +0 -1
  230. package/dist/Scheduling/components/job-slideout.component.js +0 -459
  231. 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"}