@memberjunction/ng-dashboards 5.34.1 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +399 -292
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
  6. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  7. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +87 -85
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  9. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +75 -0
  10. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  11. package/dist/AI/components/analytics/ai-analytics-resource.component.js +400 -89
  12. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  13. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
  14. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
  15. package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
  16. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
  17. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
  18. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  19. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +104 -103
  20. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  21. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +8 -2
  22. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  23. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +76 -74
  24. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  25. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
  27. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +12 -19
  29. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/model-performance/model-performance.component.js +96 -203
  31. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  33. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
  34. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
  37. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +990 -992
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  41. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  45. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  46. package/dist/AI/components/models/model-management.component.js +370 -425
  47. package/dist/AI/components/models/model-management.component.js.map +1 -1
  48. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  49. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  51. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  52. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  53. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  55. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  56. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  57. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.js +403 -362
  59. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  60. package/dist/AI/components/tags/tags-resource.component.js +781 -783
  61. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  62. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  67. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  68. package/dist/Actions/components/actions-overview.component.js +79 -30
  69. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  70. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  71. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  72. package/dist/Actions/components/execution-monitoring.component.js +196 -142
  73. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  74. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  75. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  76. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  77. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  78. package/dist/Actions/components/explorer/index.d.ts +0 -1
  79. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  80. package/dist/Actions/components/explorer/index.js +0 -1
  81. package/dist/Actions/components/explorer/index.js.map +1 -1
  82. package/dist/Admin/admin-data-schema.component.js +32 -40
  83. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  84. package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
  85. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  86. package/dist/Admin/admin-identity-access.component.js +32 -40
  87. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  88. package/dist/Admin/admin-monitoring.component.js +32 -40
  89. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  90. package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
  91. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  92. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  93. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  94. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  95. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  96. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  97. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  98. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  99. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  100. package/dist/Communication/communication-logs-resource.component.js +80 -99
  101. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  102. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  103. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  104. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  105. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  106. package/dist/Communication/communication-providers-resource.component.js +44 -45
  107. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  108. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  109. package/dist/Communication/communication-runs-resource.component.js +60 -58
  110. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  111. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  112. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  113. package/dist/Communication/communication-templates-resource.component.js +139 -162
  114. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  115. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  116. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  117. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  118. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  119. package/dist/Credentials/components/credentials-categories-resource.component.js +245 -266
  120. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  121. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  122. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  123. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  124. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  125. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  126. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  127. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  128. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  129. package/dist/Credentials/components/credentials-types-resource.component.js +294 -305
  130. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  131. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  132. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  133. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +21 -0
  134. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  135. package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
  136. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  137. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  138. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  139. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +19 -1
  140. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  141. package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -16
  142. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  143. package/dist/Home/home-dashboard.component.d.ts +6 -0
  144. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  145. package/dist/Home/home-dashboard.component.js +521 -485
  146. package/dist/Home/home-dashboard.component.js.map +1 -1
  147. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  148. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  149. package/dist/Integration/components/activity/activity.component.js +309 -318
  150. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  151. package/dist/Integration/components/connections/connections.component.js +866 -847
  152. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  153. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  154. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  155. package/dist/Integration/components/overview/overview.component.js +182 -163
  156. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  157. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  158. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  159. package/dist/Integration/components/pipelines/pipelines.component.js +610 -606
  160. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  161. package/dist/Integration/components/schedules/schedules.component.js +241 -241
  162. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  163. package/dist/Integration/integration.module.d.ts +1 -1
  164. package/dist/Integration/integration.module.d.ts.map +1 -1
  165. package/dist/Integration/integration.module.js +28 -1
  166. package/dist/Integration/integration.module.js.map +1 -1
  167. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +673 -674
  168. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  169. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  170. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  171. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +745 -703
  172. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  173. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  174. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  175. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  176. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  177. package/dist/Lists/components/lists-browse-resource.component.d.ts +18 -1
  178. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  179. package/dist/Lists/components/lists-browse-resource.component.js +486 -532
  180. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  181. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  182. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  183. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  184. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  185. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  186. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  187. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  188. package/dist/Lists/components/lists-operations-resource.component.js +234 -246
  189. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  190. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  191. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  192. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  193. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  194. package/dist/MCP/mcp.module.d.ts +1 -1
  195. package/dist/MCP/mcp.module.d.ts.map +1 -1
  196. package/dist/MCP/mcp.module.js +34 -1
  197. package/dist/MCP/mcp.module.js.map +1 -1
  198. package/dist/Permissions/audit-log-resource.component.js +76 -85
  199. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  200. package/dist/Permissions/resource-access-resource.component.js +64 -69
  201. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  202. package/dist/Permissions/user-access-resource.component.js +63 -74
  203. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  204. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  205. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  206. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  207. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  208. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  209. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  210. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  211. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  212. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  213. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  214. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  215. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  216. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  217. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  218. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  219. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  220. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  221. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  222. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  223. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  224. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  225. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  226. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  227. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  228. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  229. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  230. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  231. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  232. package/dist/Scheduling/scheduling-dashboard.component.js +262 -104
  233. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  234. package/dist/SystemDiagnostics/system-diagnostics.component.js +773 -783
  235. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  236. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  237. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  238. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  239. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  240. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  241. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  242. package/dist/Testing/components/testing-analytics.component.js +420 -393
  243. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  244. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  245. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  246. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  247. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  248. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  249. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  250. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  251. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  252. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  253. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  254. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  255. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  256. package/dist/Testing/components/testing-explorer.component.d.ts +8 -1
  257. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  258. package/dist/Testing/components/testing-explorer.component.js +587 -608
  259. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  260. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  261. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  262. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  263. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  264. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  265. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  266. package/dist/Testing/components/testing-review.component.js +310 -274
  267. package/dist/Testing/components/testing-review.component.js.map +1 -1
  268. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  269. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  270. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  271. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  272. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  273. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  274. package/dist/Testing/components/testing-runs.component.js +307 -273
  275. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  276. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  277. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  278. package/dist/Testing/testing-dashboard.component.js +107 -93
  279. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  280. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  281. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  282. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  283. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  284. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  285. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  286. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  287. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  288. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  289. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  290. package/dist/actions-dashboards.module.d.ts +15 -16
  291. package/dist/actions-dashboards.module.d.ts.map +1 -1
  292. package/dist/actions-dashboards.module.js +34 -11
  293. package/dist/actions-dashboards.module.js.map +1 -1
  294. package/dist/ai-dashboards.module.d.ts +45 -48
  295. package/dist/ai-dashboards.module.d.ts.map +1 -1
  296. package/dist/ai-dashboards.module.js +36 -10
  297. package/dist/ai-dashboards.module.js.map +1 -1
  298. package/dist/archiving-dashboards.module.d.ts +2 -1
  299. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  300. package/dist/archiving-dashboards.module.js +12 -2
  301. package/dist/archiving-dashboards.module.js.map +1 -1
  302. package/dist/communication-dashboards.module.d.ts +2 -1
  303. package/dist/communication-dashboards.module.d.ts.map +1 -1
  304. package/dist/communication-dashboards.module.js +24 -3
  305. package/dist/communication-dashboards.module.js.map +1 -1
  306. package/dist/core-dashboards.module.d.ts +1 -1
  307. package/dist/core-dashboards.module.d.ts.map +1 -1
  308. package/dist/core-dashboards.module.js +31 -1
  309. package/dist/core-dashboards.module.js.map +1 -1
  310. package/dist/credentials-dashboards.module.d.ts +1 -1
  311. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  312. package/dist/credentials-dashboards.module.js +28 -1
  313. package/dist/credentials-dashboards.module.js.map +1 -1
  314. package/dist/lists-dashboards.module.d.ts +1 -1
  315. package/dist/lists-dashboards.module.d.ts.map +1 -1
  316. package/dist/lists-dashboards.module.js +28 -1
  317. package/dist/lists-dashboards.module.js.map +1 -1
  318. package/dist/public-api.d.ts +2 -2
  319. package/dist/public-api.d.ts.map +1 -1
  320. package/dist/public-api.js +3 -3
  321. package/dist/public-api.js.map +1 -1
  322. package/dist/scheduling-dashboards.module.d.ts +1 -1
  323. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  324. package/dist/scheduling-dashboards.module.js +31 -1
  325. package/dist/scheduling-dashboards.module.js.map +1 -1
  326. package/dist/testing-dashboards.module.d.ts +8 -7
  327. package/dist/testing-dashboards.module.d.ts.map +1 -1
  328. package/dist/testing-dashboards.module.js +30 -0
  329. package/dist/testing-dashboards.module.js.map +1 -1
  330. package/package.json +52 -52
  331. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  332. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  333. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  334. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  335. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  336. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  337. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  338. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  339. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  340. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  341. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  342. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  343. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  344. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  345. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  346. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -23,701 +23,725 @@ import * as i0 from "@angular/core";
23
23
  import * as i1 from "@angular/forms";
24
24
  import * as i2 from "@memberjunction/ng-shared-generic";
25
25
  import * as i3 from "@memberjunction/ng-search";
26
- import * as i4 from "../scheduling/scheduling-resource.component";
27
- import * as i5 from "@angular/common";
26
+ import * as i4 from "@memberjunction/ng-ui-components";
27
+ import * as i5 from "../scheduling/scheduling-resource.component";
28
+ import * as i6 from "@angular/common";
28
29
  const _forTrack0 = ($index, $item) => $item.ID;
29
30
  const _forTrack1 = ($index, $item) => $item.EntityName;
30
31
  const _forTrack2 = ($index, $item) => $item.ScopeID;
31
32
  const _forTrack3 = ($index, $item) => $item.Reranker;
32
33
  const _forTrack4 = ($index, $item) => $item.Reason;
33
- function KnowledgeConfigResourceComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
34
- i0.ɵɵelementStart(0, "div", 0);
35
- i0.ɵɵelement(1, "mj-loading", 2);
36
- i0.ɵɵelementEnd();
34
+ function KnowledgeConfigResourceComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
35
+ i0.ɵɵelement(0, "mj-stat-badge", 2);
37
36
  } }
38
- function KnowledgeConfigResourceComponent_Conditional_1_For_7_Template(rf, ctx) { if (rf & 1) {
37
+ function KnowledgeConfigResourceComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
39
38
  const _r1 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "button", 11);
41
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_For_7_Template_button_click_0_listener() { const section_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SelectSection(section_r2.ID)); });
39
+ i0.ɵɵelementStart(0, "button", 7);
40
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ResetConfiguration()); });
41
+ i0.ɵɵelement(1, "i", 8);
42
+ i0.ɵɵtext(2, " Reset ");
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵelementStart(3, "button", 9);
45
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_5_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SaveConfiguration()); });
46
+ i0.ɵɵelement(4, "i", 10);
47
+ i0.ɵɵtext(5);
48
+ i0.ɵɵelementEnd();
49
+ } if (rf & 2) {
50
+ const ctx_r1 = i0.ɵɵnextContext();
51
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
52
+ i0.ɵɵadvance(3);
53
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
54
+ i0.ɵɵadvance(2);
55
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.IsSaving ? "Saving\u2026" : "Save", " ");
56
+ } }
57
+ function KnowledgeConfigResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "div", 5);
59
+ i0.ɵɵelement(1, "mj-loading", 11);
60
+ i0.ɵɵelementEnd();
61
+ } }
62
+ function KnowledgeConfigResourceComponent_Conditional_8_For_7_Template(rf, ctx) { if (rf & 1) {
63
+ const _r3 = i0.ɵɵgetCurrentView();
64
+ i0.ɵɵelementStart(0, "button", 20);
65
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_For_7_Template_button_click_0_listener() { const section_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SelectSection(section_r4.ID)); });
42
66
  i0.ɵɵelement(1, "i");
43
67
  i0.ɵɵelementStart(2, "span");
44
68
  i0.ɵɵtext(3);
45
69
  i0.ɵɵelementEnd()();
46
70
  } if (rf & 2) {
47
- const section_r2 = ctx.$implicit;
48
- const ctx_r2 = i0.ɵɵnextContext(2);
49
- i0.ɵɵclassProp("config-nav-item-active", ctx_r2.ActiveSection === section_r2.ID);
71
+ const section_r4 = ctx.$implicit;
72
+ const ctx_r1 = i0.ɵɵnextContext(2);
73
+ i0.ɵɵclassProp("config-nav-item-active", ctx_r1.ActiveSection === section_r4.ID);
50
74
  i0.ɵɵadvance();
51
- i0.ɵɵclassMap(section_r2.Icon);
75
+ i0.ɵɵclassMap(section_r4.Icon);
52
76
  i0.ɵɵadvance(2);
53
- i0.ɵɵtextInterpolate(section_r2.Label);
77
+ i0.ɵɵtextInterpolate(section_r4.Label);
54
78
  } }
55
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
56
- const _r4 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
79
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template(rf, ctx) { if (rf & 1) {
80
+ const _r5 = i0.ɵɵgetCurrentView();
81
+ i0.ɵɵelementStart(0, "div", 17)(1, "h2", 21);
58
82
  i0.ɵɵtext(2, "Pipeline Settings");
59
83
  i0.ɵɵelementEnd();
60
- i0.ɵɵelementStart(3, "p", 13);
84
+ i0.ɵɵelementStart(3, "p", 22);
61
85
  i0.ɵɵtext(4, "Configure how the Knowledge Pipeline processes incoming content.");
62
86
  i0.ɵɵelementEnd();
63
- i0.ɵɵelementStart(5, "div", 14)(6, "label", 15)(7, "div", 16)(8, "span", 17);
87
+ i0.ɵɵelementStart(5, "div", 23)(6, "label", 24)(7, "div", 25)(8, "span", 26);
64
88
  i0.ɵɵtext(9, "Auto-tag on Ingest");
65
89
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(10, "span", 18);
90
+ i0.ɵɵelementStart(10, "span", 27);
67
91
  i0.ɵɵtext(11, "Automatically run autotagging when new content is ingested");
68
92
  i0.ɵɵelementEnd()();
69
- i0.ɵɵelementStart(12, "input", 19);
70
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.PipelineSettings.AutotagOnIngest, $event) || (ctx_r2.PipelineSettings.AutotagOnIngest = $event); return i0.ɵɵresetView($event); });
71
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_change_12_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
93
+ i0.ɵɵelementStart(12, "input", 28);
94
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.AutotagOnIngest, $event) || (ctx_r1.PipelineSettings.AutotagOnIngest = $event); return i0.ɵɵresetView($event); });
95
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_change_12_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
72
96
  i0.ɵɵelementEnd()();
73
- i0.ɵɵelementStart(13, "label", 15)(14, "div", 16)(15, "span", 17);
97
+ i0.ɵɵelementStart(13, "label", 24)(14, "div", 25)(15, "span", 26);
74
98
  i0.ɵɵtext(16, "Vectorize on Ingest");
75
99
  i0.ɵɵelementEnd();
76
- i0.ɵɵelementStart(17, "span", 18);
100
+ i0.ɵɵelementStart(17, "span", 27);
77
101
  i0.ɵɵtext(18, "Automatically create embeddings for new content");
78
102
  i0.ɵɵelementEnd()();
79
- i0.ɵɵelementStart(19, "input", 19);
80
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_ngModelChange_19_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.PipelineSettings.VectorizeOnIngest, $event) || (ctx_r2.PipelineSettings.VectorizeOnIngest = $event); return i0.ɵɵresetView($event); });
81
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_change_19_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
103
+ i0.ɵɵelementStart(19, "input", 28);
104
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_19_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.VectorizeOnIngest, $event) || (ctx_r1.PipelineSettings.VectorizeOnIngest = $event); return i0.ɵɵresetView($event); });
105
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_change_19_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
82
106
  i0.ɵɵelementEnd()();
83
- i0.ɵɵelementStart(20, "div", 20)(21, "div", 21)(22, "span", 17);
107
+ i0.ɵɵelementStart(20, "div", 29)(21, "div", 30)(22, "span", 26);
84
108
  i0.ɵɵtext(23, "Default Batch Size");
85
109
  i0.ɵɵelementEnd();
86
- i0.ɵɵelementStart(24, "span", 18);
110
+ i0.ɵɵelementStart(24, "span", 27);
87
111
  i0.ɵɵtext(25, "Number of items processed per batch");
88
112
  i0.ɵɵelementEnd()();
89
- i0.ɵɵelementStart(26, "input", 22);
90
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.PipelineSettings.DefaultBatchSize, $event) || (ctx_r2.PipelineSettings.DefaultBatchSize = $event); return i0.ɵɵresetView($event); });
91
- i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_input_26_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
113
+ i0.ɵɵelementStart(26, "input", 31);
114
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.DefaultBatchSize, $event) || (ctx_r1.PipelineSettings.DefaultBatchSize = $event); return i0.ɵɵresetView($event); });
115
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_input_26_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
92
116
  i0.ɵɵelementEnd()();
93
- i0.ɵɵelementStart(27, "div", 20)(28, "div", 21)(29, "span", 17);
117
+ i0.ɵɵelementStart(27, "div", 29)(28, "div", 30)(29, "span", 26);
94
118
  i0.ɵɵtext(30, "Max Concurrent Jobs");
95
119
  i0.ɵɵelementEnd();
96
- i0.ɵɵelementStart(31, "span", 18);
120
+ i0.ɵɵelementStart(31, "span", 27);
97
121
  i0.ɵɵtext(32, "Maximum number of pipeline jobs running at once");
98
122
  i0.ɵɵelementEnd()();
99
- i0.ɵɵelementStart(33, "input", 23);
100
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_ngModelChange_33_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.PipelineSettings.MaxConcurrentJobs, $event) || (ctx_r2.PipelineSettings.MaxConcurrentJobs = $event); return i0.ɵɵresetView($event); });
101
- i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template_input_input_33_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
123
+ i0.ɵɵelementStart(33, "input", 32);
124
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_33_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.MaxConcurrentJobs, $event) || (ctx_r1.PipelineSettings.MaxConcurrentJobs = $event); return i0.ɵɵresetView($event); });
125
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_input_33_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
102
126
  i0.ɵɵelementEnd()()()();
103
127
  } if (rf & 2) {
104
- const ctx_r2 = i0.ɵɵnextContext(2);
128
+ const ctx_r1 = i0.ɵɵnextContext(2);
105
129
  i0.ɵɵadvance(12);
106
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.AutotagOnIngest);
130
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.AutotagOnIngest);
107
131
  i0.ɵɵadvance(7);
108
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.VectorizeOnIngest);
132
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.VectorizeOnIngest);
109
133
  i0.ɵɵadvance(7);
110
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.DefaultBatchSize);
134
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.DefaultBatchSize);
111
135
  i0.ɵɵadvance(7);
112
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.MaxConcurrentJobs);
136
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.MaxConcurrentJobs);
113
137
  } }
114
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_16_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelement(0, "i", 33);
138
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_16_Template(rf, ctx) { if (rf & 1) {
139
+ i0.ɵɵelement(0, "i", 42);
116
140
  } }
117
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_17_Template(rf, ctx) { if (rf & 1) {
118
- i0.ɵɵelementStart(0, "span", 34);
141
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_17_Template(rf, ctx) { if (rf & 1) {
142
+ i0.ɵɵelementStart(0, "span", 43);
119
143
  i0.ɵɵtext(1, "1");
120
144
  i0.ɵɵelementEnd();
121
145
  } }
122
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_21_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelementStart(0, "span", 37);
146
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_21_Template(rf, ctx) { if (rf & 1) {
147
+ i0.ɵɵelementStart(0, "span", 46);
124
148
  i0.ɵɵtext(1);
125
149
  i0.ɵɵelementEnd();
126
150
  } if (rf & 2) {
127
- const ctx_r2 = i0.ɵɵnextContext(3);
151
+ const ctx_r1 = i0.ɵɵnextContext(3);
128
152
  i0.ɵɵadvance();
129
- i0.ɵɵtextInterpolate1("", ctx_r2.VectorDBProviders.length, " provider(s) registered");
153
+ i0.ɵɵtextInterpolate1("", ctx_r1.VectorDBProviders.length, " provider(s) registered");
130
154
  } }
131
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_22_Template(rf, ctx) { if (rf & 1) {
132
- i0.ɵɵelementStart(0, "span", 37);
155
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_22_Template(rf, ctx) { if (rf & 1) {
156
+ i0.ɵɵelementStart(0, "span", 46);
133
157
  i0.ɵɵtext(1, "No providers registered. Add a vector database provider (e.g., Pinecone, Weaviate) via the admin console.");
134
158
  i0.ɵɵelementEnd();
135
159
  } }
136
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_For_20_Template(rf, ctx) { if (rf & 1) {
137
- i0.ɵɵelementStart(0, "option", 53);
160
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_For_20_Template(rf, ctx) { if (rf & 1) {
161
+ i0.ɵɵelementStart(0, "option", 62);
138
162
  i0.ɵɵtext(1);
139
163
  i0.ɵɵelementEnd();
140
164
  } if (rf & 2) {
141
- const cred_r7 = ctx.$implicit;
142
- i0.ɵɵproperty("ngValue", cred_r7.ID);
165
+ const cred_r8 = ctx.$implicit;
166
+ i0.ɵɵproperty("ngValue", cred_r8.ID);
143
167
  i0.ɵɵadvance();
144
- i0.ɵɵtextInterpolate(cred_r7.Name);
168
+ i0.ɵɵtextInterpolate(cred_r8.Name);
145
169
  } }
146
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
147
- i0.ɵɵelement(0, "i", 54);
170
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
171
+ i0.ɵɵelement(0, "i", 63);
148
172
  } }
149
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Template(rf, ctx) { if (rf & 1) {
150
- const _r5 = i0.ɵɵgetCurrentView();
151
- i0.ɵɵelementStart(0, "div", 41)(1, "div", 42);
152
- i0.ɵɵelement(2, "i", 43);
173
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_Template(rf, ctx) { if (rf & 1) {
174
+ const _r6 = i0.ɵɵgetCurrentView();
175
+ i0.ɵɵelementStart(0, "div", 50)(1, "div", 51);
176
+ i0.ɵɵelement(2, "i", 52);
153
177
  i0.ɵɵelementEnd();
154
- i0.ɵɵelementStart(3, "div", 44)(4, "span", 45);
178
+ i0.ɵɵelementStart(3, "div", 53)(4, "span", 54);
155
179
  i0.ɵɵtext(5);
156
180
  i0.ɵɵelementEnd();
157
- i0.ɵɵelementStart(6, "span", 46);
181
+ i0.ɵɵelementStart(6, "span", 55);
158
182
  i0.ɵɵtext(7);
159
183
  i0.ɵɵelementEnd()();
160
- i0.ɵɵelementStart(8, "span", 47);
161
- i0.ɵɵelement(9, "i", 33);
184
+ i0.ɵɵelementStart(8, "span", 56);
185
+ i0.ɵɵelement(9, "i", 42);
162
186
  i0.ɵɵtext(10, " Active ");
163
187
  i0.ɵɵelementEnd()();
164
- i0.ɵɵelementStart(11, "div", 48)(12, "label", 49);
165
- i0.ɵɵelement(13, "i", 50);
188
+ i0.ɵɵelementStart(11, "div", 57)(12, "label", 58);
189
+ i0.ɵɵelement(13, "i", 59);
166
190
  i0.ɵɵtext(14, " API Credential ");
167
191
  i0.ɵɵelementEnd();
168
- i0.ɵɵelementStart(15, "div", 51)(16, "select", 52);
169
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Template_select_ngModelChange_16_listener($event) { const provider_r6 = i0.ɵɵrestoreView(_r5).$implicit; i0.ɵɵtwoWayBindingSet(provider_r6.CredentialID, $event) || (provider_r6.CredentialID = $event); return i0.ɵɵresetView($event); });
170
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Template_select_change_16_listener() { const provider_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SaveProviderCredential(provider_r6)); });
171
- i0.ɵɵelementStart(17, "option", 53);
192
+ i0.ɵɵelementStart(15, "div", 60)(16, "select", 61);
193
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_Template_select_ngModelChange_16_listener($event) { const provider_r7 = i0.ɵɵrestoreView(_r6).$implicit; i0.ɵɵtwoWayBindingSet(provider_r7.CredentialID, $event) || (provider_r7.CredentialID = $event); return i0.ɵɵresetView($event); });
194
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_Template_select_change_16_listener() { const provider_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SaveProviderCredential(provider_r7)); });
195
+ i0.ɵɵelementStart(17, "option", 62);
172
196
  i0.ɵɵtext(18, "None (use environment variable)");
173
197
  i0.ɵɵelementEnd();
174
- i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_For_20_Template, 2, 2, "option", 53, _forTrack0);
198
+ i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_For_20_Template, 2, 2, "option", 62, _forTrack0);
175
199
  i0.ɵɵelementEnd();
176
- i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Conditional_21_Template, 1, 0, "i", 54);
200
+ i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_Conditional_21_Template, 1, 0, "i", 63);
177
201
  i0.ɵɵelementEnd()();
178
202
  } if (rf & 2) {
179
- const provider_r6 = ctx.$implicit;
180
- const ctx_r2 = i0.ɵɵnextContext(4);
203
+ const provider_r7 = ctx.$implicit;
204
+ const ctx_r1 = i0.ɵɵnextContext(4);
181
205
  i0.ɵɵadvance(5);
182
- i0.ɵɵtextInterpolate(provider_r6.Name);
206
+ i0.ɵɵtextInterpolate(provider_r7.Name);
183
207
  i0.ɵɵadvance(2);
184
- i0.ɵɵtextInterpolate(provider_r6.ClassKey);
208
+ i0.ɵɵtextInterpolate(provider_r7.ClassKey);
185
209
  i0.ɵɵadvance(9);
186
- i0.ɵɵtwoWayProperty("ngModel", provider_r6.CredentialID);
187
- i0.ɵɵproperty("disabled", ctx_r2.IsSavingCredential);
210
+ i0.ɵɵtwoWayProperty("ngModel", provider_r7.CredentialID);
211
+ i0.ɵɵproperty("disabled", ctx_r1.IsSavingCredential);
188
212
  i0.ɵɵadvance();
189
213
  i0.ɵɵproperty("ngValue", null);
190
214
  i0.ɵɵadvance(2);
191
- i0.ɵɵrepeater(ctx_r2.AvailableCredentials);
215
+ i0.ɵɵrepeater(ctx_r1.AvailableCredentials);
192
216
  i0.ɵɵadvance(2);
193
- i0.ɵɵconditional(ctx_r2.IsSavingCredential ? 21 : -1);
217
+ i0.ɵɵconditional(ctx_r1.IsSavingCredential ? 21 : -1);
194
218
  } }
195
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_Template(rf, ctx) { if (rf & 1) {
196
- i0.ɵɵelementStart(0, "div", 38);
197
- i0.ɵɵrepeaterCreate(1, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Template, 22, 6, null, null, _forTrack0);
219
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelementStart(0, "div", 47);
221
+ i0.ɵɵrepeaterCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_For_2_Template, 22, 6, null, null, _forTrack0);
198
222
  i0.ɵɵelementEnd();
199
223
  } if (rf & 2) {
200
- const ctx_r2 = i0.ɵɵnextContext(3);
224
+ const ctx_r1 = i0.ɵɵnextContext(3);
201
225
  i0.ɵɵadvance();
202
- i0.ɵɵrepeater(ctx_r2.VectorDBProviders);
226
+ i0.ɵɵrepeater(ctx_r1.VectorDBProviders);
203
227
  } }
204
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_27_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelement(0, "i", 33);
228
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_27_Template(rf, ctx) { if (rf & 1) {
229
+ i0.ɵɵelement(0, "i", 42);
206
230
  } }
207
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_28_Template(rf, ctx) { if (rf & 1) {
208
- i0.ɵɵelementStart(0, "span", 34);
231
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_28_Template(rf, ctx) { if (rf & 1) {
232
+ i0.ɵɵelementStart(0, "span", 43);
209
233
  i0.ɵɵtext(1, "2");
210
234
  i0.ɵɵelementEnd();
211
235
  } }
212
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_32_Template(rf, ctx) { if (rf & 1) {
213
- i0.ɵɵelementStart(0, "span", 37);
236
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_32_Template(rf, ctx) { if (rf & 1) {
237
+ i0.ɵɵelementStart(0, "span", 46);
214
238
  i0.ɵɵtext(1);
215
239
  i0.ɵɵelementEnd();
216
240
  } if (rf & 2) {
217
- const ctx_r2 = i0.ɵɵnextContext(3);
241
+ const ctx_r1 = i0.ɵɵnextContext(3);
218
242
  i0.ɵɵadvance();
219
- i0.ɵɵtextInterpolate1("", ctx_r2.EmbeddingModels.length, " model(s) available");
243
+ i0.ɵɵtextInterpolate1("", ctx_r1.EmbeddingModels.length, " model(s) available");
220
244
  } }
221
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_33_Template(rf, ctx) { if (rf & 1) {
222
- i0.ɵɵelementStart(0, "span", 37);
245
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_33_Template(rf, ctx) { if (rf & 1) {
246
+ i0.ɵɵelementStart(0, "span", 46);
223
247
  i0.ɵɵtext(1, "No embedding models found. Configure at least one in the AI app > Models tab.");
224
248
  i0.ɵɵelementEnd();
225
249
  } }
226
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_34_For_3_Template(rf, ctx) { if (rf & 1) {
227
- i0.ɵɵelementStart(0, "span", 56);
250
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_34_For_3_Template(rf, ctx) { if (rf & 1) {
251
+ i0.ɵɵelementStart(0, "span", 65);
228
252
  i0.ɵɵtext(1);
229
253
  i0.ɵɵelementEnd();
230
254
  } if (rf & 2) {
231
- const model_r8 = ctx.$implicit;
255
+ const model_r9 = ctx.$implicit;
232
256
  i0.ɵɵadvance();
233
- i0.ɵɵtextInterpolate(model_r8.Name);
257
+ i0.ɵɵtextInterpolate(model_r9.Name);
234
258
  } }
235
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_34_Template(rf, ctx) { if (rf & 1) {
236
- i0.ɵɵelementStart(0, "div", 38)(1, "div", 55);
237
- i0.ɵɵrepeaterCreate(2, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_34_For_3_Template, 2, 1, "span", 56, _forTrack0);
259
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_34_Template(rf, ctx) { if (rf & 1) {
260
+ i0.ɵɵelementStart(0, "div", 47)(1, "div", 64);
261
+ i0.ɵɵrepeaterCreate(2, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_34_For_3_Template, 2, 1, "span", 65, _forTrack0);
238
262
  i0.ɵɵelementEnd()();
239
263
  } if (rf & 2) {
240
- const ctx_r2 = i0.ɵɵnextContext(3);
264
+ const ctx_r1 = i0.ɵɵnextContext(3);
241
265
  i0.ɵɵadvance(2);
242
- i0.ɵɵrepeater(ctx_r2.EmbeddingModels);
266
+ i0.ɵɵrepeater(ctx_r1.EmbeddingModels);
243
267
  } }
244
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_38_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵelement(0, "i", 33);
268
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_38_Template(rf, ctx) { if (rf & 1) {
269
+ i0.ɵɵelement(0, "i", 42);
246
270
  } }
247
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_39_Template(rf, ctx) { if (rf & 1) {
248
- i0.ɵɵelementStart(0, "span", 34);
271
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_39_Template(rf, ctx) { if (rf & 1) {
272
+ i0.ɵɵelementStart(0, "span", 43);
249
273
  i0.ɵɵtext(1, "3");
250
274
  i0.ɵɵelementEnd();
251
275
  } }
252
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_43_Template(rf, ctx) { if (rf & 1) {
253
- i0.ɵɵelementStart(0, "span", 37);
276
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_43_Template(rf, ctx) { if (rf & 1) {
277
+ i0.ɵɵelementStart(0, "span", 46);
254
278
  i0.ɵɵtext(1);
255
279
  i0.ɵɵelementEnd();
256
280
  } if (rf & 2) {
257
- const ctx_r2 = i0.ɵɵnextContext(3);
281
+ const ctx_r1 = i0.ɵɵnextContext(3);
258
282
  i0.ɵɵadvance();
259
- i0.ɵɵtextInterpolate1("", ctx_r2.VectorIndexes.length, " index(es) configured");
283
+ i0.ɵɵtextInterpolate1("", ctx_r1.VectorIndexes.length, " index(es) configured");
260
284
  } }
261
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_44_Template(rf, ctx) { if (rf & 1) {
262
- i0.ɵɵelementStart(0, "span", 37);
285
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_44_Template(rf, ctx) { if (rf & 1) {
286
+ i0.ɵɵelementStart(0, "span", 46);
263
287
  i0.ɵɵtext(1, "No indexes yet \u2014 create one below.");
264
288
  i0.ɵɵelementEnd();
265
289
  } }
266
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_45_Template(rf, ctx) { if (rf & 1) {
267
- i0.ɵɵelementStart(0, "span", 37);
290
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_45_Template(rf, ctx) { if (rf & 1) {
291
+ i0.ɵɵelementStart(0, "span", 46);
268
292
  i0.ɵɵtext(1, "Complete steps 1 and 2 first.");
269
293
  i0.ɵɵelementEnd();
270
294
  } }
271
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_46_Template(rf, ctx) { if (rf & 1) {
272
- const _r9 = i0.ɵɵgetCurrentView();
273
- i0.ɵɵelementStart(0, "button", 57);
274
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_46_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OpenCreateIndexForm()); });
275
- i0.ɵɵelement(1, "i", 58);
295
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_46_Template(rf, ctx) { if (rf & 1) {
296
+ const _r10 = i0.ɵɵgetCurrentView();
297
+ i0.ɵɵelementStart(0, "button", 66);
298
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_46_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenCreateIndexForm()); });
299
+ i0.ɵɵelement(1, "i", 67);
276
300
  i0.ɵɵtext(2, " Create Index ");
277
301
  i0.ɵɵelementEnd();
278
302
  } }
279
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_47_For_2_Template(rf, ctx) { if (rf & 1) {
280
- const _r10 = i0.ɵɵgetCurrentView();
281
- i0.ɵɵelementStart(0, "div", 59)(1, "div", 60);
282
- i0.ɵɵelement(2, "i", 61);
303
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_47_For_2_Template(rf, ctx) { if (rf & 1) {
304
+ const _r11 = i0.ɵɵgetCurrentView();
305
+ i0.ɵɵelementStart(0, "div", 68)(1, "div", 69);
306
+ i0.ɵɵelement(2, "i", 70);
283
307
  i0.ɵɵelementEnd();
284
- i0.ɵɵelementStart(3, "div", 62)(4, "span", 63);
308
+ i0.ɵɵelementStart(3, "div", 71)(4, "span", 72);
285
309
  i0.ɵɵtext(5);
286
310
  i0.ɵɵelementEnd();
287
- i0.ɵɵelementStart(6, "span", 64);
288
- i0.ɵɵelement(7, "i", 43);
311
+ i0.ɵɵelementStart(6, "span", 73);
312
+ i0.ɵɵelement(7, "i", 52);
289
313
  i0.ɵɵtext(8);
290
- i0.ɵɵelement(9, "i", 65);
314
+ i0.ɵɵelement(9, "i", 74);
291
315
  i0.ɵɵtext(10);
292
316
  i0.ɵɵelementEnd()();
293
- i0.ɵɵelementStart(11, "div", 66)(12, "span", 47);
294
- i0.ɵɵelement(13, "i", 33);
317
+ i0.ɵɵelementStart(11, "div", 75)(12, "span", 56);
318
+ i0.ɵɵelement(13, "i", 42);
295
319
  i0.ɵɵtext(14, " Active ");
296
320
  i0.ɵɵelementEnd();
297
- i0.ɵɵelementStart(15, "button", 67);
298
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_47_For_2_Template_button_click_15_listener() { const idx_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DeleteIndex(idx_r11.ID)); });
299
- i0.ɵɵelement(16, "i", 68);
321
+ i0.ɵɵelementStart(15, "button", 76);
322
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_47_For_2_Template_button_click_15_listener() { const idx_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.DeleteIndex(idx_r12.ID)); });
323
+ i0.ɵɵelement(16, "i", 77);
300
324
  i0.ɵɵelementEnd()()();
301
325
  } if (rf & 2) {
302
- const idx_r11 = ctx.$implicit;
326
+ const idx_r12 = ctx.$implicit;
303
327
  i0.ɵɵadvance(5);
304
- i0.ɵɵtextInterpolate(idx_r11.Name);
328
+ i0.ɵɵtextInterpolate(idx_r12.Name);
305
329
  i0.ɵɵadvance(3);
306
- i0.ɵɵtextInterpolate1(" ", idx_r11.VectorDatabase, " \u00A0\u00B7\u00A0 ");
330
+ i0.ɵɵtextInterpolate1(" ", idx_r12.VectorDatabase, " \u00A0\u00B7\u00A0 ");
307
331
  i0.ɵɵadvance(2);
308
- i0.ɵɵtextInterpolate1(" ", idx_r11.EmbeddingModel, " ");
332
+ i0.ɵɵtextInterpolate1(" ", idx_r12.EmbeddingModel, " ");
309
333
  } }
310
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_47_Template(rf, ctx) { if (rf & 1) {
311
- i0.ɵɵelementStart(0, "div", 38);
312
- i0.ɵɵrepeaterCreate(1, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_47_For_2_Template, 17, 3, "div", 59, _forTrack0);
334
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_47_Template(rf, ctx) { if (rf & 1) {
335
+ i0.ɵɵelementStart(0, "div", 47);
336
+ i0.ɵɵrepeaterCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_47_For_2_Template, 17, 3, "div", 68, _forTrack0);
313
337
  i0.ɵɵelementEnd();
314
338
  } if (rf & 2) {
315
- const ctx_r2 = i0.ɵɵnextContext(3);
339
+ const ctx_r1 = i0.ɵɵnextContext(3);
316
340
  i0.ɵɵadvance();
317
- i0.ɵɵrepeater(ctx_r2.VectorIndexes);
341
+ i0.ɵɵrepeater(ctx_r1.VectorIndexes);
318
342
  } }
319
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_For_14_Template(rf, ctx) { if (rf & 1) {
320
- i0.ɵɵelementStart(0, "option", 76);
343
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_For_14_Template(rf, ctx) { if (rf & 1) {
344
+ i0.ɵɵelementStart(0, "option", 85);
321
345
  i0.ɵɵtext(1);
322
346
  i0.ɵɵelementEnd();
323
347
  } if (rf & 2) {
324
- const db_r13 = ctx.$implicit;
325
- i0.ɵɵproperty("value", db_r13.ID);
348
+ const db_r14 = ctx.$implicit;
349
+ i0.ɵɵproperty("value", db_r14.ID);
326
350
  i0.ɵɵadvance();
327
- i0.ɵɵtextInterpolate(db_r13.Name);
351
+ i0.ɵɵtextInterpolate(db_r14.Name);
328
352
  } }
329
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_For_20_Template(rf, ctx) { if (rf & 1) {
330
- i0.ɵɵelementStart(0, "option", 76);
353
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_For_20_Template(rf, ctx) { if (rf & 1) {
354
+ i0.ɵɵelementStart(0, "option", 85);
331
355
  i0.ɵɵtext(1);
332
356
  i0.ɵɵelementEnd();
333
357
  } if (rf & 2) {
334
- const model_r14 = ctx.$implicit;
335
- i0.ɵɵproperty("value", model_r14.ID);
358
+ const model_r15 = ctx.$implicit;
359
+ i0.ɵɵproperty("value", model_r15.ID);
336
360
  i0.ɵɵadvance();
337
- i0.ɵɵtextInterpolate(model_r14.Name);
361
+ i0.ɵɵtextInterpolate(model_r15.Name);
338
362
  } }
339
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Conditional_23_Template(rf, ctx) { if (rf & 1) {
340
- i0.ɵɵelement(0, "i", 80);
363
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Conditional_23_Template(rf, ctx) { if (rf & 1) {
364
+ i0.ɵɵelement(0, "i", 89);
341
365
  i0.ɵɵtext(1, " Creating... ");
342
366
  } }
343
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Conditional_24_Template(rf, ctx) { if (rf & 1) {
344
- i0.ɵɵelement(0, "i", 58);
367
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Conditional_24_Template(rf, ctx) { if (rf & 1) {
368
+ i0.ɵɵelement(0, "i", 67);
345
369
  i0.ɵɵtext(1, " Create Index ");
346
370
  } }
347
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template(rf, ctx) { if (rf & 1) {
348
- const _r12 = i0.ɵɵgetCurrentView();
349
- i0.ɵɵelementStart(0, "div", 40)(1, "h4", 69);
350
- i0.ɵɵelement(2, "i", 70);
371
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template(rf, ctx) { if (rf & 1) {
372
+ const _r13 = i0.ɵɵgetCurrentView();
373
+ i0.ɵɵelementStart(0, "div", 49)(1, "h4", 78);
374
+ i0.ɵɵelement(2, "i", 79);
351
375
  i0.ɵɵtext(3, " Create New Vector Index ");
352
376
  i0.ɵɵelementEnd();
353
- i0.ɵɵelementStart(4, "div", 71)(5, "div", 72)(6, "label", 73);
377
+ i0.ɵɵelementStart(4, "div", 80)(5, "div", 81)(6, "label", 82);
354
378
  i0.ɵɵtext(7, "Index Name");
355
379
  i0.ɵɵelementEnd();
356
- i0.ɵɵelementStart(8, "input", 74);
357
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.NewIndexName, $event) || (ctx_r2.NewIndexName = $event); return i0.ɵɵresetView($event); });
380
+ i0.ɵɵelementStart(8, "input", 83);
381
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.NewIndexName, $event) || (ctx_r1.NewIndexName = $event); return i0.ɵɵresetView($event); });
358
382
  i0.ɵɵelementEnd()();
359
- i0.ɵɵelementStart(9, "div", 72)(10, "label", 73);
383
+ i0.ɵɵelementStart(9, "div", 81)(10, "label", 82);
360
384
  i0.ɵɵtext(11, "Vector Database");
361
385
  i0.ɵɵelementEnd();
362
- i0.ɵɵelementStart(12, "select", 75);
363
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template_select_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.NewIndexVectorDBID, $event) || (ctx_r2.NewIndexVectorDBID = $event); return i0.ɵɵresetView($event); });
364
- i0.ɵɵrepeaterCreate(13, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_For_14_Template, 2, 2, "option", 76, _forTrack0);
386
+ i0.ɵɵelementStart(12, "select", 84);
387
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template_select_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.NewIndexVectorDBID, $event) || (ctx_r1.NewIndexVectorDBID = $event); return i0.ɵɵresetView($event); });
388
+ i0.ɵɵrepeaterCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_For_14_Template, 2, 2, "option", 85, _forTrack0);
365
389
  i0.ɵɵelementEnd()();
366
- i0.ɵɵelementStart(15, "div", 72)(16, "label", 73);
390
+ i0.ɵɵelementStart(15, "div", 81)(16, "label", 82);
367
391
  i0.ɵɵtext(17, "Embedding Model");
368
392
  i0.ɵɵelementEnd();
369
- i0.ɵɵelementStart(18, "select", 75);
370
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template_select_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.NewIndexEmbeddingModelID, $event) || (ctx_r2.NewIndexEmbeddingModelID = $event); return i0.ɵɵresetView($event); });
371
- i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_For_20_Template, 2, 2, "option", 76, _forTrack0);
393
+ i0.ɵɵelementStart(18, "select", 84);
394
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template_select_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.NewIndexEmbeddingModelID, $event) || (ctx_r1.NewIndexEmbeddingModelID = $event); return i0.ɵɵresetView($event); });
395
+ i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_For_20_Template, 2, 2, "option", 85, _forTrack0);
372
396
  i0.ɵɵelementEnd()()();
373
- i0.ɵɵelementStart(21, "div", 77)(22, "button", 78);
374
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CreateIndex()); });
375
- i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Conditional_23_Template, 2, 0)(24, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Conditional_24_Template, 2, 0);
397
+ i0.ɵɵelementStart(21, "div", 86)(22, "button", 87);
398
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CreateIndex()); });
399
+ i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Conditional_23_Template, 2, 0)(24, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Conditional_24_Template, 2, 0);
376
400
  i0.ɵɵelementEnd();
377
- i0.ɵɵelementStart(25, "button", 79);
378
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CancelCreateIndex()); });
401
+ i0.ɵɵelementStart(25, "button", 88);
402
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CancelCreateIndex()); });
379
403
  i0.ɵɵtext(26, " Cancel ");
380
404
  i0.ɵɵelementEnd()()();
381
405
  } if (rf & 2) {
382
- const ctx_r2 = i0.ɵɵnextContext(3);
406
+ const ctx_r1 = i0.ɵɵnextContext(3);
383
407
  i0.ɵɵadvance(8);
384
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.NewIndexName);
408
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewIndexName);
385
409
  i0.ɵɵadvance(4);
386
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.NewIndexVectorDBID);
410
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewIndexVectorDBID);
387
411
  i0.ɵɵadvance();
388
- i0.ɵɵrepeater(ctx_r2.VectorDBProviders);
412
+ i0.ɵɵrepeater(ctx_r1.VectorDBProviders);
389
413
  i0.ɵɵadvance(5);
390
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.NewIndexEmbeddingModelID);
414
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewIndexEmbeddingModelID);
391
415
  i0.ɵɵadvance();
392
- i0.ɵɵrepeater(ctx_r2.EmbeddingModels);
416
+ i0.ɵɵrepeater(ctx_r1.EmbeddingModels);
393
417
  i0.ɵɵadvance(3);
394
- i0.ɵɵproperty("disabled", ctx_r2.IsCreatingIndex);
418
+ i0.ɵɵproperty("disabled", ctx_r1.IsCreatingIndex);
395
419
  i0.ɵɵadvance();
396
- i0.ɵɵconditional(ctx_r2.IsCreatingIndex ? 23 : 24);
420
+ i0.ɵɵconditional(ctx_r1.IsCreatingIndex ? 23 : 24);
397
421
  i0.ɵɵadvance(2);
398
- i0.ɵɵproperty("disabled", ctx_r2.IsCreatingIndex);
422
+ i0.ɵɵproperty("disabled", ctx_r1.IsCreatingIndex);
399
423
  } }
400
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
401
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
424
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Template(rf, ctx) { if (rf & 1) {
425
+ i0.ɵɵelementStart(0, "div", 17)(1, "h2", 21);
402
426
  i0.ɵɵtext(2, "Vector Database");
403
427
  i0.ɵɵelementEnd();
404
- i0.ɵɵelementStart(3, "p", 13);
428
+ i0.ɵɵelementStart(3, "p", 22);
405
429
  i0.ɵɵtext(4, "Manage the shared vector index and database connection.");
406
430
  i0.ɵɵelementEnd();
407
- i0.ɵɵelementStart(5, "div", 24)(6, "div", 25)(7, "span", 26);
431
+ i0.ɵɵelementStart(5, "div", 33)(6, "div", 34)(7, "span", 35);
408
432
  i0.ɵɵtext(8, "Setup Progress");
409
433
  i0.ɵɵelementEnd();
410
- i0.ɵɵelementStart(9, "span", 27);
434
+ i0.ɵɵelementStart(9, "span", 36);
411
435
  i0.ɵɵtext(10);
412
436
  i0.ɵɵelementEnd()();
413
- i0.ɵɵelementStart(11, "div", 28);
414
- i0.ɵɵelement(12, "div", 29);
437
+ i0.ɵɵelementStart(11, "div", 37);
438
+ i0.ɵɵelement(12, "div", 38);
415
439
  i0.ɵɵelementEnd()();
416
- i0.ɵɵelementStart(13, "div", 30)(14, "div", 31)(15, "div", 32);
417
- i0.ɵɵconditionalCreate(16, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_16_Template, 1, 0, "i", 33)(17, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_17_Template, 2, 0, "span", 34);
440
+ i0.ɵɵelementStart(13, "div", 39)(14, "div", 40)(15, "div", 41);
441
+ i0.ɵɵconditionalCreate(16, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_16_Template, 1, 0, "i", 42)(17, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_17_Template, 2, 0, "span", 43);
418
442
  i0.ɵɵelementEnd();
419
- i0.ɵɵelementStart(18, "div", 35)(19, "span", 36);
443
+ i0.ɵɵelementStart(18, "div", 44)(19, "span", 45);
420
444
  i0.ɵɵtext(20, "Vector Database Providers");
421
445
  i0.ɵɵelementEnd();
422
- i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_21_Template, 2, 1, "span", 37)(22, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_22_Template, 2, 0, "span", 37);
446
+ i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_21_Template, 2, 1, "span", 46)(22, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_22_Template, 2, 0, "span", 46);
423
447
  i0.ɵɵelementEnd()();
424
- i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_Template, 3, 0, "div", 38);
448
+ i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_23_Template, 3, 0, "div", 47);
425
449
  i0.ɵɵelementEnd();
426
- i0.ɵɵelementStart(24, "div", 30)(25, "div", 31)(26, "div", 32);
427
- i0.ɵɵconditionalCreate(27, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_27_Template, 1, 0, "i", 33)(28, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_28_Template, 2, 0, "span", 34);
450
+ i0.ɵɵelementStart(24, "div", 39)(25, "div", 40)(26, "div", 41);
451
+ i0.ɵɵconditionalCreate(27, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_27_Template, 1, 0, "i", 42)(28, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_28_Template, 2, 0, "span", 43);
428
452
  i0.ɵɵelementEnd();
429
- i0.ɵɵelementStart(29, "div", 35)(30, "span", 36);
453
+ i0.ɵɵelementStart(29, "div", 44)(30, "span", 45);
430
454
  i0.ɵɵtext(31, "Embedding Models");
431
455
  i0.ɵɵelementEnd();
432
- i0.ɵɵconditionalCreate(32, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_32_Template, 2, 1, "span", 37)(33, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_33_Template, 2, 0, "span", 37);
456
+ i0.ɵɵconditionalCreate(32, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_32_Template, 2, 1, "span", 46)(33, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_33_Template, 2, 0, "span", 46);
433
457
  i0.ɵɵelementEnd()();
434
- i0.ɵɵconditionalCreate(34, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_34_Template, 4, 0, "div", 38);
458
+ i0.ɵɵconditionalCreate(34, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_34_Template, 4, 0, "div", 47);
435
459
  i0.ɵɵelementEnd();
436
- i0.ɵɵelementStart(35, "div", 30)(36, "div", 31)(37, "div", 32);
437
- i0.ɵɵconditionalCreate(38, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_38_Template, 1, 0, "i", 33)(39, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_39_Template, 2, 0, "span", 34);
460
+ i0.ɵɵelementStart(35, "div", 39)(36, "div", 40)(37, "div", 41);
461
+ i0.ɵɵconditionalCreate(38, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_38_Template, 1, 0, "i", 42)(39, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_39_Template, 2, 0, "span", 43);
438
462
  i0.ɵɵelementEnd();
439
- i0.ɵɵelementStart(40, "div", 35)(41, "span", 36);
463
+ i0.ɵɵelementStart(40, "div", 44)(41, "span", 45);
440
464
  i0.ɵɵtext(42, "Vector Indexes");
441
465
  i0.ɵɵelementEnd();
442
- i0.ɵɵconditionalCreate(43, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_43_Template, 2, 1, "span", 37)(44, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_44_Template, 2, 0, "span", 37)(45, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_45_Template, 2, 0, "span", 37);
466
+ i0.ɵɵconditionalCreate(43, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_43_Template, 2, 1, "span", 46)(44, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_44_Template, 2, 0, "span", 46)(45, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_45_Template, 2, 0, "span", 46);
443
467
  i0.ɵɵelementEnd();
444
- i0.ɵɵconditionalCreate(46, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_46_Template, 3, 0, "button", 39);
468
+ i0.ɵɵconditionalCreate(46, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_46_Template, 3, 0, "button", 48);
445
469
  i0.ɵɵelementEnd();
446
- i0.ɵɵconditionalCreate(47, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_47_Template, 3, 0, "div", 38);
447
- i0.ɵɵconditionalCreate(48, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template, 27, 6, "div", 40);
470
+ i0.ɵɵconditionalCreate(47, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_47_Template, 3, 0, "div", 47);
471
+ i0.ɵɵconditionalCreate(48, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_48_Template, 27, 6, "div", 49);
448
472
  i0.ɵɵelementEnd()();
449
473
  } if (rf & 2) {
450
- const ctx_r2 = i0.ɵɵnextContext(2);
474
+ const ctx_r1 = i0.ɵɵnextContext(2);
451
475
  i0.ɵɵadvance(10);
452
- i0.ɵɵtextInterpolate1("", ctx_r2.SetupStepsCompleted, " of 3 complete");
476
+ i0.ɵɵtextInterpolate1("", ctx_r1.SetupStepsCompleted, " of 3 complete");
453
477
  i0.ɵɵadvance(2);
454
- i0.ɵɵstyleProp("width", ctx_r2.SetupStepsCompleted / 3 * 100, "%");
478
+ i0.ɵɵstyleProp("width", ctx_r1.SetupStepsCompleted / 3 * 100, "%");
455
479
  i0.ɵɵadvance();
456
- i0.ɵɵclassProp("setup-step-complete", ctx_r2.HasVectorDBProvider)("setup-step-pending", !ctx_r2.HasVectorDBProvider);
480
+ i0.ɵɵclassProp("setup-step-complete", ctx_r1.HasVectorDBProvider)("setup-step-pending", !ctx_r1.HasVectorDBProvider);
457
481
  i0.ɵɵadvance(3);
458
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider ? 16 : 17);
482
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider ? 16 : 17);
459
483
  i0.ɵɵadvance(5);
460
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider ? 21 : 22);
484
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider ? 21 : 22);
461
485
  i0.ɵɵadvance(2);
462
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider ? 23 : -1);
486
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider ? 23 : -1);
463
487
  i0.ɵɵadvance();
464
- i0.ɵɵclassProp("setup-step-complete", ctx_r2.HasEmbeddingModel)("setup-step-pending", !ctx_r2.HasEmbeddingModel);
488
+ i0.ɵɵclassProp("setup-step-complete", ctx_r1.HasEmbeddingModel)("setup-step-pending", !ctx_r1.HasEmbeddingModel);
465
489
  i0.ɵɵadvance(3);
466
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 27 : 28);
490
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 27 : 28);
467
491
  i0.ɵɵadvance(5);
468
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 32 : 33);
492
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 32 : 33);
469
493
  i0.ɵɵadvance(2);
470
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 34 : -1);
494
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 34 : -1);
471
495
  i0.ɵɵadvance();
472
- i0.ɵɵclassProp("setup-step-complete", ctx_r2.HasVectorIndex)("setup-step-pending", !ctx_r2.HasVectorIndex);
496
+ i0.ɵɵclassProp("setup-step-complete", ctx_r1.HasVectorIndex)("setup-step-pending", !ctx_r1.HasVectorIndex);
473
497
  i0.ɵɵadvance(3);
474
- i0.ɵɵconditional(ctx_r2.HasVectorIndex ? 38 : 39);
498
+ i0.ɵɵconditional(ctx_r1.HasVectorIndex ? 38 : 39);
475
499
  i0.ɵɵadvance(5);
476
- i0.ɵɵconditional(ctx_r2.HasVectorIndex ? 43 : ctx_r2.HasVectorDBProvider && ctx_r2.HasEmbeddingModel ? 44 : 45);
500
+ i0.ɵɵconditional(ctx_r1.HasVectorIndex ? 43 : ctx_r1.HasVectorDBProvider && ctx_r1.HasEmbeddingModel ? 44 : 45);
477
501
  i0.ɵɵadvance(3);
478
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider && ctx_r2.HasEmbeddingModel && !ctx_r2.ShowCreateIndexForm ? 46 : -1);
502
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider && ctx_r1.HasEmbeddingModel && !ctx_r1.ShowCreateIndexForm ? 46 : -1);
479
503
  i0.ɵɵadvance();
480
- i0.ɵɵconditional(ctx_r2.HasVectorIndex ? 47 : -1);
504
+ i0.ɵɵconditional(ctx_r1.HasVectorIndex ? 47 : -1);
481
505
  i0.ɵɵadvance();
482
- i0.ɵɵconditional(ctx_r2.ShowCreateIndexForm ? 48 : -1);
506
+ i0.ɵɵconditional(ctx_r1.ShowCreateIndexForm ? 48 : -1);
483
507
  } }
484
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_5_Template(rf, ctx) { if (rf & 1) {
485
- i0.ɵɵelement(0, "mj-loading", 81);
508
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_5_Template(rf, ctx) { if (rf & 1) {
509
+ i0.ɵɵelement(0, "mj-loading", 90);
486
510
  } }
487
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
488
- i0.ɵɵelementStart(0, "div", 82);
489
- i0.ɵɵelement(1, "i", 83);
490
- i0.ɵɵelementStart(2, "h3", 84);
511
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
512
+ i0.ɵɵelementStart(0, "div", 91);
513
+ i0.ɵɵelement(1, "i", 92);
514
+ i0.ɵɵelementStart(2, "h3", 93);
491
515
  i0.ɵɵtext(3, "No Searchable Entities Found");
492
516
  i0.ɵɵelementEnd();
493
- i0.ɵɵelementStart(4, "p", 85);
517
+ i0.ɵɵelementStart(4, "p", 94);
494
518
  i0.ɵɵtext(5, "No entities with text fields were discovered. Ensure your database schema includes entities with varchar/nvarchar columns.");
495
519
  i0.ɵɵelementEnd()();
496
520
  } }
497
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_For_8_Template(rf, ctx) { if (rf & 1) {
498
- i0.ɵɵelementStart(0, "span", 97);
521
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_For_8_Template(rf, ctx) { if (rf & 1) {
522
+ i0.ɵɵelementStart(0, "span", 106);
499
523
  i0.ɵɵtext(1);
500
524
  i0.ɵɵelementEnd();
501
525
  } if (rf & 2) {
502
- const field_r18 = ctx.$implicit;
526
+ const field_r19 = ctx.$implicit;
503
527
  i0.ɵɵadvance();
504
- i0.ɵɵtextInterpolate(field_r18);
528
+ i0.ɵɵtextInterpolate(field_r19);
505
529
  } }
506
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
507
- i0.ɵɵelementStart(0, "span", 101);
508
- i0.ɵɵelement(1, "i", 102);
530
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
531
+ i0.ɵɵelementStart(0, "span", 110);
532
+ i0.ɵɵelement(1, "i", 111);
509
533
  i0.ɵɵtext(2);
510
534
  i0.ɵɵelementEnd();
511
535
  } if (rf & 2) {
512
- const entity_r17 = i0.ɵɵnextContext().$implicit;
536
+ const entity_r18 = i0.ɵɵnextContext().$implicit;
513
537
  i0.ɵɵadvance(2);
514
- i0.ɵɵtextInterpolate1(" ", entity_r17.SnippetField, " ");
538
+ i0.ɵɵtextInterpolate1(" ", entity_r18.SnippetField, " ");
515
539
  } }
516
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Template(rf, ctx) { if (rf & 1) {
517
- const _r16 = i0.ɵɵgetCurrentView();
518
- i0.ɵɵelementStart(0, "div", 92)(1, "div", 93)(2, "input", 19);
519
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Template_input_ngModelChange_2_listener($event) { const entity_r17 = i0.ɵɵrestoreView(_r16).$implicit; i0.ɵɵtwoWayBindingSet(entity_r17.Enabled, $event) || (entity_r17.Enabled = $event); return i0.ɵɵresetView($event); });
520
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Template_input_change_2_listener() { const entity_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OnFTSEntityToggled(entity_r17)); });
540
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_Template(rf, ctx) { if (rf & 1) {
541
+ const _r17 = i0.ɵɵgetCurrentView();
542
+ i0.ɵɵelementStart(0, "div", 101)(1, "div", 102)(2, "input", 28);
543
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_Template_input_ngModelChange_2_listener($event) { const entity_r18 = i0.ɵɵrestoreView(_r17).$implicit; i0.ɵɵtwoWayBindingSet(entity_r18.Enabled, $event) || (entity_r18.Enabled = $event); return i0.ɵɵresetView($event); });
544
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_Template_input_change_2_listener() { const entity_r18 = i0.ɵɵrestoreView(_r17).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFTSEntityToggled(entity_r18)); });
521
545
  i0.ɵɵelementEnd()();
522
- i0.ɵɵelementStart(3, "div", 94)(4, "span", 95);
546
+ i0.ɵɵelementStart(3, "div", 103)(4, "span", 104);
523
547
  i0.ɵɵtext(5);
524
548
  i0.ɵɵelementEnd();
525
- i0.ɵɵelementStart(6, "div", 96);
526
- i0.ɵɵrepeaterCreate(7, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_For_8_Template, 2, 1, "span", 97, i0.ɵɵrepeaterTrackByIdentity);
549
+ i0.ɵɵelementStart(6, "div", 105);
550
+ i0.ɵɵrepeaterCreate(7, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_For_8_Template, 2, 1, "span", 106, i0.ɵɵrepeaterTrackByIdentity);
527
551
  i0.ɵɵelementEnd()();
528
- i0.ɵɵelementStart(9, "div", 98)(10, "span", 99);
529
- i0.ɵɵelement(11, "i", 100);
552
+ i0.ɵɵelementStart(9, "div", 107)(10, "span", 108);
553
+ i0.ɵɵelement(11, "i", 109);
530
554
  i0.ɵɵtext(12);
531
555
  i0.ɵɵelementEnd();
532
- i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Conditional_13_Template, 3, 1, "span", 101);
556
+ i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_Conditional_13_Template, 3, 1, "span", 110);
533
557
  i0.ɵɵelementEnd()();
534
558
  } if (rf & 2) {
535
- const entity_r17 = ctx.$implicit;
536
- i0.ɵɵclassProp("fts-entity-enabled", entity_r17.Enabled);
559
+ const entity_r18 = ctx.$implicit;
560
+ i0.ɵɵclassProp("fts-entity-enabled", entity_r18.Enabled);
537
561
  i0.ɵɵadvance(2);
538
- i0.ɵɵtwoWayProperty("ngModel", entity_r17.Enabled);
562
+ i0.ɵɵtwoWayProperty("ngModel", entity_r18.Enabled);
539
563
  i0.ɵɵadvance(3);
540
- i0.ɵɵtextInterpolate(entity_r17.EntityName);
564
+ i0.ɵɵtextInterpolate(entity_r18.EntityName);
541
565
  i0.ɵɵadvance(2);
542
- i0.ɵɵrepeater(entity_r17.IndexedFields);
566
+ i0.ɵɵrepeater(entity_r18.IndexedFields);
543
567
  i0.ɵɵadvance(5);
544
- i0.ɵɵtextInterpolate1(" ", entity_r17.TitleField, " ");
568
+ i0.ɵɵtextInterpolate1(" ", entity_r18.TitleField, " ");
545
569
  i0.ɵɵadvance();
546
- i0.ɵɵconditional(entity_r17.SnippetField !== entity_r17.TitleField ? 13 : -1);
570
+ i0.ɵɵconditional(entity_r18.SnippetField !== entity_r18.TitleField ? 13 : -1);
547
571
  } }
548
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
549
- const _r15 = i0.ɵɵgetCurrentView();
550
- i0.ɵɵelementStart(0, "div", 86)(1, "div", 87)(2, "span", 88);
572
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
573
+ const _r16 = i0.ɵɵgetCurrentView();
574
+ i0.ɵɵelementStart(0, "div", 95)(1, "div", 96)(2, "span", 97);
551
575
  i0.ɵɵtext(3);
552
576
  i0.ɵɵelementEnd();
553
- i0.ɵɵelementStart(4, "input", 89);
554
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.FTSFilterText, $event) || (ctx_r2.FTSFilterText = $event); return i0.ɵɵresetView($event); });
577
+ i0.ɵɵelementStart(4, "input", 98);
578
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.FTSFilterText, $event) || (ctx_r1.FTSFilterText = $event); return i0.ɵɵresetView($event); });
555
579
  i0.ɵɵelementEnd()()();
556
- i0.ɵɵelementStart(5, "div", 90);
557
- i0.ɵɵrepeaterCreate(6, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Template, 14, 6, "div", 91, _forTrack1);
580
+ i0.ɵɵelementStart(5, "div", 99);
581
+ i0.ɵɵrepeaterCreate(6, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_For_7_Template, 14, 6, "div", 100, _forTrack1);
558
582
  i0.ɵɵelementEnd();
559
583
  } if (rf & 2) {
560
- const ctx_r2 = i0.ɵɵnextContext(3);
584
+ const ctx_r1 = i0.ɵɵnextContext(3);
561
585
  i0.ɵɵadvance(3);
562
- i0.ɵɵtextInterpolate2("", ctx_r2.EnabledFTSCount, " of ", ctx_r2.FTSEntities.length, " entities enabled for search");
586
+ i0.ɵɵtextInterpolate2("", ctx_r1.EnabledFTSCount, " of ", ctx_r1.FTSEntities.length, " entities enabled for search");
563
587
  i0.ɵɵadvance();
564
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.FTSFilterText);
588
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.FTSFilterText);
565
589
  i0.ɵɵadvance(2);
566
- i0.ɵɵrepeater(ctx_r2.FilteredFTSEntities);
590
+ i0.ɵɵrepeater(ctx_r1.FilteredFTSEntities);
567
591
  } }
568
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
569
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
592
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Template(rf, ctx) { if (rf & 1) {
593
+ i0.ɵɵelementStart(0, "div", 17)(1, "h2", 21);
570
594
  i0.ɵɵtext(2, "Full-Text Search Entities");
571
595
  i0.ɵɵelementEnd();
572
- i0.ɵɵelementStart(3, "p", 13);
596
+ i0.ɵɵelementStart(3, "p", 22);
573
597
  i0.ɵɵtext(4, "Configure which entities are included in full-text search. Entities with text fields (Name, Description, etc.) are automatically discovered.");
574
598
  i0.ɵɵelementEnd();
575
- i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_5_Template, 1, 0, "mj-loading", 81)(6, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_6_Template, 6, 0, "div", 82)(7, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_Template, 8, 3);
599
+ i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_5_Template, 1, 0, "mj-loading", 90)(6, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_6_Template, 6, 0, "div", 91)(7, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_7_Template, 8, 3);
576
600
  i0.ɵɵelementEnd();
577
601
  } if (rf & 2) {
578
- const ctx_r2 = i0.ɵɵnextContext(2);
602
+ const ctx_r1 = i0.ɵɵnextContext(2);
579
603
  i0.ɵɵadvance(5);
580
- i0.ɵɵconditional(ctx_r2.IsLoadingFTSEntities ? 5 : ctx_r2.FTSEntities.length === 0 ? 6 : 7);
604
+ i0.ɵɵconditional(ctx_r1.IsLoadingFTSEntities ? 5 : ctx_r1.FTSEntities.length === 0 ? 6 : 7);
581
605
  } }
582
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_5_For_17_Template(rf, ctx) { if (rf & 1) {
583
- i0.ɵɵelementStart(0, "span", 56);
606
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_5_For_17_Template(rf, ctx) { if (rf & 1) {
607
+ i0.ɵɵelementStart(0, "span", 65);
584
608
  i0.ɵɵtext(1);
585
609
  i0.ɵɵelementEnd();
586
610
  } if (rf & 2) {
587
- const model_r19 = ctx.$implicit;
611
+ const model_r20 = ctx.$implicit;
588
612
  i0.ɵɵadvance();
589
- i0.ɵɵtextInterpolate(model_r19.Name);
613
+ i0.ɵɵtextInterpolate(model_r20.Name);
590
614
  } }
591
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
592
- i0.ɵɵelementStart(0, "div", 14)(1, "div", 20)(2, "div", 21)(3, "span", 17);
615
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
616
+ i0.ɵɵelementStart(0, "div", 23)(1, "div", 29)(2, "div", 30)(3, "span", 26);
593
617
  i0.ɵɵtext(4, "Active Model");
594
618
  i0.ɵɵelementEnd();
595
- i0.ɵɵelementStart(5, "span", 18);
619
+ i0.ɵɵelementStart(5, "span", 27);
596
620
  i0.ɵɵtext(6, "Currently selected embedding model");
597
621
  i0.ɵɵelementEnd()();
598
- i0.ɵɵelementStart(7, "span", 103);
622
+ i0.ɵɵelementStart(7, "span", 112);
599
623
  i0.ɵɵtext(8);
600
624
  i0.ɵɵelementEnd()();
601
- i0.ɵɵelementStart(9, "div", 20)(10, "div", 21)(11, "span", 17);
625
+ i0.ɵɵelementStart(9, "div", 29)(10, "div", 30)(11, "span", 26);
602
626
  i0.ɵɵtext(12, "Available Models");
603
627
  i0.ɵɵelementEnd();
604
- i0.ɵɵelementStart(13, "span", 18);
628
+ i0.ɵɵelementStart(13, "span", 27);
605
629
  i0.ɵɵtext(14);
606
630
  i0.ɵɵelementEnd()();
607
- i0.ɵɵelementStart(15, "div", 55);
608
- i0.ɵɵrepeaterCreate(16, KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_5_For_17_Template, 2, 1, "span", 56, _forTrack0);
631
+ i0.ɵɵelementStart(15, "div", 64);
632
+ i0.ɵɵrepeaterCreate(16, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_5_For_17_Template, 2, 1, "span", 65, _forTrack0);
609
633
  i0.ɵɵelementEnd()()();
610
- i0.ɵɵelementStart(18, "p", 104);
611
- i0.ɵɵelement(19, "i", 105);
634
+ i0.ɵɵelementStart(18, "p", 113);
635
+ i0.ɵɵelement(19, "i", 114);
612
636
  i0.ɵɵtext(20, " Manage embedding models in the AI Dashboard > Models tab. ");
613
637
  i0.ɵɵelementEnd();
614
638
  } if (rf & 2) {
615
- const ctx_r2 = i0.ɵɵnextContext(3);
639
+ const ctx_r1 = i0.ɵɵnextContext(3);
616
640
  i0.ɵɵadvance(8);
617
- i0.ɵɵtextInterpolate(ctx_r2.EmbeddingModelName);
641
+ i0.ɵɵtextInterpolate(ctx_r1.EmbeddingModelName);
618
642
  i0.ɵɵadvance(6);
619
- i0.ɵɵtextInterpolate1("", ctx_r2.EmbeddingModels.length, " embedding model(s) configured");
643
+ i0.ɵɵtextInterpolate1("", ctx_r1.EmbeddingModels.length, " embedding model(s) configured");
620
644
  i0.ɵɵadvance(2);
621
- i0.ɵɵrepeater(ctx_r2.EmbeddingModels);
645
+ i0.ɵɵrepeater(ctx_r1.EmbeddingModels);
622
646
  } }
623
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_6_Template(rf, ctx) { if (rf & 1) {
624
- i0.ɵɵelementStart(0, "div", 82);
625
- i0.ɵɵelement(1, "i", 106);
626
- i0.ɵɵelementStart(2, "h3", 84);
647
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_6_Template(rf, ctx) { if (rf & 1) {
648
+ i0.ɵɵelementStart(0, "div", 91);
649
+ i0.ɵɵelement(1, "i", 115);
650
+ i0.ɵɵelementStart(2, "h3", 93);
627
651
  i0.ɵɵtext(3, "No Embedding Models Found");
628
652
  i0.ɵɵelementEnd();
629
- i0.ɵɵelementStart(4, "p", 85);
653
+ i0.ɵɵelementStart(4, "p", 94);
630
654
  i0.ɵɵtext(5, " Embedding models are required to convert text into vectors for semantic search and duplicate detection. Configure at least one embedding model (e.g., text-embedding-3-small) in the AI Dashboard > Models tab. ");
631
655
  i0.ɵɵelementEnd()();
632
656
  } }
633
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
634
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
657
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Template(rf, ctx) { if (rf & 1) {
658
+ i0.ɵɵelementStart(0, "div", 17)(1, "h2", 21);
635
659
  i0.ɵɵtext(2, "Embedding Models");
636
660
  i0.ɵɵelementEnd();
637
- i0.ɵɵelementStart(3, "p", 13);
661
+ i0.ɵɵelementStart(3, "p", 22);
638
662
  i0.ɵɵtext(4, "AI models used for generating vector embeddings from text.");
639
663
  i0.ɵɵelementEnd();
640
- i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_5_Template, 21, 2)(6, KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_6_Template, 6, 0, "div", 82);
664
+ i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_5_Template, 21, 2)(6, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_6_Template, 6, 0, "div", 91);
641
665
  i0.ɵɵelementEnd();
642
666
  } if (rf & 2) {
643
- const ctx_r2 = i0.ɵɵnextContext(2);
667
+ const ctx_r1 = i0.ɵɵnextContext(2);
644
668
  i0.ɵɵadvance(5);
645
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 5 : 6);
669
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 5 : 6);
646
670
  } }
647
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
648
- const _r20 = i0.ɵɵgetCurrentView();
649
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
671
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template(rf, ctx) { if (rf & 1) {
672
+ const _r21 = i0.ɵɵgetCurrentView();
673
+ i0.ɵɵelementStart(0, "div", 17)(1, "h2", 21);
650
674
  i0.ɵɵtext(2, "Scoring Thresholds");
651
675
  i0.ɵɵelementEnd();
652
- i0.ɵɵelementStart(3, "p", 13);
676
+ i0.ɵɵelementStart(3, "p", 22);
653
677
  i0.ɵɵtext(4, "Set the scoring thresholds used by search, duplicate detection, and autotagging.");
654
678
  i0.ɵɵelementEnd();
655
- i0.ɵɵelementStart(5, "div", 14)(6, "div", 20)(7, "div", 21)(8, "span", 17);
679
+ i0.ɵɵelementStart(5, "div", 23)(6, "div", 29)(7, "div", 30)(8, "span", 26);
656
680
  i0.ɵɵtext(9, "Duplicate Absolute Match");
657
681
  i0.ɵɵelementEnd();
658
- i0.ɵɵelementStart(10, "span", 18);
682
+ i0.ɵɵelementStart(10, "span", 27);
659
683
  i0.ɵɵtext(11);
660
684
  i0.ɵɵelementEnd()();
661
- i0.ɵɵelementStart(12, "input", 107);
662
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.ThresholdSettings.DuplicateAbsolute, $event) || (ctx_r2.ThresholdSettings.DuplicateAbsolute = $event); return i0.ɵɵresetView($event); });
663
- i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_input_12_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
685
+ i0.ɵɵelementStart(12, "input", 116);
686
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.DuplicateAbsolute, $event) || (ctx_r1.ThresholdSettings.DuplicateAbsolute = $event); return i0.ɵɵresetView($event); });
687
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_input_12_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
664
688
  i0.ɵɵelementEnd()();
665
- i0.ɵɵelementStart(13, "div", 20)(14, "div", 21)(15, "span", 17);
689
+ i0.ɵɵelementStart(13, "div", 29)(14, "div", 30)(15, "span", 26);
666
690
  i0.ɵɵtext(16, "Duplicate Potential Match");
667
691
  i0.ɵɵelementEnd();
668
- i0.ɵɵelementStart(17, "span", 18);
692
+ i0.ɵɵelementStart(17, "span", 27);
669
693
  i0.ɵɵtext(18);
670
694
  i0.ɵɵelementEnd()();
671
- i0.ɵɵelementStart(19, "input", 108);
672
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_ngModelChange_19_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.ThresholdSettings.DuplicatePotential, $event) || (ctx_r2.ThresholdSettings.DuplicatePotential = $event); return i0.ɵɵresetView($event); });
673
- i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_input_19_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
695
+ i0.ɵɵelementStart(19, "input", 117);
696
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_ngModelChange_19_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.DuplicatePotential, $event) || (ctx_r1.ThresholdSettings.DuplicatePotential = $event); return i0.ɵɵresetView($event); });
697
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_input_19_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
674
698
  i0.ɵɵelementEnd()();
675
- i0.ɵɵelementStart(20, "div", 20)(21, "div", 21)(22, "span", 17);
699
+ i0.ɵɵelementStart(20, "div", 29)(21, "div", 30)(22, "span", 26);
676
700
  i0.ɵɵtext(23, "Search Relevance");
677
701
  i0.ɵɵelementEnd();
678
- i0.ɵɵelementStart(24, "span", 18);
702
+ i0.ɵɵelementStart(24, "span", 27);
679
703
  i0.ɵɵtext(25);
680
704
  i0.ɵɵelementEnd()();
681
- i0.ɵɵelementStart(26, "input", 109);
682
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.ThresholdSettings.SearchRelevance, $event) || (ctx_r2.ThresholdSettings.SearchRelevance = $event); return i0.ɵɵresetView($event); });
683
- i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_input_26_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
705
+ i0.ɵɵelementStart(26, "input", 118);
706
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_ngModelChange_26_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.SearchRelevance, $event) || (ctx_r1.ThresholdSettings.SearchRelevance = $event); return i0.ɵɵresetView($event); });
707
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_input_26_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
684
708
  i0.ɵɵelementEnd()();
685
- i0.ɵɵelementStart(27, "div", 20)(28, "div", 21)(29, "span", 17);
709
+ i0.ɵɵelementStart(27, "div", 29)(28, "div", 30)(29, "span", 26);
686
710
  i0.ɵɵtext(30, "Autotag Confidence");
687
711
  i0.ɵɵelementEnd();
688
- i0.ɵɵelementStart(31, "span", 18);
712
+ i0.ɵɵelementStart(31, "span", 27);
689
713
  i0.ɵɵtext(32);
690
714
  i0.ɵɵelementEnd()();
691
- i0.ɵɵelementStart(33, "input", 108);
692
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_ngModelChange_33_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.ThresholdSettings.AutotagConfidence, $event) || (ctx_r2.ThresholdSettings.AutotagConfidence = $event); return i0.ɵɵresetView($event); });
693
- i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template_input_input_33_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnSettingChanged()); });
715
+ i0.ɵɵelementStart(33, "input", 117);
716
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_ngModelChange_33_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.AutotagConfidence, $event) || (ctx_r1.ThresholdSettings.AutotagConfidence = $event); return i0.ɵɵresetView($event); });
717
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template_input_input_33_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
694
718
  i0.ɵɵelementEnd()()()();
695
719
  } if (rf & 2) {
696
- const ctx_r2 = i0.ɵɵnextContext(2);
720
+ const ctx_r1 = i0.ɵɵnextContext(2);
697
721
  i0.ɵɵadvance(11);
698
- i0.ɵɵtextInterpolate1("Score above which duplicates are auto-confirmed (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.DuplicateAbsolute), ")");
722
+ i0.ɵɵtextInterpolate1("Score above which duplicates are auto-confirmed (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.DuplicateAbsolute), ")");
699
723
  i0.ɵɵadvance();
700
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.DuplicateAbsolute);
724
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.DuplicateAbsolute);
701
725
  i0.ɵɵadvance(6);
702
- i0.ɵɵtextInterpolate1("Score above which duplicates are flagged for review (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.DuplicatePotential), ")");
726
+ i0.ɵɵtextInterpolate1("Score above which duplicates are flagged for review (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.DuplicatePotential), ")");
703
727
  i0.ɵɵadvance();
704
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.DuplicatePotential);
728
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.DuplicatePotential);
705
729
  i0.ɵɵadvance(6);
706
- i0.ɵɵtextInterpolate1("Minimum score for search results (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.SearchRelevance), ")");
730
+ i0.ɵɵtextInterpolate1("Minimum score for search results (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.SearchRelevance), ")");
707
731
  i0.ɵɵadvance();
708
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.SearchRelevance);
732
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.SearchRelevance);
709
733
  i0.ɵɵadvance(6);
710
- i0.ɵɵtextInterpolate1("Minimum confidence for accepting auto-generated tags (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.AutotagConfidence), ")");
734
+ i0.ɵɵtextInterpolate1("Minimum confidence for accepting auto-generated tags (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.AutotagConfidence), ")");
711
735
  i0.ɵɵadvance();
712
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.AutotagConfidence);
736
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.AutotagConfidence);
713
737
  } }
714
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_14_Template(rf, ctx) { if (rf & 1) {
715
- i0.ɵɵelementStart(0, "div", 115);
738
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_14_Template(rf, ctx) { if (rf & 1) {
739
+ i0.ɵɵelementStart(0, "div", 124);
716
740
  i0.ɵɵtext(1, "Loading\u2026");
717
741
  i0.ɵɵelementEnd();
718
742
  } }
719
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_15_Template(rf, ctx) { if (rf & 1) {
720
- i0.ɵɵelementStart(0, "div", 116);
743
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_15_Template(rf, ctx) { if (rf & 1) {
744
+ i0.ɵɵelementStart(0, "div", 125);
721
745
  i0.ɵɵtext(1, " No scopes defined yet. Click ");
722
746
  i0.ɵɵelementStart(2, "strong");
723
747
  i0.ɵɵtext(3, "New");
@@ -725,174 +749,174 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
725
749
  i0.ɵɵtext(4, " to create one. ");
726
750
  i0.ɵɵelementEnd();
727
751
  } }
728
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
729
- i0.ɵɵelementStart(0, "span", 123);
752
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
753
+ i0.ɵɵelementStart(0, "span", 132);
730
754
  i0.ɵɵtext(1, "Global");
731
755
  i0.ɵɵelementEnd();
732
756
  } }
733
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
734
- i0.ɵɵelementStart(0, "span", 123);
757
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
758
+ i0.ɵɵelementStart(0, "span", 132);
735
759
  i0.ɵɵtext(1, "Default");
736
760
  i0.ɵɵelementEnd();
737
761
  } }
738
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Template(rf, ctx) { if (rf & 1) {
739
- const _r22 = i0.ɵɵgetCurrentView();
740
- i0.ɵɵelementStart(0, "button", 120);
741
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Template_button_click_0_listener() { const s_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SelectScope(s_r23.ID)); });
742
- i0.ɵɵelement(1, "i", 121);
743
- i0.ɵɵelementStart(2, "span", 122);
762
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Template(rf, ctx) { if (rf & 1) {
763
+ const _r23 = i0.ɵɵgetCurrentView();
764
+ i0.ɵɵelementStart(0, "button", 129);
765
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Template_button_click_0_listener() { const s_r24 = i0.ɵɵrestoreView(_r23).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectScope(s_r24.ID)); });
766
+ i0.ɵɵelement(1, "i", 130);
767
+ i0.ɵɵelementStart(2, "span", 131);
744
768
  i0.ɵɵtext(3);
745
769
  i0.ɵɵelementEnd();
746
- i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Conditional_4_Template, 2, 0, "span", 123)(5, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Conditional_5_Template, 2, 0, "span", 123);
770
+ i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Conditional_4_Template, 2, 0, "span", 132)(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Conditional_5_Template, 2, 0, "span", 132);
747
771
  i0.ɵɵelementEnd();
748
772
  } if (rf & 2) {
749
- const s_r23 = ctx.$implicit;
750
- const ctx_r2 = i0.ɵɵnextContext(4);
751
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeID === s_r23.ID);
773
+ const s_r24 = ctx.$implicit;
774
+ const ctx_r1 = i0.ɵɵnextContext(4);
775
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeID === s_r24.ID);
752
776
  i0.ɵɵadvance();
753
- i0.ɵɵclassMap(s_r23.Icon || "fa-solid fa-filter");
777
+ i0.ɵɵclassMap(s_r24.Icon || "fa-solid fa-filter");
754
778
  i0.ɵɵadvance(2);
755
- i0.ɵɵtextInterpolate(s_r23.Name);
779
+ i0.ɵɵtextInterpolate(s_r24.Name);
756
780
  i0.ɵɵadvance();
757
- i0.ɵɵconditional(s_r23.IsGlobal ? 4 : s_r23.IsDefault ? 5 : -1);
781
+ i0.ɵɵconditional(s_r24.IsGlobal ? 4 : s_r24.IsDefault ? 5 : -1);
758
782
  } }
759
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_Template(rf, ctx) { if (rf & 1) {
760
- i0.ɵɵrepeaterCreate(0, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Template, 6, 6, "button", 119, _forTrack0);
783
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_Template(rf, ctx) { if (rf & 1) {
784
+ i0.ɵɵrepeaterCreate(0, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_For_1_Template, 6, 6, "button", 128, _forTrack0);
761
785
  } if (rf & 2) {
762
- const ctx_r2 = i0.ɵɵnextContext(3);
763
- i0.ɵɵrepeater(ctx_r2.SearchScopes);
786
+ const ctx_r1 = i0.ɵɵnextContext(3);
787
+ i0.ɵɵrepeater(ctx_r1.SearchScopes);
764
788
  } }
765
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
766
- const _r25 = i0.ɵɵgetCurrentView();
767
- i0.ɵɵelementStart(0, "button", 136);
768
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.OpenActiveScopeFullForm()); });
769
- i0.ɵɵelement(1, "i", 137);
789
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
790
+ const _r26 = i0.ɵɵgetCurrentView();
791
+ i0.ɵɵelementStart(0, "button", 145);
792
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenActiveScopeFullForm()); });
793
+ i0.ɵɵelement(1, "i", 146);
770
794
  i0.ɵɵtext(2, " Open Full Form ");
771
795
  i0.ɵɵelementEnd();
772
796
  } }
773
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
774
- const _r26 = i0.ɵɵgetCurrentView();
775
- i0.ɵɵelementStart(0, "button", 138);
776
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r26); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.DeleteActiveScope()); });
777
- i0.ɵɵelement(1, "i", 139);
797
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
798
+ const _r27 = i0.ɵɵgetCurrentView();
799
+ i0.ɵɵelementStart(0, "button", 147);
800
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.DeleteActiveScope()); });
801
+ i0.ɵɵelement(1, "i", 148);
778
802
  i0.ɵɵelementEnd();
779
803
  } }
780
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
781
- const _r27 = i0.ɵɵgetCurrentView();
782
- i0.ɵɵelementStart(0, "div", 131)(1, "label")(2, "span");
804
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
805
+ const _r28 = i0.ɵɵgetCurrentView();
806
+ i0.ɵɵelementStart(0, "div", 140)(1, "label")(2, "span");
783
807
  i0.ɵɵtext(3, "Name");
784
808
  i0.ɵɵelementEnd();
785
- i0.ɵɵelementStart(4, "input", 140);
786
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.Name = $event.target.value); });
809
+ i0.ɵɵelementStart(4, "input", 149);
810
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Name = $event.target.value); });
787
811
  i0.ɵɵelementEnd()();
788
812
  i0.ɵɵelementStart(5, "label")(6, "span");
789
813
  i0.ɵɵtext(7, "Icon (Font Awesome class)");
790
814
  i0.ɵɵelementEnd();
791
- i0.ɵɵelementStart(8, "input", 140);
792
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_input_change_8_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.Icon = $event.target.value); });
815
+ i0.ɵɵelementStart(8, "input", 149);
816
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_input_change_8_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Icon = $event.target.value); });
793
817
  i0.ɵɵelementEnd()();
794
- i0.ɵɵelementStart(9, "label", 141)(10, "span");
818
+ i0.ɵɵelementStart(9, "label", 150)(10, "span");
795
819
  i0.ɵɵtext(11, "Description");
796
820
  i0.ɵɵelementEnd();
797
- i0.ɵɵelementStart(12, "textarea", 142);
798
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_textarea_change_12_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.Description = $event.target.value); });
821
+ i0.ɵɵelementStart(12, "textarea", 151);
822
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_textarea_change_12_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Description = $event.target.value); });
799
823
  i0.ɵɵelementEnd()();
800
824
  i0.ɵɵelementStart(13, "label")(14, "span");
801
825
  i0.ɵɵtext(15, "Status");
802
826
  i0.ɵɵelementEnd();
803
- i0.ɵɵelementStart(16, "select", 143);
804
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_select_change_16_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.Status = $event.target.value); });
805
- i0.ɵɵelementStart(17, "option", 144);
827
+ i0.ɵɵelementStart(16, "select", 152);
828
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_select_change_16_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Status = $event.target.value); });
829
+ i0.ɵɵelementStart(17, "option", 153);
806
830
  i0.ɵɵtext(18, "Active");
807
831
  i0.ɵɵelementEnd();
808
- i0.ɵɵelementStart(19, "option", 145);
832
+ i0.ɵɵelementStart(19, "option", 154);
809
833
  i0.ɵɵtext(20, "Inactive");
810
834
  i0.ɵɵelementEnd()()();
811
835
  i0.ɵɵelementStart(21, "label")(22, "span");
812
836
  i0.ɵɵtext(23, "Start at");
813
837
  i0.ɵɵelementEnd();
814
- i0.ɵɵelementStart(24, "input", 146);
815
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_input_change_24_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SetScopeDate(ctx_r2.ActiveScope, "StartAt", $event.target.value)); });
838
+ i0.ɵɵelementStart(24, "input", 155);
839
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_input_change_24_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SetScopeDate(ctx_r1.ActiveScope, "StartAt", $event.target.value)); });
816
840
  i0.ɵɵelementEnd()();
817
841
  i0.ɵɵelementStart(25, "label")(26, "span");
818
842
  i0.ɵɵtext(27, "End at");
819
843
  i0.ɵɵelementEnd();
820
- i0.ɵɵelementStart(28, "input", 146);
821
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_input_change_28_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SetScopeDate(ctx_r2.ActiveScope, "EndAt", $event.target.value)); });
844
+ i0.ɵɵelementStart(28, "input", 155);
845
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_input_change_28_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SetScopeDate(ctx_r1.ActiveScope, "EndAt", $event.target.value)); });
822
846
  i0.ɵɵelementEnd()();
823
- i0.ɵɵelementStart(29, "label", 147)(30, "input", 148);
824
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_input_change_30_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.IsDefault = $event.target.checked); });
847
+ i0.ɵɵelementStart(29, "label", 156)(30, "input", 157);
848
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_input_change_30_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.IsDefault = $event.target.checked); });
825
849
  i0.ɵɵelementEnd();
826
850
  i0.ɵɵelementStart(31, "span");
827
851
  i0.ɵɵtext(32, "Default scope \u2014 picked when users/agents don't specify one");
828
852
  i0.ɵɵelementEnd()();
829
- i0.ɵɵelementStart(33, "label", 147);
830
- i0.ɵɵelement(34, "input", 149);
853
+ i0.ɵɵelementStart(33, "label", 156);
854
+ i0.ɵɵelement(34, "input", 158);
831
855
  i0.ɵɵelementStart(35, "span");
832
856
  i0.ɵɵtext(36, "Global \u2014 reserved for the built-in Global scope (read-only)");
833
857
  i0.ɵɵelementEnd()();
834
- i0.ɵɵelementStart(37, "label", 141)(38, "span");
858
+ i0.ɵɵelementStart(37, "label", 150)(38, "span");
835
859
  i0.ɵɵtext(39, "Scope Config (JSON)");
836
860
  i0.ɵɵelementEnd();
837
- i0.ɵɵelementStart(40, "textarea", 150);
838
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_textarea_change_40_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.ScopeConfig = $event.target.value); });
861
+ i0.ɵɵelementStart(40, "textarea", 159);
862
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_textarea_change_40_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.ScopeConfig = $event.target.value); });
839
863
  i0.ɵɵelementEnd()();
840
- i0.ɵɵelementStart(41, "label", 141)(42, "span");
864
+ i0.ɵɵelementStart(41, "label", 150)(42, "span");
841
865
  i0.ɵɵtext(43, "Search Context Config (JSON)");
842
866
  i0.ɵɵelementEnd();
843
- i0.ɵɵelementStart(44, "textarea", 150);
844
- i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template_textarea_change_44_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.ActiveScope.SearchContextConfig = $event.target.value); });
867
+ i0.ɵɵelementStart(44, "textarea", 159);
868
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template_textarea_change_44_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.SearchContextConfig = $event.target.value); });
845
869
  i0.ɵɵelementEnd()()();
846
870
  } if (rf & 2) {
847
- const ctx_r2 = i0.ɵɵnextContext(4);
871
+ const ctx_r1 = i0.ɵɵnextContext(4);
848
872
  i0.ɵɵadvance(4);
849
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Name);
873
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Name);
850
874
  i0.ɵɵadvance(4);
851
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Icon || "");
875
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Icon || "");
852
876
  i0.ɵɵadvance(4);
853
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Description || "");
877
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Description || "");
854
878
  i0.ɵɵadvance(4);
855
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Status);
879
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Status);
856
880
  i0.ɵɵadvance(8);
857
- i0.ɵɵproperty("value", ctx_r2.FormatScopeDate(ctx_r2.ActiveScope.StartAt));
881
+ i0.ɵɵproperty("value", ctx_r1.FormatScopeDate(ctx_r1.ActiveScope.StartAt));
858
882
  i0.ɵɵadvance(4);
859
- i0.ɵɵproperty("value", ctx_r2.FormatScopeDate(ctx_r2.ActiveScope.EndAt));
883
+ i0.ɵɵproperty("value", ctx_r1.FormatScopeDate(ctx_r1.ActiveScope.EndAt));
860
884
  i0.ɵɵadvance(2);
861
- i0.ɵɵproperty("checked", ctx_r2.ActiveScope.IsDefault)("disabled", ctx_r2.ActiveScope.IsGlobal);
885
+ i0.ɵɵproperty("checked", ctx_r1.ActiveScope.IsDefault)("disabled", ctx_r1.ActiveScope.IsGlobal);
862
886
  i0.ɵɵadvance(4);
863
- i0.ɵɵproperty("checked", ctx_r2.ActiveScope.IsGlobal);
887
+ i0.ɵɵproperty("checked", ctx_r1.ActiveScope.IsGlobal);
864
888
  i0.ɵɵadvance(6);
865
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.ScopeConfig || "");
889
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.ScopeConfig || "");
866
890
  i0.ɵɵadvance(4);
867
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.SearchContextConfig || "");
891
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.SearchContextConfig || "");
868
892
  } }
869
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_20_Template(rf, ctx) { if (rf & 1) {
870
- i0.ɵɵelement(0, "mj-search-scope-child-grid", 132);
893
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_20_Template(rf, ctx) { if (rf & 1) {
894
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 141);
871
895
  } if (rf & 2) {
872
- const ctx_r2 = i0.ɵɵnextContext(4);
873
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeProviderColumns);
896
+ const ctx_r1 = i0.ɵɵnextContext(4);
897
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeProviderColumns);
874
898
  } }
875
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_21_Template(rf, ctx) { if (rf & 1) {
876
- i0.ɵɵelement(0, "mj-search-scope-child-grid", 133);
899
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_21_Template(rf, ctx) { if (rf & 1) {
900
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 142);
877
901
  } if (rf & 2) {
878
- const ctx_r2 = i0.ɵɵnextContext(4);
879
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeExternalIndexColumns);
902
+ const ctx_r1 = i0.ɵɵnextContext(4);
903
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeExternalIndexColumns);
880
904
  } }
881
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_22_Template(rf, ctx) { if (rf & 1) {
882
- i0.ɵɵelement(0, "mj-search-scope-child-grid", 134);
905
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_22_Template(rf, ctx) { if (rf & 1) {
906
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 143);
883
907
  } if (rf & 2) {
884
- const ctx_r2 = i0.ɵɵnextContext(4);
885
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeEntityColumns);
908
+ const ctx_r1 = i0.ɵɵnextContext(4);
909
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeEntityColumns);
886
910
  } }
887
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_23_Template(rf, ctx) { if (rf & 1) {
888
- i0.ɵɵelement(0, "mj-search-scope-child-grid", 135);
911
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_23_Template(rf, ctx) { if (rf & 1) {
912
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 144);
889
913
  } if (rf & 2) {
890
- const ctx_r2 = i0.ɵɵnextContext(4);
891
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeStorageColumns);
914
+ const ctx_r1 = i0.ɵɵnextContext(4);
915
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeStorageColumns);
892
916
  } }
893
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_24_Template(rf, ctx) { if (rf & 1) {
894
- i0.ɵɵelementStart(0, "div", 151)(1, "p", 152);
895
- i0.ɵɵelement(2, "i", 153);
917
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_24_Template(rf, ctx) { if (rf & 1) {
918
+ i0.ɵɵelementStart(0, "div", 160)(1, "p", 161);
919
+ i0.ɵɵelement(2, "i", 162);
896
920
  i0.ɵɵelementStart(3, "strong");
897
921
  i0.ɵɵtext(4, "Per-user / per-role grants on this scope.");
898
922
  i0.ɵɵelementEnd();
@@ -926,86 +950,86 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
926
950
  i0.ɵɵelementEnd();
927
951
  i0.ɵɵtext(26, " via the resolver \u2014 see the spec for the full resolution order. ");
928
952
  i0.ɵɵelementEnd()();
929
- i0.ɵɵelement(27, "mj-search-scope-child-grid", 154);
953
+ i0.ɵɵelement(27, "mj-search-scope-child-grid", 163);
930
954
  } if (rf & 2) {
931
- const ctx_r2 = i0.ɵɵnextContext(4);
955
+ const ctx_r1 = i0.ɵɵnextContext(4);
932
956
  i0.ɵɵadvance(27);
933
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopePermissionColumns);
957
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopePermissionColumns);
934
958
  } }
935
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template(rf, ctx) { if (rf & 1) {
936
- const _r24 = i0.ɵɵgetCurrentView();
937
- i0.ɵɵelementStart(0, "div", 124)(1, "button", 125);
938
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectScopeTab("definition")); });
959
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template(rf, ctx) { if (rf & 1) {
960
+ const _r25 = i0.ɵɵgetCurrentView();
961
+ i0.ɵɵelementStart(0, "div", 133)(1, "button", 134);
962
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("definition")); });
939
963
  i0.ɵɵtext(2, "Definition");
940
964
  i0.ɵɵelementEnd();
941
- i0.ɵɵelementStart(3, "button", 125);
942
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectScopeTab("providers")); });
965
+ i0.ɵɵelementStart(3, "button", 134);
966
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("providers")); });
943
967
  i0.ɵɵtext(4, "Providers");
944
968
  i0.ɵɵelementEnd();
945
- i0.ɵɵelementStart(5, "button", 125);
946
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectScopeTab("indexes")); });
969
+ i0.ɵɵelementStart(5, "button", 134);
970
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("indexes")); });
947
971
  i0.ɵɵtext(6, "External Indexes");
948
972
  i0.ɵɵelementEnd();
949
- i0.ɵɵelementStart(7, "button", 125);
950
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectScopeTab("entities")); });
973
+ i0.ɵɵelementStart(7, "button", 134);
974
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("entities")); });
951
975
  i0.ɵɵtext(8, "Entities");
952
976
  i0.ɵɵelementEnd();
953
- i0.ɵɵelementStart(9, "button", 125);
954
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectScopeTab("storage")); });
977
+ i0.ɵɵelementStart(9, "button", 134);
978
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("storage")); });
955
979
  i0.ɵɵtext(10, "Storage");
956
980
  i0.ɵɵelementEnd();
957
- i0.ɵɵelementStart(11, "button", 125);
958
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectScopeTab("permissions")); });
981
+ i0.ɵɵelementStart(11, "button", 134);
982
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("permissions")); });
959
983
  i0.ɵɵtext(12, "Permissions");
960
984
  i0.ɵɵelementEnd();
961
- i0.ɵɵelement(13, "div", 126);
962
- i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_14_Template, 3, 0, "button", 127);
963
- i0.ɵɵelementStart(15, "button", 128);
964
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SaveActiveScope()); });
965
- i0.ɵɵelement(16, "i", 129);
985
+ i0.ɵɵelement(13, "div", 135);
986
+ i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_14_Template, 3, 0, "button", 136);
987
+ i0.ɵɵelementStart(15, "button", 137);
988
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SaveActiveScope()); });
989
+ i0.ɵɵelement(16, "i", 138);
966
990
  i0.ɵɵtext(17, " Save ");
967
991
  i0.ɵɵelementEnd();
968
- i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_18_Template, 2, 0, "button", 130);
992
+ i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_18_Template, 2, 0, "button", 139);
969
993
  i0.ɵɵelementEnd();
970
- i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template, 45, 11, "div", 131);
971
- i0.ɵɵconditionalCreate(20, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_20_Template, 1, 2, "mj-search-scope-child-grid", 132);
972
- i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_21_Template, 1, 2, "mj-search-scope-child-grid", 133);
973
- i0.ɵɵconditionalCreate(22, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_22_Template, 1, 2, "mj-search-scope-child-grid", 134);
974
- i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_23_Template, 1, 2, "mj-search-scope-child-grid", 135);
975
- i0.ɵɵconditionalCreate(24, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_24_Template, 28, 2);
994
+ i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_19_Template, 45, 11, "div", 140);
995
+ i0.ɵɵconditionalCreate(20, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_20_Template, 1, 2, "mj-search-scope-child-grid", 141);
996
+ i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_21_Template, 1, 2, "mj-search-scope-child-grid", 142);
997
+ i0.ɵɵconditionalCreate(22, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_22_Template, 1, 2, "mj-search-scope-child-grid", 143);
998
+ i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_23_Template, 1, 2, "mj-search-scope-child-grid", 144);
999
+ i0.ɵɵconditionalCreate(24, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Conditional_24_Template, 28, 2);
976
1000
  } if (rf & 2) {
977
- const ctx_r2 = i0.ɵɵnextContext(3);
1001
+ const ctx_r1 = i0.ɵɵnextContext(3);
978
1002
  i0.ɵɵadvance();
979
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "definition");
1003
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "definition");
980
1004
  i0.ɵɵadvance(2);
981
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "providers");
1005
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "providers");
982
1006
  i0.ɵɵadvance(2);
983
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "indexes");
1007
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "indexes");
984
1008
  i0.ɵɵadvance(2);
985
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "entities");
1009
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "entities");
986
1010
  i0.ɵɵadvance(2);
987
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "storage");
1011
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "storage");
988
1012
  i0.ɵɵadvance(2);
989
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "permissions");
1013
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "permissions");
990
1014
  i0.ɵɵadvance(3);
991
- i0.ɵɵconditional(ctx_r2.ActiveScope.ID ? 14 : -1);
1015
+ i0.ɵɵconditional(ctx_r1.ActiveScope.ID ? 14 : -1);
992
1016
  i0.ɵɵadvance(4);
993
- i0.ɵɵconditional(!ctx_r2.ActiveScope.IsGlobal ? 18 : -1);
1017
+ i0.ɵɵconditional(!ctx_r1.ActiveScope.IsGlobal ? 18 : -1);
994
1018
  i0.ɵɵadvance();
995
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "definition" ? 19 : -1);
1019
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "definition" ? 19 : -1);
996
1020
  i0.ɵɵadvance();
997
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "providers" ? 20 : -1);
1021
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "providers" ? 20 : -1);
998
1022
  i0.ɵɵadvance();
999
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "indexes" ? 21 : -1);
1023
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "indexes" ? 21 : -1);
1000
1024
  i0.ɵɵadvance();
1001
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "entities" ? 22 : -1);
1025
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "entities" ? 22 : -1);
1002
1026
  i0.ɵɵadvance();
1003
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "storage" ? 23 : -1);
1027
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "storage" ? 23 : -1);
1004
1028
  i0.ɵɵadvance();
1005
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "permissions" ? 24 : -1);
1029
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "permissions" ? 24 : -1);
1006
1030
  } }
1007
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1008
- i0.ɵɵelementStart(0, "div", 118);
1031
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1032
+ i0.ɵɵelementStart(0, "div", 127);
1009
1033
  i0.ɵɵtext(1, " Select a scope on the left, or click ");
1010
1034
  i0.ɵɵelementStart(2, "strong");
1011
1035
  i0.ɵɵtext(3, "New");
@@ -1013,54 +1037,54 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
1013
1037
  i0.ɵɵtext(4, " to create one. ");
1014
1038
  i0.ɵɵelementEnd();
1015
1039
  } }
1016
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1017
- const _r21 = i0.ɵɵgetCurrentView();
1018
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
1019
- i0.ɵɵelement(2, "i", 110);
1040
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1041
+ const _r22 = i0.ɵɵgetCurrentView();
1042
+ i0.ɵɵelementStart(0, "div", 17)(1, "h2", 21);
1043
+ i0.ɵɵelement(2, "i", 119);
1020
1044
  i0.ɵɵtext(3, " Search Scopes");
1021
1045
  i0.ɵɵelementEnd();
1022
- i0.ɵɵelementStart(4, "p", 13);
1046
+ i0.ɵɵelementStart(4, "p", 22);
1023
1047
  i0.ɵɵtext(5, " Define reusable search scopes that filter which providers, entities, external indexes, and storage accounts participate in a scoped search. Scopes can be assigned to AI agents for pre-execution RAG or agent-invoked search. ");
1024
1048
  i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(6, "div", 111)(7, "aside", 112)(8, "div", 113)(9, "span");
1049
+ i0.ɵɵelementStart(6, "div", 120)(7, "aside", 121)(8, "div", 122)(9, "span");
1026
1050
  i0.ɵɵtext(10);
1027
1051
  i0.ɵɵelementEnd();
1028
- i0.ɵɵelementStart(11, "button", 114);
1029
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r21); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.CreateNewScope()); });
1030
- i0.ɵɵelement(12, "i", 58);
1052
+ i0.ɵɵelementStart(11, "button", 123);
1053
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CreateNewScope()); });
1054
+ i0.ɵɵelement(12, "i", 67);
1031
1055
  i0.ɵɵtext(13, " New ");
1032
1056
  i0.ɵɵelementEnd()();
1033
- i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_14_Template, 2, 0, "div", 115)(15, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_15_Template, 5, 0, "div", 116)(16, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_Template, 2, 0);
1057
+ i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_14_Template, 2, 0, "div", 124)(15, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_15_Template, 5, 0, "div", 125)(16, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_16_Template, 2, 0);
1034
1058
  i0.ɵɵelementEnd();
1035
- i0.ɵɵelementStart(17, "section", 117);
1036
- i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template, 25, 20)(19, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_19_Template, 5, 0, "div", 118);
1059
+ i0.ɵɵelementStart(17, "section", 126);
1060
+ i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_18_Template, 25, 20)(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_19_Template, 5, 0, "div", 127);
1037
1061
  i0.ɵɵelementEnd()()();
1038
1062
  } if (rf & 2) {
1039
- const ctx_r2 = i0.ɵɵnextContext(2);
1063
+ const ctx_r1 = i0.ɵɵnextContext(2);
1040
1064
  i0.ɵɵadvance(10);
1041
- i0.ɵɵtextInterpolate1("Scopes (", ctx_r2.SearchScopes.length, ")");
1065
+ i0.ɵɵtextInterpolate1("Scopes (", ctx_r1.SearchScopes.length, ")");
1042
1066
  i0.ɵɵadvance(4);
1043
- i0.ɵɵconditional(ctx_r2.IsLoadingScopes ? 14 : ctx_r2.SearchScopes.length === 0 ? 15 : 16);
1067
+ i0.ɵɵconditional(ctx_r1.IsLoadingScopes ? 14 : ctx_r1.SearchScopes.length === 0 ? 15 : 16);
1044
1068
  i0.ɵɵadvance(4);
1045
- i0.ɵɵconditional(ctx_r2.ActiveScope ? 18 : 19);
1069
+ i0.ɵɵconditional(ctx_r1.ActiveScope ? 18 : 19);
1046
1070
  } }
1047
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1048
- i0.ɵɵelement(0, "mj-loading", 156);
1071
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1072
+ i0.ɵɵelement(0, "mj-loading", 165);
1049
1073
  } }
1050
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1051
- const _r28 = i0.ɵɵgetCurrentView();
1052
- i0.ɵɵelementStart(0, "button", 158);
1053
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.LoadSearchAnalytics()); });
1054
- i0.ɵɵelement(1, "i", 159);
1074
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1075
+ const _r29 = i0.ɵɵgetCurrentView();
1076
+ i0.ɵɵelementStart(0, "button", 167);
1077
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.LoadSearchAnalytics()); });
1078
+ i0.ɵɵelement(1, "i", 168);
1055
1079
  i0.ɵɵtext(2, " Load analytics ");
1056
1080
  i0.ɵɵelementEnd();
1057
1081
  } }
1058
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_37_Template(rf, ctx) { if (rf & 1) {
1059
- i0.ɵɵelementStart(0, "p", 166);
1082
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_37_Template(rf, ctx) { if (rf & 1) {
1083
+ i0.ɵɵelementStart(0, "p", 175);
1060
1084
  i0.ɵɵtext(1, "No runs in the window.");
1061
1085
  i0.ɵɵelementEnd();
1062
1086
  } }
1063
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_38_For_11_Template(rf, ctx) { if (rf & 1) {
1087
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_38_For_11_Template(rf, ctx) { if (rf & 1) {
1064
1088
  i0.ɵɵelementStart(0, "tr")(1, "td");
1065
1089
  i0.ɵɵtext(2);
1066
1090
  i0.ɵɵelementEnd();
@@ -1072,16 +1096,16 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1072
1096
  i0.ɵɵtext(7);
1073
1097
  i0.ɵɵelementEnd()();
1074
1098
  } if (rf & 2) {
1075
- const s_r30 = ctx.$implicit;
1099
+ const s_r31 = ctx.$implicit;
1076
1100
  i0.ɵɵadvance(2);
1077
- i0.ɵɵtextInterpolate(s_r30.Name);
1101
+ i0.ɵɵtextInterpolate(s_r31.Name);
1078
1102
  i0.ɵɵadvance(2);
1079
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 3, s_r30.Count));
1103
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 3, s_r31.Count));
1080
1104
  i0.ɵɵadvance(3);
1081
- i0.ɵɵtextInterpolate1("", s_r30.AvgLatencyMs, "ms");
1105
+ i0.ɵɵtextInterpolate1("", s_r31.AvgLatencyMs, "ms");
1082
1106
  } }
1083
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_38_Template(rf, ctx) { if (rf & 1) {
1084
- i0.ɵɵelementStart(0, "table", 167)(1, "thead")(2, "tr")(3, "th");
1107
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_38_Template(rf, ctx) { if (rf & 1) {
1108
+ i0.ɵɵelementStart(0, "table", 176)(1, "thead")(2, "tr")(3, "th");
1085
1109
  i0.ɵɵtext(4, "Scope");
1086
1110
  i0.ɵɵelementEnd();
1087
1111
  i0.ɵɵelementStart(5, "th");
@@ -1091,19 +1115,19 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1091
1115
  i0.ɵɵtext(8, "Avg latency");
1092
1116
  i0.ɵɵelementEnd()()();
1093
1117
  i0.ɵɵelementStart(9, "tbody");
1094
- i0.ɵɵrepeaterCreate(10, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_38_For_11_Template, 8, 5, "tr", null, _forTrack2);
1118
+ i0.ɵɵrepeaterCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_38_For_11_Template, 8, 5, "tr", null, _forTrack2);
1095
1119
  i0.ɵɵelementEnd()();
1096
1120
  } if (rf & 2) {
1097
- const ctx_r2 = i0.ɵɵnextContext(4);
1121
+ const ctx_r1 = i0.ɵɵnextContext(4);
1098
1122
  i0.ɵɵadvance(10);
1099
- i0.ɵɵrepeater(ctx_r2.AnalyticsTopScopes);
1123
+ i0.ɵɵrepeater(ctx_r1.AnalyticsTopScopes);
1100
1124
  } }
1101
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_41_Template(rf, ctx) { if (rf & 1) {
1102
- i0.ɵɵelementStart(0, "p", 166);
1125
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_41_Template(rf, ctx) { if (rf & 1) {
1126
+ i0.ɵɵelementStart(0, "p", 175);
1103
1127
  i0.ɵɵtext(1, "No rerank invocations in the window.");
1104
1128
  i0.ɵɵelementEnd();
1105
1129
  } }
1106
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_42_For_11_Template(rf, ctx) { if (rf & 1) {
1130
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_42_For_11_Template(rf, ctx) { if (rf & 1) {
1107
1131
  i0.ɵɵelementStart(0, "tr")(1, "td");
1108
1132
  i0.ɵɵtext(2);
1109
1133
  i0.ɵɵelementEnd();
@@ -1116,16 +1140,16 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1116
1140
  i0.ɵɵpipe(8, "number");
1117
1141
  i0.ɵɵelementEnd()();
1118
1142
  } if (rf & 2) {
1119
- const r_r31 = ctx.$implicit;
1143
+ const r_r32 = ctx.$implicit;
1120
1144
  i0.ɵɵadvance(2);
1121
- i0.ɵɵtextInterpolate(r_r31.Reranker);
1145
+ i0.ɵɵtextInterpolate(r_r32.Reranker);
1122
1146
  i0.ɵɵadvance(2);
1123
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 3, r_r31.Count));
1147
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 3, r_r32.Count));
1124
1148
  i0.ɵɵadvance(3);
1125
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(8, 5, r_r31.TotalCents, "1.0-2"), "\u00A2");
1149
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(8, 5, r_r32.TotalCents, "1.0-2"), "\u00A2");
1126
1150
  } }
1127
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_42_Template(rf, ctx) { if (rf & 1) {
1128
- i0.ɵɵelementStart(0, "table", 167)(1, "thead")(2, "tr")(3, "th");
1151
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_42_Template(rf, ctx) { if (rf & 1) {
1152
+ i0.ɵɵelementStart(0, "table", 176)(1, "thead")(2, "tr")(3, "th");
1129
1153
  i0.ɵɵtext(4, "Reranker");
1130
1154
  i0.ɵɵelementEnd();
1131
1155
  i0.ɵɵelementStart(5, "th");
@@ -1135,19 +1159,19 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1135
1159
  i0.ɵɵtext(8, "Total cents");
1136
1160
  i0.ɵɵelementEnd()()();
1137
1161
  i0.ɵɵelementStart(9, "tbody");
1138
- i0.ɵɵrepeaterCreate(10, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_42_For_11_Template, 9, 8, "tr", null, _forTrack3);
1162
+ i0.ɵɵrepeaterCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_42_For_11_Template, 9, 8, "tr", null, _forTrack3);
1139
1163
  i0.ɵɵelementEnd()();
1140
1164
  } if (rf & 2) {
1141
- const ctx_r2 = i0.ɵɵnextContext(4);
1165
+ const ctx_r1 = i0.ɵɵnextContext(4);
1142
1166
  i0.ɵɵadvance(10);
1143
- i0.ɵɵrepeater(ctx_r2.AnalyticsRerankerSpend);
1167
+ i0.ɵɵrepeater(ctx_r1.AnalyticsRerankerSpend);
1144
1168
  } }
1145
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_45_Template(rf, ctx) { if (rf & 1) {
1146
- i0.ɵɵelementStart(0, "p", 166);
1169
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_45_Template(rf, ctx) { if (rf & 1) {
1170
+ i0.ɵɵelementStart(0, "p", 175);
1147
1171
  i0.ɵɵtext(1, "No failures in the window.");
1148
1172
  i0.ɵɵelementEnd();
1149
1173
  } }
1150
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_46_For_9_Template(rf, ctx) { if (rf & 1) {
1174
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_46_For_9_Template(rf, ctx) { if (rf & 1) {
1151
1175
  i0.ɵɵelementStart(0, "tr")(1, "td");
1152
1176
  i0.ɵɵtext(2);
1153
1177
  i0.ɵɵelementEnd();
@@ -1156,197 +1180,197 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1156
1180
  i0.ɵɵpipe(5, "number");
1157
1181
  i0.ɵɵelementEnd()();
1158
1182
  } if (rf & 2) {
1159
- const f_r32 = ctx.$implicit;
1183
+ const f_r33 = ctx.$implicit;
1160
1184
  i0.ɵɵadvance(2);
1161
- i0.ɵɵtextInterpolate(f_r32.Reason);
1185
+ i0.ɵɵtextInterpolate(f_r33.Reason);
1162
1186
  i0.ɵɵadvance(2);
1163
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 2, f_r32.Count));
1187
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 2, f_r33.Count));
1164
1188
  } }
1165
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_46_Template(rf, ctx) { if (rf & 1) {
1166
- i0.ɵɵelementStart(0, "table", 167)(1, "thead")(2, "tr")(3, "th");
1189
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_46_Template(rf, ctx) { if (rf & 1) {
1190
+ i0.ɵɵelementStart(0, "table", 176)(1, "thead")(2, "tr")(3, "th");
1167
1191
  i0.ɵɵtext(4, "Reason");
1168
1192
  i0.ɵɵelementEnd();
1169
1193
  i0.ɵɵelementStart(5, "th");
1170
1194
  i0.ɵɵtext(6, "Count");
1171
1195
  i0.ɵɵelementEnd()()();
1172
1196
  i0.ɵɵelementStart(7, "tbody");
1173
- i0.ɵɵrepeaterCreate(8, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_46_For_9_Template, 6, 4, "tr", null, _forTrack4);
1197
+ i0.ɵɵrepeaterCreate(8, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_46_For_9_Template, 6, 4, "tr", null, _forTrack4);
1174
1198
  i0.ɵɵelementEnd()();
1175
1199
  } if (rf & 2) {
1176
- const ctx_r2 = i0.ɵɵnextContext(4);
1200
+ const ctx_r1 = i0.ɵɵnextContext(4);
1177
1201
  i0.ɵɵadvance(8);
1178
- i0.ɵɵrepeater(ctx_r2.AnalyticsTopFailures);
1202
+ i0.ɵɵrepeater(ctx_r1.AnalyticsTopFailures);
1179
1203
  } }
1180
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1181
- const _r29 = i0.ɵɵgetCurrentView();
1182
- i0.ɵɵelementStart(0, "div", 160)(1, "div", 161)(2, "span", 162);
1204
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1205
+ const _r30 = i0.ɵɵgetCurrentView();
1206
+ i0.ɵɵelementStart(0, "div", 169)(1, "div", 170)(2, "span", 171);
1183
1207
  i0.ɵɵtext(3, "Total runs");
1184
1208
  i0.ɵɵelementEnd();
1185
- i0.ɵɵelementStart(4, "span", 163);
1209
+ i0.ɵɵelementStart(4, "span", 172);
1186
1210
  i0.ɵɵtext(5);
1187
1211
  i0.ɵɵpipe(6, "number");
1188
1212
  i0.ɵɵelementEnd()();
1189
- i0.ɵɵelementStart(7, "div", 161)(8, "span", 162);
1213
+ i0.ɵɵelementStart(7, "div", 170)(8, "span", 171);
1190
1214
  i0.ɵɵtext(9, "Success rate");
1191
1215
  i0.ɵɵelementEnd();
1192
- i0.ɵɵelementStart(10, "span", 163);
1216
+ i0.ɵɵelementStart(10, "span", 172);
1193
1217
  i0.ɵɵtext(11);
1194
1218
  i0.ɵɵelementEnd()();
1195
- i0.ɵɵelementStart(12, "div", 161)(13, "span", 162);
1219
+ i0.ɵɵelementStart(12, "div", 170)(13, "span", 171);
1196
1220
  i0.ɵɵtext(14, "Hit rate");
1197
1221
  i0.ɵɵelementEnd();
1198
- i0.ɵɵelementStart(15, "span", 163);
1222
+ i0.ɵɵelementStart(15, "span", 172);
1199
1223
  i0.ɵɵtext(16);
1200
1224
  i0.ɵɵelementEnd();
1201
- i0.ɵɵelementStart(17, "span", 164);
1225
+ i0.ɵɵelementStart(17, "span", 173);
1202
1226
  i0.ɵɵtext(18, "% of successful runs that returned \u22651 result");
1203
1227
  i0.ɵɵelementEnd()();
1204
- i0.ɵɵelementStart(19, "div", 161)(20, "span", 162);
1228
+ i0.ɵɵelementStart(19, "div", 170)(20, "span", 171);
1205
1229
  i0.ɵɵtext(21, "Avg latency");
1206
1230
  i0.ɵɵelementEnd();
1207
- i0.ɵɵelementStart(22, "span", 163);
1231
+ i0.ɵɵelementStart(22, "span", 172);
1208
1232
  i0.ɵɵtext(23);
1209
1233
  i0.ɵɵelementEnd()();
1210
- i0.ɵɵelementStart(24, "div", 161)(25, "span", 162);
1234
+ i0.ɵɵelementStart(24, "div", 170)(25, "span", 171);
1211
1235
  i0.ɵɵtext(26, "P95 latency");
1212
1236
  i0.ɵɵelementEnd();
1213
- i0.ɵɵelementStart(27, "span", 163);
1237
+ i0.ɵɵelementStart(27, "span", 172);
1214
1238
  i0.ɵɵtext(28);
1215
1239
  i0.ɵɵelementEnd()();
1216
- i0.ɵɵelementStart(29, "div", 161)(30, "span", 162);
1240
+ i0.ɵɵelementStart(29, "div", 170)(30, "span", 171);
1217
1241
  i0.ɵɵtext(31, "Reranker spend");
1218
1242
  i0.ɵɵelementEnd();
1219
- i0.ɵɵelementStart(32, "span", 163);
1243
+ i0.ɵɵelementStart(32, "span", 172);
1220
1244
  i0.ɵɵtext(33);
1221
1245
  i0.ɵɵpipe(34, "number");
1222
1246
  i0.ɵɵelementEnd()()();
1223
- i0.ɵɵelementStart(35, "h3", 165);
1247
+ i0.ɵɵelementStart(35, "h3", 174);
1224
1248
  i0.ɵɵtext(36, "Top scopes by volume");
1225
1249
  i0.ɵɵelementEnd();
1226
- i0.ɵɵconditionalCreate(37, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_37_Template, 2, 0, "p", 166)(38, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_38_Template, 12, 0, "table", 167);
1227
- i0.ɵɵelementStart(39, "h3", 165);
1250
+ i0.ɵɵconditionalCreate(37, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_37_Template, 2, 0, "p", 175)(38, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_38_Template, 12, 0, "table", 176);
1251
+ i0.ɵɵelementStart(39, "h3", 174);
1228
1252
  i0.ɵɵtext(40, "Reranker spend by driver");
1229
1253
  i0.ɵɵelementEnd();
1230
- i0.ɵɵconditionalCreate(41, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_41_Template, 2, 0, "p", 166)(42, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_42_Template, 12, 0, "table", 167);
1231
- i0.ɵɵelementStart(43, "h3", 165);
1254
+ i0.ɵɵconditionalCreate(41, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_41_Template, 2, 0, "p", 175)(42, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_42_Template, 12, 0, "table", 176);
1255
+ i0.ɵɵelementStart(43, "h3", 174);
1232
1256
  i0.ɵɵtext(44, "Top failure reasons");
1233
1257
  i0.ɵɵelementEnd();
1234
- i0.ɵɵconditionalCreate(45, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_45_Template, 2, 0, "p", 166)(46, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_46_Template, 10, 0, "table", 167);
1235
- i0.ɵɵelementStart(47, "button", 168);
1236
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Template_button_click_47_listener() { i0.ɵɵrestoreView(_r29); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.LoadSearchAnalytics()); });
1237
- i0.ɵɵelement(48, "i", 159);
1258
+ i0.ɵɵconditionalCreate(45, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_45_Template, 2, 0, "p", 175)(46, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Conditional_46_Template, 10, 0, "table", 176);
1259
+ i0.ɵɵelementStart(47, "button", 177);
1260
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Template_button_click_47_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.LoadSearchAnalytics()); });
1261
+ i0.ɵɵelement(48, "i", 168);
1238
1262
  i0.ɵɵtext(49, " Refresh ");
1239
1263
  i0.ɵɵelementEnd();
1240
1264
  } if (rf & 2) {
1241
- const ctx_r2 = i0.ɵɵnextContext(3);
1265
+ const ctx_r1 = i0.ɵɵnextContext(3);
1242
1266
  i0.ɵɵadvance(5);
1243
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 9, ctx_r2.AnalyticsTotalRuns));
1267
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 9, ctx_r1.AnalyticsTotalRuns));
1244
1268
  i0.ɵɵadvance(6);
1245
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsSuccessRate, "%");
1269
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsSuccessRate, "%");
1246
1270
  i0.ɵɵadvance(5);
1247
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsHitRate, "%");
1271
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsHitRate, "%");
1248
1272
  i0.ɵɵadvance(7);
1249
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsAvgLatencyMs, "ms");
1273
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsAvgLatencyMs, "ms");
1250
1274
  i0.ɵɵadvance(5);
1251
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsP95LatencyMs, "ms");
1275
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsP95LatencyMs, "ms");
1252
1276
  i0.ɵɵadvance(5);
1253
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(34, 11, ctx_r2.AnalyticsTotalRerankerCostCents, "1.0-2"), "\u00A2");
1277
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(34, 11, ctx_r1.AnalyticsTotalRerankerCostCents, "1.0-2"), "\u00A2");
1254
1278
  i0.ɵɵadvance(4);
1255
- i0.ɵɵconditional(ctx_r2.AnalyticsTopScopes.length === 0 ? 37 : 38);
1279
+ i0.ɵɵconditional(ctx_r1.AnalyticsTopScopes.length === 0 ? 37 : 38);
1256
1280
  i0.ɵɵadvance(4);
1257
- i0.ɵɵconditional(ctx_r2.AnalyticsRerankerSpend.length === 0 ? 41 : 42);
1281
+ i0.ɵɵconditional(ctx_r1.AnalyticsRerankerSpend.length === 0 ? 41 : 42);
1258
1282
  i0.ɵɵadvance(4);
1259
- i0.ɵɵconditional(ctx_r2.AnalyticsTopFailures.length === 0 ? 45 : 46);
1283
+ i0.ɵɵconditional(ctx_r1.AnalyticsTopFailures.length === 0 ? 45 : 46);
1260
1284
  } }
1261
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1262
- i0.ɵɵelementStart(0, "div", 9)(1, "h2", 12);
1263
- i0.ɵɵelement(2, "i", 155);
1285
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1286
+ i0.ɵɵelementStart(0, "div", 18)(1, "h2", 21);
1287
+ i0.ɵɵelement(2, "i", 164);
1264
1288
  i0.ɵɵtext(3, " Search Analytics");
1265
1289
  i0.ɵɵelementEnd();
1266
- i0.ɵɵelementStart(4, "p", 13);
1290
+ i0.ɵɵelementStart(4, "p", 22);
1267
1291
  i0.ɵɵtext(5, "Aggregated metrics over the last 5,000 search invocations from ");
1268
1292
  i0.ɵɵelementStart(6, "code");
1269
1293
  i0.ɵɵtext(7, "MJ: Search Execution Logs");
1270
1294
  i0.ɵɵelementEnd();
1271
1295
  i0.ɵɵtext(8, ". Use this to spot slow scopes, high-failure queries, or runaway reranker spend.");
1272
1296
  i0.ɵɵelementEnd();
1273
- i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 156)(10, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_10_Template, 3, 0, "button", 157)(11, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Template, 50, 14);
1297
+ i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_9_Template, 1, 0, "mj-loading", 165)(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_10_Template, 3, 0, "button", 166)(11, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Conditional_11_Template, 50, 14);
1274
1298
  i0.ɵɵelementEnd();
1275
1299
  } if (rf & 2) {
1276
- const ctx_r2 = i0.ɵɵnextContext(2);
1300
+ const ctx_r1 = i0.ɵɵnextContext(2);
1277
1301
  i0.ɵɵadvance(9);
1278
- i0.ɵɵconditional(ctx_r2.AnalyticsLoading ? 9 : !ctx_r2.AnalyticsLoaded ? 10 : 11);
1302
+ i0.ɵɵconditional(ctx_r1.AnalyticsLoading ? 9 : !ctx_r1.AnalyticsLoaded ? 10 : 11);
1279
1303
  } }
1280
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1281
- i0.ɵɵelementStart(0, "div", 170);
1282
- i0.ɵɵelement(1, "i", 80);
1304
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1305
+ i0.ɵɵelementStart(0, "div", 179);
1306
+ i0.ɵɵelement(1, "i", 89);
1283
1307
  i0.ɵɵtext(2, " Loading permission rows... ");
1284
1308
  i0.ɵɵelementEnd();
1285
1309
  } }
1286
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1287
- i0.ɵɵelementStart(0, "div", 181);
1310
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1311
+ i0.ɵɵelementStart(0, "div", 190);
1288
1312
  i0.ɵɵtext(1, " No permission rows match your filters. ");
1289
1313
  i0.ɵɵelementEnd();
1290
1314
  } }
1291
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1315
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1292
1316
  i0.ɵɵtext(0);
1293
- i0.ɵɵelementStart(1, "span", 184);
1317
+ i0.ɵɵelementStart(1, "span", 193);
1294
1318
  i0.ɵɵtext(2);
1295
1319
  i0.ɵɵelementEnd();
1296
1320
  } if (rf & 2) {
1297
- const row_r34 = i0.ɵɵnextContext().$implicit;
1298
- i0.ɵɵtextInterpolate1(" ", row_r34.UserName, " ");
1321
+ const row_r35 = i0.ɵɵnextContext().$implicit;
1322
+ i0.ɵɵtextInterpolate1(" ", row_r35.UserName, " ");
1299
1323
  i0.ɵɵadvance(2);
1300
- i0.ɵɵtextInterpolate1("(", row_r34.UserEmail, ")");
1324
+ i0.ɵɵtextInterpolate1("(", row_r35.UserEmail, ")");
1301
1325
  } }
1302
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1326
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1303
1327
  i0.ɵɵtext(0);
1304
1328
  } if (rf & 2) {
1305
- const row_r34 = i0.ɵɵnextContext().$implicit;
1306
- i0.ɵɵtextInterpolate1(" ", row_r34.RoleName, " ");
1329
+ const row_r35 = i0.ɵɵnextContext().$implicit;
1330
+ i0.ɵɵtextInterpolate1(" ", row_r35.RoleName, " ");
1307
1331
  } }
1308
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1309
- i0.ɵɵelementStart(0, "span", 183);
1332
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1333
+ i0.ɵɵelementStart(0, "span", 192);
1310
1334
  i0.ɵɵtext(1, "User");
1311
1335
  i0.ɵɵelementEnd();
1312
1336
  } }
1313
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1314
- i0.ɵɵelementStart(0, "span", 183);
1337
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1338
+ i0.ɵɵelementStart(0, "span", 192);
1315
1339
  i0.ɵɵtext(1, "Role");
1316
1340
  i0.ɵɵelementEnd();
1317
1341
  } }
1318
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Template(rf, ctx) { if (rf & 1) {
1342
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Template(rf, ctx) { if (rf & 1) {
1319
1343
  i0.ɵɵelementStart(0, "tr")(1, "td");
1320
1344
  i0.ɵɵtext(2);
1321
1345
  i0.ɵɵelementEnd();
1322
1346
  i0.ɵɵelementStart(3, "td");
1323
- i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_4_Template, 3, 2)(5, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_5_Template, 1, 1);
1347
+ i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_4_Template, 3, 2)(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_5_Template, 1, 1);
1324
1348
  i0.ɵɵelementEnd();
1325
1349
  i0.ɵɵelementStart(6, "td");
1326
- i0.ɵɵconditionalCreate(7, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_7_Template, 2, 0, "span", 183);
1327
- i0.ɵɵconditionalCreate(8, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_8_Template, 2, 0, "span", 183);
1350
+ i0.ɵɵconditionalCreate(7, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_7_Template, 2, 0, "span", 192);
1351
+ i0.ɵɵconditionalCreate(8, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_8_Template, 2, 0, "span", 192);
1328
1352
  i0.ɵɵelementEnd();
1329
1353
  i0.ɵɵelementStart(9, "td")(10, "span");
1330
1354
  i0.ɵɵpipe(11, "lowercase");
1331
1355
  i0.ɵɵtext(12);
1332
1356
  i0.ɵɵelementEnd()()();
1333
1357
  } if (rf & 2) {
1334
- const row_r34 = ctx.$implicit;
1358
+ const row_r35 = ctx.$implicit;
1335
1359
  i0.ɵɵadvance(2);
1336
- i0.ɵɵtextInterpolate(row_r34.SearchScopeName);
1360
+ i0.ɵɵtextInterpolate(row_r35.SearchScopeName);
1337
1361
  i0.ɵɵadvance(2);
1338
- i0.ɵɵconditional(row_r34.UserID ? 4 : 5);
1362
+ i0.ɵɵconditional(row_r35.UserID ? 4 : 5);
1339
1363
  i0.ɵɵadvance(3);
1340
- i0.ɵɵconditional(row_r34.UserID ? 7 : -1);
1364
+ i0.ɵɵconditional(row_r35.UserID ? 7 : -1);
1341
1365
  i0.ɵɵadvance();
1342
- i0.ɵɵconditional(row_r34.RoleID ? 8 : -1);
1366
+ i0.ɵɵconditional(row_r35.RoleID ? 8 : -1);
1343
1367
  i0.ɵɵadvance(2);
1344
- i0.ɵɵclassMap(i0.ɵɵinterpolate1("search-permissions-level search-permissions-level-", i0.ɵɵpipeBind1(11, 8, row_r34.PermissionLevel)));
1368
+ i0.ɵɵclassMap(i0.ɵɵinterpolate1("search-permissions-level search-permissions-level-", i0.ɵɵpipeBind1(11, 8, row_r35.PermissionLevel)));
1345
1369
  i0.ɵɵadvance(2);
1346
- i0.ɵɵtextInterpolate(row_r34.PermissionLevel);
1370
+ i0.ɵɵtextInterpolate(row_r35.PermissionLevel);
1347
1371
  } }
1348
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1349
- i0.ɵɵelementStart(0, "table", 182)(1, "thead")(2, "tr")(3, "th");
1372
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1373
+ i0.ɵɵelementStart(0, "table", 191)(1, "thead")(2, "tr")(3, "th");
1350
1374
  i0.ɵɵtext(4, "Scope");
1351
1375
  i0.ɵɵelementEnd();
1352
1376
  i0.ɵɵelementStart(5, "th");
@@ -1359,168 +1383,171 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Condition
1359
1383
  i0.ɵɵtext(10, "Permission Level");
1360
1384
  i0.ɵɵelementEnd()()();
1361
1385
  i0.ɵɵelementStart(11, "tbody");
1362
- i0.ɵɵrepeaterCreate(12, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Template, 13, 10, "tr", null, _forTrack0);
1386
+ i0.ɵɵrepeaterCreate(12, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_For_13_Template, 13, 10, "tr", null, _forTrack0);
1363
1387
  i0.ɵɵelementEnd()();
1364
1388
  } if (rf & 2) {
1365
- const ctx_r2 = i0.ɵɵnextContext(4);
1389
+ const ctx_r1 = i0.ɵɵnextContext(4);
1366
1390
  i0.ɵɵadvance(12);
1367
- i0.ɵɵrepeater(ctx_r2.FilteredPermissionsRows);
1391
+ i0.ɵɵrepeater(ctx_r1.FilteredPermissionsRows);
1368
1392
  } }
1369
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1370
- const _r33 = i0.ɵɵgetCurrentView();
1371
- i0.ɵɵelementStart(0, "div", 171)(1, "input", 172);
1372
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.PermissionsFilterScope, $event) || (ctx_r2.PermissionsFilterScope = $event); return i0.ɵɵresetView($event); });
1393
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1394
+ const _r34 = i0.ɵɵgetCurrentView();
1395
+ i0.ɵɵelementStart(0, "div", 180)(1, "input", 181);
1396
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.PermissionsFilterScope, $event) || (ctx_r1.PermissionsFilterScope = $event); return i0.ɵɵresetView($event); });
1373
1397
  i0.ɵɵelementEnd();
1374
- i0.ɵɵelementStart(2, "input", 173);
1375
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.PermissionsFilterPrincipal, $event) || (ctx_r2.PermissionsFilterPrincipal = $event); return i0.ɵɵresetView($event); });
1398
+ i0.ɵɵelementStart(2, "input", 182);
1399
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.PermissionsFilterPrincipal, $event) || (ctx_r1.PermissionsFilterPrincipal = $event); return i0.ɵɵresetView($event); });
1376
1400
  i0.ɵɵelementEnd();
1377
- i0.ɵɵelementStart(3, "select", 174);
1378
- i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.PermissionsFilterLevel, $event) || (ctx_r2.PermissionsFilterLevel = $event); return i0.ɵɵresetView($event); });
1379
- i0.ɵɵelementStart(4, "option", 175);
1401
+ i0.ɵɵelementStart(3, "select", 183);
1402
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.PermissionsFilterLevel, $event) || (ctx_r1.PermissionsFilterLevel = $event); return i0.ɵɵresetView($event); });
1403
+ i0.ɵɵelementStart(4, "option", 184);
1380
1404
  i0.ɵɵtext(5, "All levels");
1381
1405
  i0.ɵɵelementEnd();
1382
- i0.ɵɵelementStart(6, "option", 176);
1406
+ i0.ɵɵelementStart(6, "option", 185);
1383
1407
  i0.ɵɵtext(7, "None");
1384
1408
  i0.ɵɵelementEnd();
1385
- i0.ɵɵelementStart(8, "option", 177);
1409
+ i0.ɵɵelementStart(8, "option", 186);
1386
1410
  i0.ɵɵtext(9, "Read");
1387
1411
  i0.ɵɵelementEnd();
1388
- i0.ɵɵelementStart(10, "option", 178);
1412
+ i0.ɵɵelementStart(10, "option", 187);
1389
1413
  i0.ɵɵtext(11, "Search");
1390
1414
  i0.ɵɵelementEnd();
1391
- i0.ɵɵelementStart(12, "option", 179);
1415
+ i0.ɵɵelementStart(12, "option", 188);
1392
1416
  i0.ɵɵtext(13, "Manage");
1393
1417
  i0.ɵɵelementEnd()();
1394
- i0.ɵɵelementStart(14, "button", 158);
1395
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r33); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.RefreshPermissionsAudit()); });
1396
- i0.ɵɵelement(15, "i", 159);
1418
+ i0.ɵɵelementStart(14, "button", 167);
1419
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RefreshPermissionsAudit()); });
1420
+ i0.ɵɵelement(15, "i", 168);
1397
1421
  i0.ɵɵtext(16, " Refresh ");
1398
1422
  i0.ɵɵelementEnd()();
1399
- i0.ɵɵelementStart(17, "div", 180);
1423
+ i0.ɵɵelementStart(17, "div", 189);
1400
1424
  i0.ɵɵtext(18);
1401
1425
  i0.ɵɵelementEnd();
1402
- i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_19_Template, 2, 0, "div", 181)(20, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_Template, 14, 0, "table", 182);
1426
+ i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_19_Template, 2, 0, "div", 190)(20, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Conditional_20_Template, 14, 0, "table", 191);
1403
1427
  } if (rf & 2) {
1404
- const ctx_r2 = i0.ɵɵnextContext(3);
1428
+ const ctx_r1 = i0.ɵɵnextContext(3);
1405
1429
  i0.ɵɵadvance();
1406
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PermissionsFilterScope);
1430
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PermissionsFilterScope);
1407
1431
  i0.ɵɵadvance();
1408
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PermissionsFilterPrincipal);
1432
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PermissionsFilterPrincipal);
1409
1433
  i0.ɵɵadvance();
1410
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PermissionsFilterLevel);
1434
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PermissionsFilterLevel);
1411
1435
  i0.ɵɵadvance(15);
1412
- i0.ɵɵtextInterpolate2(" Showing ", ctx_r2.FilteredPermissionsRows.length, " of ", ctx_r2.PermissionsRows.length, " rows ");
1436
+ i0.ɵɵtextInterpolate2(" Showing ", ctx_r1.FilteredPermissionsRows.length, " of ", ctx_r1.PermissionsRows.length, " rows ");
1413
1437
  i0.ɵɵadvance();
1414
- i0.ɵɵconditional(ctx_r2.FilteredPermissionsRows.length === 0 ? 19 : 20);
1438
+ i0.ɵɵconditional(ctx_r1.FilteredPermissionsRows.length === 0 ? 19 : 20);
1415
1439
  } }
1416
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1417
- i0.ɵɵelementStart(0, "div", 9)(1, "h2", 12);
1418
- i0.ɵɵelement(2, "i", 169);
1440
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1441
+ i0.ɵɵelementStart(0, "div", 18)(1, "h2", 21);
1442
+ i0.ɵɵelement(2, "i", 178);
1419
1443
  i0.ɵɵtext(3, " Permissions");
1420
1444
  i0.ɵɵelementEnd();
1421
- i0.ɵɵelementStart(4, "p", 13);
1445
+ i0.ɵɵelementStart(4, "p", 22);
1422
1446
  i0.ɵɵtext(5, " Cross-scope view of every ");
1423
1447
  i0.ɵɵelementStart(6, "code");
1424
1448
  i0.ɵɵtext(7, "SearchScopePermission");
1425
1449
  i0.ɵɵelementEnd();
1426
1450
  i0.ɵɵtext(8, " row. Filter by scope, by user/role, or by permission level to answer \"who has access to what\". Read-only \u2014 to add or edit a grant, open the SearchScope's full form and use its Permissions panel. ");
1427
1451
  i0.ɵɵelementEnd();
1428
- i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_9_Template, 3, 0, "div", 170);
1429
- i0.ɵɵconditionalCreate(10, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template, 21, 6);
1452
+ i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_9_Template, 3, 0, "div", 179);
1453
+ i0.ɵɵconditionalCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Conditional_10_Template, 21, 6);
1430
1454
  i0.ɵɵelementEnd();
1431
1455
  } if (rf & 2) {
1432
- const ctx_r2 = i0.ɵɵnextContext(2);
1456
+ const ctx_r1 = i0.ɵɵnextContext(2);
1433
1457
  i0.ɵɵadvance(9);
1434
- i0.ɵɵconditional(ctx_r2.PermissionsLoading ? 9 : -1);
1458
+ i0.ɵɵconditional(ctx_r1.PermissionsLoading ? 9 : -1);
1435
1459
  i0.ɵɵadvance();
1436
- i0.ɵɵconditional(ctx_r2.PermissionsLoaded && !ctx_r2.PermissionsLoading ? 10 : -1);
1460
+ i0.ɵɵconditional(ctx_r1.PermissionsLoaded && !ctx_r1.PermissionsLoading ? 10 : -1);
1437
1461
  } }
1438
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1439
- i0.ɵɵelementStart(0, "div", 9)(1, "h2", 12);
1440
- i0.ɵɵelement(2, "i", 185);
1462
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1463
+ i0.ɵɵelementStart(0, "div", 18)(1, "h2", 21);
1464
+ i0.ɵɵelement(2, "i", 194);
1441
1465
  i0.ɵɵtext(3, " Scheduling");
1442
1466
  i0.ɵɵelementEnd();
1443
- i0.ɵɵelementStart(4, "p", 13);
1467
+ i0.ɵɵelementStart(4, "p", 22);
1444
1468
  i0.ɵɵtext(5, "Manage automated pipeline schedules for content classification and vector sync. Create schedules here or manage all schedules in the dedicated Scheduling app.");
1445
1469
  i0.ɵɵelementEnd();
1446
- i0.ɵɵelementStart(6, "div", 186);
1447
- i0.ɵɵelement(7, "app-scheduling-resource");
1470
+ i0.ɵɵelementStart(6, "div", 195);
1471
+ i0.ɵɵelement(7, "app-scheduling-resource", 196);
1448
1472
  i0.ɵɵelementEnd()();
1473
+ } if (rf & 2) {
1474
+ i0.ɵɵadvance(7);
1475
+ i0.ɵɵproperty("HideToolbar", true);
1449
1476
  } }
1450
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1451
- i0.ɵɵelement(0, "i", 80);
1477
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1478
+ i0.ɵɵelement(0, "i", 89);
1452
1479
  i0.ɵɵtext(1, " Saving... ");
1453
1480
  } }
1454
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1455
- i0.ɵɵelement(0, "i", 129);
1481
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1482
+ i0.ɵɵelement(0, "i", 138);
1456
1483
  i0.ɵɵtext(1, " Save Changes ");
1457
1484
  } }
1458
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1459
- const _r35 = i0.ɵɵgetCurrentView();
1460
- i0.ɵɵelementStart(0, "div", 10)(1, "span", 187);
1485
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1486
+ const _r36 = i0.ɵɵgetCurrentView();
1487
+ i0.ɵɵelementStart(0, "div", 19)(1, "span", 197);
1461
1488
  i0.ɵɵtext(2, "You have unsaved changes");
1462
1489
  i0.ɵɵelementEnd();
1463
- i0.ɵɵelementStart(3, "button", 188);
1464
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r35); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SaveConfiguration()); });
1465
- i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Conditional_4_Template, 2, 0)(5, KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Conditional_5_Template, 2, 0);
1490
+ i0.ɵɵelementStart(3, "button", 198);
1491
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveConfiguration()); });
1492
+ i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Conditional_4_Template, 2, 0)(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Conditional_5_Template, 2, 0);
1466
1493
  i0.ɵɵelementEnd();
1467
- i0.ɵɵelementStart(6, "button", 189);
1468
- i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r35); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ResetConfiguration()); });
1494
+ i0.ɵɵelementStart(6, "button", 199);
1495
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ResetConfiguration()); });
1469
1496
  i0.ɵɵtext(7, " Reset ");
1470
1497
  i0.ɵɵelementEnd()();
1471
1498
  } if (rf & 2) {
1472
- const ctx_r2 = i0.ɵɵnextContext(2);
1499
+ const ctx_r1 = i0.ɵɵnextContext(2);
1473
1500
  i0.ɵɵadvance(3);
1474
- i0.ɵɵproperty("disabled", ctx_r2.IsSaving);
1501
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
1475
1502
  i0.ɵɵadvance();
1476
- i0.ɵɵconditional(ctx_r2.IsSaving ? 4 : 5);
1503
+ i0.ɵɵconditional(ctx_r1.IsSaving ? 4 : 5);
1477
1504
  i0.ɵɵadvance(2);
1478
- i0.ɵɵproperty("disabled", ctx_r2.IsSaving);
1505
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
1479
1506
  } }
1480
- function KnowledgeConfigResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1481
- i0.ɵɵelementStart(0, "div", 1)(1, "nav", 3)(2, "div", 4);
1482
- i0.ɵɵelement(3, "i", 5);
1507
+ function KnowledgeConfigResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1508
+ i0.ɵɵelementStart(0, "div", 6)(1, "nav", 12)(2, "div", 13);
1509
+ i0.ɵɵelement(3, "i", 14);
1483
1510
  i0.ɵɵelementStart(4, "span");
1484
1511
  i0.ɵɵtext(5, "Configuration");
1485
1512
  i0.ɵɵelementEnd()();
1486
- i0.ɵɵrepeaterCreate(6, KnowledgeConfigResourceComponent_Conditional_1_For_7_Template, 4, 5, "button", 6, _forTrack0);
1487
- i0.ɵɵelementEnd();
1488
- i0.ɵɵelementStart(8, "div", 7);
1489
- i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_1_Conditional_9_Template, 34, 4, "div", 8);
1490
- i0.ɵɵconditionalCreate(10, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Template, 49, 26, "div", 8);
1491
- i0.ɵɵconditionalCreate(11, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Template, 8, 1, "div", 8);
1492
- i0.ɵɵconditionalCreate(12, KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Template, 7, 1, "div", 8);
1493
- i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template, 34, 8, "div", 8);
1494
- i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Template, 20, 3, "div", 8);
1495
- i0.ɵɵconditionalCreate(15, KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Template, 12, 1, "div", 9);
1496
- i0.ɵɵconditionalCreate(16, KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Template, 11, 2, "div", 9);
1497
- i0.ɵɵconditionalCreate(17, KnowledgeConfigResourceComponent_Conditional_1_Conditional_17_Template, 8, 0, "div", 9);
1498
- i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Template, 8, 3, "div", 10);
1513
+ i0.ɵɵrepeaterCreate(6, KnowledgeConfigResourceComponent_Conditional_8_For_7_Template, 4, 5, "button", 15, _forTrack0);
1514
+ i0.ɵɵelementEnd();
1515
+ i0.ɵɵelementStart(8, "div", 16);
1516
+ i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template, 34, 4, "div", 17);
1517
+ i0.ɵɵconditionalCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Template, 49, 26, "div", 17);
1518
+ i0.ɵɵconditionalCreate(11, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Template, 8, 1, "div", 17);
1519
+ i0.ɵɵconditionalCreate(12, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Template, 7, 1, "div", 17);
1520
+ i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template, 34, 8, "div", 17);
1521
+ i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template, 20, 3, "div", 17);
1522
+ i0.ɵɵconditionalCreate(15, KnowledgeConfigResourceComponent_Conditional_8_Conditional_15_Template, 12, 1, "div", 18);
1523
+ i0.ɵɵconditionalCreate(16, KnowledgeConfigResourceComponent_Conditional_8_Conditional_16_Template, 11, 2, "div", 18);
1524
+ i0.ɵɵconditionalCreate(17, KnowledgeConfigResourceComponent_Conditional_8_Conditional_17_Template, 8, 1, "div", 18);
1525
+ i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_8_Conditional_18_Template, 8, 3, "div", 19);
1499
1526
  i0.ɵɵelementEnd()();
1500
1527
  } if (rf & 2) {
1501
- const ctx_r2 = i0.ɵɵnextContext();
1528
+ const ctx_r1 = i0.ɵɵnextContext();
1502
1529
  i0.ɵɵadvance(6);
1503
- i0.ɵɵrepeater(ctx_r2.Sections);
1530
+ i0.ɵɵrepeater(ctx_r1.Sections);
1504
1531
  i0.ɵɵadvance(3);
1505
- i0.ɵɵconditional(ctx_r2.ActiveSection === "pipeline" ? 9 : -1);
1532
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "pipeline" ? 9 : -1);
1506
1533
  i0.ɵɵadvance();
1507
- i0.ɵɵconditional(ctx_r2.ActiveSection === "vectordb" ? 10 : -1);
1534
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "vectordb" ? 10 : -1);
1508
1535
  i0.ɵɵadvance();
1509
- i0.ɵɵconditional(ctx_r2.ActiveSection === "fulltext" ? 11 : -1);
1536
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "fulltext" ? 11 : -1);
1510
1537
  i0.ɵɵadvance();
1511
- i0.ɵɵconditional(ctx_r2.ActiveSection === "embedding" ? 12 : -1);
1538
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "embedding" ? 12 : -1);
1512
1539
  i0.ɵɵadvance();
1513
- i0.ɵɵconditional(ctx_r2.ActiveSection === "thresholds" ? 13 : -1);
1540
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "thresholds" ? 13 : -1);
1514
1541
  i0.ɵɵadvance();
1515
- i0.ɵɵconditional(ctx_r2.ActiveSection === "search-scopes" ? 14 : -1);
1542
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "search-scopes" ? 14 : -1);
1516
1543
  i0.ɵɵadvance();
1517
- i0.ɵɵconditional(ctx_r2.ActiveSection === "search-analytics" ? 15 : -1);
1544
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "search-analytics" ? 15 : -1);
1518
1545
  i0.ɵɵadvance();
1519
- i0.ɵɵconditional(ctx_r2.ActiveSection === "search-permissions" ? 16 : -1);
1546
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "search-permissions" ? 16 : -1);
1520
1547
  i0.ɵɵadvance();
1521
- i0.ɵɵconditional(ctx_r2.ActiveSection === "scheduling" ? 17 : -1);
1548
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "scheduling" ? 17 : -1);
1522
1549
  i0.ɵɵadvance();
1523
- i0.ɵɵconditional(ctx_r2.HasUnsavedChanges ? 18 : -1);
1550
+ i0.ɵɵconditional(ctx_r1.HasUnsavedChanges ? 18 : -1);
1524
1551
  } }
1525
1552
  let KnowledgeConfigResourceComponent = class KnowledgeConfigResourceComponent extends BaseResourceComponent {
1526
1553
  cdr = inject(ChangeDetectorRef);
@@ -2372,11 +2399,26 @@ let KnowledgeConfigResourceComponent = class KnowledgeConfigResourceComponent ex
2372
2399
  }));
2373
2400
  }
2374
2401
  static ɵfac = /*@__PURE__*/ (() => { let ɵKnowledgeConfigResourceComponent_BaseFactory; return function KnowledgeConfigResourceComponent_Factory(__ngFactoryType__) { return (ɵKnowledgeConfigResourceComponent_BaseFactory || (ɵKnowledgeConfigResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(KnowledgeConfigResourceComponent)))(__ngFactoryType__ || KnowledgeConfigResourceComponent); }; })();
2375
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: KnowledgeConfigResourceComponent, selectors: [["app-knowledge-config-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "config-loading"], [1, "config-layout"], ["text", "Loading configuration...", "size", "medium"], [1, "config-nav"], [1, "config-nav-header"], [1, "fa-solid", "fa-cogs"], [1, "config-nav-item", 3, "config-nav-item-active"], [1, "config-content"], [1, "config-section"], [1, "config-section-content"], [1, "config-save-bar"], [1, "config-nav-item", 3, "click"], [1, "config-section-title"], [1, "config-section-desc"], [1, "config-group"], [1, "config-toggle-row"], [1, "config-toggle-info"], [1, "config-label"], [1, "config-hint"], ["type", "checkbox", 1, "config-checkbox", 3, "ngModelChange", "change", "ngModel"], [1, "config-field-row"], [1, "config-field-info"], ["type", "number", "min", "10", "max", "1000", 1, "config-input", "config-input-number", 3, "ngModelChange", "input", "ngModel"], ["type", "number", "min", "1", "max", "10", 1, "config-input", "config-input-number", 3, "ngModelChange", "input", "ngModel"], [1, "setup-progress"], [1, "setup-progress-header"], [1, "setup-progress-label"], [1, "setup-progress-count"], [1, "setup-progress-bar"], [1, "setup-progress-fill"], [1, "setup-step"], [1, "setup-step-header"], [1, "setup-step-indicator"], [1, "fa-solid", "fa-circle-check"], [1, "setup-step-number"], [1, "setup-step-info"], [1, "setup-step-title"], [1, "setup-step-status"], [1, "setup-step-detail"], [1, "setup-step-action"], [1, "create-index-form"], [1, "provider-card"], [1, "provider-icon"], [1, "fa-solid", "fa-database"], [1, "provider-info"], [1, "provider-name"], [1, "provider-class"], [1, "config-status-badge", "config-status-active"], [1, "provider-credential-row"], [1, "provider-credential-label"], [1, "fa-solid", "fa-key"], [1, "provider-credential-picker"], [1, "provider-credential-select", 3, "ngModelChange", "change", "ngModel", "disabled"], [3, "ngValue"], [1, "fa-solid", "fa-spinner", "fa-spin", "provider-credential-spinner"], [1, "config-tag-list"], [1, "config-tag"], [1, "setup-step-action", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "index-card"], [1, "index-icon"], [1, "fa-solid", "fa-cubes"], [1, "index-info"], [1, "index-name"], [1, "index-meta"], [1, "fa-solid", "fa-microchip"], [1, "index-actions"], ["title", "Delete index", 1, "index-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "create-index-title"], [1, "fa-solid", "fa-plus-circle"], [1, "create-index-fields"], [1, "create-index-field"], [1, "create-index-label"], ["type", "text", "placeholder", "e.g., mj-knowledge-index", 1, "config-input", 3, "ngModelChange", "ngModel"], [1, "config-select", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "create-index-actions"], [1, "create-index-submit", 3, "click", "disabled"], [1, "create-index-cancel", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["text", "Discovering searchable entities...", "size", "medium"], [1, "config-empty-state"], [1, "fa-solid", "fa-text-width", "config-empty-icon"], [1, "config-empty-title"], [1, "config-empty-text"], [1, "fts-entity-controls"], [1, "fts-summary"], [1, "fts-summary-count"], ["type", "text", "placeholder", "Filter entities...", 1, "config-input", "fts-filter-input", 3, "ngModelChange", "ngModel"], [1, "fts-entity-list"], [1, "fts-entity-card", 3, "fts-entity-enabled"], [1, "fts-entity-card"], [1, "fts-entity-toggle"], [1, "fts-entity-info"], [1, "fts-entity-name"], [1, "fts-entity-fields"], [1, "fts-field-tag"], [1, "fts-entity-meta"], ["title", "Title field", 1, "fts-entity-title-field"], [1, "fa-solid", "fa-heading"], ["title", "Snippet field", 1, "fts-entity-snippet-field"], [1, "fa-solid", "fa-align-left"], [1, "config-value-display"], [1, "config-section-note"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-microchip", "config-empty-icon"], ["type", "range", "min", "0.5", "max", "1", "step", "0.01", 1, "config-slider", 3, "ngModelChange", "input", "ngModel"], ["type", "range", "min", "0.3", "max", "1", "step", "0.01", 1, "config-slider", 3, "ngModelChange", "input", "ngModel"], ["type", "range", "min", "0", "max", "1", "step", "0.01", 1, "config-slider", 3, "ngModelChange", "input", "ngModel"], [1, "fa-solid", "fa-compass-drafting"], [1, "scope-manager"], [1, "scope-manager-list"], [1, "scope-manager-list-header"], ["type", "button", 1, "scope-manager-new-btn", 3, "click"], [1, "scope-manager-loading"], [1, "scope-manager-empty"], [1, "scope-manager-detail"], [1, "scope-manager-empty-detail"], ["type", "button", 1, "scope-manager-list-item", 3, "active"], ["type", "button", 1, "scope-manager-list-item", 3, "click"], ["aria-hidden", "true"], [1, "scope-manager-list-name"], [1, "scope-manager-badge"], [1, "scope-manager-tabs"], ["type", "button", 1, "scope-manager-tab", 3, "click"], [1, "scope-manager-tab-spacer"], ["type", "button", "title", "Open the full custom form for this scope (Live Preview, Fusion Weights, Reranker, Test Queries, Execution Logs)", 1, "scope-manager-open-btn"], ["type", "button", 1, "scope-manager-save-btn", 3, "click"], [1, "fa-solid", "fa-save"], ["type", "button", "title", "Delete scope", 1, "scope-manager-delete-btn"], [1, "scope-definition-grid"], ["ChildEntityName", "MJ: Search Scope Providers", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add provider", "EmptyMessage", "No providers assigned. Without any providers, this scope searches nothing.", 3, "ParentID", "Columns"], ["ChildEntityName", "MJ: Search Scope External Indexes", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add external index", "EmptyMessage", "No external indexes configured for this scope.", 3, "ParentID", "Columns"], ["ChildEntityName", "MJ: Search Scope Entities", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add entity", "EmptyMessage", "No entities configured. Scoped entity search will return no rows.", 3, "ParentID", "Columns"], ["ChildEntityName", "MJ: Search Scope Storage Accounts", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add storage folder", "EmptyMessage", "No storage accounts linked to this scope.", 3, "ParentID", "Columns"], ["type", "button", "title", "Open the full custom form for this scope (Live Preview, Fusion Weights, Reranker, Test Queries, Execution Logs)", 1, "scope-manager-open-btn", 3, "click"], [1, "fa-solid", "fa-up-right-from-square"], ["type", "button", "title", "Delete scope", 1, "scope-manager-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash"], ["type", "text", 1, "mj-input", 3, "change", "value"], [1, "scope-definition-full"], ["rows", "2", 1, "mj-textarea", 3, "change", "value"], [1, "mj-input", 3, "change", "value"], ["value", "Active"], ["value", "Inactive"], ["type", "datetime-local", 1, "mj-input", 3, "change", "value"], [1, "scope-definition-toggle"], ["type", "checkbox", 3, "change", "checked", "disabled"], ["type", "checkbox", "disabled", "", 3, "checked"], ["rows", "4", "spellcheck", "false", 1, "mj-textarea", "scope-code-block", 3, "change", "value"], [1, "scope-permissions-help", 2, "margin-bottom", "12px", "padding", "8px 12px", "background", "var(--mj-bg-surface-card)", "border-left", "3px solid var(--mj-brand-primary)", "border-radius", "4px"], [2, "margin", "0", "font-size", "0.95em"], [1, "fa-solid", "fa-shield-halved", 2, "color", "var(--mj-brand-primary)"], ["ChildEntityName", "MJ: Search Scope Permissions", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Grant access", "EmptyMessage", "No explicit grants. Access falls back to agent SearchScopeAccess only.", 3, "ParentID", "Columns"], [1, "fa-solid", "fa-chart-line"], ["text", "Loading analytics\u2026", "size", "medium"], ["type", "button", 1, "mj-input"], ["type", "button", 1, "mj-input", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "search-analytics-kpi-grid"], [1, "search-analytics-kpi"], [1, "search-analytics-kpi-label"], [1, "search-analytics-kpi-value"], [1, "search-analytics-kpi-hint"], [1, "search-analytics-h3"], [1, "search-analytics-empty"], [1, "search-analytics-table"], ["type", "button", 1, "mj-input", "search-analytics-refresh", 3, "click"], [1, "fa-solid", "fa-shield-halved"], [1, "search-permissions-loading"], [1, "search-permissions-filters"], ["type", "text", "placeholder", "Filter by scope name...", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "Filter by user/role (name or email)...", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "mj-input", 3, "ngModelChange", "ngModel"], ["value", ""], ["value", "None"], ["value", "Read"], ["value", "Search"], ["value", "Manage"], [1, "search-permissions-summary"], [1, "search-permissions-empty"], [1, "search-permissions-table"], [1, "search-permissions-tag"], [1, "search-permissions-secondary"], [1, "fa-solid", "fa-clock"], [2, "margin-top", "16px"], [1, "config-save-text"], [1, "config-save-btn", 3, "click", "disabled"], [1, "config-reset-btn", 3, "click", "disabled"]], template: function KnowledgeConfigResourceComponent_Template(rf, ctx) { if (rf & 1) {
2376
- i0.ɵɵconditionalCreate(0, KnowledgeConfigResourceComponent_Conditional_0_Template, 2, 0, "div", 0)(1, KnowledgeConfigResourceComponent_Conditional_1_Template, 19, 10, "div", 1);
2402
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: KnowledgeConfigResourceComponent, selectors: [["app-knowledge-config-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 4, consts: [["Title", "Knowledge Hub Configuration", "Icon", "fa-solid fa-cogs", "Subtitle", "Pipeline, vector store, search, and automation settings"], ["meta", ""], ["Icon", "fa-solid fa-circle-exclamation", "Label", "Unsaved changes", "Variant", "warning"], ["actions", ""], [3, "Flex"], [1, "config-loading"], [1, "config-layout"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Discard unsaved changes", 3, "click", "disabled"], [1, "fa-solid", "fa-arrow-rotate-left"], ["mjButton", "", "variant", "primary", "size", "sm", "title", "Save all settings", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], ["text", "Loading configuration...", "size", "medium"], [1, "config-nav"], [1, "config-nav-header"], [1, "fa-solid", "fa-cogs"], [1, "config-nav-item", 3, "config-nav-item-active"], [1, "config-content"], [1, "config-section"], [1, "config-section-content"], [1, "config-save-bar"], [1, "config-nav-item", 3, "click"], [1, "config-section-title"], [1, "config-section-desc"], [1, "config-group"], [1, "config-toggle-row"], [1, "config-toggle-info"], [1, "config-label"], [1, "config-hint"], ["type", "checkbox", 1, "config-checkbox", 3, "ngModelChange", "change", "ngModel"], [1, "config-field-row"], [1, "config-field-info"], ["type", "number", "min", "10", "max", "1000", 1, "config-input", "config-input-number", 3, "ngModelChange", "input", "ngModel"], ["type", "number", "min", "1", "max", "10", 1, "config-input", "config-input-number", 3, "ngModelChange", "input", "ngModel"], [1, "setup-progress"], [1, "setup-progress-header"], [1, "setup-progress-label"], [1, "setup-progress-count"], [1, "setup-progress-bar"], [1, "setup-progress-fill"], [1, "setup-step"], [1, "setup-step-header"], [1, "setup-step-indicator"], [1, "fa-solid", "fa-circle-check"], [1, "setup-step-number"], [1, "setup-step-info"], [1, "setup-step-title"], [1, "setup-step-status"], [1, "setup-step-detail"], [1, "setup-step-action"], [1, "create-index-form"], [1, "provider-card"], [1, "provider-icon"], [1, "fa-solid", "fa-database"], [1, "provider-info"], [1, "provider-name"], [1, "provider-class"], [1, "config-status-badge", "config-status-active"], [1, "provider-credential-row"], [1, "provider-credential-label"], [1, "fa-solid", "fa-key"], [1, "provider-credential-picker"], [1, "provider-credential-select", 3, "ngModelChange", "change", "ngModel", "disabled"], [3, "ngValue"], [1, "fa-solid", "fa-spinner", "fa-spin", "provider-credential-spinner"], [1, "config-tag-list"], [1, "config-tag"], [1, "setup-step-action", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "index-card"], [1, "index-icon"], [1, "fa-solid", "fa-cubes"], [1, "index-info"], [1, "index-name"], [1, "index-meta"], [1, "fa-solid", "fa-microchip"], [1, "index-actions"], ["title", "Delete index", 1, "index-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "create-index-title"], [1, "fa-solid", "fa-plus-circle"], [1, "create-index-fields"], [1, "create-index-field"], [1, "create-index-label"], ["type", "text", "placeholder", "e.g., mj-knowledge-index", 1, "config-input", 3, "ngModelChange", "ngModel"], [1, "config-select", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "create-index-actions"], [1, "create-index-submit", 3, "click", "disabled"], [1, "create-index-cancel", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["text", "Discovering searchable entities...", "size", "medium"], [1, "config-empty-state"], [1, "fa-solid", "fa-text-width", "config-empty-icon"], [1, "config-empty-title"], [1, "config-empty-text"], [1, "fts-entity-controls"], [1, "fts-summary"], [1, "fts-summary-count"], ["type", "text", "placeholder", "Filter entities...", 1, "config-input", "fts-filter-input", 3, "ngModelChange", "ngModel"], [1, "fts-entity-list"], [1, "fts-entity-card", 3, "fts-entity-enabled"], [1, "fts-entity-card"], [1, "fts-entity-toggle"], [1, "fts-entity-info"], [1, "fts-entity-name"], [1, "fts-entity-fields"], [1, "fts-field-tag"], [1, "fts-entity-meta"], ["title", "Title field", 1, "fts-entity-title-field"], [1, "fa-solid", "fa-heading"], ["title", "Snippet field", 1, "fts-entity-snippet-field"], [1, "fa-solid", "fa-align-left"], [1, "config-value-display"], [1, "config-section-note"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-microchip", "config-empty-icon"], ["type", "range", "min", "0.5", "max", "1", "step", "0.01", 1, "config-slider", 3, "ngModelChange", "input", "ngModel"], ["type", "range", "min", "0.3", "max", "1", "step", "0.01", 1, "config-slider", 3, "ngModelChange", "input", "ngModel"], ["type", "range", "min", "0", "max", "1", "step", "0.01", 1, "config-slider", 3, "ngModelChange", "input", "ngModel"], [1, "fa-solid", "fa-compass-drafting"], [1, "scope-manager"], [1, "scope-manager-list"], [1, "scope-manager-list-header"], ["type", "button", 1, "scope-manager-new-btn", 3, "click"], [1, "scope-manager-loading"], [1, "scope-manager-empty"], [1, "scope-manager-detail"], [1, "scope-manager-empty-detail"], ["type", "button", 1, "scope-manager-list-item", 3, "active"], ["type", "button", 1, "scope-manager-list-item", 3, "click"], ["aria-hidden", "true"], [1, "scope-manager-list-name"], [1, "scope-manager-badge"], [1, "scope-manager-tabs"], ["type", "button", 1, "scope-manager-tab", 3, "click"], [1, "scope-manager-tab-spacer"], ["type", "button", "title", "Open the full custom form for this scope (Live Preview, Fusion Weights, Reranker, Test Queries, Execution Logs)", 1, "scope-manager-open-btn"], ["type", "button", 1, "scope-manager-save-btn", 3, "click"], [1, "fa-solid", "fa-save"], ["type", "button", "title", "Delete scope", 1, "scope-manager-delete-btn"], [1, "scope-definition-grid"], ["ChildEntityName", "MJ: Search Scope Providers", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add provider", "EmptyMessage", "No providers assigned. Without any providers, this scope searches nothing.", 3, "ParentID", "Columns"], ["ChildEntityName", "MJ: Search Scope External Indexes", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add external index", "EmptyMessage", "No external indexes configured for this scope.", 3, "ParentID", "Columns"], ["ChildEntityName", "MJ: Search Scope Entities", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add entity", "EmptyMessage", "No entities configured. Scoped entity search will return no rows.", 3, "ParentID", "Columns"], ["ChildEntityName", "MJ: Search Scope Storage Accounts", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Add storage folder", "EmptyMessage", "No storage accounts linked to this scope.", 3, "ParentID", "Columns"], ["type", "button", "title", "Open the full custom form for this scope (Live Preview, Fusion Weights, Reranker, Test Queries, Execution Logs)", 1, "scope-manager-open-btn", 3, "click"], [1, "fa-solid", "fa-up-right-from-square"], ["type", "button", "title", "Delete scope", 1, "scope-manager-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash"], ["type", "text", 1, "mj-input", 3, "change", "value"], [1, "scope-definition-full"], ["rows", "2", 1, "mj-textarea", 3, "change", "value"], [1, "mj-input", 3, "change", "value"], ["value", "Active"], ["value", "Inactive"], ["type", "datetime-local", 1, "mj-input", 3, "change", "value"], [1, "scope-definition-toggle"], ["type", "checkbox", 3, "change", "checked", "disabled"], ["type", "checkbox", "disabled", "", 3, "checked"], ["rows", "4", "spellcheck", "false", 1, "mj-textarea", "scope-code-block", 3, "change", "value"], [1, "scope-permissions-help", 2, "margin-bottom", "12px", "padding", "8px 12px", "background", "var(--mj-bg-surface-card)", "border-left", "3px solid var(--mj-brand-primary)", "border-radius", "4px"], [2, "margin", "0", "font-size", "0.95em"], [1, "fa-solid", "fa-shield-halved", 2, "color", "var(--mj-brand-primary)"], ["ChildEntityName", "MJ: Search Scope Permissions", "ParentFieldName", "SearchScopeID", "AddButtonLabel", "+ Grant access", "EmptyMessage", "No explicit grants. Access falls back to agent SearchScopeAccess only.", 3, "ParentID", "Columns"], [1, "fa-solid", "fa-chart-line"], ["text", "Loading analytics\u2026", "size", "medium"], ["type", "button", 1, "mj-input"], ["type", "button", 1, "mj-input", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "search-analytics-kpi-grid"], [1, "search-analytics-kpi"], [1, "search-analytics-kpi-label"], [1, "search-analytics-kpi-value"], [1, "search-analytics-kpi-hint"], [1, "search-analytics-h3"], [1, "search-analytics-empty"], [1, "search-analytics-table"], ["type", "button", 1, "mj-input", "search-analytics-refresh", 3, "click"], [1, "fa-solid", "fa-shield-halved"], [1, "search-permissions-loading"], [1, "search-permissions-filters"], ["type", "text", "placeholder", "Filter by scope name...", 1, "mj-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "Filter by user/role (name or email)...", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "mj-input", 3, "ngModelChange", "ngModel"], ["value", ""], ["value", "None"], ["value", "Read"], ["value", "Search"], ["value", "Manage"], [1, "search-permissions-summary"], [1, "search-permissions-empty"], [1, "search-permissions-table"], [1, "search-permissions-tag"], [1, "search-permissions-secondary"], [1, "fa-solid", "fa-clock"], [2, "margin-top", "16px"], [3, "HideToolbar"], [1, "config-save-text"], [1, "config-save-btn", 3, "click", "disabled"], [1, "config-reset-btn", 3, "click", "disabled"]], template: function KnowledgeConfigResourceComponent_Template(rf, ctx) { if (rf & 1) {
2403
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
2404
+ i0.ɵɵconditionalCreate(3, KnowledgeConfigResourceComponent_Conditional_3_Template, 1, 0, "mj-stat-badge", 2);
2405
+ i0.ɵɵelementEnd();
2406
+ i0.ɵɵelementStart(4, "div", 3);
2407
+ i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_5_Template, 6, 3);
2408
+ i0.ɵɵelementEnd()();
2409
+ i0.ɵɵelementStart(6, "mj-page-body", 4);
2410
+ i0.ɵɵconditionalCreate(7, KnowledgeConfigResourceComponent_Conditional_7_Template, 2, 0, "div", 5)(8, KnowledgeConfigResourceComponent_Conditional_8_Template, 19, 10, "div", 6);
2411
+ i0.ɵɵelementEnd()();
2377
2412
  } if (rf & 2) {
2378
- i0.ɵɵconditional(ctx.IsLoading ? 0 : 1);
2379
- } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.RangeValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.MaxValidator, i1.NgModel, i2.LoadingComponent, i3.SearchScopeChildGridComponent, i4.SchedulingResourceComponent, i5.LowerCasePipe, i5.DecimalPipe], styles: ["\n\n\n.config-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.config-layout[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n min-height: 500px;\n}\n\n\n\n.config-nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n padding: 0.5rem 0;\n}\n\n.config-nav-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 0.5rem;\n}\n\n.config-nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.6rem;\n padding: 0.55rem 1rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n text-align: left;\n transition: all 0.15s ease;\n width: 100%;\n}\n\n.config-nav-item[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.config-nav-item-active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n\n\n.config-content[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1.5rem 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n.config-section[_ngcontent-%COMP%] {\n max-width: 700px;\n}\n\n.config-section-title[_ngcontent-%COMP%] {\n font-size: 1.3rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 0.5rem;\n}\n\n.config-section-desc[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n margin-bottom: 1.5rem;\n line-height: 1.5;\n}\n\n\n\n.config-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.config-toggle-row[_ngcontent-%COMP%], \n.config-field-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n transition: background 0.1s ease;\n gap: 1rem;\n}\n\n.config-toggle-row[_ngcontent-%COMP%]:hover, \n.config-field-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.config-toggle-info[_ngcontent-%COMP%], \n.config-field-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.15rem;\n flex: 1;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-hint[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.config-checkbox[_ngcontent-%COMP%] {\n width: 1.1rem;\n height: 1.1rem;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.config-input[_ngcontent-%COMP%] {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n font-family: inherit;\n}\n\n.config-input-number[_ngcontent-%COMP%] {\n width: 80px;\n text-align: center;\n}\n\n.config-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-slider[_ngcontent-%COMP%] {\n width: 200px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.config-value-display[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n padding: 0.3rem 0.6rem;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n font-family: monospace;\n}\n\n\n\n.config-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 1.5rem;\n text-align: center;\n gap: 1rem;\n color: var(--mj-text-muted);\n}\n\n.config-placeholder-icon[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n}\n\n\n\n\n.setup-progress[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n padding: 1rem 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n}\n\n.setup-progress-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n}\n\n.setup-progress-label[_ngcontent-%COMP%] {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.setup-progress-count[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.setup-progress-bar[_ngcontent-%COMP%] {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.setup-progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n transition: width 0.4s ease;\n}\n\n\n\n\n.setup-step[_ngcontent-%COMP%] {\n padding: 1rem 1.25rem;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n margin-bottom: 0.75rem;\n transition: border-color 0.2s;\n}\n\n.setup-step-complete[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success-border);\n background: color-mix(in srgb, var(--mj-status-success) 3%, var(--mj-bg-surface));\n}\n\n.setup-step-pending[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n\n.setup-step-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 0.85rem;\n}\n\n.setup-step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.setup-step-complete[_ngcontent-%COMP%] .setup-step-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n color: var(--mj-status-success);\n}\n\n.setup-step-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-weight: 700;\n}\n\n.setup-step-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n}\n\n.setup-step-title[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.setup-step-status[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.setup-step-complete[_ngcontent-%COMP%] .setup-step-status[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text);\n}\n\n\n\n\n.config-group-title[_ngcontent-%COMP%] {\n margin: 0 0 0.75rem 0;\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n\n\n\n.config-status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.config-status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n\n\n\n.setup-step-detail[_ngcontent-%COMP%] {\n margin-top: 0.75rem;\n padding-left: 2.85rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.setup-step-action[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s;\n flex-shrink: 0;\n}\n\n.setup-step-action[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n\n\n\n.provider-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.provider-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.provider-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.provider-name[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.provider-class[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n\n\n\n.provider-credential-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem 0.75rem;\n margin-top: -0.25rem;\n}\n\n.provider-credential-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n}\n\n.provider-credential-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.provider-credential-picker[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex: 1;\n min-width: 0;\n}\n\n.provider-credential-select[_ngcontent-%COMP%] {\n flex: 1;\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n}\n\n.provider-credential-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.provider-credential-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n}\n\n\n\n\n.index-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.index-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-default);\n}\n\n.index-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.index-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.index-name[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.index-meta[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 3px;\n}\n\n.index-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.65rem;\n}\n\n.index-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex-shrink: 0;\n}\n\n.index-delete-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.index-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n\n\n\n.create-index-form[_ngcontent-%COMP%] {\n margin-top: 0.75rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n margin-left: 2.85rem;\n}\n\n.create-index-title[_ngcontent-%COMP%] {\n margin: 0 0 1rem 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.create-index-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.create-index-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.85rem;\n}\n\n.create-index-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.create-index-label[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.config-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n}\n\n.config-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.create-index-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 1rem;\n}\n\n.create-index-submit[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 18px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.create-index-submit[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.create-index-submit[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.create-index-cancel[_ngcontent-%COMP%] {\n padding: 8px 18px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.create-index-cancel[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n.config-empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.config-empty-icon[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.config-empty-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.config-empty-text[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n max-width: 480px;\n line-height: 1.5;\n}\n\n\n\n.config-tag-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.config-tag[_ngcontent-%COMP%] {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n\n\n.config-section-note[_ngcontent-%COMP%] {\n margin-top: 1rem;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.config-section-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-info);\n}\n\n\n\n.config-save-bar[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 0;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n margin-top: 2rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.config-save-text[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n}\n\n.config-save-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.config-save-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.config-save-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.config-reset-btn[_ngcontent-%COMP%] {\n padding: 0.5rem 0.75rem;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n}\n\n.config-reset-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n@media (max-width: 768px) {\n .config-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .config-nav[_ngcontent-%COMP%] {\n width: 100%;\n flex-direction: row;\n overflow-x: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0;\n }\n\n .config-nav-header[_ngcontent-%COMP%] {\n display: none;\n }\n\n .config-nav-item[_ngcontent-%COMP%] {\n white-space: nowrap;\n padding: 0.6rem 1rem;\n }\n\n .config-nav-item-active[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid var(--mj-brand-primary);\n }\n\n .config-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n\n\n\n.fts-entity-controls[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.fts-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n.fts-summary-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.fts-filter-input[_ngcontent-%COMP%] {\n max-width: 240px;\n}\n\n.fts-entity-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.fts-entity-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s, background 0.15s;\n}\n\n.fts-entity-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.fts-entity-card.fts-entity-enabled[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.fts-entity-toggle[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.fts-entity-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.fts-entity-name[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.fts-entity-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.fts-field-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 1px 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n}\n\n.fts-entity-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n flex-shrink: 0;\n}\n\n.fts-entity-title-field[_ngcontent-%COMP%], \n.fts-entity-snippet-field[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.fts-entity-title-field[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.fts-entity-snippet-field[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n font-size: 10px;\n}\n\n\n\n\n.scope-manager[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 260px 1fr;\n gap: 16px;\n min-height: 420px;\n}\n\n.scope-manager-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-manager-list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 6px 8px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.scope-manager-new-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-link);\n padding: 3px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.7rem;\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.scope-manager-new-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.scope-manager-loading[_ngcontent-%COMP%], \n.scope-manager-empty[_ngcontent-%COMP%], \n.scope-manager-empty-detail[_ngcontent-%COMP%] {\n padding: 16px;\n color: var(--mj-text-muted);\n text-align: center;\n font-size: 0.85rem;\n}\n\n.scope-manager-empty-detail[_ngcontent-%COMP%] {\n padding: 40px 24px;\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n}\n\n.scope-manager-list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 6px;\n text-align: left;\n transition: background 120ms ease;\n}\n\n.scope-manager-list-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.scope-manager-list-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.scope-manager-list-name[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.scope-manager-badge[_ngcontent-%COMP%] {\n font-size: 0.625rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.scope-manager-detail[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n\n.scope-manager-tabs[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 8px;\n flex-wrap: wrap;\n}\n\n.scope-manager-tab[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 4px;\n transition: background 120ms ease, color 120ms ease;\n}\n\n.scope-manager-tab[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.scope-manager-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom: 2px solid var(--mj-brand-primary);\n border-radius: 0;\n font-weight: 500;\n}\n\n.scope-manager-tab-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.scope-manager-save-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 6px 14px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-save-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.scope-manager-delete-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-status-error-text);\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.scope-manager-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n}\n\n.scope-manager-open-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-open-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.scope-definition-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px 16px;\n}\n\n.scope-definition-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n}\n\n.scope-definition-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.scope-definition-full[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.scope-definition-toggle[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n\n.scope-definition-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n accent-color: var(--mj-brand-primary);\n}\n\n.scope-code-block[_ngcontent-%COMP%] {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 8px;\n}\n\n\n\n\n\n.search-analytics-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.search-analytics-kpi[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.search-analytics-kpi-label[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.search-analytics-kpi-value[_ngcontent-%COMP%] {\n font-size: 1.6rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-kpi-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.72rem;\n}\n\n.search-analytics-h3[_ngcontent-%COMP%] {\n margin: 22px 0 8px;\n font-size: 1rem;\n color: var(--mj-text-primary);\n}\n\n.search-analytics-empty[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n margin: 4px 0 14px;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.86rem;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 6px 10px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.search-analytics-refresh[_ngcontent-%COMP%] {\n margin-top: 16px;\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.9rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.82rem;\n}\n\n.search-analytics-refresh[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n\n\n\n.search-permissions-loading[_ngcontent-%COMP%] {\n padding: 1.2rem;\n color: var(--mj-text-secondary);\n font-style: italic;\n}\n\n.search-permissions-filters[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr 180px 130px;\n gap: 0.5rem;\n margin-bottom: 0.8rem;\n}\n\n.search-permissions-filters[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%] {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n font-size: 0.85rem;\n}\n\n.search-permissions-summary[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n margin-bottom: 0.6rem;\n}\n\n.search-permissions-empty[_ngcontent-%COMP%] {\n padding: 1.2rem;\n color: var(--mj-text-muted);\n text-align: center;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.search-permissions-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.85rem;\n}\n\n.search-permissions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.search-permissions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 0.5rem 0.7rem;\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n}\n\n.search-permissions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n}\n\n.search-permissions-secondary[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n.search-permissions-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.1rem 0.5rem;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 3px;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.search-permissions-level[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.15rem 0.55rem;\n border-radius: 3px;\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n.search-permissions-level-none[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.search-permissions-level-read[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info-text);\n}\n\n.search-permissions-level-search[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.search-permissions-level-manage[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}"] });
2413
+ i0.ɵɵadvance(3);
2414
+ i0.ɵɵconditional(ctx.HasUnsavedChanges ? 3 : -1);
2415
+ i0.ɵɵadvance(2);
2416
+ i0.ɵɵconditional(ctx.HasUnsavedChanges ? 5 : -1);
2417
+ i0.ɵɵadvance();
2418
+ i0.ɵɵproperty("Flex", true);
2419
+ i0.ɵɵadvance();
2420
+ i0.ɵɵconditional(ctx.IsLoading ? 7 : 8);
2421
+ } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.RangeValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.MaxValidator, i1.NgModel, i2.LoadingComponent, i3.SearchScopeChildGridComponent, i4.MJButtonDirective, i4.MJPageHeaderComponent, i4.MJPageLayoutComponent, i4.MJPageBodyComponent, i4.MJStatBadgeComponent, i5.SchedulingResourceComponent, i6.LowerCasePipe, i6.DecimalPipe], styles: ["\n\n\n\n.config-loading[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.config-layout[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n min-height: 500px;\n}\n\n\n\n.config-nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n padding: 0.5rem 0;\n}\n\n.config-nav-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 0.5rem;\n}\n\n.config-nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.6rem;\n padding: 0.55rem 1rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n text-align: left;\n transition: all 0.15s ease;\n width: 100%;\n}\n\n.config-nav-item[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.config-nav-item-active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n\n\n.config-content[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1.5rem 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n.config-section[_ngcontent-%COMP%] {\n max-width: 700px;\n}\n\n.config-section-title[_ngcontent-%COMP%] {\n font-size: 1.3rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 0.5rem;\n}\n\n.config-section-desc[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n margin-bottom: 1.5rem;\n line-height: 1.5;\n}\n\n\n\n.config-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.config-toggle-row[_ngcontent-%COMP%], \n.config-field-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n transition: background 0.1s ease;\n gap: 1rem;\n}\n\n.config-toggle-row[_ngcontent-%COMP%]:hover, \n.config-field-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.config-toggle-info[_ngcontent-%COMP%], \n.config-field-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.15rem;\n flex: 1;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-hint[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.config-checkbox[_ngcontent-%COMP%] {\n width: 1.1rem;\n height: 1.1rem;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.config-input[_ngcontent-%COMP%] {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n font-family: inherit;\n}\n\n.config-input-number[_ngcontent-%COMP%] {\n width: 80px;\n text-align: center;\n}\n\n.config-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-slider[_ngcontent-%COMP%] {\n width: 200px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.config-value-display[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n padding: 0.3rem 0.6rem;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n font-family: monospace;\n}\n\n\n\n.config-placeholder[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 1.5rem;\n text-align: center;\n gap: 1rem;\n color: var(--mj-text-muted);\n}\n\n.config-placeholder-icon[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n}\n\n\n\n\n.setup-progress[_ngcontent-%COMP%] {\n margin-bottom: 1.5rem;\n padding: 1rem 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n}\n\n.setup-progress-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n}\n\n.setup-progress-label[_ngcontent-%COMP%] {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.setup-progress-count[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.setup-progress-bar[_ngcontent-%COMP%] {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.setup-progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n transition: width 0.4s ease;\n}\n\n\n\n\n.setup-step[_ngcontent-%COMP%] {\n padding: 1rem 1.25rem;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n margin-bottom: 0.75rem;\n transition: border-color 0.2s;\n}\n\n.setup-step-complete[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success-border);\n background: color-mix(in srgb, var(--mj-status-success) 3%, var(--mj-bg-surface));\n}\n\n.setup-step-pending[_ngcontent-%COMP%] {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n\n.setup-step-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 0.85rem;\n}\n\n.setup-step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.setup-step-complete[_ngcontent-%COMP%] .setup-step-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n color: var(--mj-status-success);\n}\n\n.setup-step-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-weight: 700;\n}\n\n.setup-step-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n}\n\n.setup-step-title[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.setup-step-status[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.setup-step-complete[_ngcontent-%COMP%] .setup-step-status[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text);\n}\n\n\n\n\n.config-group-title[_ngcontent-%COMP%] {\n margin: 0 0 0.75rem 0;\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n\n\n\n.config-status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.config-status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n\n\n\n.setup-step-detail[_ngcontent-%COMP%] {\n margin-top: 0.75rem;\n padding-left: 2.85rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.setup-step-action[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s;\n flex-shrink: 0;\n}\n\n.setup-step-action[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n\n\n\n.provider-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.provider-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.provider-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.provider-name[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.provider-class[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n\n\n\n.provider-credential-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem 0.75rem;\n margin-top: -0.25rem;\n}\n\n.provider-credential-label[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n}\n\n.provider-credential-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.provider-credential-picker[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex: 1;\n min-width: 0;\n}\n\n.provider-credential-select[_ngcontent-%COMP%] {\n flex: 1;\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n}\n\n.provider-credential-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.provider-credential-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n}\n\n\n\n\n.index-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.index-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-default);\n}\n\n.index-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.index-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.index-name[_ngcontent-%COMP%] {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.index-meta[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 3px;\n}\n\n.index-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.65rem;\n}\n\n.index-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex-shrink: 0;\n}\n\n.index-delete-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.index-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n\n\n\n.create-index-form[_ngcontent-%COMP%] {\n margin-top: 0.75rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n margin-left: 2.85rem;\n}\n\n.create-index-title[_ngcontent-%COMP%] {\n margin: 0 0 1rem 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.create-index-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.create-index-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.85rem;\n}\n\n.create-index-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.create-index-label[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.config-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n}\n\n.config-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.create-index-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 1rem;\n}\n\n.create-index-submit[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 18px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.create-index-submit[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.create-index-submit[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.create-index-cancel[_ngcontent-%COMP%] {\n padding: 8px 18px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.create-index-cancel[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n.config-empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.config-empty-icon[_ngcontent-%COMP%] {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.config-empty-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.config-empty-text[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n max-width: 480px;\n line-height: 1.5;\n}\n\n\n\n.config-tag-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.config-tag[_ngcontent-%COMP%] {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n\n\n.config-section-note[_ngcontent-%COMP%] {\n margin-top: 1rem;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.config-section-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-info);\n}\n\n\n\n.config-save-bar[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 0;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n margin-top: 2rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.config-save-text[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n}\n\n.config-save-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.config-save-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.config-save-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.config-reset-btn[_ngcontent-%COMP%] {\n padding: 0.5rem 0.75rem;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n}\n\n.config-reset-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n@media (max-width: 768px) {\n .config-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .config-nav[_ngcontent-%COMP%] {\n width: 100%;\n flex-direction: row;\n overflow-x: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0;\n }\n\n .config-nav-header[_ngcontent-%COMP%] {\n display: none;\n }\n\n .config-nav-item[_ngcontent-%COMP%] {\n white-space: nowrap;\n padding: 0.6rem 1rem;\n }\n\n .config-nav-item-active[_ngcontent-%COMP%] {\n border-left: none;\n border-bottom: 3px solid var(--mj-brand-primary);\n }\n\n .config-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n}\n\n\n\n.fts-entity-controls[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.fts-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n.fts-summary-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.fts-filter-input[_ngcontent-%COMP%] {\n max-width: 240px;\n}\n\n.fts-entity-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.fts-entity-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s, background 0.15s;\n}\n\n.fts-entity-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.fts-entity-card.fts-entity-enabled[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.fts-entity-toggle[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.fts-entity-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.fts-entity-name[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.fts-entity-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.fts-field-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 1px 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n}\n\n.fts-entity-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n flex-shrink: 0;\n}\n\n.fts-entity-title-field[_ngcontent-%COMP%], \n.fts-entity-snippet-field[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.fts-entity-title-field[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.fts-entity-snippet-field[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n font-size: 10px;\n}\n\n\n\n\n.scope-manager[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 260px 1fr;\n gap: 16px;\n min-height: 420px;\n}\n\n.scope-manager-list[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-manager-list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 6px 8px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.scope-manager-new-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-link);\n padding: 3px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.7rem;\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.scope-manager-new-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.scope-manager-loading[_ngcontent-%COMP%], \n.scope-manager-empty[_ngcontent-%COMP%], \n.scope-manager-empty-detail[_ngcontent-%COMP%] {\n padding: 16px;\n color: var(--mj-text-muted);\n text-align: center;\n font-size: 0.85rem;\n}\n\n.scope-manager-empty-detail[_ngcontent-%COMP%] {\n padding: 40px 24px;\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n}\n\n.scope-manager-list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 6px;\n text-align: left;\n transition: background 120ms ease;\n}\n\n.scope-manager-list-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.scope-manager-list-item.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.scope-manager-list-name[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.scope-manager-badge[_ngcontent-%COMP%] {\n font-size: 0.625rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.scope-manager-detail[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n\n.scope-manager-tabs[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 8px;\n flex-wrap: wrap;\n}\n\n.scope-manager-tab[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 4px;\n transition: background 120ms ease, color 120ms ease;\n}\n\n.scope-manager-tab[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.scope-manager-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom: 2px solid var(--mj-brand-primary);\n border-radius: 0;\n font-weight: 500;\n}\n\n.scope-manager-tab-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.scope-manager-save-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 6px 14px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-save-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.scope-manager-delete-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-status-error-text);\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.scope-manager-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n}\n\n.scope-manager-open-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-open-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.scope-definition-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px 16px;\n}\n\n.scope-definition-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n}\n\n.scope-definition-grid[_ngcontent-%COMP%] label[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.scope-definition-full[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.scope-definition-toggle[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n\n.scope-definition-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n accent-color: var(--mj-brand-primary);\n}\n\n.scope-code-block[_ngcontent-%COMP%] {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 8px;\n}\n\n\n\n\n\n.search-analytics-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.search-analytics-kpi[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.search-analytics-kpi-label[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.search-analytics-kpi-value[_ngcontent-%COMP%] {\n font-size: 1.6rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-kpi-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.72rem;\n}\n\n.search-analytics-h3[_ngcontent-%COMP%] {\n margin: 22px 0 8px;\n font-size: 1rem;\n color: var(--mj-text-primary);\n}\n\n.search-analytics-empty[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n margin: 4px 0 14px;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.86rem;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 6px 10px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.search-analytics-refresh[_ngcontent-%COMP%] {\n margin-top: 16px;\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.9rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.82rem;\n}\n\n.search-analytics-refresh[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n\n\n\n.search-permissions-loading[_ngcontent-%COMP%] {\n padding: 1.2rem;\n color: var(--mj-text-secondary);\n font-style: italic;\n}\n\n.search-permissions-filters[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr 180px 130px;\n gap: 0.5rem;\n margin-bottom: 0.8rem;\n}\n\n.search-permissions-filters[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%] {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n font-size: 0.85rem;\n}\n\n.search-permissions-summary[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n margin-bottom: 0.6rem;\n}\n\n.search-permissions-empty[_ngcontent-%COMP%] {\n padding: 1.2rem;\n color: var(--mj-text-muted);\n text-align: center;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.search-permissions-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.85rem;\n}\n\n.search-permissions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.search-permissions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 0.5rem 0.7rem;\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n}\n\n.search-permissions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n}\n\n.search-permissions-secondary[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n.search-permissions-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.1rem 0.5rem;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 3px;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.search-permissions-level[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0.15rem 0.55rem;\n border-radius: 3px;\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n.search-permissions-level-none[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.search-permissions-level-read[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info-text);\n}\n\n.search-permissions-level-search[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.search-permissions-level-manage[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}"] });
2380
2422
  };
2381
2423
  KnowledgeConfigResourceComponent = __decorate([
2382
2424
  RegisterClass(BaseResourceComponent, 'KnowledgeConfigResource')
@@ -2384,7 +2426,7 @@ KnowledgeConfigResourceComponent = __decorate([
2384
2426
  export { KnowledgeConfigResourceComponent };
2385
2427
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(KnowledgeConfigResourceComponent, [{
2386
2428
  type: Component,
2387
- args: [{ standalone: false, selector: 'app-knowledge-config-resource', template: "@if (IsLoading) {\n <div class=\"config-loading\">\n <mj-loading text=\"Loading configuration...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"config-layout\">\n <!-- Left Navigation -->\n <nav class=\"config-nav\">\n <div class=\"config-nav-header\">\n <i class=\"fa-solid fa-cogs\"></i>\n <span>Configuration</span>\n </div>\n @for (section of Sections; track section.ID) {\n <button\n class=\"config-nav-item\"\n [class.config-nav-item-active]=\"ActiveSection === section.ID\"\n (click)=\"SelectSection(section.ID)\"\n >\n <i [class]=\"section.Icon\"></i>\n <span>{{ section.Label }}</span>\n </button>\n }\n </nav>\n\n <!-- Content Area -->\n <div class=\"config-content\">\n <!-- Pipeline Settings -->\n @if (ActiveSection === 'pipeline') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Pipeline Settings</h2>\n <p class=\"config-section-desc\">Configure how the Knowledge Pipeline processes incoming content.</p>\n\n <div class=\"config-group\">\n <label class=\"config-toggle-row\">\n <div class=\"config-toggle-info\">\n <span class=\"config-label\">Auto-tag on Ingest</span>\n <span class=\"config-hint\">Automatically run autotagging when new content is ingested</span>\n </div>\n <input type=\"checkbox\" [(ngModel)]=\"PipelineSettings.AutotagOnIngest\" (change)=\"OnSettingChanged()\" class=\"config-checkbox\" />\n </label>\n\n <label class=\"config-toggle-row\">\n <div class=\"config-toggle-info\">\n <span class=\"config-label\">Vectorize on Ingest</span>\n <span class=\"config-hint\">Automatically create embeddings for new content</span>\n </div>\n <input type=\"checkbox\" [(ngModel)]=\"PipelineSettings.VectorizeOnIngest\" (change)=\"OnSettingChanged()\" class=\"config-checkbox\" />\n </label>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Default Batch Size</span>\n <span class=\"config-hint\">Number of items processed per batch</span>\n </div>\n <input type=\"number\" [(ngModel)]=\"PipelineSettings.DefaultBatchSize\" (input)=\"OnSettingChanged()\" class=\"config-input config-input-number\" min=\"10\" max=\"1000\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Max Concurrent Jobs</span>\n <span class=\"config-hint\">Maximum number of pipeline jobs running at once</span>\n </div>\n <input type=\"number\" [(ngModel)]=\"PipelineSettings.MaxConcurrentJobs\" (input)=\"OnSettingChanged()\" class=\"config-input config-input-number\" min=\"1\" max=\"10\" />\n </div>\n </div>\n </div>\n }\n\n <!-- Vector Database Settings -->\n @if (ActiveSection === 'vectordb') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Vector Database</h2>\n <p class=\"config-section-desc\">Manage the shared vector index and database connection.</p>\n\n <!-- Setup Progress -->\n <div class=\"setup-progress\">\n <div class=\"setup-progress-header\">\n <span class=\"setup-progress-label\">Setup Progress</span>\n <span class=\"setup-progress-count\">{{ SetupStepsCompleted }} of 3 complete</span>\n </div>\n <div class=\"setup-progress-bar\">\n <div class=\"setup-progress-fill\" [style.width.%]=\"(SetupStepsCompleted / 3) * 100\"></div>\n </div>\n </div>\n\n <!-- Step 1: Providers -->\n <div class=\"setup-step\" [class.setup-step-complete]=\"HasVectorDBProvider\" [class.setup-step-pending]=\"!HasVectorDBProvider\">\n <div class=\"setup-step-header\">\n <div class=\"setup-step-indicator\">\n @if (HasVectorDBProvider) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <span class=\"setup-step-number\">1</span>\n }\n </div>\n <div class=\"setup-step-info\">\n <span class=\"setup-step-title\">Vector Database Providers</span>\n @if (HasVectorDBProvider) {\n <span class=\"setup-step-status\">{{ VectorDBProviders.length }} provider(s) registered</span>\n } @else {\n <span class=\"setup-step-status\">No providers registered. Add a vector database provider (e.g., Pinecone, Weaviate) via the admin console.</span>\n }\n </div>\n </div>\n @if (HasVectorDBProvider) {\n <div class=\"setup-step-detail\">\n @for (provider of VectorDBProviders; track provider.ID) {\n <div class=\"provider-card\">\n <div class=\"provider-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"provider-info\">\n <span class=\"provider-name\">{{ provider.Name }}</span>\n <span class=\"provider-class\">{{ provider.ClassKey }}</span>\n </div>\n <span class=\"config-status-badge config-status-active\">\n <i class=\"fa-solid fa-circle-check\"></i> Active\n </span>\n </div>\n <div class=\"provider-credential-row\">\n <label class=\"provider-credential-label\">\n <i class=\"fa-solid fa-key\"></i> API Credential\n </label>\n <div class=\"provider-credential-picker\">\n <select class=\"provider-credential-select\"\n [(ngModel)]=\"provider.CredentialID\"\n (change)=\"SaveProviderCredential(provider)\"\n [disabled]=\"IsSavingCredential\">\n <option [ngValue]=\"null\">None (use environment variable)</option>\n @for (cred of AvailableCredentials; track cred.ID) {\n <option [ngValue]=\"cred.ID\">{{ cred.Name }}</option>\n }\n </select>\n @if (IsSavingCredential) {\n <i class=\"fa-solid fa-spinner fa-spin provider-credential-spinner\"></i>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Step 2: Embedding Model -->\n <div class=\"setup-step\" [class.setup-step-complete]=\"HasEmbeddingModel\" [class.setup-step-pending]=\"!HasEmbeddingModel\">\n <div class=\"setup-step-header\">\n <div class=\"setup-step-indicator\">\n @if (HasEmbeddingModel) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <span class=\"setup-step-number\">2</span>\n }\n </div>\n <div class=\"setup-step-info\">\n <span class=\"setup-step-title\">Embedding Models</span>\n @if (HasEmbeddingModel) {\n <span class=\"setup-step-status\">{{ EmbeddingModels.length }} model(s) available</span>\n } @else {\n <span class=\"setup-step-status\">No embedding models found. Configure at least one in the AI app > Models tab.</span>\n }\n </div>\n </div>\n @if (HasEmbeddingModel) {\n <div class=\"setup-step-detail\">\n <div class=\"config-tag-list\">\n @for (model of EmbeddingModels; track model.ID) {\n <span class=\"config-tag\">{{ model.Name }}</span>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Step 3: Vector Indexes -->\n <div class=\"setup-step\" [class.setup-step-complete]=\"HasVectorIndex\" [class.setup-step-pending]=\"!HasVectorIndex\">\n <div class=\"setup-step-header\">\n <div class=\"setup-step-indicator\">\n @if (HasVectorIndex) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <span class=\"setup-step-number\">3</span>\n }\n </div>\n <div class=\"setup-step-info\">\n <span class=\"setup-step-title\">Vector Indexes</span>\n @if (HasVectorIndex) {\n <span class=\"setup-step-status\">{{ VectorIndexes.length }} index(es) configured</span>\n } @else if (HasVectorDBProvider && HasEmbeddingModel) {\n <span class=\"setup-step-status\">No indexes yet \u2014 create one below.</span>\n } @else {\n <span class=\"setup-step-status\">Complete steps 1 and 2 first.</span>\n }\n </div>\n @if (HasVectorDBProvider && HasEmbeddingModel && !ShowCreateIndexForm) {\n <button class=\"setup-step-action\" (click)=\"OpenCreateIndexForm()\">\n <i class=\"fa-solid fa-plus\"></i> Create Index\n </button>\n }\n </div>\n\n <!-- Existing Indexes -->\n @if (HasVectorIndex) {\n <div class=\"setup-step-detail\">\n @for (idx of VectorIndexes; track idx.ID) {\n <div class=\"index-card\">\n <div class=\"index-icon\">\n <i class=\"fa-solid fa-cubes\"></i>\n </div>\n <div class=\"index-info\">\n <span class=\"index-name\">{{ idx.Name }}</span>\n <span class=\"index-meta\">\n <i class=\"fa-solid fa-database\"></i> {{ idx.VectorDatabase }}\n &nbsp;\u00B7&nbsp;\n <i class=\"fa-solid fa-microchip\"></i> {{ idx.EmbeddingModel }}\n </span>\n </div>\n <div class=\"index-actions\">\n <span class=\"config-status-badge config-status-active\">\n <i class=\"fa-solid fa-circle-check\"></i> Active\n </span>\n <button class=\"index-delete-btn\" (click)=\"DeleteIndex(idx.ID)\" title=\"Delete index\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Create Index Form -->\n @if (ShowCreateIndexForm) {\n <div class=\"create-index-form\">\n <h4 class=\"create-index-title\">\n <i class=\"fa-solid fa-plus-circle\"></i> Create New Vector Index\n </h4>\n <div class=\"create-index-fields\">\n <div class=\"create-index-field\">\n <label class=\"create-index-label\">Index Name</label>\n <input type=\"text\"\n class=\"config-input\"\n [(ngModel)]=\"NewIndexName\"\n placeholder=\"e.g., mj-knowledge-index\" />\n </div>\n <div class=\"create-index-field\">\n <label class=\"create-index-label\">Vector Database</label>\n <select class=\"config-select\" [(ngModel)]=\"NewIndexVectorDBID\">\n @for (db of VectorDBProviders; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"create-index-field\">\n <label class=\"create-index-label\">Embedding Model</label>\n <select class=\"config-select\" [(ngModel)]=\"NewIndexEmbeddingModelID\">\n @for (model of EmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"create-index-actions\">\n <button class=\"create-index-submit\" (click)=\"CreateIndex()\" [disabled]=\"IsCreatingIndex\">\n @if (IsCreatingIndex) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-plus\"></i> Create Index\n }\n </button>\n <button class=\"create-index-cancel\" (click)=\"CancelCreateIndex()\" [disabled]=\"IsCreatingIndex\">\n Cancel\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Full-Text Indexes -->\n @if (ActiveSection === 'fulltext') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Full-Text Search Entities</h2>\n <p class=\"config-section-desc\">Configure which entities are included in full-text search. Entities with text fields (Name, Description, etc.) are automatically discovered.</p>\n\n @if (IsLoadingFTSEntities) {\n <mj-loading text=\"Discovering searchable entities...\" size=\"medium\"></mj-loading>\n } @else if (FTSEntities.length === 0) {\n <div class=\"config-empty-state\">\n <i class=\"fa-solid fa-text-width config-empty-icon\"></i>\n <h3 class=\"config-empty-title\">No Searchable Entities Found</h3>\n <p class=\"config-empty-text\">No entities with text fields were discovered. Ensure your database schema includes entities with varchar/nvarchar columns.</p>\n </div>\n } @else {\n <div class=\"fts-entity-controls\">\n <div class=\"fts-summary\">\n <span class=\"fts-summary-count\">{{ EnabledFTSCount }} of {{ FTSEntities.length }} entities enabled for search</span>\n <input type=\"text\" class=\"config-input fts-filter-input\" placeholder=\"Filter entities...\" [(ngModel)]=\"FTSFilterText\" />\n </div>\n </div>\n\n <div class=\"fts-entity-list\">\n @for (entity of FilteredFTSEntities; track entity.EntityName) {\n <div class=\"fts-entity-card\" [class.fts-entity-enabled]=\"entity.Enabled\">\n <div class=\"fts-entity-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"entity.Enabled\" (change)=\"OnFTSEntityToggled(entity)\" class=\"config-checkbox\" />\n </div>\n <div class=\"fts-entity-info\">\n <span class=\"fts-entity-name\">{{ entity.EntityName }}</span>\n <div class=\"fts-entity-fields\">\n @for (field of entity.IndexedFields; track field) {\n <span class=\"fts-field-tag\">{{ field }}</span>\n }\n </div>\n </div>\n <div class=\"fts-entity-meta\">\n <span class=\"fts-entity-title-field\" title=\"Title field\">\n <i class=\"fa-solid fa-heading\"></i> {{ entity.TitleField }}\n </span>\n @if (entity.SnippetField !== entity.TitleField) {\n <span class=\"fts-entity-snippet-field\" title=\"Snippet field\">\n <i class=\"fa-solid fa-align-left\"></i> {{ entity.SnippetField }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Embedding Models -->\n @if (ActiveSection === 'embedding') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Embedding Models</h2>\n <p class=\"config-section-desc\">AI models used for generating vector embeddings from text.</p>\n\n @if (HasEmbeddingModel) {\n <div class=\"config-group\">\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Active Model</span>\n <span class=\"config-hint\">Currently selected embedding model</span>\n </div>\n <span class=\"config-value-display\">{{ EmbeddingModelName }}</span>\n </div>\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Available Models</span>\n <span class=\"config-hint\">{{ EmbeddingModels.length }} embedding model(s) configured</span>\n </div>\n <div class=\"config-tag-list\">\n @for (model of EmbeddingModels; track model.ID) {\n <span class=\"config-tag\">{{ model.Name }}</span>\n }\n </div>\n </div>\n </div>\n <p class=\"config-section-note\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Manage embedding models in the AI Dashboard > Models tab.\n </p>\n } @else {\n <div class=\"config-empty-state\">\n <i class=\"fa-solid fa-microchip config-empty-icon\"></i>\n <h3 class=\"config-empty-title\">No Embedding Models Found</h3>\n <p class=\"config-empty-text\">\n Embedding models are required to convert text into vectors for semantic search and duplicate detection.\n Configure at least one embedding model (e.g., text-embedding-3-small) in the AI Dashboard > Models tab.\n </p>\n </div>\n }\n </div>\n }\n\n <!-- Thresholds -->\n @if (ActiveSection === 'thresholds') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Scoring Thresholds</h2>\n <p class=\"config-section-desc\">Set the scoring thresholds used by search, duplicate detection, and autotagging.</p>\n\n <div class=\"config-group\">\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Duplicate Absolute Match</span>\n <span class=\"config-hint\">Score above which duplicates are auto-confirmed ({{ FormatThreshold(ThresholdSettings.DuplicateAbsolute) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.DuplicateAbsolute\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0.5\" max=\"1\" step=\"0.01\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Duplicate Potential Match</span>\n <span class=\"config-hint\">Score above which duplicates are flagged for review ({{ FormatThreshold(ThresholdSettings.DuplicatePotential) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.DuplicatePotential\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0.3\" max=\"1\" step=\"0.01\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Search Relevance</span>\n <span class=\"config-hint\">Minimum score for search results ({{ FormatThreshold(ThresholdSettings.SearchRelevance) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.SearchRelevance\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0\" max=\"1\" step=\"0.01\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Autotag Confidence</span>\n <span class=\"config-hint\">Minimum confidence for accepting auto-generated tags ({{ FormatThreshold(ThresholdSettings.AutotagConfidence) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.AutotagConfidence\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0.3\" max=\"1\" step=\"0.01\" />\n </div>\n </div>\n </div>\n }\n\n <!-- Search Scopes Section -->\n @if (ActiveSection === 'search-scopes') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-compass-drafting\"></i> Search Scopes</h2>\n <p class=\"config-section-desc\">\n Define reusable search scopes that filter which providers, entities, external indexes, and storage accounts participate in a scoped search.\n Scopes can be assigned to AI agents for pre-execution RAG or agent-invoked search.\n </p>\n\n <div class=\"scope-manager\">\n <!-- Scope list -->\n <aside class=\"scope-manager-list\">\n <div class=\"scope-manager-list-header\">\n <span>Scopes ({{ SearchScopes.length }})</span>\n <button type=\"button\" class=\"scope-manager-new-btn\" (click)=\"CreateNewScope()\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n @if (IsLoadingScopes) {\n <div class=\"scope-manager-loading\">Loading&hellip;</div>\n } @else if (SearchScopes.length === 0) {\n <div class=\"scope-manager-empty\">\n No scopes defined yet. Click <strong>New</strong> to create one.\n </div>\n } @else {\n @for (s of SearchScopes; track s.ID) {\n <button\n type=\"button\"\n class=\"scope-manager-list-item\"\n [class.active]=\"ActiveScopeID === s.ID\"\n (click)=\"SelectScope(s.ID)\">\n <i [class]=\"s.Icon || 'fa-solid fa-filter'\" aria-hidden=\"true\"></i>\n <span class=\"scope-manager-list-name\">{{ s.Name }}</span>\n @if (s.IsGlobal) {\n <span class=\"scope-manager-badge\">Global</span>\n } @else if (s.IsDefault) {\n <span class=\"scope-manager-badge\">Default</span>\n }\n </button>\n }\n }\n </aside>\n\n <!-- Scope detail -->\n <section class=\"scope-manager-detail\">\n @if (ActiveScope) {\n <!-- Tab strip -->\n <div class=\"scope-manager-tabs\">\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'definition'\" (click)=\"SelectScopeTab('definition')\">Definition</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'providers'\" (click)=\"SelectScopeTab('providers')\">Providers</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'indexes'\" (click)=\"SelectScopeTab('indexes')\">External Indexes</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'entities'\" (click)=\"SelectScopeTab('entities')\">Entities</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'storage'\" (click)=\"SelectScopeTab('storage')\">Storage</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'permissions'\" (click)=\"SelectScopeTab('permissions')\">Permissions</button>\n <div class=\"scope-manager-tab-spacer\"></div>\n @if (ActiveScope.ID) {\n <button type=\"button\" class=\"scope-manager-open-btn\"\n (click)=\"OpenActiveScopeFullForm()\"\n title=\"Open the full custom form for this scope (Live Preview, Fusion Weights, Reranker, Test Queries, Execution Logs)\">\n <i class=\"fa-solid fa-up-right-from-square\"></i> Open Full Form\n </button>\n }\n <button type=\"button\" class=\"scope-manager-save-btn\" (click)=\"SaveActiveScope()\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n @if (!ActiveScope.IsGlobal) {\n <button type=\"button\" class=\"scope-manager-delete-btn\" (click)=\"DeleteActiveScope()\" title=\"Delete scope\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n\n <!-- Definition tab -->\n @if (ActiveScopeTab === 'definition') {\n <div class=\"scope-definition-grid\">\n <label>\n <span>Name</span>\n <input type=\"text\" class=\"mj-input\" [value]=\"ActiveScope.Name\" (change)=\"ActiveScope.Name = $any($event.target).value\">\n </label>\n <label>\n <span>Icon (Font Awesome class)</span>\n <input type=\"text\" class=\"mj-input\" [value]=\"ActiveScope.Icon || ''\" (change)=\"ActiveScope.Icon = $any($event.target).value\">\n </label>\n <label class=\"scope-definition-full\">\n <span>Description</span>\n <textarea rows=\"2\" class=\"mj-textarea\" [value]=\"ActiveScope.Description || ''\" (change)=\"ActiveScope.Description = $any($event.target).value\"></textarea>\n </label>\n <label>\n <span>Status</span>\n <select class=\"mj-input\" [value]=\"ActiveScope.Status\" (change)=\"ActiveScope.Status = $any($event.target).value\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </label>\n <label>\n <span>Start at</span>\n <input type=\"datetime-local\" class=\"mj-input\" [value]=\"FormatScopeDate(ActiveScope.StartAt)\" (change)=\"SetScopeDate(ActiveScope, 'StartAt', $any($event.target).value)\">\n </label>\n <label>\n <span>End at</span>\n <input type=\"datetime-local\" class=\"mj-input\" [value]=\"FormatScopeDate(ActiveScope.EndAt)\" (change)=\"SetScopeDate(ActiveScope, 'EndAt', $any($event.target).value)\">\n </label>\n <label class=\"scope-definition-toggle\">\n <input type=\"checkbox\" [checked]=\"ActiveScope.IsDefault\" (change)=\"ActiveScope.IsDefault = $any($event.target).checked\" [disabled]=\"ActiveScope.IsGlobal\">\n <span>Default scope \u2014 picked when users/agents don't specify one</span>\n </label>\n <label class=\"scope-definition-toggle\">\n <input type=\"checkbox\" [checked]=\"ActiveScope.IsGlobal\" disabled>\n <span>Global \u2014 reserved for the built-in Global scope (read-only)</span>\n </label>\n <label class=\"scope-definition-full\">\n <span>Scope Config (JSON)</span>\n <textarea rows=\"4\" class=\"mj-textarea scope-code-block\" spellcheck=\"false\" [value]=\"ActiveScope.ScopeConfig || ''\" (change)=\"ActiveScope.ScopeConfig = $any($event.target).value\"></textarea>\n </label>\n <label class=\"scope-definition-full\">\n <span>Search Context Config (JSON)</span>\n <textarea rows=\"4\" class=\"mj-textarea scope-code-block\" spellcheck=\"false\" [value]=\"ActiveScope.SearchContextConfig || ''\" (change)=\"ActiveScope.SearchContextConfig = $any($event.target).value\"></textarea>\n </label>\n </div>\n }\n\n @if (ActiveScopeTab === 'providers') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Providers\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeProviderColumns\"\n AddButtonLabel=\"+ Add provider\"\n EmptyMessage=\"No providers assigned. Without any providers, this scope searches nothing.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'indexes') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope External Indexes\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeExternalIndexColumns\"\n AddButtonLabel=\"+ Add external index\"\n EmptyMessage=\"No external indexes configured for this scope.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'entities') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Entities\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeEntityColumns\"\n AddButtonLabel=\"+ Add entity\"\n EmptyMessage=\"No entities configured. Scoped entity search will return no rows.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'storage') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Storage Accounts\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeStorageColumns\"\n AddButtonLabel=\"+ Add storage folder\"\n EmptyMessage=\"No storage accounts linked to this scope.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'permissions') {\n <div class=\"scope-permissions-help\" style=\"margin-bottom: 12px; padding: 8px 12px; background: var(--mj-bg-surface-card); border-left: 3px solid var(--mj-brand-primary); border-radius: 4px;\">\n <p style=\"margin: 0; font-size: 0.95em;\">\n <i class=\"fa-solid fa-shield-halved\" style=\"color: var(--mj-brand-primary);\"></i>\n <strong>Per-user / per-role grants on this scope.</strong>\n Each row binds <em>either</em> a User <em>or</em> a Role (not both). Levels:\n <code>None</code> = explicit deny that overrides role grants,\n <code>Read</code> = view scope metadata,\n <code>Search</code> = invoke ScopedSearchAction,\n <code>Manage</code> = full edit including authoring permissions.\n Combined with <code>AIAgent.SearchScopeAccess</code> via the resolver \u2014 see the spec for the full resolution order.\n </p>\n </div>\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Permissions\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopePermissionColumns\"\n AddButtonLabel=\"+ Grant access\"\n EmptyMessage=\"No explicit grants. Access falls back to agent SearchScopeAccess only.\">\n </mj-search-scope-child-grid>\n }\n } @else {\n <div class=\"scope-manager-empty-detail\">\n Select a scope on the left, or click <strong>New</strong> to create one.\n </div>\n }\n </section>\n </div>\n </div>\n }\n\n <!-- Search Analytics Section (P3.3) \u2014 driven by SearchExecutionLog -->\n @if (ActiveSection === 'search-analytics') {\n <div class=\"config-section-content\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-chart-line\"></i> Search Analytics</h2>\n <p class=\"config-section-desc\">Aggregated metrics over the last 5,000 search invocations from <code>MJ: Search Execution Logs</code>. Use this to spot slow scopes, high-failure queries, or runaway reranker spend.</p>\n\n @if (AnalyticsLoading) {\n <mj-loading text=\"Loading analytics\u2026\" size=\"medium\"></mj-loading>\n } @else if (!AnalyticsLoaded) {\n <button class=\"mj-input\" type=\"button\" (click)=\"LoadSearchAnalytics()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Load analytics\n </button>\n } @else {\n <div class=\"search-analytics-kpi-grid\">\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Total runs</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsTotalRuns | number }}</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Success rate</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsSuccessRate }}%</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Hit rate</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsHitRate }}%</span>\n <span class=\"search-analytics-kpi-hint\">% of successful runs that returned \u22651 result</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Avg latency</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsAvgLatencyMs }}ms</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">P95 latency</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsP95LatencyMs }}ms</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Reranker spend</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsTotalRerankerCostCents | number:'1.0-2' }}\u00A2</span>\n </div>\n </div>\n\n <h3 class=\"search-analytics-h3\">Top scopes by volume</h3>\n @if (AnalyticsTopScopes.length === 0) {\n <p class=\"search-analytics-empty\">No runs in the window.</p>\n } @else {\n <table class=\"search-analytics-table\">\n <thead>\n <tr><th>Scope</th><th>Runs</th><th>Avg latency</th></tr>\n </thead>\n <tbody>\n @for (s of AnalyticsTopScopes; track s.ScopeID) {\n <tr>\n <td>{{ s.Name }}</td>\n <td>{{ s.Count | number }}</td>\n <td>{{ s.AvgLatencyMs }}ms</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <h3 class=\"search-analytics-h3\">Reranker spend by driver</h3>\n @if (AnalyticsRerankerSpend.length === 0) {\n <p class=\"search-analytics-empty\">No rerank invocations in the window.</p>\n } @else {\n <table class=\"search-analytics-table\">\n <thead>\n <tr><th>Reranker</th><th>Calls</th><th>Total cents</th></tr>\n </thead>\n <tbody>\n @for (r of AnalyticsRerankerSpend; track r.Reranker) {\n <tr>\n <td>{{ r.Reranker }}</td>\n <td>{{ r.Count | number }}</td>\n <td>{{ r.TotalCents | number:'1.0-2' }}\u00A2</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <h3 class=\"search-analytics-h3\">Top failure reasons</h3>\n @if (AnalyticsTopFailures.length === 0) {\n <p class=\"search-analytics-empty\">No failures in the window.</p>\n } @else {\n <table class=\"search-analytics-table\">\n <thead>\n <tr><th>Reason</th><th>Count</th></tr>\n </thead>\n <tbody>\n @for (f of AnalyticsTopFailures; track f.Reason) {\n <tr>\n <td>{{ f.Reason }}</td>\n <td>{{ f.Count | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <button class=\"mj-input search-analytics-refresh\" type=\"button\" (click)=\"LoadSearchAnalytics()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n </div>\n }\n\n <!-- Permissions Audit Section (P2A.7) -->\n @if (ActiveSection === 'search-permissions') {\n <div class=\"config-section-content\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-shield-halved\"></i> Permissions</h2>\n <p class=\"config-section-desc\">\n Cross-scope view of every <code>SearchScopePermission</code> row. Filter by scope, by user/role, or by permission level to answer \"who has access to what\". Read-only \u2014 to add or edit a grant, open the SearchScope's full form and use its Permissions panel.\n </p>\n\n @if (PermissionsLoading) {\n <div class=\"search-permissions-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading permission rows...\n </div>\n }\n\n @if (PermissionsLoaded && !PermissionsLoading) {\n <div class=\"search-permissions-filters\">\n <input class=\"mj-input\" type=\"text\" placeholder=\"Filter by scope name...\" [(ngModel)]=\"PermissionsFilterScope\" />\n <input class=\"mj-input\" type=\"text\" placeholder=\"Filter by user/role (name or email)...\" [(ngModel)]=\"PermissionsFilterPrincipal\" />\n <select class=\"mj-input\" [(ngModel)]=\"PermissionsFilterLevel\">\n <option value=\"\">All levels</option>\n <option value=\"None\">None</option>\n <option value=\"Read\">Read</option>\n <option value=\"Search\">Search</option>\n <option value=\"Manage\">Manage</option>\n </select>\n <button class=\"mj-input\" type=\"button\" (click)=\"RefreshPermissionsAudit()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n </div>\n\n <div class=\"search-permissions-summary\">\n Showing {{ FilteredPermissionsRows.length }} of {{ PermissionsRows.length }} rows\n </div>\n\n @if (FilteredPermissionsRows.length === 0) {\n <div class=\"search-permissions-empty\">\n No permission rows match your filters.\n </div>\n } @else {\n <table class=\"search-permissions-table\">\n <thead>\n <tr>\n <th>Scope</th>\n <th>Principal</th>\n <th>Type</th>\n <th>Permission Level</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredPermissionsRows; track row.ID) {\n <tr>\n <td>{{ row.SearchScopeName }}</td>\n <td>\n @if (row.UserID) {\n {{ row.UserName }} <span class=\"search-permissions-secondary\">({{ row.UserEmail }})</span>\n } @else {\n {{ row.RoleName }}\n }\n </td>\n <td>\n @if (row.UserID) { <span class=\"search-permissions-tag\">User</span> }\n @if (row.RoleID) { <span class=\"search-permissions-tag\">Role</span> }\n </td>\n <td>\n <span class=\"search-permissions-level search-permissions-level-{{ row.PermissionLevel | lowercase }}\">{{ row.PermissionLevel }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n }\n </div>\n }\n\n <!-- Scheduling Section -->\n @if (ActiveSection === 'scheduling') {\n <div class=\"config-section-content\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-clock\"></i> Scheduling</h2>\n <p class=\"config-section-desc\">Manage automated pipeline schedules for content classification and vector sync. Create schedules here or manage all schedules in the dedicated Scheduling app.</p>\n <div style=\"margin-top: 16px;\">\n <app-scheduling-resource></app-scheduling-resource>\n </div>\n </div>\n }\n\n <!-- Save Bar -->\n @if (HasUnsavedChanges) {\n <div class=\"config-save-bar\">\n <span class=\"config-save-text\">You have unsaved changes</span>\n <button class=\"config-save-btn\" (click)=\"SaveConfiguration()\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i> Save Changes\n }\n </button>\n <button class=\"config-reset-btn\" (click)=\"ResetConfiguration()\" [disabled]=\"IsSaving\">\n Reset\n </button>\n </div>\n }\n </div>\n </div>\n}\n", styles: ["/* Knowledge Configuration - Settings Page with Left Nav */\n\n.config-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.config-layout {\n display: flex;\n height: 100%;\n min-height: 500px;\n}\n\n/* Left Navigation */\n.config-nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n padding: 0.5rem 0;\n}\n\n.config-nav-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 0.5rem;\n}\n\n.config-nav-item {\n display: flex;\n align-items: center;\n gap: 0.6rem;\n padding: 0.55rem 1rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n text-align: left;\n transition: all 0.15s ease;\n width: 100%;\n}\n\n.config-nav-item:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.config-nav-item-active {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n/* Content Area */\n.config-content {\n flex: 1;\n padding: 1.5rem 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n.config-section {\n max-width: 700px;\n}\n\n.config-section-title {\n font-size: 1.3rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 0.5rem;\n}\n\n.config-section-desc {\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n margin-bottom: 1.5rem;\n line-height: 1.5;\n}\n\n/* Config Groups */\n.config-group {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.config-toggle-row,\n.config-field-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n transition: background 0.1s ease;\n gap: 1rem;\n}\n\n.config-toggle-row:hover,\n.config-field-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.config-toggle-info,\n.config-field-info {\n display: flex;\n flex-direction: column;\n gap: 0.15rem;\n flex: 1;\n}\n\n.config-label {\n font-weight: 500;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-hint {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.config-checkbox {\n width: 1.1rem;\n height: 1.1rem;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.config-input {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n font-family: inherit;\n}\n\n.config-input-number {\n width: 80px;\n text-align: center;\n}\n\n.config-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-slider {\n width: 200px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.config-value-display {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n padding: 0.3rem 0.6rem;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n font-family: monospace;\n}\n\n/* Placeholder */\n.config-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 1.5rem;\n text-align: center;\n gap: 1rem;\n color: var(--mj-text-muted);\n}\n\n.config-placeholder-icon {\n font-size: 2.5rem;\n}\n\n/* ---- Setup Progress Bar ---- */\n\n.setup-progress {\n margin-bottom: 1.5rem;\n padding: 1rem 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n}\n\n.setup-progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n}\n\n.setup-progress-label {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.setup-progress-count {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.setup-progress-bar {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.setup-progress-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n transition: width 0.4s ease;\n}\n\n/* ---- Setup Steps ---- */\n\n.setup-step {\n padding: 1rem 1.25rem;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n margin-bottom: 0.75rem;\n transition: border-color 0.2s;\n}\n\n.setup-step-complete {\n border-color: var(--mj-status-success-border);\n background: color-mix(in srgb, var(--mj-status-success) 3%, var(--mj-bg-surface));\n}\n\n.setup-step-pending {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n\n.setup-step-header {\n display: flex;\n align-items: flex-start;\n gap: 0.85rem;\n}\n\n.setup-step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.setup-step-complete .setup-step-indicator i {\n font-size: 1.25rem;\n color: var(--mj-status-success);\n}\n\n.setup-step-number {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-weight: 700;\n}\n\n.setup-step-info {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n}\n\n.setup-step-title {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.setup-step-status {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.setup-step-complete .setup-step-status {\n color: var(--mj-status-success-text);\n}\n\n/* ---- Config Group Title ---- */\n\n.config-group-title {\n margin: 0 0 0.75rem 0;\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n/* ---- Status Badge ---- */\n\n.config-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.config-status-active {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n/* ---- Step Detail Area ---- */\n\n.setup-step-detail {\n margin-top: 0.75rem;\n padding-left: 2.85rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.setup-step-action {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s;\n flex-shrink: 0;\n}\n\n.setup-step-action:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n/* ---- Provider Cards ---- */\n\n.provider-card {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.provider-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.provider-info {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.provider-name {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.provider-class {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n/* ---- Provider Credential Row ---- */\n\n.provider-credential-row {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem 0.75rem;\n margin-top: -0.25rem;\n}\n\n.provider-credential-label {\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n}\n\n.provider-credential-label i {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.provider-credential-picker {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex: 1;\n min-width: 0;\n}\n\n.provider-credential-select {\n flex: 1;\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n}\n\n.provider-credential-select:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.provider-credential-spinner {\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n}\n\n/* ---- Index Cards ---- */\n\n.index-card {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.index-card:hover {\n border-color: var(--mj-border-default);\n}\n\n.index-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.index-info {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.index-name {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.index-meta {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 3px;\n}\n\n.index-meta i {\n font-size: 0.65rem;\n}\n\n.index-actions {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex-shrink: 0;\n}\n\n.index-delete-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.index-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n/* ---- Create Index Form ---- */\n\n.create-index-form {\n margin-top: 0.75rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n margin-left: 2.85rem;\n}\n\n.create-index-title {\n margin: 0 0 1rem 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.create-index-title i {\n color: var(--mj-brand-primary);\n}\n\n.create-index-fields {\n display: flex;\n flex-direction: column;\n gap: 0.85rem;\n}\n\n.create-index-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.create-index-label {\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.config-select {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n}\n\n.config-select:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.create-index-actions {\n display: flex;\n gap: 8px;\n margin-top: 1rem;\n}\n\n.create-index-submit {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 18px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.create-index-submit:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.create-index-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.create-index-cancel {\n padding: 8px 18px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.create-index-cancel:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* Empty State for unconfigured sections */\n.config-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.config-empty-icon {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.config-empty-title {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.config-empty-text {\n margin: 0;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n max-width: 480px;\n line-height: 1.5;\n}\n\n/* Tag list for showing multiple models */\n.config-tag-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.config-tag {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n/* Section note */\n.config-section-note {\n margin-top: 1rem;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.config-section-note i {\n color: var(--mj-status-info);\n}\n\n/* Save Bar */\n.config-save-bar {\n position: sticky;\n bottom: 0;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n margin-top: 2rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.config-save-text {\n flex: 1;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n}\n\n.config-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.config-save-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.config-save-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.config-reset-btn {\n padding: 0.5rem 0.75rem;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n}\n\n.config-reset-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n/* Mobile responsive */\n@media (max-width: 768px) {\n .config-layout {\n flex-direction: column;\n }\n\n .config-nav {\n width: 100%;\n flex-direction: row;\n overflow-x: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0;\n }\n\n .config-nav-header {\n display: none;\n }\n\n .config-nav-item {\n white-space: nowrap;\n padding: 0.6rem 1rem;\n }\n\n .config-nav-item-active {\n border-left: none;\n border-bottom: 3px solid var(--mj-brand-primary);\n }\n\n .config-content {\n padding: 1rem;\n }\n}\n\n/* Full-Text Search Entity Management */\n.fts-entity-controls {\n margin-bottom: 16px;\n}\n\n.fts-summary {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n.fts-summary-count {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.fts-filter-input {\n max-width: 240px;\n}\n\n.fts-entity-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.fts-entity-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s, background 0.15s;\n}\n\n.fts-entity-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.fts-entity-card.fts-entity-enabled {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.fts-entity-toggle {\n flex-shrink: 0;\n}\n\n.fts-entity-info {\n flex: 1;\n min-width: 0;\n}\n\n.fts-entity-name {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.fts-entity-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.fts-field-tag {\n display: inline-block;\n padding: 1px 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n}\n\n.fts-entity-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n flex-shrink: 0;\n}\n\n.fts-entity-title-field,\n.fts-entity-snippet-field {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.fts-entity-title-field i,\n.fts-entity-snippet-field i {\n margin-right: 4px;\n font-size: 10px;\n}\n\n/* ===== Search Scopes Manager ===== */\n\n.scope-manager {\n display: grid;\n grid-template-columns: 260px 1fr;\n gap: 16px;\n min-height: 420px;\n}\n\n.scope-manager-list {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-manager-list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 6px 8px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.scope-manager-new-btn {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-link);\n padding: 3px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.7rem;\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.scope-manager-new-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.scope-manager-loading,\n.scope-manager-empty,\n.scope-manager-empty-detail {\n padding: 16px;\n color: var(--mj-text-muted);\n text-align: center;\n font-size: 0.85rem;\n}\n\n.scope-manager-empty-detail {\n padding: 40px 24px;\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n}\n\n.scope-manager-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 6px;\n text-align: left;\n transition: background 120ms ease;\n}\n\n.scope-manager-list-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.scope-manager-list-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.scope-manager-list-name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.scope-manager-badge {\n font-size: 0.625rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.scope-manager-detail {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n\n.scope-manager-tabs {\n display: flex;\n align-items: center;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 8px;\n flex-wrap: wrap;\n}\n\n.scope-manager-tab {\n background: transparent;\n border: none;\n padding: 6px 12px;\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 4px;\n transition: background 120ms ease, color 120ms ease;\n}\n\n.scope-manager-tab:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.scope-manager-tab.active {\n color: var(--mj-brand-primary);\n border-bottom: 2px solid var(--mj-brand-primary);\n border-radius: 0;\n font-weight: 500;\n}\n\n.scope-manager-tab-spacer {\n flex: 1;\n}\n\n.scope-manager-save-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 6px 14px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.scope-manager-delete-btn {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-status-error-text);\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.scope-manager-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n}\n\n.scope-manager-open-btn {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-open-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.scope-definition-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px 16px;\n}\n\n.scope-definition-grid label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n}\n\n.scope-definition-grid label > span {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.scope-definition-full {\n grid-column: 1 / -1;\n}\n\n.scope-definition-toggle {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n\n.scope-definition-toggle input[type=\"checkbox\"] {\n accent-color: var(--mj-brand-primary);\n}\n\n.scope-code-block {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 8px;\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Search Analytics section (P3.3)\n \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.search-analytics-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.search-analytics-kpi {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.search-analytics-kpi-label {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.search-analytics-kpi-value {\n font-size: 1.6rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-kpi-hint {\n color: var(--mj-text-muted);\n font-size: 0.72rem;\n}\n\n.search-analytics-h3 {\n margin: 22px 0 8px;\n font-size: 1rem;\n color: var(--mj-text-primary);\n}\n\n.search-analytics-empty {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n margin: 4px 0 14px;\n}\n\n.search-analytics-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.86rem;\n}\n\n.search-analytics-table thead th {\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 6px 10px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.search-analytics-table tbody td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.search-analytics-refresh {\n margin-top: 16px;\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.9rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.82rem;\n}\n\n.search-analytics-refresh:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500\u2500 Permissions Audit (P2A.7) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.search-permissions-loading {\n padding: 1.2rem;\n color: var(--mj-text-secondary);\n font-style: italic;\n}\n\n.search-permissions-filters {\n display: grid;\n grid-template-columns: 1fr 1fr 180px 130px;\n gap: 0.5rem;\n margin-bottom: 0.8rem;\n}\n\n.search-permissions-filters .mj-input {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n font-size: 0.85rem;\n}\n\n.search-permissions-summary {\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n margin-bottom: 0.6rem;\n}\n\n.search-permissions-empty {\n padding: 1.2rem;\n color: var(--mj-text-muted);\n text-align: center;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.search-permissions-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.85rem;\n}\n\n.search-permissions-table th,\n.search-permissions-table td {\n padding: 0.5rem 0.7rem;\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n}\n\n.search-permissions-table th {\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n}\n\n.search-permissions-secondary {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n.search-permissions-tag {\n display: inline-block;\n padding: 0.1rem 0.5rem;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 3px;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.search-permissions-level {\n display: inline-block;\n padding: 0.15rem 0.55rem;\n border-radius: 3px;\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n.search-permissions-level-none {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.search-permissions-level-read {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info-text);\n}\n\n.search-permissions-level-search {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.search-permissions-level-manage {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n"] }]
2429
+ args: [{ standalone: false, selector: 'app-knowledge-config-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Knowledge Hub Configuration\"\n Icon=\"fa-solid fa-cogs\"\n Subtitle=\"Pipeline, vector store, search, and automation settings\">\n <div meta>\n @if (HasUnsavedChanges) {\n <mj-stat-badge\n Icon=\"fa-solid fa-circle-exclamation\"\n Label=\"Unsaved changes\"\n Variant=\"warning\">\n </mj-stat-badge>\n }\n </div>\n <div actions>\n @if (HasUnsavedChanges) {\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"ResetConfiguration()\" [disabled]=\"IsSaving\" title=\"Discard unsaved changes\">\n <i class=\"fa-solid fa-arrow-rotate-left\"></i> Reset\n </button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"SaveConfiguration()\" [disabled]=\"IsSaving\" title=\"Save all settings\">\n <i class=\"fa-solid fa-floppy-disk\"></i> {{IsSaving ? 'Saving\u2026' : 'Save'}}\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\">\n@if (IsLoading) {\n <div class=\"config-loading\">\n <mj-loading text=\"Loading configuration...\" size=\"medium\"></mj-loading>\n </div>\n} @else {\n <div class=\"config-layout\">\n <!-- Left Navigation -->\n <nav class=\"config-nav\">\n <div class=\"config-nav-header\">\n <i class=\"fa-solid fa-cogs\"></i>\n <span>Configuration</span>\n </div>\n @for (section of Sections; track section.ID) {\n <button\n class=\"config-nav-item\"\n [class.config-nav-item-active]=\"ActiveSection === section.ID\"\n (click)=\"SelectSection(section.ID)\"\n >\n <i [class]=\"section.Icon\"></i>\n <span>{{ section.Label }}</span>\n </button>\n }\n </nav>\n\n <!-- Content Area -->\n <div class=\"config-content\">\n <!-- Pipeline Settings -->\n @if (ActiveSection === 'pipeline') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Pipeline Settings</h2>\n <p class=\"config-section-desc\">Configure how the Knowledge Pipeline processes incoming content.</p>\n\n <div class=\"config-group\">\n <label class=\"config-toggle-row\">\n <div class=\"config-toggle-info\">\n <span class=\"config-label\">Auto-tag on Ingest</span>\n <span class=\"config-hint\">Automatically run autotagging when new content is ingested</span>\n </div>\n <input type=\"checkbox\" [(ngModel)]=\"PipelineSettings.AutotagOnIngest\" (change)=\"OnSettingChanged()\" class=\"config-checkbox\" />\n </label>\n\n <label class=\"config-toggle-row\">\n <div class=\"config-toggle-info\">\n <span class=\"config-label\">Vectorize on Ingest</span>\n <span class=\"config-hint\">Automatically create embeddings for new content</span>\n </div>\n <input type=\"checkbox\" [(ngModel)]=\"PipelineSettings.VectorizeOnIngest\" (change)=\"OnSettingChanged()\" class=\"config-checkbox\" />\n </label>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Default Batch Size</span>\n <span class=\"config-hint\">Number of items processed per batch</span>\n </div>\n <input type=\"number\" [(ngModel)]=\"PipelineSettings.DefaultBatchSize\" (input)=\"OnSettingChanged()\" class=\"config-input config-input-number\" min=\"10\" max=\"1000\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Max Concurrent Jobs</span>\n <span class=\"config-hint\">Maximum number of pipeline jobs running at once</span>\n </div>\n <input type=\"number\" [(ngModel)]=\"PipelineSettings.MaxConcurrentJobs\" (input)=\"OnSettingChanged()\" class=\"config-input config-input-number\" min=\"1\" max=\"10\" />\n </div>\n </div>\n </div>\n }\n\n <!-- Vector Database Settings -->\n @if (ActiveSection === 'vectordb') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Vector Database</h2>\n <p class=\"config-section-desc\">Manage the shared vector index and database connection.</p>\n\n <!-- Setup Progress -->\n <div class=\"setup-progress\">\n <div class=\"setup-progress-header\">\n <span class=\"setup-progress-label\">Setup Progress</span>\n <span class=\"setup-progress-count\">{{ SetupStepsCompleted }} of 3 complete</span>\n </div>\n <div class=\"setup-progress-bar\">\n <div class=\"setup-progress-fill\" [style.width.%]=\"(SetupStepsCompleted / 3) * 100\"></div>\n </div>\n </div>\n\n <!-- Step 1: Providers -->\n <div class=\"setup-step\" [class.setup-step-complete]=\"HasVectorDBProvider\" [class.setup-step-pending]=\"!HasVectorDBProvider\">\n <div class=\"setup-step-header\">\n <div class=\"setup-step-indicator\">\n @if (HasVectorDBProvider) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <span class=\"setup-step-number\">1</span>\n }\n </div>\n <div class=\"setup-step-info\">\n <span class=\"setup-step-title\">Vector Database Providers</span>\n @if (HasVectorDBProvider) {\n <span class=\"setup-step-status\">{{ VectorDBProviders.length }} provider(s) registered</span>\n } @else {\n <span class=\"setup-step-status\">No providers registered. Add a vector database provider (e.g., Pinecone, Weaviate) via the admin console.</span>\n }\n </div>\n </div>\n @if (HasVectorDBProvider) {\n <div class=\"setup-step-detail\">\n @for (provider of VectorDBProviders; track provider.ID) {\n <div class=\"provider-card\">\n <div class=\"provider-icon\">\n <i class=\"fa-solid fa-database\"></i>\n </div>\n <div class=\"provider-info\">\n <span class=\"provider-name\">{{ provider.Name }}</span>\n <span class=\"provider-class\">{{ provider.ClassKey }}</span>\n </div>\n <span class=\"config-status-badge config-status-active\">\n <i class=\"fa-solid fa-circle-check\"></i> Active\n </span>\n </div>\n <div class=\"provider-credential-row\">\n <label class=\"provider-credential-label\">\n <i class=\"fa-solid fa-key\"></i> API Credential\n </label>\n <div class=\"provider-credential-picker\">\n <select class=\"provider-credential-select\"\n [(ngModel)]=\"provider.CredentialID\"\n (change)=\"SaveProviderCredential(provider)\"\n [disabled]=\"IsSavingCredential\">\n <option [ngValue]=\"null\">None (use environment variable)</option>\n @for (cred of AvailableCredentials; track cred.ID) {\n <option [ngValue]=\"cred.ID\">{{ cred.Name }}</option>\n }\n </select>\n @if (IsSavingCredential) {\n <i class=\"fa-solid fa-spinner fa-spin provider-credential-spinner\"></i>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Step 2: Embedding Model -->\n <div class=\"setup-step\" [class.setup-step-complete]=\"HasEmbeddingModel\" [class.setup-step-pending]=\"!HasEmbeddingModel\">\n <div class=\"setup-step-header\">\n <div class=\"setup-step-indicator\">\n @if (HasEmbeddingModel) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <span class=\"setup-step-number\">2</span>\n }\n </div>\n <div class=\"setup-step-info\">\n <span class=\"setup-step-title\">Embedding Models</span>\n @if (HasEmbeddingModel) {\n <span class=\"setup-step-status\">{{ EmbeddingModels.length }} model(s) available</span>\n } @else {\n <span class=\"setup-step-status\">No embedding models found. Configure at least one in the AI app > Models tab.</span>\n }\n </div>\n </div>\n @if (HasEmbeddingModel) {\n <div class=\"setup-step-detail\">\n <div class=\"config-tag-list\">\n @for (model of EmbeddingModels; track model.ID) {\n <span class=\"config-tag\">{{ model.Name }}</span>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Step 3: Vector Indexes -->\n <div class=\"setup-step\" [class.setup-step-complete]=\"HasVectorIndex\" [class.setup-step-pending]=\"!HasVectorIndex\">\n <div class=\"setup-step-header\">\n <div class=\"setup-step-indicator\">\n @if (HasVectorIndex) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <span class=\"setup-step-number\">3</span>\n }\n </div>\n <div class=\"setup-step-info\">\n <span class=\"setup-step-title\">Vector Indexes</span>\n @if (HasVectorIndex) {\n <span class=\"setup-step-status\">{{ VectorIndexes.length }} index(es) configured</span>\n } @else if (HasVectorDBProvider && HasEmbeddingModel) {\n <span class=\"setup-step-status\">No indexes yet \u2014 create one below.</span>\n } @else {\n <span class=\"setup-step-status\">Complete steps 1 and 2 first.</span>\n }\n </div>\n @if (HasVectorDBProvider && HasEmbeddingModel && !ShowCreateIndexForm) {\n <button class=\"setup-step-action\" (click)=\"OpenCreateIndexForm()\">\n <i class=\"fa-solid fa-plus\"></i> Create Index\n </button>\n }\n </div>\n\n <!-- Existing Indexes -->\n @if (HasVectorIndex) {\n <div class=\"setup-step-detail\">\n @for (idx of VectorIndexes; track idx.ID) {\n <div class=\"index-card\">\n <div class=\"index-icon\">\n <i class=\"fa-solid fa-cubes\"></i>\n </div>\n <div class=\"index-info\">\n <span class=\"index-name\">{{ idx.Name }}</span>\n <span class=\"index-meta\">\n <i class=\"fa-solid fa-database\"></i> {{ idx.VectorDatabase }}\n &nbsp;\u00B7&nbsp;\n <i class=\"fa-solid fa-microchip\"></i> {{ idx.EmbeddingModel }}\n </span>\n </div>\n <div class=\"index-actions\">\n <span class=\"config-status-badge config-status-active\">\n <i class=\"fa-solid fa-circle-check\"></i> Active\n </span>\n <button class=\"index-delete-btn\" (click)=\"DeleteIndex(idx.ID)\" title=\"Delete index\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Create Index Form -->\n @if (ShowCreateIndexForm) {\n <div class=\"create-index-form\">\n <h4 class=\"create-index-title\">\n <i class=\"fa-solid fa-plus-circle\"></i> Create New Vector Index\n </h4>\n <div class=\"create-index-fields\">\n <div class=\"create-index-field\">\n <label class=\"create-index-label\">Index Name</label>\n <input type=\"text\"\n class=\"config-input\"\n [(ngModel)]=\"NewIndexName\"\n placeholder=\"e.g., mj-knowledge-index\" />\n </div>\n <div class=\"create-index-field\">\n <label class=\"create-index-label\">Vector Database</label>\n <select class=\"config-select\" [(ngModel)]=\"NewIndexVectorDBID\">\n @for (db of VectorDBProviders; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"create-index-field\">\n <label class=\"create-index-label\">Embedding Model</label>\n <select class=\"config-select\" [(ngModel)]=\"NewIndexEmbeddingModelID\">\n @for (model of EmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n </div>\n <div class=\"create-index-actions\">\n <button class=\"create-index-submit\" (click)=\"CreateIndex()\" [disabled]=\"IsCreatingIndex\">\n @if (IsCreatingIndex) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-plus\"></i> Create Index\n }\n </button>\n <button class=\"create-index-cancel\" (click)=\"CancelCreateIndex()\" [disabled]=\"IsCreatingIndex\">\n Cancel\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Full-Text Indexes -->\n @if (ActiveSection === 'fulltext') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Full-Text Search Entities</h2>\n <p class=\"config-section-desc\">Configure which entities are included in full-text search. Entities with text fields (Name, Description, etc.) are automatically discovered.</p>\n\n @if (IsLoadingFTSEntities) {\n <mj-loading text=\"Discovering searchable entities...\" size=\"medium\"></mj-loading>\n } @else if (FTSEntities.length === 0) {\n <div class=\"config-empty-state\">\n <i class=\"fa-solid fa-text-width config-empty-icon\"></i>\n <h3 class=\"config-empty-title\">No Searchable Entities Found</h3>\n <p class=\"config-empty-text\">No entities with text fields were discovered. Ensure your database schema includes entities with varchar/nvarchar columns.</p>\n </div>\n } @else {\n <div class=\"fts-entity-controls\">\n <div class=\"fts-summary\">\n <span class=\"fts-summary-count\">{{ EnabledFTSCount }} of {{ FTSEntities.length }} entities enabled for search</span>\n <input type=\"text\" class=\"config-input fts-filter-input\" placeholder=\"Filter entities...\" [(ngModel)]=\"FTSFilterText\" />\n </div>\n </div>\n\n <div class=\"fts-entity-list\">\n @for (entity of FilteredFTSEntities; track entity.EntityName) {\n <div class=\"fts-entity-card\" [class.fts-entity-enabled]=\"entity.Enabled\">\n <div class=\"fts-entity-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"entity.Enabled\" (change)=\"OnFTSEntityToggled(entity)\" class=\"config-checkbox\" />\n </div>\n <div class=\"fts-entity-info\">\n <span class=\"fts-entity-name\">{{ entity.EntityName }}</span>\n <div class=\"fts-entity-fields\">\n @for (field of entity.IndexedFields; track field) {\n <span class=\"fts-field-tag\">{{ field }}</span>\n }\n </div>\n </div>\n <div class=\"fts-entity-meta\">\n <span class=\"fts-entity-title-field\" title=\"Title field\">\n <i class=\"fa-solid fa-heading\"></i> {{ entity.TitleField }}\n </span>\n @if (entity.SnippetField !== entity.TitleField) {\n <span class=\"fts-entity-snippet-field\" title=\"Snippet field\">\n <i class=\"fa-solid fa-align-left\"></i> {{ entity.SnippetField }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Embedding Models -->\n @if (ActiveSection === 'embedding') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Embedding Models</h2>\n <p class=\"config-section-desc\">AI models used for generating vector embeddings from text.</p>\n\n @if (HasEmbeddingModel) {\n <div class=\"config-group\">\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Active Model</span>\n <span class=\"config-hint\">Currently selected embedding model</span>\n </div>\n <span class=\"config-value-display\">{{ EmbeddingModelName }}</span>\n </div>\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Available Models</span>\n <span class=\"config-hint\">{{ EmbeddingModels.length }} embedding model(s) configured</span>\n </div>\n <div class=\"config-tag-list\">\n @for (model of EmbeddingModels; track model.ID) {\n <span class=\"config-tag\">{{ model.Name }}</span>\n }\n </div>\n </div>\n </div>\n <p class=\"config-section-note\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Manage embedding models in the AI Dashboard > Models tab.\n </p>\n } @else {\n <div class=\"config-empty-state\">\n <i class=\"fa-solid fa-microchip config-empty-icon\"></i>\n <h3 class=\"config-empty-title\">No Embedding Models Found</h3>\n <p class=\"config-empty-text\">\n Embedding models are required to convert text into vectors for semantic search and duplicate detection.\n Configure at least one embedding model (e.g., text-embedding-3-small) in the AI Dashboard > Models tab.\n </p>\n </div>\n }\n </div>\n }\n\n <!-- Thresholds -->\n @if (ActiveSection === 'thresholds') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\">Scoring Thresholds</h2>\n <p class=\"config-section-desc\">Set the scoring thresholds used by search, duplicate detection, and autotagging.</p>\n\n <div class=\"config-group\">\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Duplicate Absolute Match</span>\n <span class=\"config-hint\">Score above which duplicates are auto-confirmed ({{ FormatThreshold(ThresholdSettings.DuplicateAbsolute) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.DuplicateAbsolute\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0.5\" max=\"1\" step=\"0.01\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Duplicate Potential Match</span>\n <span class=\"config-hint\">Score above which duplicates are flagged for review ({{ FormatThreshold(ThresholdSettings.DuplicatePotential) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.DuplicatePotential\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0.3\" max=\"1\" step=\"0.01\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Search Relevance</span>\n <span class=\"config-hint\">Minimum score for search results ({{ FormatThreshold(ThresholdSettings.SearchRelevance) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.SearchRelevance\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0\" max=\"1\" step=\"0.01\" />\n </div>\n\n <div class=\"config-field-row\">\n <div class=\"config-field-info\">\n <span class=\"config-label\">Autotag Confidence</span>\n <span class=\"config-hint\">Minimum confidence for accepting auto-generated tags ({{ FormatThreshold(ThresholdSettings.AutotagConfidence) }})</span>\n </div>\n <input type=\"range\" [(ngModel)]=\"ThresholdSettings.AutotagConfidence\" (input)=\"OnSettingChanged()\" class=\"config-slider\" min=\"0.3\" max=\"1\" step=\"0.01\" />\n </div>\n </div>\n </div>\n }\n\n <!-- Search Scopes Section -->\n @if (ActiveSection === 'search-scopes') {\n <div class=\"config-section\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-compass-drafting\"></i> Search Scopes</h2>\n <p class=\"config-section-desc\">\n Define reusable search scopes that filter which providers, entities, external indexes, and storage accounts participate in a scoped search.\n Scopes can be assigned to AI agents for pre-execution RAG or agent-invoked search.\n </p>\n\n <div class=\"scope-manager\">\n <!-- Scope list -->\n <aside class=\"scope-manager-list\">\n <div class=\"scope-manager-list-header\">\n <span>Scopes ({{ SearchScopes.length }})</span>\n <button type=\"button\" class=\"scope-manager-new-btn\" (click)=\"CreateNewScope()\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n @if (IsLoadingScopes) {\n <div class=\"scope-manager-loading\">Loading&hellip;</div>\n } @else if (SearchScopes.length === 0) {\n <div class=\"scope-manager-empty\">\n No scopes defined yet. Click <strong>New</strong> to create one.\n </div>\n } @else {\n @for (s of SearchScopes; track s.ID) {\n <button\n type=\"button\"\n class=\"scope-manager-list-item\"\n [class.active]=\"ActiveScopeID === s.ID\"\n (click)=\"SelectScope(s.ID)\">\n <i [class]=\"s.Icon || 'fa-solid fa-filter'\" aria-hidden=\"true\"></i>\n <span class=\"scope-manager-list-name\">{{ s.Name }}</span>\n @if (s.IsGlobal) {\n <span class=\"scope-manager-badge\">Global</span>\n } @else if (s.IsDefault) {\n <span class=\"scope-manager-badge\">Default</span>\n }\n </button>\n }\n }\n </aside>\n\n <!-- Scope detail -->\n <section class=\"scope-manager-detail\">\n @if (ActiveScope) {\n <!-- Tab strip -->\n <div class=\"scope-manager-tabs\">\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'definition'\" (click)=\"SelectScopeTab('definition')\">Definition</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'providers'\" (click)=\"SelectScopeTab('providers')\">Providers</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'indexes'\" (click)=\"SelectScopeTab('indexes')\">External Indexes</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'entities'\" (click)=\"SelectScopeTab('entities')\">Entities</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'storage'\" (click)=\"SelectScopeTab('storage')\">Storage</button>\n <button type=\"button\" class=\"scope-manager-tab\" [class.active]=\"ActiveScopeTab === 'permissions'\" (click)=\"SelectScopeTab('permissions')\">Permissions</button>\n <div class=\"scope-manager-tab-spacer\"></div>\n @if (ActiveScope.ID) {\n <button type=\"button\" class=\"scope-manager-open-btn\"\n (click)=\"OpenActiveScopeFullForm()\"\n title=\"Open the full custom form for this scope (Live Preview, Fusion Weights, Reranker, Test Queries, Execution Logs)\">\n <i class=\"fa-solid fa-up-right-from-square\"></i> Open Full Form\n </button>\n }\n <button type=\"button\" class=\"scope-manager-save-btn\" (click)=\"SaveActiveScope()\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n @if (!ActiveScope.IsGlobal) {\n <button type=\"button\" class=\"scope-manager-delete-btn\" (click)=\"DeleteActiveScope()\" title=\"Delete scope\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n\n <!-- Definition tab -->\n @if (ActiveScopeTab === 'definition') {\n <div class=\"scope-definition-grid\">\n <label>\n <span>Name</span>\n <input type=\"text\" class=\"mj-input\" [value]=\"ActiveScope.Name\" (change)=\"ActiveScope.Name = $any($event.target).value\">\n </label>\n <label>\n <span>Icon (Font Awesome class)</span>\n <input type=\"text\" class=\"mj-input\" [value]=\"ActiveScope.Icon || ''\" (change)=\"ActiveScope.Icon = $any($event.target).value\">\n </label>\n <label class=\"scope-definition-full\">\n <span>Description</span>\n <textarea rows=\"2\" class=\"mj-textarea\" [value]=\"ActiveScope.Description || ''\" (change)=\"ActiveScope.Description = $any($event.target).value\"></textarea>\n </label>\n <label>\n <span>Status</span>\n <select class=\"mj-input\" [value]=\"ActiveScope.Status\" (change)=\"ActiveScope.Status = $any($event.target).value\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </label>\n <label>\n <span>Start at</span>\n <input type=\"datetime-local\" class=\"mj-input\" [value]=\"FormatScopeDate(ActiveScope.StartAt)\" (change)=\"SetScopeDate(ActiveScope, 'StartAt', $any($event.target).value)\">\n </label>\n <label>\n <span>End at</span>\n <input type=\"datetime-local\" class=\"mj-input\" [value]=\"FormatScopeDate(ActiveScope.EndAt)\" (change)=\"SetScopeDate(ActiveScope, 'EndAt', $any($event.target).value)\">\n </label>\n <label class=\"scope-definition-toggle\">\n <input type=\"checkbox\" [checked]=\"ActiveScope.IsDefault\" (change)=\"ActiveScope.IsDefault = $any($event.target).checked\" [disabled]=\"ActiveScope.IsGlobal\">\n <span>Default scope \u2014 picked when users/agents don't specify one</span>\n </label>\n <label class=\"scope-definition-toggle\">\n <input type=\"checkbox\" [checked]=\"ActiveScope.IsGlobal\" disabled>\n <span>Global \u2014 reserved for the built-in Global scope (read-only)</span>\n </label>\n <label class=\"scope-definition-full\">\n <span>Scope Config (JSON)</span>\n <textarea rows=\"4\" class=\"mj-textarea scope-code-block\" spellcheck=\"false\" [value]=\"ActiveScope.ScopeConfig || ''\" (change)=\"ActiveScope.ScopeConfig = $any($event.target).value\"></textarea>\n </label>\n <label class=\"scope-definition-full\">\n <span>Search Context Config (JSON)</span>\n <textarea rows=\"4\" class=\"mj-textarea scope-code-block\" spellcheck=\"false\" [value]=\"ActiveScope.SearchContextConfig || ''\" (change)=\"ActiveScope.SearchContextConfig = $any($event.target).value\"></textarea>\n </label>\n </div>\n }\n\n @if (ActiveScopeTab === 'providers') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Providers\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeProviderColumns\"\n AddButtonLabel=\"+ Add provider\"\n EmptyMessage=\"No providers assigned. Without any providers, this scope searches nothing.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'indexes') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope External Indexes\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeExternalIndexColumns\"\n AddButtonLabel=\"+ Add external index\"\n EmptyMessage=\"No external indexes configured for this scope.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'entities') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Entities\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeEntityColumns\"\n AddButtonLabel=\"+ Add entity\"\n EmptyMessage=\"No entities configured. Scoped entity search will return no rows.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'storage') {\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Storage Accounts\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopeStorageColumns\"\n AddButtonLabel=\"+ Add storage folder\"\n EmptyMessage=\"No storage accounts linked to this scope.\">\n </mj-search-scope-child-grid>\n }\n\n @if (ActiveScopeTab === 'permissions') {\n <div class=\"scope-permissions-help\" style=\"margin-bottom: 12px; padding: 8px 12px; background: var(--mj-bg-surface-card); border-left: 3px solid var(--mj-brand-primary); border-radius: 4px;\">\n <p style=\"margin: 0; font-size: 0.95em;\">\n <i class=\"fa-solid fa-shield-halved\" style=\"color: var(--mj-brand-primary);\"></i>\n <strong>Per-user / per-role grants on this scope.</strong>\n Each row binds <em>either</em> a User <em>or</em> a Role (not both). Levels:\n <code>None</code> = explicit deny that overrides role grants,\n <code>Read</code> = view scope metadata,\n <code>Search</code> = invoke ScopedSearchAction,\n <code>Manage</code> = full edit including authoring permissions.\n Combined with <code>AIAgent.SearchScopeAccess</code> via the resolver \u2014 see the spec for the full resolution order.\n </p>\n </div>\n <mj-search-scope-child-grid\n [ParentID]=\"ActiveScopeID\"\n ChildEntityName=\"MJ: Search Scope Permissions\"\n ParentFieldName=\"SearchScopeID\"\n [Columns]=\"ScopePermissionColumns\"\n AddButtonLabel=\"+ Grant access\"\n EmptyMessage=\"No explicit grants. Access falls back to agent SearchScopeAccess only.\">\n </mj-search-scope-child-grid>\n }\n } @else {\n <div class=\"scope-manager-empty-detail\">\n Select a scope on the left, or click <strong>New</strong> to create one.\n </div>\n }\n </section>\n </div>\n </div>\n }\n\n <!-- Search Analytics Section (P3.3) \u2014 driven by SearchExecutionLog -->\n @if (ActiveSection === 'search-analytics') {\n <div class=\"config-section-content\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-chart-line\"></i> Search Analytics</h2>\n <p class=\"config-section-desc\">Aggregated metrics over the last 5,000 search invocations from <code>MJ: Search Execution Logs</code>. Use this to spot slow scopes, high-failure queries, or runaway reranker spend.</p>\n\n @if (AnalyticsLoading) {\n <mj-loading text=\"Loading analytics\u2026\" size=\"medium\"></mj-loading>\n } @else if (!AnalyticsLoaded) {\n <button class=\"mj-input\" type=\"button\" (click)=\"LoadSearchAnalytics()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Load analytics\n </button>\n } @else {\n <div class=\"search-analytics-kpi-grid\">\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Total runs</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsTotalRuns | number }}</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Success rate</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsSuccessRate }}%</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Hit rate</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsHitRate }}%</span>\n <span class=\"search-analytics-kpi-hint\">% of successful runs that returned \u22651 result</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Avg latency</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsAvgLatencyMs }}ms</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">P95 latency</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsP95LatencyMs }}ms</span>\n </div>\n <div class=\"search-analytics-kpi\">\n <span class=\"search-analytics-kpi-label\">Reranker spend</span>\n <span class=\"search-analytics-kpi-value\">{{ AnalyticsTotalRerankerCostCents | number:'1.0-2' }}\u00A2</span>\n </div>\n </div>\n\n <h3 class=\"search-analytics-h3\">Top scopes by volume</h3>\n @if (AnalyticsTopScopes.length === 0) {\n <p class=\"search-analytics-empty\">No runs in the window.</p>\n } @else {\n <table class=\"search-analytics-table\">\n <thead>\n <tr><th>Scope</th><th>Runs</th><th>Avg latency</th></tr>\n </thead>\n <tbody>\n @for (s of AnalyticsTopScopes; track s.ScopeID) {\n <tr>\n <td>{{ s.Name }}</td>\n <td>{{ s.Count | number }}</td>\n <td>{{ s.AvgLatencyMs }}ms</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <h3 class=\"search-analytics-h3\">Reranker spend by driver</h3>\n @if (AnalyticsRerankerSpend.length === 0) {\n <p class=\"search-analytics-empty\">No rerank invocations in the window.</p>\n } @else {\n <table class=\"search-analytics-table\">\n <thead>\n <tr><th>Reranker</th><th>Calls</th><th>Total cents</th></tr>\n </thead>\n <tbody>\n @for (r of AnalyticsRerankerSpend; track r.Reranker) {\n <tr>\n <td>{{ r.Reranker }}</td>\n <td>{{ r.Count | number }}</td>\n <td>{{ r.TotalCents | number:'1.0-2' }}\u00A2</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <h3 class=\"search-analytics-h3\">Top failure reasons</h3>\n @if (AnalyticsTopFailures.length === 0) {\n <p class=\"search-analytics-empty\">No failures in the window.</p>\n } @else {\n <table class=\"search-analytics-table\">\n <thead>\n <tr><th>Reason</th><th>Count</th></tr>\n </thead>\n <tbody>\n @for (f of AnalyticsTopFailures; track f.Reason) {\n <tr>\n <td>{{ f.Reason }}</td>\n <td>{{ f.Count | number }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n\n <button class=\"mj-input search-analytics-refresh\" type=\"button\" (click)=\"LoadSearchAnalytics()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n </div>\n }\n\n <!-- Permissions Audit Section (P2A.7) -->\n @if (ActiveSection === 'search-permissions') {\n <div class=\"config-section-content\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-shield-halved\"></i> Permissions</h2>\n <p class=\"config-section-desc\">\n Cross-scope view of every <code>SearchScopePermission</code> row. Filter by scope, by user/role, or by permission level to answer \"who has access to what\". Read-only \u2014 to add or edit a grant, open the SearchScope's full form and use its Permissions panel.\n </p>\n\n @if (PermissionsLoading) {\n <div class=\"search-permissions-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading permission rows...\n </div>\n }\n\n @if (PermissionsLoaded && !PermissionsLoading) {\n <div class=\"search-permissions-filters\">\n <input class=\"mj-input\" type=\"text\" placeholder=\"Filter by scope name...\" [(ngModel)]=\"PermissionsFilterScope\" />\n <input class=\"mj-input\" type=\"text\" placeholder=\"Filter by user/role (name or email)...\" [(ngModel)]=\"PermissionsFilterPrincipal\" />\n <select class=\"mj-input\" [(ngModel)]=\"PermissionsFilterLevel\">\n <option value=\"\">All levels</option>\n <option value=\"None\">None</option>\n <option value=\"Read\">Read</option>\n <option value=\"Search\">Search</option>\n <option value=\"Manage\">Manage</option>\n </select>\n <button class=\"mj-input\" type=\"button\" (click)=\"RefreshPermissionsAudit()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n </div>\n\n <div class=\"search-permissions-summary\">\n Showing {{ FilteredPermissionsRows.length }} of {{ PermissionsRows.length }} rows\n </div>\n\n @if (FilteredPermissionsRows.length === 0) {\n <div class=\"search-permissions-empty\">\n No permission rows match your filters.\n </div>\n } @else {\n <table class=\"search-permissions-table\">\n <thead>\n <tr>\n <th>Scope</th>\n <th>Principal</th>\n <th>Type</th>\n <th>Permission Level</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredPermissionsRows; track row.ID) {\n <tr>\n <td>{{ row.SearchScopeName }}</td>\n <td>\n @if (row.UserID) {\n {{ row.UserName }} <span class=\"search-permissions-secondary\">({{ row.UserEmail }})</span>\n } @else {\n {{ row.RoleName }}\n }\n </td>\n <td>\n @if (row.UserID) { <span class=\"search-permissions-tag\">User</span> }\n @if (row.RoleID) { <span class=\"search-permissions-tag\">Role</span> }\n </td>\n <td>\n <span class=\"search-permissions-level search-permissions-level-{{ row.PermissionLevel | lowercase }}\">{{ row.PermissionLevel }}</span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n }\n </div>\n }\n\n <!-- Scheduling Section -->\n @if (ActiveSection === 'scheduling') {\n <div class=\"config-section-content\">\n <h2 class=\"config-section-title\"><i class=\"fa-solid fa-clock\"></i> Scheduling</h2>\n <p class=\"config-section-desc\">Manage automated pipeline schedules for content classification and vector sync. Create schedules here or manage all schedules in the dedicated Scheduling app.</p>\n <div style=\"margin-top: 16px;\">\n <app-scheduling-resource [HideToolbar]=\"true\"></app-scheduling-resource>\n </div>\n </div>\n }\n\n <!-- Save Bar -->\n @if (HasUnsavedChanges) {\n <div class=\"config-save-bar\">\n <span class=\"config-save-text\">You have unsaved changes</span>\n <button class=\"config-save-btn\" (click)=\"SaveConfiguration()\" [disabled]=\"IsSaving\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n <i class=\"fa-solid fa-save\"></i> Save Changes\n }\n </button>\n <button class=\"config-reset-btn\" (click)=\"ResetConfiguration()\" [disabled]=\"IsSaving\">\n Reset\n </button>\n </div>\n }\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Knowledge Configuration - Settings Page with Left Nav */\n\n\n.config-loading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 400px;\n}\n\n.config-layout {\n display: flex;\n height: 100%;\n min-height: 500px;\n}\n\n/* Left Navigation */\n.config-nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n padding: 0.5rem 0;\n}\n\n.config-nav-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 0.5rem;\n}\n\n.config-nav-item {\n display: flex;\n align-items: center;\n gap: 0.6rem;\n padding: 0.55rem 1rem;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n text-align: left;\n transition: all 0.15s ease;\n width: 100%;\n}\n\n.config-nav-item:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.config-nav-item-active {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n/* Content Area */\n.config-content {\n flex: 1;\n padding: 1.5rem 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n.config-section {\n max-width: 700px;\n}\n\n.config-section-title {\n font-size: 1.3rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 0.5rem;\n}\n\n.config-section-desc {\n color: var(--mj-text-secondary);\n font-size: 0.9rem;\n margin-bottom: 1.5rem;\n line-height: 1.5;\n}\n\n/* Config Groups */\n.config-group {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.config-toggle-row,\n.config-field-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n transition: background 0.1s ease;\n gap: 1rem;\n}\n\n.config-toggle-row:hover,\n.config-field-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.config-toggle-info,\n.config-field-info {\n display: flex;\n flex-direction: column;\n gap: 0.15rem;\n flex: 1;\n}\n\n.config-label {\n font-weight: 500;\n font-size: 0.9rem;\n color: var(--mj-text-primary);\n}\n\n.config-hint {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.config-checkbox {\n width: 1.1rem;\n height: 1.1rem;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n}\n\n.config-input {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n font-family: inherit;\n}\n\n.config-input-number {\n width: 80px;\n text-align: center;\n}\n\n.config-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.config-slider {\n width: 200px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.config-value-display {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n padding: 0.3rem 0.6rem;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n font-family: monospace;\n}\n\n/* Placeholder */\n.config-placeholder {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 1.5rem;\n text-align: center;\n gap: 1rem;\n color: var(--mj-text-muted);\n}\n\n.config-placeholder-icon {\n font-size: 2.5rem;\n}\n\n/* ---- Setup Progress Bar ---- */\n\n.setup-progress {\n margin-bottom: 1.5rem;\n padding: 1rem 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n}\n\n.setup-progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 0.5rem;\n}\n\n.setup-progress-label {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.setup-progress-count {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n}\n\n.setup-progress-bar {\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.setup-progress-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 3px;\n transition: width 0.4s ease;\n}\n\n/* ---- Setup Steps ---- */\n\n.setup-step {\n padding: 1rem 1.25rem;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n margin-bottom: 0.75rem;\n transition: border-color 0.2s;\n}\n\n.setup-step-complete {\n border-color: var(--mj-status-success-border);\n background: color-mix(in srgb, var(--mj-status-success) 3%, var(--mj-bg-surface));\n}\n\n.setup-step-pending {\n border-color: var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n\n.setup-step-header {\n display: flex;\n align-items: flex-start;\n gap: 0.85rem;\n}\n\n.setup-step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.setup-step-complete .setup-step-indicator i {\n font-size: 1.25rem;\n color: var(--mj-status-success);\n}\n\n.setup-step-number {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n font-weight: 700;\n}\n\n.setup-step-info {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n flex: 1;\n}\n\n.setup-step-title {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.setup-step-status {\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.setup-step-complete .setup-step-status {\n color: var(--mj-status-success-text);\n}\n\n/* ---- Config Group Title ---- */\n\n.config-group-title {\n margin: 0 0 0.75rem 0;\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n/* ---- Status Badge ---- */\n\n.config-status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.config-status-active {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n/* ---- Step Detail Area ---- */\n\n.setup-step-detail {\n margin-top: 0.75rem;\n padding-left: 2.85rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.setup-step-action {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s;\n flex-shrink: 0;\n}\n\n.setup-step-action:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n/* ---- Provider Cards ---- */\n\n.provider-card {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n}\n\n.provider-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.provider-info {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.provider-name {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.provider-class {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n/* ---- Provider Credential Row ---- */\n\n.provider-credential-row {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.5rem 1rem 0.75rem;\n margin-top: -0.25rem;\n}\n\n.provider-credential-label {\n font-size: 0.8rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 0.4rem;\n}\n\n.provider-credential-label i {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n}\n\n.provider-credential-picker {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex: 1;\n min-width: 0;\n}\n\n.provider-credential-select {\n flex: 1;\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.8rem;\n}\n\n.provider-credential-select:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.provider-credential-spinner {\n color: var(--mj-brand-primary);\n font-size: 0.85rem;\n}\n\n/* ---- Index Cards ---- */\n\n.index-card {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.index-card:hover {\n border-color: var(--mj-border-default);\n}\n\n.index-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n font-size: 1rem;\n flex-shrink: 0;\n}\n\n.index-info {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.index-name {\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.index-meta {\n font-size: 0.75rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 3px;\n}\n\n.index-meta i {\n font-size: 0.65rem;\n}\n\n.index-actions {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n flex-shrink: 0;\n}\n\n.index-delete-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 0.75rem;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.index-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n/* ---- Create Index Form ---- */\n\n.create-index-form {\n margin-top: 0.75rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 2px solid var(--mj-brand-primary);\n border-radius: 10px;\n margin-left: 2.85rem;\n}\n\n.create-index-title {\n margin: 0 0 1rem 0;\n font-size: 0.9rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.create-index-title i {\n color: var(--mj-brand-primary);\n}\n\n.create-index-fields {\n display: flex;\n flex-direction: column;\n gap: 0.85rem;\n}\n\n.create-index-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.create-index-label {\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.config-select {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 0.85rem;\n}\n\n.config-select:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.create-index-actions {\n display: flex;\n gap: 8px;\n margin-top: 1rem;\n}\n\n.create-index-submit {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 18px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.create-index-submit:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.create-index-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.create-index-cancel {\n padding: 8px 18px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.create-index-cancel:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* Empty State for unconfigured sections */\n.config-empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 3rem 2rem;\n text-align: center;\n gap: 0.75rem;\n border: 2px dashed var(--mj-border-default);\n border-radius: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.config-empty-icon {\n font-size: 2.5rem;\n color: var(--mj-text-disabled);\n}\n\n.config-empty-title {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.config-empty-text {\n margin: 0;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n max-width: 480px;\n line-height: 1.5;\n}\n\n/* Tag list for showing multiple models */\n.config-tag-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.config-tag {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n/* Section note */\n.config-section-note {\n margin-top: 1rem;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.config-section-note i {\n color: var(--mj-status-info);\n}\n\n/* Save Bar */\n.config-save-bar {\n position: sticky;\n bottom: 0;\n display: flex;\n align-items: center;\n gap: 0.75rem;\n padding: 0.75rem 1rem;\n margin-top: 2rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.config-save-text {\n flex: 1;\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n}\n\n.config-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.5rem 1rem;\n border-radius: 6px;\n border: none;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 0.85rem;\n font-weight: 500;\n cursor: pointer;\n}\n\n.config-save-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.config-save-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.config-reset-btn {\n padding: 0.5rem 0.75rem;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.85rem;\n cursor: pointer;\n}\n\n.config-reset-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n/* Mobile responsive */\n@media (max-width: 768px) {\n .config-layout {\n flex-direction: column;\n }\n\n .config-nav {\n width: 100%;\n flex-direction: row;\n overflow-x: auto;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0;\n }\n\n .config-nav-header {\n display: none;\n }\n\n .config-nav-item {\n white-space: nowrap;\n padding: 0.6rem 1rem;\n }\n\n .config-nav-item-active {\n border-left: none;\n border-bottom: 3px solid var(--mj-brand-primary);\n }\n\n .config-content {\n padding: 1rem;\n }\n}\n\n/* Full-Text Search Entity Management */\n.fts-entity-controls {\n margin-bottom: 16px;\n}\n\n.fts-summary {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n\n.fts-summary-count {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.fts-filter-input {\n max-width: 240px;\n}\n\n.fts-entity-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.fts-entity-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n transition: border-color 0.15s, background 0.15s;\n}\n\n.fts-entity-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.fts-entity-card.fts-entity-enabled {\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n background: color-mix(in srgb, var(--mj-brand-primary) 3%, var(--mj-bg-surface));\n}\n\n.fts-entity-toggle {\n flex-shrink: 0;\n}\n\n.fts-entity-info {\n flex: 1;\n min-width: 0;\n}\n\n.fts-entity-name {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.fts-entity-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.fts-field-tag {\n display: inline-block;\n padding: 1px 6px;\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n}\n\n.fts-entity-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n flex-shrink: 0;\n}\n\n.fts-entity-title-field,\n.fts-entity-snippet-field {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n}\n\n.fts-entity-title-field i,\n.fts-entity-snippet-field i {\n margin-right: 4px;\n font-size: 10px;\n}\n\n/* ===== Search Scopes Manager ===== */\n\n.scope-manager {\n display: grid;\n grid-template-columns: 260px 1fr;\n gap: 16px;\n min-height: 420px;\n}\n\n.scope-manager-list {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 8px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.scope-manager-list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 6px 8px;\n font-size: 0.7rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.scope-manager-new-btn {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-link);\n padding: 3px 8px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.7rem;\n font-weight: 500;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.scope-manager-new-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.scope-manager-loading,\n.scope-manager-empty,\n.scope-manager-empty-detail {\n padding: 16px;\n color: var(--mj-text-muted);\n text-align: center;\n font-size: 0.85rem;\n}\n\n.scope-manager-empty-detail {\n padding: 40px 24px;\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: 8px;\n}\n\n.scope-manager-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 6px;\n text-align: left;\n transition: background 120ms ease;\n}\n\n.scope-manager-list-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.scope-manager-list-item.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.scope-manager-list-name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.scope-manager-badge {\n font-size: 0.625rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.scope-manager-detail {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n\n.scope-manager-tabs {\n display: flex;\n align-items: center;\n gap: 4px;\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 8px;\n flex-wrap: wrap;\n}\n\n.scope-manager-tab {\n background: transparent;\n border: none;\n padding: 6px 12px;\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n cursor: pointer;\n border-radius: 4px;\n transition: background 120ms ease, color 120ms ease;\n}\n\n.scope-manager-tab:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.scope-manager-tab.active {\n color: var(--mj-brand-primary);\n border-bottom: 2px solid var(--mj-brand-primary);\n border-radius: 0;\n font-weight: 500;\n}\n\n.scope-manager-tab-spacer {\n flex: 1;\n}\n\n.scope-manager-save-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 6px 14px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.scope-manager-delete-btn {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-status-error-text);\n padding: 6px 10px;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.scope-manager-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n}\n\n.scope-manager-open-btn {\n background: transparent;\n border: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 0.8125rem;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.scope-manager-open-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.scope-definition-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px 16px;\n}\n\n.scope-definition-grid label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 0.8125rem;\n color: var(--mj-text-secondary);\n}\n\n.scope-definition-grid label > span {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.scope-definition-full {\n grid-column: 1 / -1;\n}\n\n.scope-definition-toggle {\n flex-direction: row;\n align-items: center;\n gap: 8px;\n}\n\n.scope-definition-toggle input[type=\"checkbox\"] {\n accent-color: var(--mj-brand-primary);\n}\n\n.scope-code-block {\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 8px;\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Search Analytics section (P3.3)\n \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.search-analytics-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.search-analytics-kpi {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 14px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.search-analytics-kpi-label {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.search-analytics-kpi-value {\n font-size: 1.6rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-kpi-hint {\n color: var(--mj-text-muted);\n font-size: 0.72rem;\n}\n\n.search-analytics-h3 {\n margin: 22px 0 8px;\n font-size: 1rem;\n color: var(--mj-text-primary);\n}\n\n.search-analytics-empty {\n color: var(--mj-text-muted);\n font-size: 0.85rem;\n margin: 4px 0 14px;\n}\n\n.search-analytics-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.86rem;\n}\n\n.search-analytics-table thead th {\n text-align: left;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 6px 10px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.search-analytics-table tbody td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-variant-numeric: tabular-nums;\n}\n\n.search-analytics-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.search-analytics-refresh {\n margin-top: 16px;\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.9rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n cursor: pointer;\n font-size: 0.82rem;\n}\n\n.search-analytics-refresh:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* \u2500\u2500\u2500 Permissions Audit (P2A.7) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.search-permissions-loading {\n padding: 1.2rem;\n color: var(--mj-text-secondary);\n font-style: italic;\n}\n\n.search-permissions-filters {\n display: grid;\n grid-template-columns: 1fr 1fr 180px 130px;\n gap: 0.5rem;\n margin-bottom: 0.8rem;\n}\n\n.search-permissions-filters .mj-input {\n padding: 0.4rem 0.6rem;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n border-radius: 4px;\n font-size: 0.85rem;\n}\n\n.search-permissions-summary {\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n margin-bottom: 0.6rem;\n}\n\n.search-permissions-empty {\n padding: 1.2rem;\n color: var(--mj-text-muted);\n text-align: center;\n background: var(--mj-bg-surface-card);\n border-radius: 4px;\n}\n\n.search-permissions-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.85rem;\n}\n\n.search-permissions-table th,\n.search-permissions-table td {\n padding: 0.5rem 0.7rem;\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n}\n\n.search-permissions-table th {\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n}\n\n.search-permissions-secondary {\n color: var(--mj-text-muted);\n font-size: 0.78rem;\n}\n\n.search-permissions-tag {\n display: inline-block;\n padding: 0.1rem 0.5rem;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 3px;\n font-size: 0.75rem;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.search-permissions-level {\n display: inline-block;\n padding: 0.15rem 0.55rem;\n border-radius: 3px;\n font-size: 0.78rem;\n font-weight: 500;\n}\n\n.search-permissions-level-none {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n}\n\n.search-permissions-level-read {\n background: color-mix(in srgb, var(--mj-status-info) 12%, var(--mj-bg-surface));\n color: var(--mj-status-info-text);\n}\n\n.search-permissions-level-search {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text);\n}\n\n.search-permissions-level-manage {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n"] }]
2388
2430
  }], null, null); })();
2389
2431
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(KnowledgeConfigResourceComponent, { className: "KnowledgeConfigResourceComponent", filePath: "src/KnowledgeHub/components/config/knowledge-config-resource.component.ts", lineNumber: 99 }); })();
2390
2432
  /** Tree-shaking prevention */