@memberjunction/ng-dashboards 5.34.1 → 5.36.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 (407) 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 +96 -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 +453 -122
  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.d.ts +28 -0
  39. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  40. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
  41. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  42. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
  43. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  44. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
  45. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  46. package/dist/AI/components/models/model-management.component.d.ts +17 -0
  47. package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
  48. package/dist/AI/components/models/model-management.component.js +370 -425
  49. package/dist/AI/components/models/model-management.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
  51. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  52. package/dist/AI/components/prompts/prompt-management.component.js +317 -357
  53. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  54. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
  55. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
  56. package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
  57. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  58. package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
  59. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  60. package/dist/AI/components/system/system-configuration.component.js +403 -362
  61. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  62. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  63. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
  65. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  66. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
  67. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  68. package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
  69. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  70. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  71. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  72. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  73. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  74. package/dist/Actions/components/actions-overview.component.d.ts +6 -0
  75. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  76. package/dist/Actions/components/actions-overview.component.js +202 -158
  77. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  78. package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
  79. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  80. package/dist/Actions/components/execution-monitoring.component.js +191 -142
  81. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  82. package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
  83. package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
  84. package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
  85. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  86. package/dist/Actions/components/explorer/index.d.ts +0 -1
  87. package/dist/Actions/components/explorer/index.d.ts.map +1 -1
  88. package/dist/Actions/components/explorer/index.js +0 -1
  89. package/dist/Actions/components/explorer/index.js.map +1 -1
  90. package/dist/Admin/admin-data-schema.component.js +19 -79
  91. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  92. package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
  93. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  94. package/dist/Admin/admin-identity-access.component.js +19 -79
  95. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  96. package/dist/Admin/admin-monitoring.component.js +19 -79
  97. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  98. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  99. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  100. package/dist/Admin/base-admin-container.component.js +26 -17
  101. package/dist/Admin/base-admin-container.component.js.map +1 -1
  102. package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
  103. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  104. package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
  105. package/dist/Archiving/components/archive-config-resource.component.js +24 -5
  106. package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
  107. package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
  108. package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
  109. package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
  110. package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
  111. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  112. package/dist/Communication/communication-logs-resource.component.js +80 -99
  113. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  114. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  115. package/dist/Communication/communication-monitor-resource.component.js +127 -106
  116. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  117. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  118. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  119. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  120. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  121. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  122. package/dist/Communication/communication-providers-resource.component.js +44 -45
  123. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  124. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  125. package/dist/Communication/communication-runs-resource.component.js +60 -58
  126. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  127. package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
  128. package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
  129. package/dist/Communication/communication-templates-resource.component.js +139 -162
  130. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  131. package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
  132. package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
  133. package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
  134. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  135. package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
  136. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  137. package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
  138. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  139. package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
  140. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  141. package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
  142. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  143. package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
  144. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  145. package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
  146. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  147. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
  148. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
  149. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
  150. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  151. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  152. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  153. package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
  154. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  155. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  156. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  157. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
  158. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  159. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  160. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  161. package/dist/DevTools/app-state-inspector.component.js +46 -72
  162. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  163. package/dist/DevTools/class-registry.component.js +88 -100
  164. package/dist/DevTools/class-registry.component.js.map +1 -1
  165. package/dist/DevTools/event-monitor.component.js +158 -168
  166. package/dist/DevTools/event-monitor.component.js.map +1 -1
  167. package/dist/DevTools/graphql-console.component.js +257 -264
  168. package/dist/DevTools/graphql-console.component.js.map +1 -1
  169. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  170. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  171. package/dist/DevTools/layout-inspector.component.js +46 -64
  172. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  173. package/dist/DevTools/lazy-module-status.component.js +75 -84
  174. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  175. package/dist/DevTools/settings-explorer.component.js +76 -85
  176. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  177. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  178. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  179. package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
  180. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  181. package/dist/Home/home-dashboard.component.d.ts +6 -0
  182. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  183. package/dist/Home/home-dashboard.component.js +521 -485
  184. package/dist/Home/home-dashboard.component.js.map +1 -1
  185. package/dist/Integration/components/activity/activity.component.d.ts +8 -0
  186. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  187. package/dist/Integration/components/activity/activity.component.js +307 -318
  188. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  189. package/dist/Integration/components/connections/connections.component.js +654 -648
  190. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  191. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
  192. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  193. package/dist/Integration/components/overview/overview.component.js +182 -163
  194. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  195. package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
  196. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  197. package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
  198. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  199. package/dist/Integration/components/schedules/schedules.component.js +230 -241
  200. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  201. package/dist/Integration/integration.module.d.ts +1 -1
  202. package/dist/Integration/integration.module.d.ts.map +1 -1
  203. package/dist/Integration/integration.module.js +28 -1
  204. package/dist/Integration/integration.module.js.map +1 -1
  205. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  206. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  207. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
  208. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  209. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
  210. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  211. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  212. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  213. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
  214. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  215. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
  216. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
  217. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
  218. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  219. package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
  220. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  221. package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
  222. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  223. package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
  224. package/dist/Lists/components/lists-categories-resource.component.js +152 -160
  225. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  226. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  227. package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
  228. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  229. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  230. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  231. package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
  232. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  233. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  234. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  235. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  236. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  237. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  238. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  239. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  240. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  241. package/dist/Lists/index.d.ts +1 -0
  242. package/dist/Lists/index.d.ts.map +1 -1
  243. package/dist/Lists/index.js +1 -0
  244. package/dist/Lists/index.js.map +1 -1
  245. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  246. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  247. package/dist/Lists/services/list-set-operations.service.js +236 -10
  248. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  249. package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
  250. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  251. package/dist/MCP/mcp-dashboard.component.js +1248 -1338
  252. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  253. package/dist/MCP/mcp.module.d.ts +1 -1
  254. package/dist/MCP/mcp.module.d.ts.map +1 -1
  255. package/dist/MCP/mcp.module.js +34 -1
  256. package/dist/MCP/mcp.module.js.map +1 -1
  257. package/dist/Permissions/audit-log-resource.component.js +76 -85
  258. package/dist/Permissions/audit-log-resource.component.js.map +1 -1
  259. package/dist/Permissions/resource-access-resource.component.js +64 -69
  260. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  261. package/dist/Permissions/user-access-resource.component.js +63 -74
  262. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  263. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  264. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  265. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +2 -1
  266. package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
  267. package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
  268. package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
  269. package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
  270. package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
  271. package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
  272. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  273. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
  274. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
  275. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
  276. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
  277. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
  278. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  279. package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
  280. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  281. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
  282. package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
  283. package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
  284. package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
  285. package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
  286. package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
  287. package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
  288. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  289. package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
  290. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  291. package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
  292. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  293. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  294. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  295. package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
  296. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  297. package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
  298. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
  299. package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
  300. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
  301. package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
  302. package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
  303. package/dist/Testing/components/testing-analytics.component.js +420 -393
  304. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  305. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
  306. package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
  307. package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
  308. package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
  309. package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
  310. package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
  311. package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
  312. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  313. package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
  314. package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
  315. package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
  316. package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
  317. package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
  318. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  319. package/dist/Testing/components/testing-explorer.component.js +679 -786
  320. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  321. package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
  322. package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
  323. package/dist/Testing/components/testing-review-resource.component.js +9 -12
  324. package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
  325. package/dist/Testing/components/testing-review.component.d.ts +3 -1
  326. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  327. package/dist/Testing/components/testing-review.component.js +310 -274
  328. package/dist/Testing/components/testing-review.component.js.map +1 -1
  329. package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
  330. package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
  331. package/dist/Testing/components/testing-runs-resource.component.js +16 -19
  332. package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
  333. package/dist/Testing/components/testing-runs.component.d.ts +3 -1
  334. package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
  335. package/dist/Testing/components/testing-runs.component.js +307 -273
  336. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  337. package/dist/Testing/testing-dashboard.component.d.ts +2 -0
  338. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  339. package/dist/Testing/testing-dashboard.component.js +114 -99
  340. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  341. package/dist/VersionHistory/components/diff-resource.component.js +185 -188
  342. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  343. package/dist/VersionHistory/components/graph-resource.component.js +154 -184
  344. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  345. package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
  346. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  347. package/dist/VersionHistory/components/labels-resource.component.js +350 -354
  348. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  349. package/dist/VersionHistory/components/restore-resource.component.js +163 -169
  350. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  351. package/dist/actions-dashboards.module.d.ts +15 -16
  352. package/dist/actions-dashboards.module.d.ts.map +1 -1
  353. package/dist/actions-dashboards.module.js +34 -11
  354. package/dist/actions-dashboards.module.js.map +1 -1
  355. package/dist/ai-dashboards.module.d.ts +45 -48
  356. package/dist/ai-dashboards.module.d.ts.map +1 -1
  357. package/dist/ai-dashboards.module.js +51 -10
  358. package/dist/ai-dashboards.module.js.map +1 -1
  359. package/dist/archiving-dashboards.module.d.ts +2 -1
  360. package/dist/archiving-dashboards.module.d.ts.map +1 -1
  361. package/dist/archiving-dashboards.module.js +12 -2
  362. package/dist/archiving-dashboards.module.js.map +1 -1
  363. package/dist/communication-dashboards.module.d.ts +9 -6
  364. package/dist/communication-dashboards.module.d.ts.map +1 -1
  365. package/dist/communication-dashboards.module.js +37 -7
  366. package/dist/communication-dashboards.module.js.map +1 -1
  367. package/dist/core-dashboards.module.d.ts +1 -1
  368. package/dist/core-dashboards.module.d.ts.map +1 -1
  369. package/dist/core-dashboards.module.js +46 -1
  370. package/dist/core-dashboards.module.js.map +1 -1
  371. package/dist/credentials-dashboards.module.d.ts +1 -1
  372. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  373. package/dist/credentials-dashboards.module.js +28 -1
  374. package/dist/credentials-dashboards.module.js.map +1 -1
  375. package/dist/lists-dashboards.module.d.ts +10 -9
  376. package/dist/lists-dashboards.module.d.ts.map +1 -1
  377. package/dist/lists-dashboards.module.js +40 -2
  378. package/dist/lists-dashboards.module.js.map +1 -1
  379. package/dist/public-api.d.ts +3 -2
  380. package/dist/public-api.d.ts.map +1 -1
  381. package/dist/public-api.js +4 -3
  382. package/dist/public-api.js.map +1 -1
  383. package/dist/scheduling-dashboards.module.d.ts +1 -1
  384. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  385. package/dist/scheduling-dashboards.module.js +31 -1
  386. package/dist/scheduling-dashboards.module.js.map +1 -1
  387. package/dist/testing-dashboards.module.d.ts +8 -7
  388. package/dist/testing-dashboards.module.d.ts.map +1 -1
  389. package/dist/testing-dashboards.module.js +42 -0
  390. package/dist/testing-dashboards.module.js.map +1 -1
  391. package/package.json +53 -52
  392. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
  393. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
  394. package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
  395. package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
  396. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
  397. package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
  398. package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
  399. package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
  400. package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
  401. package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
  402. package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
  403. package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
  404. package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
  405. package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
  406. package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
  407. package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
@@ -23,118 +23,119 @@ 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)); });
42
- i0.ɵɵelement(1, "i");
43
- i0.ɵɵelementStart(2, "span");
44
- i0.ɵɵtext(3);
45
- i0.ɵɵelementEnd()();
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();
46
49
  } 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);
50
- i0.ɵɵadvance();
51
- i0.ɵɵclassMap(section_r2.Icon);
50
+ const ctx_r1 = i0.ɵɵnextContext();
51
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
52
+ i0.ɵɵadvance(3);
53
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
52
54
  i0.ɵɵadvance(2);
53
- i0.ɵɵtextInterpolate(section_r2.Label);
55
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.IsSaving ? "Saving\u2026" : "Save", " ");
54
56
  } }
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);
58
- i0.ɵɵtext(2, "Pipeline Settings");
59
- i0.ɵɵelementEnd();
60
- i0.ɵɵelementStart(3, "p", 13);
61
- i0.ɵɵtext(4, "Configure how the Knowledge Pipeline processes incoming content.");
57
+ function KnowledgeConfigResourceComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "div", 5);
59
+ i0.ɵɵelement(1, "mj-loading", 11);
62
60
  i0.ɵɵelementEnd();
63
- i0.ɵɵelementStart(5, "div", 14)(6, "label", 15)(7, "div", 16)(8, "span", 17);
64
- i0.ɵɵtext(9, "Auto-tag on Ingest");
61
+ } }
62
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
63
+ const _r4 = i0.ɵɵgetCurrentView();
64
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 17)(2, "label", 18)(3, "div", 19)(4, "span", 20);
65
+ i0.ɵɵtext(5, "Auto-tag on Ingest");
65
66
  i0.ɵɵelementEnd();
66
- i0.ɵɵelementStart(10, "span", 18);
67
- i0.ɵɵtext(11, "Automatically run autotagging when new content is ingested");
67
+ i0.ɵɵelementStart(6, "span", 21);
68
+ i0.ɵɵtext(7, "Automatically run autotagging when new content is ingested");
68
69
  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()); });
70
+ i0.ɵɵelementStart(8, "input", 22);
71
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.AutotagOnIngest, $event) || (ctx_r1.PipelineSettings.AutotagOnIngest = $event); return i0.ɵɵresetView($event); });
72
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_change_8_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
72
73
  i0.ɵɵelementEnd()();
73
- i0.ɵɵelementStart(13, "label", 15)(14, "div", 16)(15, "span", 17);
74
- i0.ɵɵtext(16, "Vectorize on Ingest");
74
+ i0.ɵɵelementStart(9, "label", 18)(10, "div", 19)(11, "span", 20);
75
+ i0.ɵɵtext(12, "Vectorize on Ingest");
75
76
  i0.ɵɵelementEnd();
76
- i0.ɵɵelementStart(17, "span", 18);
77
- i0.ɵɵtext(18, "Automatically create embeddings for new content");
77
+ i0.ɵɵelementStart(13, "span", 21);
78
+ i0.ɵɵtext(14, "Automatically create embeddings for new content");
78
79
  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()); });
80
+ i0.ɵɵelementStart(15, "input", 22);
81
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.VectorizeOnIngest, $event) || (ctx_r1.PipelineSettings.VectorizeOnIngest = $event); return i0.ɵɵresetView($event); });
82
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_change_15_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
82
83
  i0.ɵɵelementEnd()();
83
- i0.ɵɵelementStart(20, "div", 20)(21, "div", 21)(22, "span", 17);
84
- i0.ɵɵtext(23, "Default Batch Size");
84
+ i0.ɵɵelementStart(16, "div", 23)(17, "div", 24)(18, "span", 20);
85
+ i0.ɵɵtext(19, "Default Batch Size");
85
86
  i0.ɵɵelementEnd();
86
- i0.ɵɵelementStart(24, "span", 18);
87
- i0.ɵɵtext(25, "Number of items processed per batch");
87
+ i0.ɵɵelementStart(20, "span", 21);
88
+ i0.ɵɵtext(21, "Number of items processed per batch");
88
89
  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()); });
90
+ i0.ɵɵelementStart(22, "input", 25);
91
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.DefaultBatchSize, $event) || (ctx_r1.PipelineSettings.DefaultBatchSize = $event); return i0.ɵɵresetView($event); });
92
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_input_22_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
92
93
  i0.ɵɵelementEnd()();
93
- i0.ɵɵelementStart(27, "div", 20)(28, "div", 21)(29, "span", 17);
94
- i0.ɵɵtext(30, "Max Concurrent Jobs");
94
+ i0.ɵɵelementStart(23, "div", 23)(24, "div", 24)(25, "span", 20);
95
+ i0.ɵɵtext(26, "Max Concurrent Jobs");
95
96
  i0.ɵɵelementEnd();
96
- i0.ɵɵelementStart(31, "span", 18);
97
- i0.ɵɵtext(32, "Maximum number of pipeline jobs running at once");
97
+ i0.ɵɵelementStart(27, "span", 21);
98
+ i0.ɵɵtext(28, "Maximum number of pipeline jobs running at once");
98
99
  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()); });
100
+ i0.ɵɵelementStart(29, "input", 26);
101
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_ngModelChange_29_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.PipelineSettings.MaxConcurrentJobs, $event) || (ctx_r1.PipelineSettings.MaxConcurrentJobs = $event); return i0.ɵɵresetView($event); });
102
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template_input_input_29_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
102
103
  i0.ɵɵelementEnd()()()();
103
104
  } if (rf & 2) {
104
- const ctx_r2 = i0.ɵɵnextContext(2);
105
- i0.ɵɵadvance(12);
106
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.AutotagOnIngest);
105
+ const ctx_r1 = i0.ɵɵnextContext(2);
106
+ i0.ɵɵadvance(8);
107
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.AutotagOnIngest);
107
108
  i0.ɵɵadvance(7);
108
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.VectorizeOnIngest);
109
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.VectorizeOnIngest);
109
110
  i0.ɵɵadvance(7);
110
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.DefaultBatchSize);
111
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.DefaultBatchSize);
111
112
  i0.ɵɵadvance(7);
112
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PipelineSettings.MaxConcurrentJobs);
113
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PipelineSettings.MaxConcurrentJobs);
113
114
  } }
114
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_16_Template(rf, ctx) { if (rf & 1) {
115
- i0.ɵɵelement(0, "i", 33);
115
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_12_Template(rf, ctx) { if (rf & 1) {
116
+ i0.ɵɵelement(0, "i", 36);
116
117
  } }
117
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_17_Template(rf, ctx) { if (rf & 1) {
118
- i0.ɵɵelementStart(0, "span", 34);
118
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
119
+ i0.ɵɵelementStart(0, "span", 37);
119
120
  i0.ɵɵtext(1, "1");
120
121
  i0.ɵɵelementEnd();
121
122
  } }
122
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_21_Template(rf, ctx) { if (rf & 1) {
123
- i0.ɵɵelementStart(0, "span", 37);
123
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelementStart(0, "span", 40);
124
125
  i0.ɵɵtext(1);
125
126
  i0.ɵɵelementEnd();
126
127
  } if (rf & 2) {
127
- const ctx_r2 = i0.ɵɵnextContext(3);
128
+ const ctx_r1 = i0.ɵɵnextContext(3);
128
129
  i0.ɵɵadvance();
129
- i0.ɵɵtextInterpolate1("", ctx_r2.VectorDBProviders.length, " provider(s) registered");
130
+ i0.ɵɵtextInterpolate1("", ctx_r1.VectorDBProviders.length, " provider(s) registered");
130
131
  } }
131
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_22_Template(rf, ctx) { if (rf & 1) {
132
- i0.ɵɵelementStart(0, "span", 37);
132
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_18_Template(rf, ctx) { if (rf & 1) {
133
+ i0.ɵɵelementStart(0, "span", 40);
133
134
  i0.ɵɵtext(1, "No providers registered. Add a vector database provider (e.g., Pinecone, Weaviate) via the admin console.");
134
135
  i0.ɵɵelementEnd();
135
136
  } }
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);
137
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_For_20_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "option", 56);
138
139
  i0.ɵɵtext(1);
139
140
  i0.ɵɵelementEnd();
140
141
  } if (rf & 2) {
@@ -143,88 +144,88 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Condition
143
144
  i0.ɵɵadvance();
144
145
  i0.ɵɵtextInterpolate(cred_r7.Name);
145
146
  } }
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);
147
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
148
+ i0.ɵɵelement(0, "i", 57);
148
149
  } }
149
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Template(rf, ctx) { if (rf & 1) {
150
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_Template(rf, ctx) { if (rf & 1) {
150
151
  const _r5 = i0.ɵɵgetCurrentView();
151
- i0.ɵɵelementStart(0, "div", 41)(1, "div", 42);
152
- i0.ɵɵelement(2, "i", 43);
152
+ i0.ɵɵelementStart(0, "div", 44)(1, "div", 45);
153
+ i0.ɵɵelement(2, "i", 46);
153
154
  i0.ɵɵelementEnd();
154
- i0.ɵɵelementStart(3, "div", 44)(4, "span", 45);
155
+ i0.ɵɵelementStart(3, "div", 47)(4, "span", 48);
155
156
  i0.ɵɵtext(5);
156
157
  i0.ɵɵelementEnd();
157
- i0.ɵɵelementStart(6, "span", 46);
158
+ i0.ɵɵelementStart(6, "span", 49);
158
159
  i0.ɵɵtext(7);
159
160
  i0.ɵɵelementEnd()();
160
- i0.ɵɵelementStart(8, "span", 47);
161
- i0.ɵɵelement(9, "i", 33);
161
+ i0.ɵɵelementStart(8, "span", 50);
162
+ i0.ɵɵelement(9, "i", 36);
162
163
  i0.ɵɵtext(10, " Active ");
163
164
  i0.ɵɵelementEnd()();
164
- i0.ɵɵelementStart(11, "div", 48)(12, "label", 49);
165
- i0.ɵɵelement(13, "i", 50);
165
+ i0.ɵɵelementStart(11, "div", 51)(12, "label", 52);
166
+ i0.ɵɵelement(13, "i", 53);
166
167
  i0.ɵɵtext(14, " API Credential ");
167
168
  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);
169
+ i0.ɵɵelementStart(15, "div", 54)(16, "select", 55);
170
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_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); });
171
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_Template_select_change_16_listener() { const provider_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SaveProviderCredential(provider_r6)); });
172
+ i0.ɵɵelementStart(17, "option", 56);
172
173
  i0.ɵɵtext(18, "None (use environment variable)");
173
174
  i0.ɵɵelementEnd();
174
- i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_For_20_Template, 2, 2, "option", 53, _forTrack0);
175
+ i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_For_20_Template, 2, 2, "option", 56, _forTrack0);
175
176
  i0.ɵɵelementEnd();
176
- i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_For_2_Conditional_21_Template, 1, 0, "i", 54);
177
+ i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_Conditional_21_Template, 1, 0, "i", 57);
177
178
  i0.ɵɵelementEnd()();
178
179
  } if (rf & 2) {
179
180
  const provider_r6 = ctx.$implicit;
180
- const ctx_r2 = i0.ɵɵnextContext(4);
181
+ const ctx_r1 = i0.ɵɵnextContext(4);
181
182
  i0.ɵɵadvance(5);
182
183
  i0.ɵɵtextInterpolate(provider_r6.Name);
183
184
  i0.ɵɵadvance(2);
184
185
  i0.ɵɵtextInterpolate(provider_r6.ClassKey);
185
186
  i0.ɵɵadvance(9);
186
187
  i0.ɵɵtwoWayProperty("ngModel", provider_r6.CredentialID);
187
- i0.ɵɵproperty("disabled", ctx_r2.IsSavingCredential);
188
+ i0.ɵɵproperty("disabled", ctx_r1.IsSavingCredential);
188
189
  i0.ɵɵadvance();
189
190
  i0.ɵɵproperty("ngValue", null);
190
191
  i0.ɵɵadvance(2);
191
- i0.ɵɵrepeater(ctx_r2.AvailableCredentials);
192
+ i0.ɵɵrepeater(ctx_r1.AvailableCredentials);
192
193
  i0.ɵɵadvance(2);
193
- i0.ɵɵconditional(ctx_r2.IsSavingCredential ? 21 : -1);
194
+ i0.ɵɵconditional(ctx_r1.IsSavingCredential ? 21 : -1);
194
195
  } }
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);
196
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_Template(rf, ctx) { if (rf & 1) {
197
+ i0.ɵɵelementStart(0, "div", 41);
198
+ i0.ɵɵrepeaterCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_For_2_Template, 22, 6, null, null, _forTrack0);
198
199
  i0.ɵɵelementEnd();
199
200
  } if (rf & 2) {
200
- const ctx_r2 = i0.ɵɵnextContext(3);
201
+ const ctx_r1 = i0.ɵɵnextContext(3);
201
202
  i0.ɵɵadvance();
202
- i0.ɵɵrepeater(ctx_r2.VectorDBProviders);
203
+ i0.ɵɵrepeater(ctx_r1.VectorDBProviders);
203
204
  } }
204
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_27_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelement(0, "i", 33);
205
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_23_Template(rf, ctx) { if (rf & 1) {
206
+ i0.ɵɵelement(0, "i", 36);
206
207
  } }
207
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_28_Template(rf, ctx) { if (rf & 1) {
208
- i0.ɵɵelementStart(0, "span", 34);
208
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_24_Template(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵelementStart(0, "span", 37);
209
210
  i0.ɵɵtext(1, "2");
210
211
  i0.ɵɵelementEnd();
211
212
  } }
212
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_32_Template(rf, ctx) { if (rf & 1) {
213
- i0.ɵɵelementStart(0, "span", 37);
213
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_28_Template(rf, ctx) { if (rf & 1) {
214
+ i0.ɵɵelementStart(0, "span", 40);
214
215
  i0.ɵɵtext(1);
215
216
  i0.ɵɵelementEnd();
216
217
  } if (rf & 2) {
217
- const ctx_r2 = i0.ɵɵnextContext(3);
218
+ const ctx_r1 = i0.ɵɵnextContext(3);
218
219
  i0.ɵɵadvance();
219
- i0.ɵɵtextInterpolate1("", ctx_r2.EmbeddingModels.length, " model(s) available");
220
+ i0.ɵɵtextInterpolate1("", ctx_r1.EmbeddingModels.length, " model(s) available");
220
221
  } }
221
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_33_Template(rf, ctx) { if (rf & 1) {
222
- i0.ɵɵelementStart(0, "span", 37);
222
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_29_Template(rf, ctx) { if (rf & 1) {
223
+ i0.ɵɵelementStart(0, "span", 40);
223
224
  i0.ɵɵtext(1, "No embedding models found. Configure at least one in the AI app > Models tab.");
224
225
  i0.ɵɵelementEnd();
225
226
  } }
226
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_34_For_3_Template(rf, ctx) { if (rf & 1) {
227
- i0.ɵɵelementStart(0, "span", 56);
227
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_30_For_3_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelementStart(0, "span", 59);
228
229
  i0.ɵɵtext(1);
229
230
  i0.ɵɵelementEnd();
230
231
  } if (rf & 2) {
@@ -232,71 +233,71 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Condition
232
233
  i0.ɵɵadvance();
233
234
  i0.ɵɵtextInterpolate(model_r8.Name);
234
235
  } }
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);
236
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_30_Template(rf, ctx) { if (rf & 1) {
237
+ i0.ɵɵelementStart(0, "div", 41)(1, "div", 58);
238
+ i0.ɵɵrepeaterCreate(2, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_30_For_3_Template, 2, 1, "span", 59, _forTrack0);
238
239
  i0.ɵɵelementEnd()();
239
240
  } if (rf & 2) {
240
- const ctx_r2 = i0.ɵɵnextContext(3);
241
+ const ctx_r1 = i0.ɵɵnextContext(3);
241
242
  i0.ɵɵadvance(2);
242
- i0.ɵɵrepeater(ctx_r2.EmbeddingModels);
243
+ i0.ɵɵrepeater(ctx_r1.EmbeddingModels);
243
244
  } }
244
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_38_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵelement(0, "i", 33);
245
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_34_Template(rf, ctx) { if (rf & 1) {
246
+ i0.ɵɵelement(0, "i", 36);
246
247
  } }
247
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_39_Template(rf, ctx) { if (rf & 1) {
248
- i0.ɵɵelementStart(0, "span", 34);
248
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_35_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelementStart(0, "span", 37);
249
250
  i0.ɵɵtext(1, "3");
250
251
  i0.ɵɵelementEnd();
251
252
  } }
252
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_43_Template(rf, ctx) { if (rf & 1) {
253
- i0.ɵɵelementStart(0, "span", 37);
253
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_39_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵelementStart(0, "span", 40);
254
255
  i0.ɵɵtext(1);
255
256
  i0.ɵɵelementEnd();
256
257
  } if (rf & 2) {
257
- const ctx_r2 = i0.ɵɵnextContext(3);
258
+ const ctx_r1 = i0.ɵɵnextContext(3);
258
259
  i0.ɵɵadvance();
259
- i0.ɵɵtextInterpolate1("", ctx_r2.VectorIndexes.length, " index(es) configured");
260
+ i0.ɵɵtextInterpolate1("", ctx_r1.VectorIndexes.length, " index(es) configured");
260
261
  } }
261
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_44_Template(rf, ctx) { if (rf & 1) {
262
- i0.ɵɵelementStart(0, "span", 37);
262
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_40_Template(rf, ctx) { if (rf & 1) {
263
+ i0.ɵɵelementStart(0, "span", 40);
263
264
  i0.ɵɵtext(1, "No indexes yet \u2014 create one below.");
264
265
  i0.ɵɵelementEnd();
265
266
  } }
266
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_45_Template(rf, ctx) { if (rf & 1) {
267
- i0.ɵɵelementStart(0, "span", 37);
267
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_41_Template(rf, ctx) { if (rf & 1) {
268
+ i0.ɵɵelementStart(0, "span", 40);
268
269
  i0.ɵɵtext(1, "Complete steps 1 and 2 first.");
269
270
  i0.ɵɵelementEnd();
270
271
  } }
271
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_46_Template(rf, ctx) { if (rf & 1) {
272
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_42_Template(rf, ctx) { if (rf & 1) {
272
273
  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);
274
+ i0.ɵɵelementStart(0, "button", 60);
275
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_42_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenCreateIndexForm()); });
276
+ i0.ɵɵelement(1, "i", 61);
276
277
  i0.ɵɵtext(2, " Create Index ");
277
278
  i0.ɵɵelementEnd();
278
279
  } }
279
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_47_For_2_Template(rf, ctx) { if (rf & 1) {
280
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_43_For_2_Template(rf, ctx) { if (rf & 1) {
280
281
  const _r10 = i0.ɵɵgetCurrentView();
281
- i0.ɵɵelementStart(0, "div", 59)(1, "div", 60);
282
- i0.ɵɵelement(2, "i", 61);
282
+ i0.ɵɵelementStart(0, "div", 62)(1, "div", 63);
283
+ i0.ɵɵelement(2, "i", 64);
283
284
  i0.ɵɵelementEnd();
284
- i0.ɵɵelementStart(3, "div", 62)(4, "span", 63);
285
+ i0.ɵɵelementStart(3, "div", 65)(4, "span", 66);
285
286
  i0.ɵɵtext(5);
286
287
  i0.ɵɵelementEnd();
287
- i0.ɵɵelementStart(6, "span", 64);
288
- i0.ɵɵelement(7, "i", 43);
288
+ i0.ɵɵelementStart(6, "span", 67);
289
+ i0.ɵɵelement(7, "i", 46);
289
290
  i0.ɵɵtext(8);
290
- i0.ɵɵelement(9, "i", 65);
291
+ i0.ɵɵelement(9, "i", 68);
291
292
  i0.ɵɵtext(10);
292
293
  i0.ɵɵelementEnd()();
293
- i0.ɵɵelementStart(11, "div", 66)(12, "span", 47);
294
- i0.ɵɵelement(13, "i", 33);
294
+ i0.ɵɵelementStart(11, "div", 69)(12, "span", 50);
295
+ i0.ɵɵelement(13, "i", 36);
295
296
  i0.ɵɵtext(14, " Active ");
296
297
  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);
298
+ i0.ɵɵelementStart(15, "button", 70);
299
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_43_For_2_Template_button_click_15_listener() { const idx_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.DeleteIndex(idx_r11.ID)); });
300
+ i0.ɵɵelement(16, "i", 71);
300
301
  i0.ɵɵelementEnd()()();
301
302
  } if (rf & 2) {
302
303
  const idx_r11 = ctx.$implicit;
@@ -307,17 +308,17 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Condition
307
308
  i0.ɵɵadvance(2);
308
309
  i0.ɵɵtextInterpolate1(" ", idx_r11.EmbeddingModel, " ");
309
310
  } }
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);
311
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_43_Template(rf, ctx) { if (rf & 1) {
312
+ i0.ɵɵelementStart(0, "div", 41);
313
+ i0.ɵɵrepeaterCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_43_For_2_Template, 17, 3, "div", 62, _forTrack0);
313
314
  i0.ɵɵelementEnd();
314
315
  } if (rf & 2) {
315
- const ctx_r2 = i0.ɵɵnextContext(3);
316
+ const ctx_r1 = i0.ɵɵnextContext(3);
316
317
  i0.ɵɵadvance();
317
- i0.ɵɵrepeater(ctx_r2.VectorIndexes);
318
+ i0.ɵɵrepeater(ctx_r1.VectorIndexes);
318
319
  } }
319
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_For_14_Template(rf, ctx) { if (rf & 1) {
320
- i0.ɵɵelementStart(0, "option", 76);
320
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_For_14_Template(rf, ctx) { if (rf & 1) {
321
+ i0.ɵɵelementStart(0, "option", 79);
321
322
  i0.ɵɵtext(1);
322
323
  i0.ɵɵelementEnd();
323
324
  } if (rf & 2) {
@@ -326,8 +327,8 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Condition
326
327
  i0.ɵɵadvance();
327
328
  i0.ɵɵtextInterpolate(db_r13.Name);
328
329
  } }
329
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_For_20_Template(rf, ctx) { if (rf & 1) {
330
- i0.ɵɵelementStart(0, "option", 76);
330
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_For_20_Template(rf, ctx) { if (rf & 1) {
331
+ i0.ɵɵelementStart(0, "option", 79);
331
332
  i0.ɵɵtext(1);
332
333
  i0.ɵɵelementEnd();
333
334
  } if (rf & 2) {
@@ -336,166 +337,160 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Condition
336
337
  i0.ɵɵadvance();
337
338
  i0.ɵɵtextInterpolate(model_r14.Name);
338
339
  } }
339
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Conditional_23_Template(rf, ctx) { if (rf & 1) {
340
- i0.ɵɵelement(0, "i", 80);
340
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Conditional_23_Template(rf, ctx) { if (rf & 1) {
341
+ i0.ɵɵelement(0, "i", 83);
341
342
  i0.ɵɵtext(1, " Creating... ");
342
343
  } }
343
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Conditional_24_Template(rf, ctx) { if (rf & 1) {
344
- i0.ɵɵelement(0, "i", 58);
344
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Conditional_24_Template(rf, ctx) { if (rf & 1) {
345
+ i0.ɵɵelement(0, "i", 61);
345
346
  i0.ɵɵtext(1, " Create Index ");
346
347
  } }
347
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_48_Template(rf, ctx) { if (rf & 1) {
348
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template(rf, ctx) { if (rf & 1) {
348
349
  const _r12 = i0.ɵɵgetCurrentView();
349
- i0.ɵɵelementStart(0, "div", 40)(1, "h4", 69);
350
- i0.ɵɵelement(2, "i", 70);
350
+ i0.ɵɵelementStart(0, "div", 43)(1, "h4", 72);
351
+ i0.ɵɵelement(2, "i", 73);
351
352
  i0.ɵɵtext(3, " Create New Vector Index ");
352
353
  i0.ɵɵelementEnd();
353
- i0.ɵɵelementStart(4, "div", 71)(5, "div", 72)(6, "label", 73);
354
+ i0.ɵɵelementStart(4, "div", 74)(5, "div", 75)(6, "label", 76);
354
355
  i0.ɵɵtext(7, "Index Name");
355
356
  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); });
357
+ i0.ɵɵelementStart(8, "input", 77);
358
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.NewIndexName, $event) || (ctx_r1.NewIndexName = $event); return i0.ɵɵresetView($event); });
358
359
  i0.ɵɵelementEnd()();
359
- i0.ɵɵelementStart(9, "div", 72)(10, "label", 73);
360
+ i0.ɵɵelementStart(9, "div", 75)(10, "label", 76);
360
361
  i0.ɵɵtext(11, "Vector Database");
361
362
  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);
363
+ i0.ɵɵelementStart(12, "select", 78);
364
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template_select_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.NewIndexVectorDBID, $event) || (ctx_r1.NewIndexVectorDBID = $event); return i0.ɵɵresetView($event); });
365
+ i0.ɵɵrepeaterCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_For_14_Template, 2, 2, "option", 79, _forTrack0);
365
366
  i0.ɵɵelementEnd()();
366
- i0.ɵɵelementStart(15, "div", 72)(16, "label", 73);
367
+ i0.ɵɵelementStart(15, "div", 75)(16, "label", 76);
367
368
  i0.ɵɵtext(17, "Embedding Model");
368
369
  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);
370
+ i0.ɵɵelementStart(18, "select", 78);
371
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template_select_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.NewIndexEmbeddingModelID, $event) || (ctx_r1.NewIndexEmbeddingModelID = $event); return i0.ɵɵresetView($event); });
372
+ i0.ɵɵrepeaterCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_For_20_Template, 2, 2, "option", 79, _forTrack0);
372
373
  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);
374
+ i0.ɵɵelementStart(21, "div", 80)(22, "button", 81);
375
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CreateIndex()); });
376
+ i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Conditional_23_Template, 2, 0)(24, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Conditional_24_Template, 2, 0);
376
377
  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()); });
378
+ i0.ɵɵelementStart(25, "button", 82);
379
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CancelCreateIndex()); });
379
380
  i0.ɵɵtext(26, " Cancel ");
380
381
  i0.ɵɵelementEnd()()();
381
382
  } if (rf & 2) {
382
- const ctx_r2 = i0.ɵɵnextContext(3);
383
+ const ctx_r1 = i0.ɵɵnextContext(3);
383
384
  i0.ɵɵadvance(8);
384
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.NewIndexName);
385
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewIndexName);
385
386
  i0.ɵɵadvance(4);
386
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.NewIndexVectorDBID);
387
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewIndexVectorDBID);
387
388
  i0.ɵɵadvance();
388
- i0.ɵɵrepeater(ctx_r2.VectorDBProviders);
389
+ i0.ɵɵrepeater(ctx_r1.VectorDBProviders);
389
390
  i0.ɵɵadvance(5);
390
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.NewIndexEmbeddingModelID);
391
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewIndexEmbeddingModelID);
391
392
  i0.ɵɵadvance();
392
- i0.ɵɵrepeater(ctx_r2.EmbeddingModels);
393
+ i0.ɵɵrepeater(ctx_r1.EmbeddingModels);
393
394
  i0.ɵɵadvance(3);
394
- i0.ɵɵproperty("disabled", ctx_r2.IsCreatingIndex);
395
+ i0.ɵɵproperty("disabled", ctx_r1.IsCreatingIndex);
395
396
  i0.ɵɵadvance();
396
- i0.ɵɵconditional(ctx_r2.IsCreatingIndex ? 23 : 24);
397
+ i0.ɵɵconditional(ctx_r1.IsCreatingIndex ? 23 : 24);
397
398
  i0.ɵɵadvance(2);
398
- i0.ɵɵproperty("disabled", ctx_r2.IsCreatingIndex);
399
+ i0.ɵɵproperty("disabled", ctx_r1.IsCreatingIndex);
399
400
  } }
400
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
401
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
402
- i0.ɵɵtext(2, "Vector Database");
401
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Template(rf, ctx) { if (rf & 1) {
402
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 27)(2, "div", 28)(3, "span", 29);
403
+ i0.ɵɵtext(4, "Setup Progress");
403
404
  i0.ɵɵelementEnd();
404
- i0.ɵɵelementStart(3, "p", 13);
405
- i0.ɵɵtext(4, "Manage the shared vector index and database connection.");
406
- i0.ɵɵelementEnd();
407
- i0.ɵɵelementStart(5, "div", 24)(6, "div", 25)(7, "span", 26);
408
- i0.ɵɵtext(8, "Setup Progress");
409
- i0.ɵɵelementEnd();
410
- i0.ɵɵelementStart(9, "span", 27);
411
- i0.ɵɵtext(10);
405
+ i0.ɵɵelementStart(5, "span", 30);
406
+ i0.ɵɵtext(6);
412
407
  i0.ɵɵelementEnd()();
413
- i0.ɵɵelementStart(11, "div", 28);
414
- i0.ɵɵelement(12, "div", 29);
408
+ i0.ɵɵelementStart(7, "div", 31);
409
+ i0.ɵɵelement(8, "div", 32);
415
410
  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);
411
+ i0.ɵɵelementStart(9, "div", 33)(10, "div", 34)(11, "div", 35);
412
+ i0.ɵɵconditionalCreate(12, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_12_Template, 1, 0, "i", 36)(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_13_Template, 2, 0, "span", 37);
418
413
  i0.ɵɵelementEnd();
419
- i0.ɵɵelementStart(18, "div", 35)(19, "span", 36);
420
- i0.ɵɵtext(20, "Vector Database Providers");
414
+ i0.ɵɵelementStart(14, "div", 38)(15, "span", 39);
415
+ i0.ɵɵtext(16, "Vector Database Providers");
421
416
  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);
417
+ i0.ɵɵconditionalCreate(17, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_17_Template, 2, 1, "span", 40)(18, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_18_Template, 2, 0, "span", 40);
423
418
  i0.ɵɵelementEnd()();
424
- i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_23_Template, 3, 0, "div", 38);
419
+ i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_19_Template, 3, 0, "div", 41);
425
420
  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);
421
+ i0.ɵɵelementStart(20, "div", 33)(21, "div", 34)(22, "div", 35);
422
+ i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_23_Template, 1, 0, "i", 36)(24, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_24_Template, 2, 0, "span", 37);
428
423
  i0.ɵɵelementEnd();
429
- i0.ɵɵelementStart(29, "div", 35)(30, "span", 36);
430
- i0.ɵɵtext(31, "Embedding Models");
424
+ i0.ɵɵelementStart(25, "div", 38)(26, "span", 39);
425
+ i0.ɵɵtext(27, "Embedding Models");
431
426
  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);
427
+ i0.ɵɵconditionalCreate(28, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_28_Template, 2, 1, "span", 40)(29, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_29_Template, 2, 0, "span", 40);
433
428
  i0.ɵɵelementEnd()();
434
- i0.ɵɵconditionalCreate(34, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_34_Template, 4, 0, "div", 38);
429
+ i0.ɵɵconditionalCreate(30, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_30_Template, 4, 0, "div", 41);
435
430
  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);
431
+ i0.ɵɵelementStart(31, "div", 33)(32, "div", 34)(33, "div", 35);
432
+ i0.ɵɵconditionalCreate(34, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_34_Template, 1, 0, "i", 36)(35, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_35_Template, 2, 0, "span", 37);
438
433
  i0.ɵɵelementEnd();
439
- i0.ɵɵelementStart(40, "div", 35)(41, "span", 36);
440
- i0.ɵɵtext(42, "Vector Indexes");
434
+ i0.ɵɵelementStart(36, "div", 38)(37, "span", 39);
435
+ i0.ɵɵtext(38, "Vector Indexes");
441
436
  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);
437
+ i0.ɵɵconditionalCreate(39, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_39_Template, 2, 1, "span", 40)(40, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_40_Template, 2, 0, "span", 40)(41, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_41_Template, 2, 0, "span", 40);
443
438
  i0.ɵɵelementEnd();
444
- i0.ɵɵconditionalCreate(46, KnowledgeConfigResourceComponent_Conditional_1_Conditional_10_Conditional_46_Template, 3, 0, "button", 39);
439
+ i0.ɵɵconditionalCreate(42, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_42_Template, 3, 0, "button", 42);
445
440
  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);
441
+ i0.ɵɵconditionalCreate(43, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_43_Template, 3, 0, "div", 41);
442
+ i0.ɵɵconditionalCreate(44, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Conditional_44_Template, 27, 6, "div", 43);
448
443
  i0.ɵɵelementEnd()();
449
444
  } if (rf & 2) {
450
- const ctx_r2 = i0.ɵɵnextContext(2);
451
- i0.ɵɵadvance(10);
452
- i0.ɵɵtextInterpolate1("", ctx_r2.SetupStepsCompleted, " of 3 complete");
445
+ const ctx_r1 = i0.ɵɵnextContext(2);
446
+ i0.ɵɵadvance(6);
447
+ i0.ɵɵtextInterpolate1("", ctx_r1.SetupStepsCompleted, " of 3 complete");
453
448
  i0.ɵɵadvance(2);
454
- i0.ɵɵstyleProp("width", ctx_r2.SetupStepsCompleted / 3 * 100, "%");
449
+ i0.ɵɵstyleProp("width", ctx_r1.SetupStepsCompleted / 3 * 100, "%");
455
450
  i0.ɵɵadvance();
456
- i0.ɵɵclassProp("setup-step-complete", ctx_r2.HasVectorDBProvider)("setup-step-pending", !ctx_r2.HasVectorDBProvider);
451
+ i0.ɵɵclassProp("setup-step-complete", ctx_r1.HasVectorDBProvider)("setup-step-pending", !ctx_r1.HasVectorDBProvider);
457
452
  i0.ɵɵadvance(3);
458
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider ? 16 : 17);
453
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider ? 12 : 13);
459
454
  i0.ɵɵadvance(5);
460
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider ? 21 : 22);
455
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider ? 17 : 18);
461
456
  i0.ɵɵadvance(2);
462
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider ? 23 : -1);
457
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider ? 19 : -1);
463
458
  i0.ɵɵadvance();
464
- i0.ɵɵclassProp("setup-step-complete", ctx_r2.HasEmbeddingModel)("setup-step-pending", !ctx_r2.HasEmbeddingModel);
459
+ i0.ɵɵclassProp("setup-step-complete", ctx_r1.HasEmbeddingModel)("setup-step-pending", !ctx_r1.HasEmbeddingModel);
465
460
  i0.ɵɵadvance(3);
466
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 27 : 28);
461
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 23 : 24);
467
462
  i0.ɵɵadvance(5);
468
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 32 : 33);
463
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 28 : 29);
469
464
  i0.ɵɵadvance(2);
470
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 34 : -1);
465
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 30 : -1);
471
466
  i0.ɵɵadvance();
472
- i0.ɵɵclassProp("setup-step-complete", ctx_r2.HasVectorIndex)("setup-step-pending", !ctx_r2.HasVectorIndex);
467
+ i0.ɵɵclassProp("setup-step-complete", ctx_r1.HasVectorIndex)("setup-step-pending", !ctx_r1.HasVectorIndex);
473
468
  i0.ɵɵadvance(3);
474
- i0.ɵɵconditional(ctx_r2.HasVectorIndex ? 38 : 39);
469
+ i0.ɵɵconditional(ctx_r1.HasVectorIndex ? 34 : 35);
475
470
  i0.ɵɵadvance(5);
476
- i0.ɵɵconditional(ctx_r2.HasVectorIndex ? 43 : ctx_r2.HasVectorDBProvider && ctx_r2.HasEmbeddingModel ? 44 : 45);
471
+ i0.ɵɵconditional(ctx_r1.HasVectorIndex ? 39 : ctx_r1.HasVectorDBProvider && ctx_r1.HasEmbeddingModel ? 40 : 41);
477
472
  i0.ɵɵadvance(3);
478
- i0.ɵɵconditional(ctx_r2.HasVectorDBProvider && ctx_r2.HasEmbeddingModel && !ctx_r2.ShowCreateIndexForm ? 46 : -1);
473
+ i0.ɵɵconditional(ctx_r1.HasVectorDBProvider && ctx_r1.HasEmbeddingModel && !ctx_r1.ShowCreateIndexForm ? 42 : -1);
479
474
  i0.ɵɵadvance();
480
- i0.ɵɵconditional(ctx_r2.HasVectorIndex ? 47 : -1);
475
+ i0.ɵɵconditional(ctx_r1.HasVectorIndex ? 43 : -1);
481
476
  i0.ɵɵadvance();
482
- i0.ɵɵconditional(ctx_r2.ShowCreateIndexForm ? 48 : -1);
477
+ i0.ɵɵconditional(ctx_r1.ShowCreateIndexForm ? 44 : -1);
483
478
  } }
484
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_5_Template(rf, ctx) { if (rf & 1) {
485
- i0.ɵɵelement(0, "mj-loading", 81);
479
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
480
+ i0.ɵɵelement(0, "mj-loading", 84);
486
481
  } }
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);
482
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
483
+ i0.ɵɵelementStart(0, "div", 85);
484
+ i0.ɵɵelement(1, "i", 86);
485
+ i0.ɵɵelementStart(2, "h3", 87);
491
486
  i0.ɵɵtext(3, "No Searchable Entities Found");
492
487
  i0.ɵɵelementEnd();
493
- i0.ɵɵelementStart(4, "p", 85);
488
+ i0.ɵɵelementStart(4, "p", 88);
494
489
  i0.ɵɵtext(5, "No entities with text fields were discovered. Ensure your database schema includes entities with varchar/nvarchar columns.");
495
490
  i0.ɵɵelementEnd()();
496
491
  } }
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);
492
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_For_8_Template(rf, ctx) { if (rf & 1) {
493
+ i0.ɵɵelementStart(0, "span", 100);
499
494
  i0.ɵɵtext(1);
500
495
  i0.ɵɵelementEnd();
501
496
  } if (rf & 2) {
@@ -503,9 +498,9 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Condition
503
498
  i0.ɵɵadvance();
504
499
  i0.ɵɵtextInterpolate(field_r18);
505
500
  } }
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);
501
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_Conditional_13_Template(rf, ctx) { if (rf & 1) {
502
+ i0.ɵɵelementStart(0, "span", 104);
503
+ i0.ɵɵelement(1, "i", 105);
509
504
  i0.ɵɵtext(2);
510
505
  i0.ɵɵelementEnd();
511
506
  } if (rf & 2) {
@@ -513,23 +508,23 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Condition
513
508
  i0.ɵɵadvance(2);
514
509
  i0.ɵɵtextInterpolate1(" ", entity_r17.SnippetField, " ");
515
510
  } }
516
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Template(rf, ctx) { if (rf & 1) {
511
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_Template(rf, ctx) { if (rf & 1) {
517
512
  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)); });
513
+ i0.ɵɵelementStart(0, "div", 95)(1, "div", 96)(2, "input", 22);
514
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_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); });
515
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_Template_input_change_2_listener() { const entity_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnFTSEntityToggled(entity_r17)); });
521
516
  i0.ɵɵelementEnd()();
522
- i0.ɵɵelementStart(3, "div", 94)(4, "span", 95);
517
+ i0.ɵɵelementStart(3, "div", 97)(4, "span", 98);
523
518
  i0.ɵɵtext(5);
524
519
  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);
520
+ i0.ɵɵelementStart(6, "div", 99);
521
+ i0.ɵɵrepeaterCreate(7, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_For_8_Template, 2, 1, "span", 100, i0.ɵɵrepeaterTrackByIdentity);
527
522
  i0.ɵɵelementEnd()();
528
- i0.ɵɵelementStart(9, "div", 98)(10, "span", 99);
529
- i0.ɵɵelement(11, "i", 100);
523
+ i0.ɵɵelementStart(9, "div", 101)(10, "span", 102);
524
+ i0.ɵɵelement(11, "i", 103);
530
525
  i0.ɵɵtext(12);
531
526
  i0.ɵɵelementEnd();
532
- i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_For_7_Conditional_13_Template, 3, 1, "span", 101);
527
+ i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_Conditional_13_Template, 3, 1, "span", 104);
533
528
  i0.ɵɵelementEnd()();
534
529
  } if (rf & 2) {
535
530
  const entity_r17 = ctx.$implicit;
@@ -545,42 +540,37 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Condition
545
540
  i0.ɵɵadvance();
546
541
  i0.ɵɵconditional(entity_r17.SnippetField !== entity_r17.TitleField ? 13 : -1);
547
542
  } }
548
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
543
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_Template(rf, ctx) { if (rf & 1) {
549
544
  const _r15 = i0.ɵɵgetCurrentView();
550
- i0.ɵɵelementStart(0, "div", 86)(1, "div", 87)(2, "span", 88);
545
+ i0.ɵɵelementStart(0, "div", 89)(1, "div", 90)(2, "span", 91);
551
546
  i0.ɵɵtext(3);
552
547
  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); });
548
+ i0.ɵɵelementStart(4, "input", 92);
549
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.FTSFilterText, $event) || (ctx_r1.FTSFilterText = $event); return i0.ɵɵresetView($event); });
555
550
  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);
551
+ i0.ɵɵelementStart(5, "div", 93);
552
+ i0.ɵɵrepeaterCreate(6, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_For_7_Template, 14, 6, "div", 94, _forTrack1);
558
553
  i0.ɵɵelementEnd();
559
554
  } if (rf & 2) {
560
- const ctx_r2 = i0.ɵɵnextContext(3);
555
+ const ctx_r1 = i0.ɵɵnextContext(3);
561
556
  i0.ɵɵadvance(3);
562
- i0.ɵɵtextInterpolate2("", ctx_r2.EnabledFTSCount, " of ", ctx_r2.FTSEntities.length, " entities enabled for search");
557
+ i0.ɵɵtextInterpolate2("", ctx_r1.EnabledFTSCount, " of ", ctx_r1.FTSEntities.length, " entities enabled for search");
563
558
  i0.ɵɵadvance();
564
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.FTSFilterText);
559
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.FTSFilterText);
565
560
  i0.ɵɵadvance(2);
566
- i0.ɵɵrepeater(ctx_r2.FilteredFTSEntities);
561
+ i0.ɵɵrepeater(ctx_r1.FilteredFTSEntities);
567
562
  } }
568
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
569
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
570
- i0.ɵɵtext(2, "Full-Text Search Entities");
571
- i0.ɵɵelementEnd();
572
- i0.ɵɵelementStart(3, "p", 13);
573
- i0.ɵɵtext(4, "Configure which entities are included in full-text search. Entities with text fields (Name, Description, etc.) are automatically discovered.");
574
- 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);
563
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Template(rf, ctx) { if (rf & 1) {
564
+ i0.ɵɵelementStart(0, "div", 14);
565
+ i0.ɵɵconditionalCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_1_Template, 1, 0, "mj-loading", 84)(2, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_2_Template, 6, 0, "div", 85)(3, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Conditional_3_Template, 8, 3);
576
566
  i0.ɵɵelementEnd();
577
567
  } if (rf & 2) {
578
- const ctx_r2 = i0.ɵɵnextContext(2);
579
- i0.ɵɵadvance(5);
580
- i0.ɵɵconditional(ctx_r2.IsLoadingFTSEntities ? 5 : ctx_r2.FTSEntities.length === 0 ? 6 : 7);
568
+ const ctx_r1 = i0.ɵɵnextContext(2);
569
+ i0.ɵɵadvance();
570
+ i0.ɵɵconditional(ctx_r1.IsLoadingFTSEntities ? 1 : ctx_r1.FTSEntities.length === 0 ? 2 : 3);
581
571
  } }
582
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Conditional_5_For_17_Template(rf, ctx) { if (rf & 1) {
583
- i0.ɵɵelementStart(0, "span", 56);
572
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
573
+ i0.ɵɵelementStart(0, "span", 59);
584
574
  i0.ɵɵtext(1);
585
575
  i0.ɵɵelementEnd();
586
576
  } if (rf & 2) {
@@ -588,136 +578,125 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Condition
588
578
  i0.ɵɵadvance();
589
579
  i0.ɵɵtextInterpolate(model_r19.Name);
590
580
  } }
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);
581
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
582
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 23)(2, "div", 24)(3, "span", 20);
593
583
  i0.ɵɵtext(4, "Active Model");
594
584
  i0.ɵɵelementEnd();
595
- i0.ɵɵelementStart(5, "span", 18);
585
+ i0.ɵɵelementStart(5, "span", 21);
596
586
  i0.ɵɵtext(6, "Currently selected embedding model");
597
587
  i0.ɵɵelementEnd()();
598
- i0.ɵɵelementStart(7, "span", 103);
588
+ i0.ɵɵelementStart(7, "span", 106);
599
589
  i0.ɵɵtext(8);
600
590
  i0.ɵɵelementEnd()();
601
- i0.ɵɵelementStart(9, "div", 20)(10, "div", 21)(11, "span", 17);
591
+ i0.ɵɵelementStart(9, "div", 23)(10, "div", 24)(11, "span", 20);
602
592
  i0.ɵɵtext(12, "Available Models");
603
593
  i0.ɵɵelementEnd();
604
- i0.ɵɵelementStart(13, "span", 18);
594
+ i0.ɵɵelementStart(13, "span", 21);
605
595
  i0.ɵɵtext(14);
606
596
  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);
597
+ i0.ɵɵelementStart(15, "div", 58);
598
+ i0.ɵɵrepeaterCreate(16, KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Conditional_1_For_17_Template, 2, 1, "span", 59, _forTrack0);
609
599
  i0.ɵɵelementEnd()()();
610
- i0.ɵɵelementStart(18, "p", 104);
611
- i0.ɵɵelement(19, "i", 105);
600
+ i0.ɵɵelementStart(18, "p", 107);
601
+ i0.ɵɵelement(19, "i", 108);
612
602
  i0.ɵɵtext(20, " Manage embedding models in the AI Dashboard > Models tab. ");
613
603
  i0.ɵɵelementEnd();
614
604
  } if (rf & 2) {
615
- const ctx_r2 = i0.ɵɵnextContext(3);
605
+ const ctx_r1 = i0.ɵɵnextContext(3);
616
606
  i0.ɵɵadvance(8);
617
- i0.ɵɵtextInterpolate(ctx_r2.EmbeddingModelName);
607
+ i0.ɵɵtextInterpolate(ctx_r1.EmbeddingModelName);
618
608
  i0.ɵɵadvance(6);
619
- i0.ɵɵtextInterpolate1("", ctx_r2.EmbeddingModels.length, " embedding model(s) configured");
609
+ i0.ɵɵtextInterpolate1("", ctx_r1.EmbeddingModels.length, " embedding model(s) configured");
620
610
  i0.ɵɵadvance(2);
621
- i0.ɵɵrepeater(ctx_r2.EmbeddingModels);
611
+ i0.ɵɵrepeater(ctx_r1.EmbeddingModels);
622
612
  } }
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);
613
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
614
+ i0.ɵɵelementStart(0, "div", 85);
615
+ i0.ɵɵelement(1, "i", 109);
616
+ i0.ɵɵelementStart(2, "h3", 87);
627
617
  i0.ɵɵtext(3, "No Embedding Models Found");
628
618
  i0.ɵɵelementEnd();
629
- i0.ɵɵelementStart(4, "p", 85);
619
+ i0.ɵɵelementStart(4, "p", 88);
630
620
  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
621
  i0.ɵɵelementEnd()();
632
622
  } }
633
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
634
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
635
- i0.ɵɵtext(2, "Embedding Models");
636
- i0.ɵɵelementEnd();
637
- i0.ɵɵelementStart(3, "p", 13);
638
- i0.ɵɵtext(4, "AI models used for generating vector embeddings from text.");
639
- 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);
623
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Template(rf, ctx) { if (rf & 1) {
624
+ i0.ɵɵelementStart(0, "div", 14);
625
+ i0.ɵɵconditionalCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Conditional_1_Template, 21, 2)(2, KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Conditional_2_Template, 6, 0, "div", 85);
641
626
  i0.ɵɵelementEnd();
642
627
  } if (rf & 2) {
643
- const ctx_r2 = i0.ɵɵnextContext(2);
644
- i0.ɵɵadvance(5);
645
- i0.ɵɵconditional(ctx_r2.HasEmbeddingModel ? 5 : 6);
628
+ const ctx_r1 = i0.ɵɵnextContext(2);
629
+ i0.ɵɵadvance();
630
+ i0.ɵɵconditional(ctx_r1.HasEmbeddingModel ? 1 : 2);
646
631
  } }
647
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
632
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template(rf, ctx) { if (rf & 1) {
648
633
  const _r20 = i0.ɵɵgetCurrentView();
649
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
650
- i0.ɵɵtext(2, "Scoring Thresholds");
651
- i0.ɵɵelementEnd();
652
- i0.ɵɵelementStart(3, "p", 13);
653
- i0.ɵɵtext(4, "Set the scoring thresholds used by search, duplicate detection, and autotagging.");
634
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 17)(2, "div", 23)(3, "div", 24)(4, "span", 20);
635
+ i0.ɵɵtext(5, "Duplicate Absolute Match");
654
636
  i0.ɵɵelementEnd();
655
- i0.ɵɵelementStart(5, "div", 14)(6, "div", 20)(7, "div", 21)(8, "span", 17);
656
- i0.ɵɵtext(9, "Duplicate Absolute Match");
657
- i0.ɵɵelementEnd();
658
- i0.ɵɵelementStart(10, "span", 18);
659
- i0.ɵɵtext(11);
637
+ i0.ɵɵelementStart(6, "span", 21);
638
+ i0.ɵɵtext(7);
660
639
  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()); });
640
+ i0.ɵɵelementStart(8, "input", 110);
641
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.DuplicateAbsolute, $event) || (ctx_r1.ThresholdSettings.DuplicateAbsolute = $event); return i0.ɵɵresetView($event); });
642
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_input_8_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
664
643
  i0.ɵɵelementEnd()();
665
- i0.ɵɵelementStart(13, "div", 20)(14, "div", 21)(15, "span", 17);
666
- i0.ɵɵtext(16, "Duplicate Potential Match");
644
+ i0.ɵɵelementStart(9, "div", 23)(10, "div", 24)(11, "span", 20);
645
+ i0.ɵɵtext(12, "Duplicate Potential Match");
667
646
  i0.ɵɵelementEnd();
668
- i0.ɵɵelementStart(17, "span", 18);
669
- i0.ɵɵtext(18);
647
+ i0.ɵɵelementStart(13, "span", 21);
648
+ i0.ɵɵtext(14);
670
649
  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()); });
650
+ i0.ɵɵelementStart(15, "input", 111);
651
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_15_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.DuplicatePotential, $event) || (ctx_r1.ThresholdSettings.DuplicatePotential = $event); return i0.ɵɵresetView($event); });
652
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_input_15_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
674
653
  i0.ɵɵelementEnd()();
675
- i0.ɵɵelementStart(20, "div", 20)(21, "div", 21)(22, "span", 17);
676
- i0.ɵɵtext(23, "Search Relevance");
654
+ i0.ɵɵelementStart(16, "div", 23)(17, "div", 24)(18, "span", 20);
655
+ i0.ɵɵtext(19, "Search Relevance");
677
656
  i0.ɵɵelementEnd();
678
- i0.ɵɵelementStart(24, "span", 18);
679
- i0.ɵɵtext(25);
657
+ i0.ɵɵelementStart(20, "span", 21);
658
+ i0.ɵɵtext(21);
680
659
  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()); });
660
+ i0.ɵɵelementStart(22, "input", 112);
661
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.SearchRelevance, $event) || (ctx_r1.ThresholdSettings.SearchRelevance = $event); return i0.ɵɵresetView($event); });
662
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_input_22_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
684
663
  i0.ɵɵelementEnd()();
685
- i0.ɵɵelementStart(27, "div", 20)(28, "div", 21)(29, "span", 17);
686
- i0.ɵɵtext(30, "Autotag Confidence");
664
+ i0.ɵɵelementStart(23, "div", 23)(24, "div", 24)(25, "span", 20);
665
+ i0.ɵɵtext(26, "Autotag Confidence");
687
666
  i0.ɵɵelementEnd();
688
- i0.ɵɵelementStart(31, "span", 18);
689
- i0.ɵɵtext(32);
667
+ i0.ɵɵelementStart(27, "span", 21);
668
+ i0.ɵɵtext(28);
690
669
  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()); });
670
+ i0.ɵɵelementStart(29, "input", 111);
671
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_ngModelChange_29_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ThresholdSettings.AutotagConfidence, $event) || (ctx_r1.ThresholdSettings.AutotagConfidence = $event); return i0.ɵɵresetView($event); });
672
+ i0.ɵɵlistener("input", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template_input_input_29_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSettingChanged()); });
694
673
  i0.ɵɵelementEnd()()()();
695
674
  } if (rf & 2) {
696
- const ctx_r2 = i0.ɵɵnextContext(2);
697
- i0.ɵɵadvance(11);
698
- i0.ɵɵtextInterpolate1("Score above which duplicates are auto-confirmed (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.DuplicateAbsolute), ")");
675
+ const ctx_r1 = i0.ɵɵnextContext(2);
676
+ i0.ɵɵadvance(7);
677
+ i0.ɵɵtextInterpolate1("Score above which duplicates are auto-confirmed (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.DuplicateAbsolute), ")");
699
678
  i0.ɵɵadvance();
700
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.DuplicateAbsolute);
679
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.DuplicateAbsolute);
701
680
  i0.ɵɵadvance(6);
702
- i0.ɵɵtextInterpolate1("Score above which duplicates are flagged for review (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.DuplicatePotential), ")");
681
+ i0.ɵɵtextInterpolate1("Score above which duplicates are flagged for review (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.DuplicatePotential), ")");
703
682
  i0.ɵɵadvance();
704
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.DuplicatePotential);
683
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.DuplicatePotential);
705
684
  i0.ɵɵadvance(6);
706
- i0.ɵɵtextInterpolate1("Minimum score for search results (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.SearchRelevance), ")");
685
+ i0.ɵɵtextInterpolate1("Minimum score for search results (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.SearchRelevance), ")");
707
686
  i0.ɵɵadvance();
708
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.SearchRelevance);
687
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.SearchRelevance);
709
688
  i0.ɵɵadvance(6);
710
- i0.ɵɵtextInterpolate1("Minimum confidence for accepting auto-generated tags (", ctx_r2.FormatThreshold(ctx_r2.ThresholdSettings.AutotagConfidence), ")");
689
+ i0.ɵɵtextInterpolate1("Minimum confidence for accepting auto-generated tags (", ctx_r1.FormatThreshold(ctx_r1.ThresholdSettings.AutotagConfidence), ")");
711
690
  i0.ɵɵadvance();
712
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.ThresholdSettings.AutotagConfidence);
691
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ThresholdSettings.AutotagConfidence);
713
692
  } }
714
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_14_Template(rf, ctx) { if (rf & 1) {
715
- i0.ɵɵelementStart(0, "div", 115);
693
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_9_Template(rf, ctx) { if (rf & 1) {
694
+ i0.ɵɵelementStart(0, "div", 117);
716
695
  i0.ɵɵtext(1, "Loading\u2026");
717
696
  i0.ɵɵelementEnd();
718
697
  } }
719
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_15_Template(rf, ctx) { if (rf & 1) {
720
- i0.ɵɵelementStart(0, "div", 116);
698
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_10_Template(rf, ctx) { if (rf & 1) {
699
+ i0.ɵɵelementStart(0, "div", 118);
721
700
  i0.ɵɵtext(1, " No scopes defined yet. Click ");
722
701
  i0.ɵɵelementStart(2, "strong");
723
702
  i0.ɵɵtext(3, "New");
@@ -725,30 +704,30 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
725
704
  i0.ɵɵtext(4, " to create one. ");
726
705
  i0.ɵɵelementEnd();
727
706
  } }
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);
707
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
708
+ i0.ɵɵelementStart(0, "span", 125);
730
709
  i0.ɵɵtext(1, "Global");
731
710
  i0.ɵɵelementEnd();
732
711
  } }
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);
712
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
713
+ i0.ɵɵelementStart(0, "span", 125);
735
714
  i0.ɵɵtext(1, "Default");
736
715
  i0.ɵɵelementEnd();
737
716
  } }
738
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_16_For_1_Template(rf, ctx) { if (rf & 1) {
717
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Template(rf, ctx) { if (rf & 1) {
739
718
  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);
719
+ i0.ɵɵelementStart(0, "button", 122);
720
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Template_button_click_0_listener() { const s_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectScope(s_r23.ID)); });
721
+ i0.ɵɵelement(1, "i", 123);
722
+ i0.ɵɵelementStart(2, "span", 124);
744
723
  i0.ɵɵtext(3);
745
724
  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);
725
+ i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Conditional_4_Template, 2, 0, "span", 125)(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Conditional_5_Template, 2, 0, "span", 125);
747
726
  i0.ɵɵelementEnd();
748
727
  } if (rf & 2) {
749
728
  const s_r23 = ctx.$implicit;
750
- const ctx_r2 = i0.ɵɵnextContext(4);
751
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeID === s_r23.ID);
729
+ const ctx_r1 = i0.ɵɵnextContext(4);
730
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeID === s_r23.ID);
752
731
  i0.ɵɵadvance();
753
732
  i0.ɵɵclassMap(s_r23.Icon || "fa-solid fa-filter");
754
733
  i0.ɵɵadvance(2);
@@ -756,143 +735,143 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
756
735
  i0.ɵɵadvance();
757
736
  i0.ɵɵconditional(s_r23.IsGlobal ? 4 : s_r23.IsDefault ? 5 : -1);
758
737
  } }
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);
738
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_Template(rf, ctx) { if (rf & 1) {
739
+ i0.ɵɵrepeaterCreate(0, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_For_1_Template, 6, 6, "button", 121, _forTrack0);
761
740
  } if (rf & 2) {
762
- const ctx_r2 = i0.ɵɵnextContext(3);
763
- i0.ɵɵrepeater(ctx_r2.SearchScopes);
741
+ const ctx_r1 = i0.ɵɵnextContext(3);
742
+ i0.ɵɵrepeater(ctx_r1.SearchScopes);
764
743
  } }
765
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
744
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_14_Template(rf, ctx) { if (rf & 1) {
766
745
  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);
746
+ i0.ɵɵelementStart(0, "button", 138);
747
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenActiveScopeFullForm()); });
748
+ i0.ɵɵelement(1, "i", 139);
770
749
  i0.ɵɵtext(2, " Open Full Form ");
771
750
  i0.ɵɵelementEnd();
772
751
  } }
773
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
752
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_18_Template(rf, ctx) { if (rf & 1) {
774
753
  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);
754
+ i0.ɵɵelementStart(0, "button", 140);
755
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.DeleteActiveScope()); });
756
+ i0.ɵɵelement(1, "i", 141);
778
757
  i0.ɵɵelementEnd();
779
758
  } }
780
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_19_Template(rf, ctx) { if (rf & 1) {
759
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template(rf, ctx) { if (rf & 1) {
781
760
  const _r27 = i0.ɵɵgetCurrentView();
782
- i0.ɵɵelementStart(0, "div", 131)(1, "label")(2, "span");
761
+ i0.ɵɵelementStart(0, "div", 133)(1, "label")(2, "span");
783
762
  i0.ɵɵtext(3, "Name");
784
763
  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); });
764
+ i0.ɵɵelementStart(4, "input", 142);
765
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_input_change_4_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Name = $event.target.value); });
787
766
  i0.ɵɵelementEnd()();
788
767
  i0.ɵɵelementStart(5, "label")(6, "span");
789
768
  i0.ɵɵtext(7, "Icon (Font Awesome class)");
790
769
  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); });
770
+ i0.ɵɵelementStart(8, "input", 142);
771
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_input_change_8_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Icon = $event.target.value); });
793
772
  i0.ɵɵelementEnd()();
794
- i0.ɵɵelementStart(9, "label", 141)(10, "span");
773
+ i0.ɵɵelementStart(9, "label", 143)(10, "span");
795
774
  i0.ɵɵtext(11, "Description");
796
775
  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); });
776
+ i0.ɵɵelementStart(12, "textarea", 144);
777
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_textarea_change_12_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Description = $event.target.value); });
799
778
  i0.ɵɵelementEnd()();
800
779
  i0.ɵɵelementStart(13, "label")(14, "span");
801
780
  i0.ɵɵtext(15, "Status");
802
781
  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);
782
+ i0.ɵɵelementStart(16, "select", 145);
783
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_select_change_16_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.Status = $event.target.value); });
784
+ i0.ɵɵelementStart(17, "option", 146);
806
785
  i0.ɵɵtext(18, "Active");
807
786
  i0.ɵɵelementEnd();
808
- i0.ɵɵelementStart(19, "option", 145);
787
+ i0.ɵɵelementStart(19, "option", 147);
809
788
  i0.ɵɵtext(20, "Inactive");
810
789
  i0.ɵɵelementEnd()()();
811
790
  i0.ɵɵelementStart(21, "label")(22, "span");
812
791
  i0.ɵɵtext(23, "Start at");
813
792
  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)); });
793
+ i0.ɵɵelementStart(24, "input", 148);
794
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_input_change_24_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SetScopeDate(ctx_r1.ActiveScope, "StartAt", $event.target.value)); });
816
795
  i0.ɵɵelementEnd()();
817
796
  i0.ɵɵelementStart(25, "label")(26, "span");
818
797
  i0.ɵɵtext(27, "End at");
819
798
  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)); });
799
+ i0.ɵɵelementStart(28, "input", 148);
800
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_input_change_28_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SetScopeDate(ctx_r1.ActiveScope, "EndAt", $event.target.value)); });
822
801
  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); });
802
+ i0.ɵɵelementStart(29, "label", 149)(30, "input", 150);
803
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_input_change_30_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.IsDefault = $event.target.checked); });
825
804
  i0.ɵɵelementEnd();
826
805
  i0.ɵɵelementStart(31, "span");
827
806
  i0.ɵɵtext(32, "Default scope \u2014 picked when users/agents don't specify one");
828
807
  i0.ɵɵelementEnd()();
829
- i0.ɵɵelementStart(33, "label", 147);
830
- i0.ɵɵelement(34, "input", 149);
808
+ i0.ɵɵelementStart(33, "label", 149);
809
+ i0.ɵɵelement(34, "input", 151);
831
810
  i0.ɵɵelementStart(35, "span");
832
811
  i0.ɵɵtext(36, "Global \u2014 reserved for the built-in Global scope (read-only)");
833
812
  i0.ɵɵelementEnd()();
834
- i0.ɵɵelementStart(37, "label", 141)(38, "span");
813
+ i0.ɵɵelementStart(37, "label", 143)(38, "span");
835
814
  i0.ɵɵtext(39, "Scope Config (JSON)");
836
815
  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); });
816
+ i0.ɵɵelementStart(40, "textarea", 152);
817
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_textarea_change_40_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.ScopeConfig = $event.target.value); });
839
818
  i0.ɵɵelementEnd()();
840
- i0.ɵɵelementStart(41, "label", 141)(42, "span");
819
+ i0.ɵɵelementStart(41, "label", 143)(42, "span");
841
820
  i0.ɵɵtext(43, "Search Context Config (JSON)");
842
821
  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); });
822
+ i0.ɵɵelementStart(44, "textarea", 152);
823
+ i0.ɵɵlistener("change", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template_textarea_change_44_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ActiveScope.SearchContextConfig = $event.target.value); });
845
824
  i0.ɵɵelementEnd()()();
846
825
  } if (rf & 2) {
847
- const ctx_r2 = i0.ɵɵnextContext(4);
826
+ const ctx_r1 = i0.ɵɵnextContext(4);
848
827
  i0.ɵɵadvance(4);
849
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Name);
828
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Name);
850
829
  i0.ɵɵadvance(4);
851
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Icon || "");
830
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Icon || "");
852
831
  i0.ɵɵadvance(4);
853
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Description || "");
832
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Description || "");
854
833
  i0.ɵɵadvance(4);
855
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.Status);
834
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.Status);
856
835
  i0.ɵɵadvance(8);
857
- i0.ɵɵproperty("value", ctx_r2.FormatScopeDate(ctx_r2.ActiveScope.StartAt));
836
+ i0.ɵɵproperty("value", ctx_r1.FormatScopeDate(ctx_r1.ActiveScope.StartAt));
858
837
  i0.ɵɵadvance(4);
859
- i0.ɵɵproperty("value", ctx_r2.FormatScopeDate(ctx_r2.ActiveScope.EndAt));
838
+ i0.ɵɵproperty("value", ctx_r1.FormatScopeDate(ctx_r1.ActiveScope.EndAt));
860
839
  i0.ɵɵadvance(2);
861
- i0.ɵɵproperty("checked", ctx_r2.ActiveScope.IsDefault)("disabled", ctx_r2.ActiveScope.IsGlobal);
840
+ i0.ɵɵproperty("checked", ctx_r1.ActiveScope.IsDefault)("disabled", ctx_r1.ActiveScope.IsGlobal);
862
841
  i0.ɵɵadvance(4);
863
- i0.ɵɵproperty("checked", ctx_r2.ActiveScope.IsGlobal);
842
+ i0.ɵɵproperty("checked", ctx_r1.ActiveScope.IsGlobal);
864
843
  i0.ɵɵadvance(6);
865
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.ScopeConfig || "");
844
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.ScopeConfig || "");
866
845
  i0.ɵɵadvance(4);
867
- i0.ɵɵproperty("value", ctx_r2.ActiveScope.SearchContextConfig || "");
846
+ i0.ɵɵproperty("value", ctx_r1.ActiveScope.SearchContextConfig || "");
868
847
  } }
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);
848
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_20_Template(rf, ctx) { if (rf & 1) {
849
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 134);
871
850
  } if (rf & 2) {
872
- const ctx_r2 = i0.ɵɵnextContext(4);
873
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeProviderColumns);
851
+ const ctx_r1 = i0.ɵɵnextContext(4);
852
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeProviderColumns);
874
853
  } }
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);
854
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_21_Template(rf, ctx) { if (rf & 1) {
855
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 135);
877
856
  } if (rf & 2) {
878
- const ctx_r2 = i0.ɵɵnextContext(4);
879
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeExternalIndexColumns);
857
+ const ctx_r1 = i0.ɵɵnextContext(4);
858
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeExternalIndexColumns);
880
859
  } }
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);
860
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_22_Template(rf, ctx) { if (rf & 1) {
861
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 136);
883
862
  } if (rf & 2) {
884
- const ctx_r2 = i0.ɵɵnextContext(4);
885
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeEntityColumns);
863
+ const ctx_r1 = i0.ɵɵnextContext(4);
864
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeEntityColumns);
886
865
  } }
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);
866
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_23_Template(rf, ctx) { if (rf & 1) {
867
+ i0.ɵɵelement(0, "mj-search-scope-child-grid", 137);
889
868
  } if (rf & 2) {
890
- const ctx_r2 = i0.ɵɵnextContext(4);
891
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopeStorageColumns);
869
+ const ctx_r1 = i0.ɵɵnextContext(4);
870
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopeStorageColumns);
892
871
  } }
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);
872
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_24_Template(rf, ctx) { if (rf & 1) {
873
+ i0.ɵɵelementStart(0, "div", 153)(1, "p", 154);
874
+ i0.ɵɵelement(2, "i", 155);
896
875
  i0.ɵɵelementStart(3, "strong");
897
876
  i0.ɵɵtext(4, "Per-user / per-role grants on this scope.");
898
877
  i0.ɵɵelementEnd();
@@ -926,86 +905,86 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
926
905
  i0.ɵɵelementEnd();
927
906
  i0.ɵɵtext(26, " via the resolver \u2014 see the spec for the full resolution order. ");
928
907
  i0.ɵɵelementEnd()();
929
- i0.ɵɵelement(27, "mj-search-scope-child-grid", 154);
908
+ i0.ɵɵelement(27, "mj-search-scope-child-grid", 156);
930
909
  } if (rf & 2) {
931
- const ctx_r2 = i0.ɵɵnextContext(4);
910
+ const ctx_r1 = i0.ɵɵnextContext(4);
932
911
  i0.ɵɵadvance(27);
933
- i0.ɵɵproperty("ParentID", ctx_r2.ActiveScopeID)("Columns", ctx_r2.ScopePermissionColumns);
912
+ i0.ɵɵproperty("ParentID", ctx_r1.ActiveScopeID)("Columns", ctx_r1.ScopePermissionColumns);
934
913
  } }
935
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Template(rf, ctx) { if (rf & 1) {
914
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template(rf, ctx) { if (rf & 1) {
936
915
  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")); });
916
+ i0.ɵɵelementStart(0, "div", 126)(1, "button", 127);
917
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("definition")); });
939
918
  i0.ɵɵtext(2, "Definition");
940
919
  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")); });
920
+ i0.ɵɵelementStart(3, "button", 127);
921
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("providers")); });
943
922
  i0.ɵɵtext(4, "Providers");
944
923
  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")); });
924
+ i0.ɵɵelementStart(5, "button", 127);
925
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("indexes")); });
947
926
  i0.ɵɵtext(6, "External Indexes");
948
927
  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")); });
928
+ i0.ɵɵelementStart(7, "button", 127);
929
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("entities")); });
951
930
  i0.ɵɵtext(8, "Entities");
952
931
  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")); });
932
+ i0.ɵɵelementStart(9, "button", 127);
933
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("storage")); });
955
934
  i0.ɵɵtext(10, "Storage");
956
935
  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")); });
936
+ i0.ɵɵelementStart(11, "button", 127);
937
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectScopeTab("permissions")); });
959
938
  i0.ɵɵtext(12, "Permissions");
960
939
  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);
940
+ i0.ɵɵelement(13, "div", 128);
941
+ i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_14_Template, 3, 0, "button", 129);
942
+ i0.ɵɵelementStart(15, "button", 130);
943
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SaveActiveScope()); });
944
+ i0.ɵɵelement(16, "i", 131);
966
945
  i0.ɵɵtext(17, " Save ");
967
946
  i0.ɵɵelementEnd();
968
- i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_18_Conditional_18_Template, 2, 0, "button", 130);
947
+ i0.ɵɵconditionalCreate(18, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_18_Template, 2, 0, "button", 132);
969
948
  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);
949
+ i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_19_Template, 45, 11, "div", 133);
950
+ i0.ɵɵconditionalCreate(20, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_20_Template, 1, 2, "mj-search-scope-child-grid", 134);
951
+ i0.ɵɵconditionalCreate(21, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_21_Template, 1, 2, "mj-search-scope-child-grid", 135);
952
+ i0.ɵɵconditionalCreate(22, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_22_Template, 1, 2, "mj-search-scope-child-grid", 136);
953
+ i0.ɵɵconditionalCreate(23, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_23_Template, 1, 2, "mj-search-scope-child-grid", 137);
954
+ i0.ɵɵconditionalCreate(24, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Conditional_24_Template, 28, 2);
976
955
  } if (rf & 2) {
977
- const ctx_r2 = i0.ɵɵnextContext(3);
956
+ const ctx_r1 = i0.ɵɵnextContext(3);
978
957
  i0.ɵɵadvance();
979
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "definition");
958
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "definition");
980
959
  i0.ɵɵadvance(2);
981
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "providers");
960
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "providers");
982
961
  i0.ɵɵadvance(2);
983
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "indexes");
962
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "indexes");
984
963
  i0.ɵɵadvance(2);
985
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "entities");
964
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "entities");
986
965
  i0.ɵɵadvance(2);
987
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "storage");
966
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "storage");
988
967
  i0.ɵɵadvance(2);
989
- i0.ɵɵclassProp("active", ctx_r2.ActiveScopeTab === "permissions");
968
+ i0.ɵɵclassProp("active", ctx_r1.ActiveScopeTab === "permissions");
990
969
  i0.ɵɵadvance(3);
991
- i0.ɵɵconditional(ctx_r2.ActiveScope.ID ? 14 : -1);
970
+ i0.ɵɵconditional(ctx_r1.ActiveScope.ID ? 14 : -1);
992
971
  i0.ɵɵadvance(4);
993
- i0.ɵɵconditional(!ctx_r2.ActiveScope.IsGlobal ? 18 : -1);
972
+ i0.ɵɵconditional(!ctx_r1.ActiveScope.IsGlobal ? 18 : -1);
994
973
  i0.ɵɵadvance();
995
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "definition" ? 19 : -1);
974
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "definition" ? 19 : -1);
996
975
  i0.ɵɵadvance();
997
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "providers" ? 20 : -1);
976
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "providers" ? 20 : -1);
998
977
  i0.ɵɵadvance();
999
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "indexes" ? 21 : -1);
978
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "indexes" ? 21 : -1);
1000
979
  i0.ɵɵadvance();
1001
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "entities" ? 22 : -1);
980
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "entities" ? 22 : -1);
1002
981
  i0.ɵɵadvance();
1003
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "storage" ? 23 : -1);
982
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "storage" ? 23 : -1);
1004
983
  i0.ɵɵadvance();
1005
- i0.ɵɵconditional(ctx_r2.ActiveScopeTab === "permissions" ? 24 : -1);
984
+ i0.ɵɵconditional(ctx_r1.ActiveScopeTab === "permissions" ? 24 : -1);
1006
985
  } }
1007
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1008
- i0.ɵɵelementStart(0, "div", 118);
986
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_14_Template(rf, ctx) { if (rf & 1) {
987
+ i0.ɵɵelementStart(0, "div", 120);
1009
988
  i0.ɵɵtext(1, " Select a scope on the left, or click ");
1010
989
  i0.ɵɵelementStart(2, "strong");
1011
990
  i0.ɵɵtext(3, "New");
@@ -1013,54 +992,47 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Condition
1013
992
  i0.ɵɵtext(4, " to create one. ");
1014
993
  i0.ɵɵelementEnd();
1015
994
  } }
1016
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
995
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1017
996
  const _r21 = i0.ɵɵgetCurrentView();
1018
- i0.ɵɵelementStart(0, "div", 8)(1, "h2", 12);
1019
- i0.ɵɵelement(2, "i", 110);
1020
- i0.ɵɵtext(3, " Search Scopes");
1021
- i0.ɵɵelementEnd();
1022
- i0.ɵɵelementStart(4, "p", 13);
1023
- 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
- i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(6, "div", 111)(7, "aside", 112)(8, "div", 113)(9, "span");
1026
- i0.ɵɵtext(10);
997
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 113)(2, "aside", 114)(3, "div", 115)(4, "span");
998
+ i0.ɵɵtext(5);
1027
999
  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);
1031
- i0.ɵɵtext(13, " New ");
1000
+ i0.ɵɵelementStart(6, "button", 116);
1001
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CreateNewScope()); });
1002
+ i0.ɵɵelement(7, "i", 61);
1003
+ i0.ɵɵtext(8, " New ");
1032
1004
  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);
1005
+ i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_9_Template, 2, 0, "div", 117)(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_10_Template, 5, 0, "div", 118)(11, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_11_Template, 2, 0);
1034
1006
  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);
1007
+ i0.ɵɵelementStart(12, "section", 119);
1008
+ i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_13_Template, 25, 20)(14, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Conditional_14_Template, 5, 0, "div", 120);
1037
1009
  i0.ɵɵelementEnd()()();
1038
1010
  } if (rf & 2) {
1039
- const ctx_r2 = i0.ɵɵnextContext(2);
1040
- i0.ɵɵadvance(10);
1041
- i0.ɵɵtextInterpolate1("Scopes (", ctx_r2.SearchScopes.length, ")");
1011
+ const ctx_r1 = i0.ɵɵnextContext(2);
1012
+ i0.ɵɵadvance(5);
1013
+ i0.ɵɵtextInterpolate1("Scopes (", ctx_r1.SearchScopes.length, ")");
1042
1014
  i0.ɵɵadvance(4);
1043
- i0.ɵɵconditional(ctx_r2.IsLoadingScopes ? 14 : ctx_r2.SearchScopes.length === 0 ? 15 : 16);
1015
+ i0.ɵɵconditional(ctx_r1.IsLoadingScopes ? 9 : ctx_r1.SearchScopes.length === 0 ? 10 : 11);
1044
1016
  i0.ɵɵadvance(4);
1045
- i0.ɵɵconditional(ctx_r2.ActiveScope ? 18 : 19);
1017
+ i0.ɵɵconditional(ctx_r1.ActiveScope ? 13 : 14);
1046
1018
  } }
1047
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1048
- i0.ɵɵelement(0, "mj-loading", 156);
1019
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1020
+ i0.ɵɵelement(0, "mj-loading", 157);
1049
1021
  } }
1050
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1022
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1051
1023
  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);
1024
+ i0.ɵɵelementStart(0, "button", 159);
1025
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.LoadSearchAnalytics()); });
1026
+ i0.ɵɵelement(1, "i", 160);
1055
1027
  i0.ɵɵtext(2, " Load analytics ");
1056
1028
  i0.ɵɵelementEnd();
1057
1029
  } }
1058
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_37_Template(rf, ctx) { if (rf & 1) {
1059
- i0.ɵɵelementStart(0, "p", 166);
1030
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_37_Template(rf, ctx) { if (rf & 1) {
1031
+ i0.ɵɵelementStart(0, "p", 167);
1060
1032
  i0.ɵɵtext(1, "No runs in the window.");
1061
1033
  i0.ɵɵelementEnd();
1062
1034
  } }
1063
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_38_For_11_Template(rf, ctx) { if (rf & 1) {
1035
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_38_For_11_Template(rf, ctx) { if (rf & 1) {
1064
1036
  i0.ɵɵelementStart(0, "tr")(1, "td");
1065
1037
  i0.ɵɵtext(2);
1066
1038
  i0.ɵɵelementEnd();
@@ -1080,8 +1052,8 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1080
1052
  i0.ɵɵadvance(3);
1081
1053
  i0.ɵɵtextInterpolate1("", s_r30.AvgLatencyMs, "ms");
1082
1054
  } }
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");
1055
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_38_Template(rf, ctx) { if (rf & 1) {
1056
+ i0.ɵɵelementStart(0, "table", 168)(1, "thead")(2, "tr")(3, "th");
1085
1057
  i0.ɵɵtext(4, "Scope");
1086
1058
  i0.ɵɵelementEnd();
1087
1059
  i0.ɵɵelementStart(5, "th");
@@ -1091,19 +1063,19 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1091
1063
  i0.ɵɵtext(8, "Avg latency");
1092
1064
  i0.ɵɵelementEnd()()();
1093
1065
  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);
1066
+ i0.ɵɵrepeaterCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_38_For_11_Template, 8, 5, "tr", null, _forTrack2);
1095
1067
  i0.ɵɵelementEnd()();
1096
1068
  } if (rf & 2) {
1097
- const ctx_r2 = i0.ɵɵnextContext(4);
1069
+ const ctx_r1 = i0.ɵɵnextContext(4);
1098
1070
  i0.ɵɵadvance(10);
1099
- i0.ɵɵrepeater(ctx_r2.AnalyticsTopScopes);
1071
+ i0.ɵɵrepeater(ctx_r1.AnalyticsTopScopes);
1100
1072
  } }
1101
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_41_Template(rf, ctx) { if (rf & 1) {
1102
- i0.ɵɵelementStart(0, "p", 166);
1073
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_41_Template(rf, ctx) { if (rf & 1) {
1074
+ i0.ɵɵelementStart(0, "p", 167);
1103
1075
  i0.ɵɵtext(1, "No rerank invocations in the window.");
1104
1076
  i0.ɵɵelementEnd();
1105
1077
  } }
1106
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_42_For_11_Template(rf, ctx) { if (rf & 1) {
1078
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_42_For_11_Template(rf, ctx) { if (rf & 1) {
1107
1079
  i0.ɵɵelementStart(0, "tr")(1, "td");
1108
1080
  i0.ɵɵtext(2);
1109
1081
  i0.ɵɵelementEnd();
@@ -1124,8 +1096,8 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1124
1096
  i0.ɵɵadvance(3);
1125
1097
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(8, 5, r_r31.TotalCents, "1.0-2"), "\u00A2");
1126
1098
  } }
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");
1099
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_42_Template(rf, ctx) { if (rf & 1) {
1100
+ i0.ɵɵelementStart(0, "table", 168)(1, "thead")(2, "tr")(3, "th");
1129
1101
  i0.ɵɵtext(4, "Reranker");
1130
1102
  i0.ɵɵelementEnd();
1131
1103
  i0.ɵɵelementStart(5, "th");
@@ -1135,19 +1107,19 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1135
1107
  i0.ɵɵtext(8, "Total cents");
1136
1108
  i0.ɵɵelementEnd()()();
1137
1109
  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);
1110
+ i0.ɵɵrepeaterCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_42_For_11_Template, 9, 8, "tr", null, _forTrack3);
1139
1111
  i0.ɵɵelementEnd()();
1140
1112
  } if (rf & 2) {
1141
- const ctx_r2 = i0.ɵɵnextContext(4);
1113
+ const ctx_r1 = i0.ɵɵnextContext(4);
1142
1114
  i0.ɵɵadvance(10);
1143
- i0.ɵɵrepeater(ctx_r2.AnalyticsRerankerSpend);
1115
+ i0.ɵɵrepeater(ctx_r1.AnalyticsRerankerSpend);
1144
1116
  } }
1145
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_45_Template(rf, ctx) { if (rf & 1) {
1146
- i0.ɵɵelementStart(0, "p", 166);
1117
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_45_Template(rf, ctx) { if (rf & 1) {
1118
+ i0.ɵɵelementStart(0, "p", 167);
1147
1119
  i0.ɵɵtext(1, "No failures in the window.");
1148
1120
  i0.ɵɵelementEnd();
1149
1121
  } }
1150
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Conditional_46_For_9_Template(rf, ctx) { if (rf & 1) {
1122
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_46_For_9_Template(rf, ctx) { if (rf & 1) {
1151
1123
  i0.ɵɵelementStart(0, "tr")(1, "td");
1152
1124
  i0.ɵɵtext(2);
1153
1125
  i0.ɵɵelementEnd();
@@ -1162,133 +1134,123 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Condition
1162
1134
  i0.ɵɵadvance(2);
1163
1135
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 2, f_r32.Count));
1164
1136
  } }
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");
1137
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_46_Template(rf, ctx) { if (rf & 1) {
1138
+ i0.ɵɵelementStart(0, "table", 168)(1, "thead")(2, "tr")(3, "th");
1167
1139
  i0.ɵɵtext(4, "Reason");
1168
1140
  i0.ɵɵelementEnd();
1169
1141
  i0.ɵɵelementStart(5, "th");
1170
1142
  i0.ɵɵtext(6, "Count");
1171
1143
  i0.ɵɵelementEnd()()();
1172
1144
  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);
1145
+ i0.ɵɵrepeaterCreate(8, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_46_For_9_Template, 6, 4, "tr", null, _forTrack4);
1174
1146
  i0.ɵɵelementEnd()();
1175
1147
  } if (rf & 2) {
1176
- const ctx_r2 = i0.ɵɵnextContext(4);
1148
+ const ctx_r1 = i0.ɵɵnextContext(4);
1177
1149
  i0.ɵɵadvance(8);
1178
- i0.ɵɵrepeater(ctx_r2.AnalyticsTopFailures);
1150
+ i0.ɵɵrepeater(ctx_r1.AnalyticsTopFailures);
1179
1151
  } }
1180
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1152
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1181
1153
  const _r29 = i0.ɵɵgetCurrentView();
1182
- i0.ɵɵelementStart(0, "div", 160)(1, "div", 161)(2, "span", 162);
1154
+ i0.ɵɵelementStart(0, "div", 161)(1, "div", 162)(2, "span", 163);
1183
1155
  i0.ɵɵtext(3, "Total runs");
1184
1156
  i0.ɵɵelementEnd();
1185
- i0.ɵɵelementStart(4, "span", 163);
1157
+ i0.ɵɵelementStart(4, "span", 164);
1186
1158
  i0.ɵɵtext(5);
1187
1159
  i0.ɵɵpipe(6, "number");
1188
1160
  i0.ɵɵelementEnd()();
1189
- i0.ɵɵelementStart(7, "div", 161)(8, "span", 162);
1161
+ i0.ɵɵelementStart(7, "div", 162)(8, "span", 163);
1190
1162
  i0.ɵɵtext(9, "Success rate");
1191
1163
  i0.ɵɵelementEnd();
1192
- i0.ɵɵelementStart(10, "span", 163);
1164
+ i0.ɵɵelementStart(10, "span", 164);
1193
1165
  i0.ɵɵtext(11);
1194
1166
  i0.ɵɵelementEnd()();
1195
- i0.ɵɵelementStart(12, "div", 161)(13, "span", 162);
1167
+ i0.ɵɵelementStart(12, "div", 162)(13, "span", 163);
1196
1168
  i0.ɵɵtext(14, "Hit rate");
1197
1169
  i0.ɵɵelementEnd();
1198
- i0.ɵɵelementStart(15, "span", 163);
1170
+ i0.ɵɵelementStart(15, "span", 164);
1199
1171
  i0.ɵɵtext(16);
1200
1172
  i0.ɵɵelementEnd();
1201
- i0.ɵɵelementStart(17, "span", 164);
1173
+ i0.ɵɵelementStart(17, "span", 165);
1202
1174
  i0.ɵɵtext(18, "% of successful runs that returned \u22651 result");
1203
1175
  i0.ɵɵelementEnd()();
1204
- i0.ɵɵelementStart(19, "div", 161)(20, "span", 162);
1176
+ i0.ɵɵelementStart(19, "div", 162)(20, "span", 163);
1205
1177
  i0.ɵɵtext(21, "Avg latency");
1206
1178
  i0.ɵɵelementEnd();
1207
- i0.ɵɵelementStart(22, "span", 163);
1179
+ i0.ɵɵelementStart(22, "span", 164);
1208
1180
  i0.ɵɵtext(23);
1209
1181
  i0.ɵɵelementEnd()();
1210
- i0.ɵɵelementStart(24, "div", 161)(25, "span", 162);
1182
+ i0.ɵɵelementStart(24, "div", 162)(25, "span", 163);
1211
1183
  i0.ɵɵtext(26, "P95 latency");
1212
1184
  i0.ɵɵelementEnd();
1213
- i0.ɵɵelementStart(27, "span", 163);
1185
+ i0.ɵɵelementStart(27, "span", 164);
1214
1186
  i0.ɵɵtext(28);
1215
1187
  i0.ɵɵelementEnd()();
1216
- i0.ɵɵelementStart(29, "div", 161)(30, "span", 162);
1188
+ i0.ɵɵelementStart(29, "div", 162)(30, "span", 163);
1217
1189
  i0.ɵɵtext(31, "Reranker spend");
1218
1190
  i0.ɵɵelementEnd();
1219
- i0.ɵɵelementStart(32, "span", 163);
1191
+ i0.ɵɵelementStart(32, "span", 164);
1220
1192
  i0.ɵɵtext(33);
1221
1193
  i0.ɵɵpipe(34, "number");
1222
1194
  i0.ɵɵelementEnd()()();
1223
- i0.ɵɵelementStart(35, "h3", 165);
1195
+ i0.ɵɵelementStart(35, "h3", 166);
1224
1196
  i0.ɵɵtext(36, "Top scopes by volume");
1225
1197
  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);
1198
+ i0.ɵɵconditionalCreate(37, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_37_Template, 2, 0, "p", 167)(38, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_38_Template, 12, 0, "table", 168);
1199
+ i0.ɵɵelementStart(39, "h3", 166);
1228
1200
  i0.ɵɵtext(40, "Reranker spend by driver");
1229
1201
  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);
1202
+ i0.ɵɵconditionalCreate(41, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_41_Template, 2, 0, "p", 167)(42, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_42_Template, 12, 0, "table", 168);
1203
+ i0.ɵɵelementStart(43, "h3", 166);
1232
1204
  i0.ɵɵtext(44, "Top failure reasons");
1233
1205
  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);
1206
+ i0.ɵɵconditionalCreate(45, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_45_Template, 2, 0, "p", 167)(46, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Conditional_46_Template, 10, 0, "table", 168);
1207
+ i0.ɵɵelementStart(47, "button", 169);
1208
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Template_button_click_47_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.LoadSearchAnalytics()); });
1209
+ i0.ɵɵelement(48, "i", 160);
1238
1210
  i0.ɵɵtext(49, " Refresh ");
1239
1211
  i0.ɵɵelementEnd();
1240
1212
  } if (rf & 2) {
1241
- const ctx_r2 = i0.ɵɵnextContext(3);
1213
+ const ctx_r1 = i0.ɵɵnextContext(3);
1242
1214
  i0.ɵɵadvance(5);
1243
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 9, ctx_r2.AnalyticsTotalRuns));
1215
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 9, ctx_r1.AnalyticsTotalRuns));
1244
1216
  i0.ɵɵadvance(6);
1245
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsSuccessRate, "%");
1217
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsSuccessRate, "%");
1246
1218
  i0.ɵɵadvance(5);
1247
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsHitRate, "%");
1219
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsHitRate, "%");
1248
1220
  i0.ɵɵadvance(7);
1249
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsAvgLatencyMs, "ms");
1221
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsAvgLatencyMs, "ms");
1250
1222
  i0.ɵɵadvance(5);
1251
- i0.ɵɵtextInterpolate1("", ctx_r2.AnalyticsP95LatencyMs, "ms");
1223
+ i0.ɵɵtextInterpolate1("", ctx_r1.AnalyticsP95LatencyMs, "ms");
1252
1224
  i0.ɵɵadvance(5);
1253
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(34, 11, ctx_r2.AnalyticsTotalRerankerCostCents, "1.0-2"), "\u00A2");
1225
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(34, 11, ctx_r1.AnalyticsTotalRerankerCostCents, "1.0-2"), "\u00A2");
1254
1226
  i0.ɵɵadvance(4);
1255
- i0.ɵɵconditional(ctx_r2.AnalyticsTopScopes.length === 0 ? 37 : 38);
1227
+ i0.ɵɵconditional(ctx_r1.AnalyticsTopScopes.length === 0 ? 37 : 38);
1256
1228
  i0.ɵɵadvance(4);
1257
- i0.ɵɵconditional(ctx_r2.AnalyticsRerankerSpend.length === 0 ? 41 : 42);
1229
+ i0.ɵɵconditional(ctx_r1.AnalyticsRerankerSpend.length === 0 ? 41 : 42);
1258
1230
  i0.ɵɵadvance(4);
1259
- i0.ɵɵconditional(ctx_r2.AnalyticsTopFailures.length === 0 ? 45 : 46);
1231
+ i0.ɵɵconditional(ctx_r1.AnalyticsTopFailures.length === 0 ? 45 : 46);
1260
1232
  } }
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);
1264
- i0.ɵɵtext(3, " Search Analytics");
1265
- i0.ɵɵelementEnd();
1266
- i0.ɵɵelementStart(4, "p", 13);
1267
- i0.ɵɵtext(5, "Aggregated metrics over the last 5,000 search invocations from ");
1268
- i0.ɵɵelementStart(6, "code");
1269
- i0.ɵɵtext(7, "MJ: Search Execution Logs");
1270
- i0.ɵɵelementEnd();
1271
- i0.ɵɵtext(8, ". Use this to spot slow scopes, high-failure queries, or runaway reranker spend.");
1272
- 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);
1233
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1234
+ i0.ɵɵelementStart(0, "div", 15);
1235
+ i0.ɵɵconditionalCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_1_Template, 1, 0, "mj-loading", 157)(2, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_2_Template, 3, 0, "button", 158)(3, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Conditional_3_Template, 50, 14);
1274
1236
  i0.ɵɵelementEnd();
1275
1237
  } if (rf & 2) {
1276
- const ctx_r2 = i0.ɵɵnextContext(2);
1277
- i0.ɵɵadvance(9);
1278
- i0.ɵɵconditional(ctx_r2.AnalyticsLoading ? 9 : !ctx_r2.AnalyticsLoaded ? 10 : 11);
1238
+ const ctx_r1 = i0.ɵɵnextContext(2);
1239
+ i0.ɵɵadvance();
1240
+ i0.ɵɵconditional(ctx_r1.AnalyticsLoading ? 1 : !ctx_r1.AnalyticsLoaded ? 2 : 3);
1279
1241
  } }
1280
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1242
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1281
1243
  i0.ɵɵelementStart(0, "div", 170);
1282
- i0.ɵɵelement(1, "i", 80);
1244
+ i0.ɵɵelement(1, "i", 83);
1283
1245
  i0.ɵɵtext(2, " Loading permission rows... ");
1284
1246
  i0.ɵɵelementEnd();
1285
1247
  } }
1286
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1248
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1287
1249
  i0.ɵɵelementStart(0, "div", 181);
1288
1250
  i0.ɵɵtext(1, " No permission rows match your filters. ");
1289
1251
  i0.ɵɵelementEnd();
1290
1252
  } }
1291
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1253
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1292
1254
  i0.ɵɵtext(0);
1293
1255
  i0.ɵɵelementStart(1, "span", 184);
1294
1256
  i0.ɵɵtext(2);
@@ -1299,32 +1261,32 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Condition
1299
1261
  i0.ɵɵadvance(2);
1300
1262
  i0.ɵɵtextInterpolate1("(", row_r34.UserEmail, ")");
1301
1263
  } }
1302
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1264
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1303
1265
  i0.ɵɵtext(0);
1304
1266
  } if (rf & 2) {
1305
1267
  const row_r34 = i0.ɵɵnextContext().$implicit;
1306
1268
  i0.ɵɵtextInterpolate1(" ", row_r34.RoleName, " ");
1307
1269
  } }
1308
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1270
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
1309
1271
  i0.ɵɵelementStart(0, "span", 183);
1310
1272
  i0.ɵɵtext(1, "User");
1311
1273
  i0.ɵɵelementEnd();
1312
1274
  } }
1313
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1275
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1314
1276
  i0.ɵɵelementStart(0, "span", 183);
1315
1277
  i0.ɵɵtext(1, "Role");
1316
1278
  i0.ɵɵelementEnd();
1317
1279
  } }
1318
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_For_13_Template(rf, ctx) { if (rf & 1) {
1280
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Template(rf, ctx) { if (rf & 1) {
1319
1281
  i0.ɵɵelementStart(0, "tr")(1, "td");
1320
1282
  i0.ɵɵtext(2);
1321
1283
  i0.ɵɵelementEnd();
1322
1284
  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);
1285
+ i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_4_Template, 3, 2)(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_5_Template, 1, 1);
1324
1286
  i0.ɵɵelementEnd();
1325
1287
  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);
1288
+ i0.ɵɵconditionalCreate(7, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_7_Template, 2, 0, "span", 183);
1289
+ i0.ɵɵconditionalCreate(8, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Conditional_8_Template, 2, 0, "span", 183);
1328
1290
  i0.ɵɵelementEnd();
1329
1291
  i0.ɵɵelementStart(9, "td")(10, "span");
1330
1292
  i0.ɵɵpipe(11, "lowercase");
@@ -1345,7 +1307,7 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Condition
1345
1307
  i0.ɵɵadvance(2);
1346
1308
  i0.ɵɵtextInterpolate(row_r34.PermissionLevel);
1347
1309
  } }
1348
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1310
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1349
1311
  i0.ɵɵelementStart(0, "table", 182)(1, "thead")(2, "tr")(3, "th");
1350
1312
  i0.ɵɵtext(4, "Scope");
1351
1313
  i0.ɵɵelementEnd();
@@ -1359,23 +1321,23 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Condition
1359
1321
  i0.ɵɵtext(10, "Permission Level");
1360
1322
  i0.ɵɵelementEnd()()();
1361
1323
  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);
1324
+ i0.ɵɵrepeaterCreate(12, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_For_13_Template, 13, 10, "tr", null, _forTrack0);
1363
1325
  i0.ɵɵelementEnd()();
1364
1326
  } if (rf & 2) {
1365
- const ctx_r2 = i0.ɵɵnextContext(4);
1327
+ const ctx_r1 = i0.ɵɵnextContext(4);
1366
1328
  i0.ɵɵadvance(12);
1367
- i0.ɵɵrepeater(ctx_r2.FilteredPermissionsRows);
1329
+ i0.ɵɵrepeater(ctx_r1.FilteredPermissionsRows);
1368
1330
  } }
1369
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1331
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
1370
1332
  const _r33 = i0.ɵɵgetCurrentView();
1371
1333
  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); });
1334
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.PermissionsFilterScope, $event) || (ctx_r1.PermissionsFilterScope = $event); return i0.ɵɵresetView($event); });
1373
1335
  i0.ɵɵelementEnd();
1374
1336
  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); });
1337
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.PermissionsFilterPrincipal, $event) || (ctx_r1.PermissionsFilterPrincipal = $event); return i0.ɵɵresetView($event); });
1376
1338
  i0.ɵɵelementEnd();
1377
1339
  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); });
1340
+ i0.ɵɵtwoWayListener("ngModelChange", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.PermissionsFilterLevel, $event) || (ctx_r1.PermissionsFilterLevel = $event); return i0.ɵɵresetView($event); });
1379
1341
  i0.ɵɵelementStart(4, "option", 175);
1380
1342
  i0.ɵɵtext(5, "All levels");
1381
1343
  i0.ɵɵelementEnd();
@@ -1391,136 +1353,123 @@ function KnowledgeConfigResourceComponent_Conditional_1_Conditional_16_Condition
1391
1353
  i0.ɵɵelementStart(12, "option", 179);
1392
1354
  i0.ɵɵtext(13, "Manage");
1393
1355
  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);
1356
+ i0.ɵɵelementStart(14, "button", 159);
1357
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RefreshPermissionsAudit()); });
1358
+ i0.ɵɵelement(15, "i", 160);
1397
1359
  i0.ɵɵtext(16, " Refresh ");
1398
1360
  i0.ɵɵelementEnd()();
1399
1361
  i0.ɵɵelementStart(17, "div", 180);
1400
1362
  i0.ɵɵtext(18);
1401
1363
  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);
1364
+ i0.ɵɵconditionalCreate(19, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_19_Template, 2, 0, "div", 181)(20, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Conditional_20_Template, 14, 0, "table", 182);
1403
1365
  } if (rf & 2) {
1404
- const ctx_r2 = i0.ɵɵnextContext(3);
1366
+ const ctx_r1 = i0.ɵɵnextContext(3);
1405
1367
  i0.ɵɵadvance();
1406
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PermissionsFilterScope);
1368
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PermissionsFilterScope);
1407
1369
  i0.ɵɵadvance();
1408
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PermissionsFilterPrincipal);
1370
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PermissionsFilterPrincipal);
1409
1371
  i0.ɵɵadvance();
1410
- i0.ɵɵtwoWayProperty("ngModel", ctx_r2.PermissionsFilterLevel);
1372
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.PermissionsFilterLevel);
1411
1373
  i0.ɵɵadvance(15);
1412
- i0.ɵɵtextInterpolate2(" Showing ", ctx_r2.FilteredPermissionsRows.length, " of ", ctx_r2.PermissionsRows.length, " rows ");
1374
+ i0.ɵɵtextInterpolate2(" Showing ", ctx_r1.FilteredPermissionsRows.length, " of ", ctx_r1.PermissionsRows.length, " rows ");
1413
1375
  i0.ɵɵadvance();
1414
- i0.ɵɵconditional(ctx_r2.FilteredPermissionsRows.length === 0 ? 19 : 20);
1376
+ i0.ɵɵconditional(ctx_r1.FilteredPermissionsRows.length === 0 ? 19 : 20);
1415
1377
  } }
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);
1419
- i0.ɵɵtext(3, " Permissions");
1420
- i0.ɵɵelementEnd();
1421
- i0.ɵɵelementStart(4, "p", 13);
1422
- i0.ɵɵtext(5, " Cross-scope view of every ");
1423
- i0.ɵɵelementStart(6, "code");
1424
- i0.ɵɵtext(7, "SearchScopePermission");
1425
- i0.ɵɵelementEnd();
1426
- 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
- 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);
1378
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1379
+ i0.ɵɵelementStart(0, "div", 15);
1380
+ i0.ɵɵconditionalCreate(1, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_1_Template, 3, 0, "div", 170);
1381
+ i0.ɵɵconditionalCreate(2, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Conditional_2_Template, 21, 6);
1430
1382
  i0.ɵɵelementEnd();
1431
1383
  } if (rf & 2) {
1432
- const ctx_r2 = i0.ɵɵnextContext(2);
1433
- i0.ɵɵadvance(9);
1434
- i0.ɵɵconditional(ctx_r2.PermissionsLoading ? 9 : -1);
1384
+ const ctx_r1 = i0.ɵɵnextContext(2);
1385
+ i0.ɵɵadvance();
1386
+ i0.ɵɵconditional(ctx_r1.PermissionsLoading ? 1 : -1);
1435
1387
  i0.ɵɵadvance();
1436
- i0.ɵɵconditional(ctx_r2.PermissionsLoaded && !ctx_r2.PermissionsLoading ? 10 : -1);
1388
+ i0.ɵɵconditional(ctx_r1.PermissionsLoaded && !ctx_r1.PermissionsLoading ? 2 : -1);
1437
1389
  } }
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);
1441
- i0.ɵɵtext(3, " Scheduling");
1442
- i0.ɵɵelementEnd();
1443
- i0.ɵɵelementStart(4, "p", 13);
1444
- 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
- i0.ɵɵelementEnd();
1446
- i0.ɵɵelementStart(6, "div", 186);
1447
- i0.ɵɵelement(7, "app-scheduling-resource");
1390
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1391
+ i0.ɵɵelementStart(0, "div", 15)(1, "div", 185);
1392
+ i0.ɵɵelement(2, "app-scheduling-resource", 186);
1448
1393
  i0.ɵɵelementEnd()();
1394
+ } if (rf & 2) {
1395
+ i0.ɵɵadvance(2);
1396
+ i0.ɵɵproperty("HideToolbar", true);
1449
1397
  } }
1450
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1451
- i0.ɵɵelement(0, "i", 80);
1398
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1399
+ i0.ɵɵelement(0, "i", 83);
1452
1400
  i0.ɵɵtext(1, " Saving... ");
1453
1401
  } }
1454
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1455
- i0.ɵɵelement(0, "i", 129);
1402
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1403
+ i0.ɵɵelement(0, "i", 131);
1456
1404
  i0.ɵɵtext(1, " Save Changes ");
1457
1405
  } }
1458
- function KnowledgeConfigResourceComponent_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1406
+ function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1459
1407
  const _r35 = i0.ɵɵgetCurrentView();
1460
- i0.ɵɵelementStart(0, "div", 10)(1, "span", 187);
1408
+ i0.ɵɵelementStart(0, "div", 16)(1, "span", 187);
1461
1409
  i0.ɵɵtext(2, "You have unsaved changes");
1462
1410
  i0.ɵɵelementEnd();
1463
1411
  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);
1412
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveConfiguration()); });
1413
+ i0.ɵɵconditionalCreate(4, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_4_Template, 2, 0)(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Conditional_5_Template, 2, 0);
1466
1414
  i0.ɵɵelementEnd();
1467
1415
  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()); });
1416
+ i0.ɵɵlistener("click", function KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ResetConfiguration()); });
1469
1417
  i0.ɵɵtext(7, " Reset ");
1470
1418
  i0.ɵɵelementEnd()();
1471
1419
  } if (rf & 2) {
1472
- const ctx_r2 = i0.ɵɵnextContext(2);
1420
+ const ctx_r1 = i0.ɵɵnextContext(2);
1473
1421
  i0.ɵɵadvance(3);
1474
- i0.ɵɵproperty("disabled", ctx_r2.IsSaving);
1422
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
1475
1423
  i0.ɵɵadvance();
1476
- i0.ɵɵconditional(ctx_r2.IsSaving ? 4 : 5);
1424
+ i0.ɵɵconditional(ctx_r1.IsSaving ? 4 : 5);
1477
1425
  i0.ɵɵadvance(2);
1478
- i0.ɵɵproperty("disabled", ctx_r2.IsSaving);
1479
- } }
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);
1483
- i0.ɵɵelementStart(4, "span");
1484
- i0.ɵɵtext(5, "Configuration");
1485
- 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);
1499
- i0.ɵɵelementEnd()();
1426
+ i0.ɵɵproperty("disabled", ctx_r1.IsSaving);
1427
+ } }
1428
+ function KnowledgeConfigResourceComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
1429
+ const _r3 = i0.ɵɵgetCurrentView();
1430
+ i0.ɵɵelementStart(0, "div", 6)(1, "mj-left-nav", 12);
1431
+ i0.ɵɵlistener("ItemClicked", function KnowledgeConfigResourceComponent_Conditional_8_Template_mj_left_nav_ItemClicked_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNavItemClicked($event)); });
1432
+ i0.ɵɵelementEnd();
1433
+ i0.ɵɵelementStart(2, "mj-left-nav-content");
1434
+ i0.ɵɵelement(3, "mj-page-header-interior", 13);
1435
+ i0.ɵɵelementStart(4, "mj-page-body-interior");
1436
+ i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_8_Conditional_5_Template, 30, 4, "div", 14);
1437
+ i0.ɵɵconditionalCreate(6, KnowledgeConfigResourceComponent_Conditional_8_Conditional_6_Template, 45, 26, "div", 14);
1438
+ i0.ɵɵconditionalCreate(7, KnowledgeConfigResourceComponent_Conditional_8_Conditional_7_Template, 4, 1, "div", 14);
1439
+ i0.ɵɵconditionalCreate(8, KnowledgeConfigResourceComponent_Conditional_8_Conditional_8_Template, 3, 1, "div", 14);
1440
+ i0.ɵɵconditionalCreate(9, KnowledgeConfigResourceComponent_Conditional_8_Conditional_9_Template, 30, 8, "div", 14);
1441
+ i0.ɵɵconditionalCreate(10, KnowledgeConfigResourceComponent_Conditional_8_Conditional_10_Template, 15, 3, "div", 14);
1442
+ i0.ɵɵconditionalCreate(11, KnowledgeConfigResourceComponent_Conditional_8_Conditional_11_Template, 4, 1, "div", 15);
1443
+ i0.ɵɵconditionalCreate(12, KnowledgeConfigResourceComponent_Conditional_8_Conditional_12_Template, 3, 2, "div", 15);
1444
+ i0.ɵɵconditionalCreate(13, KnowledgeConfigResourceComponent_Conditional_8_Conditional_13_Template, 3, 1, "div", 15);
1445
+ i0.ɵɵconditionalCreate(14, KnowledgeConfigResourceComponent_Conditional_8_Conditional_14_Template, 8, 3, "div", 16);
1446
+ i0.ɵɵelementEnd()()();
1500
1447
  } if (rf & 2) {
1501
- const ctx_r2 = i0.ɵɵnextContext();
1502
- i0.ɵɵadvance(6);
1503
- i0.ɵɵrepeater(ctx_r2.Sections);
1504
- i0.ɵɵadvance(3);
1505
- i0.ɵɵconditional(ctx_r2.ActiveSection === "pipeline" ? 9 : -1);
1448
+ const ctx_r1 = i0.ɵɵnextContext();
1449
+ i0.ɵɵadvance();
1450
+ i0.ɵɵproperty("Sections", ctx_r1.navSections)("ActiveId", ctx_r1.ActiveSection);
1451
+ i0.ɵɵadvance(2);
1452
+ i0.ɵɵproperty("Title", (ctx_r1.currentSection == null ? null : ctx_r1.currentSection.Label) || "")("Subtitle", (ctx_r1.currentSection == null ? null : ctx_r1.currentSection.Description) || "");
1453
+ i0.ɵɵadvance(2);
1454
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "pipeline" ? 5 : -1);
1506
1455
  i0.ɵɵadvance();
1507
- i0.ɵɵconditional(ctx_r2.ActiveSection === "vectordb" ? 10 : -1);
1456
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "vectordb" ? 6 : -1);
1508
1457
  i0.ɵɵadvance();
1509
- i0.ɵɵconditional(ctx_r2.ActiveSection === "fulltext" ? 11 : -1);
1458
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "fulltext" ? 7 : -1);
1510
1459
  i0.ɵɵadvance();
1511
- i0.ɵɵconditional(ctx_r2.ActiveSection === "embedding" ? 12 : -1);
1460
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "embedding" ? 8 : -1);
1512
1461
  i0.ɵɵadvance();
1513
- i0.ɵɵconditional(ctx_r2.ActiveSection === "thresholds" ? 13 : -1);
1462
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "thresholds" ? 9 : -1);
1514
1463
  i0.ɵɵadvance();
1515
- i0.ɵɵconditional(ctx_r2.ActiveSection === "search-scopes" ? 14 : -1);
1464
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "search-scopes" ? 10 : -1);
1516
1465
  i0.ɵɵadvance();
1517
- i0.ɵɵconditional(ctx_r2.ActiveSection === "search-analytics" ? 15 : -1);
1466
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "search-analytics" ? 11 : -1);
1518
1467
  i0.ɵɵadvance();
1519
- i0.ɵɵconditional(ctx_r2.ActiveSection === "search-permissions" ? 16 : -1);
1468
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "search-permissions" ? 12 : -1);
1520
1469
  i0.ɵɵadvance();
1521
- i0.ɵɵconditional(ctx_r2.ActiveSection === "scheduling" ? 17 : -1);
1470
+ i0.ɵɵconditional(ctx_r1.ActiveSection === "scheduling" ? 13 : -1);
1522
1471
  i0.ɵɵadvance();
1523
- i0.ɵɵconditional(ctx_r2.HasUnsavedChanges ? 18 : -1);
1472
+ i0.ɵɵconditional(ctx_r1.HasUnsavedChanges ? 14 : -1);
1524
1473
  } }
1525
1474
  let KnowledgeConfigResourceComponent = class KnowledgeConfigResourceComponent extends BaseResourceComponent {
1526
1475
  cdr = inject(ChangeDetectorRef);
@@ -1682,6 +1631,29 @@ let KnowledgeConfigResourceComponent = class KnowledgeConfigResourceComponent ex
1682
1631
  // ================================================================
1683
1632
  // Public Methods
1684
1633
  // ================================================================
1634
+ /** Wraps `Sections` for `<mj-left-nav>`. Single unlabeled section. */
1635
+ get navSections() {
1636
+ return [{
1637
+ items: this.Sections.map(s => ({
1638
+ id: s.ID,
1639
+ label: s.Label,
1640
+ icon: s.Icon,
1641
+ description: s.Description
1642
+ }))
1643
+ }];
1644
+ }
1645
+ /**
1646
+ * Active section metadata — drives the `<mj-page-header-interior>` Title +
1647
+ * Subtitle for the current section. Reusing the existing Sections array
1648
+ * (already used to drive the left rail) keeps section identity DRY.
1649
+ */
1650
+ get currentSection() {
1651
+ return this.Sections.find(s => UUIDsEqual(s.ID, this.ActiveSection));
1652
+ }
1653
+ /** Adapter for `<mj-left-nav>`'s `(ItemClicked)` output. */
1654
+ onNavItemClicked(item) {
1655
+ this.SelectSection(item.id);
1656
+ }
1685
1657
  SelectSection(sectionId) {
1686
1658
  this.ActiveSection = sectionId;
1687
1659
  if (sectionId === 'search-scopes' && this.SearchScopes.length === 0) {
@@ -2372,11 +2344,26 @@ let KnowledgeConfigResourceComponent = class KnowledgeConfigResourceComponent ex
2372
2344
  }));
2373
2345
  }
2374
2346
  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);
2347
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: KnowledgeConfigResourceComponent, selectors: [["app-knowledge-config-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 9, vars: 5, 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", "Padding"], [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"], [3, "ItemClicked", "Sections", "ActiveId"], [3, "Title", "Subtitle"], [1, "config-section"], [1, "config-section-content"], [1, "config-save-bar"], [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, "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"], ["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, "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"], [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) {
2348
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 0)(2, "div", 1);
2349
+ i0.ɵɵconditionalCreate(3, KnowledgeConfigResourceComponent_Conditional_3_Template, 1, 0, "mj-stat-badge", 2);
2350
+ i0.ɵɵelementEnd();
2351
+ i0.ɵɵelementStart(4, "div", 3);
2352
+ i0.ɵɵconditionalCreate(5, KnowledgeConfigResourceComponent_Conditional_5_Template, 6, 3);
2353
+ i0.ɵɵelementEnd()();
2354
+ i0.ɵɵelementStart(6, "mj-page-body", 4);
2355
+ i0.ɵɵconditionalCreate(7, KnowledgeConfigResourceComponent_Conditional_7_Template, 2, 0, "div", 5)(8, KnowledgeConfigResourceComponent_Conditional_8_Template, 15, 14, "div", 6);
2356
+ i0.ɵɵelementEnd()();
2377
2357
  } 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}"] });
2358
+ i0.ɵɵadvance(3);
2359
+ i0.ɵɵconditional(ctx.HasUnsavedChanges ? 3 : -1);
2360
+ i0.ɵɵadvance(2);
2361
+ i0.ɵɵconditional(ctx.HasUnsavedChanges ? 5 : -1);
2362
+ i0.ɵɵadvance();
2363
+ i0.ɵɵproperty("Flex", true)("Padding", false);
2364
+ i0.ɵɵadvance();
2365
+ i0.ɵɵconditional(ctx.IsLoading ? 7 : 8);
2366
+ } }, 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.MJPageHeaderInteriorComponent, i4.MJPageBodyInteriorComponent, i4.MJLeftNavComponent, i4.MJLeftNavContentComponent, 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\n\n\n\n\n\n.config-layout[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n min-height: 500px;\n}\n\n\n\n\n\n\n\n.config-section[_ngcontent-%COMP%] {\n max-width: 700px;\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
2367
  };
2381
2368
  KnowledgeConfigResourceComponent = __decorate([
2382
2369
  RegisterClass(BaseResourceComponent, 'KnowledgeConfigResource')
@@ -2384,9 +2371,9 @@ KnowledgeConfigResourceComponent = __decorate([
2384
2371
  export { KnowledgeConfigResourceComponent };
2385
2372
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(KnowledgeConfigResourceComponent, [{
2386
2373
  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"] }]
2374
+ 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\" [Padding]=\"false\">\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 <mj-left-nav\n [Sections]=\"navSections\"\n [ActiveId]=\"ActiveSection\"\n (ItemClicked)=\"onNavItemClicked($event)\">\n </mj-left-nav>\n\n <mj-left-nav-content>\n <mj-page-header-interior\n [Title]=\"currentSection?.Label || ''\"\n [Subtitle]=\"currentSection?.Description || ''\">\n </mj-page-header-interior>\n <mj-page-body-interior>\n <!-- Pipeline Settings -->\n @if (ActiveSection === 'pipeline') {\n <div class=\"config-section\">\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\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\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\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\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 <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\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 @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 <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 </mj-page-body-interior>\n </mj-left-nav-content>\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/*\n Layout \u2014 <mj-left-nav> rail + <mj-left-nav-content> pane. The shared\n primitives own the rail width, nav item styling, and content sizing; we just\n need a flex-row wrapper so they sit side-by-side.\n*/\n.config-layout {\n display: flex;\n height: 100%;\n min-height: 500px;\n}\n\n/* Section title + description are now rendered by <mj-page-header-interior>\n (one shared instance bound to currentSection at the top of the content area).\n The legacy .config-section-title / .config-section-desc rules and the\n .config-content wrapper were retired with that migration; .config-section\n remains as a thin readability constraint on the form bodies. */\n.config-section {\n max-width: 700px;\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
2375
  }], null, null); })();
2389
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(KnowledgeConfigResourceComponent, { className: "KnowledgeConfigResourceComponent", filePath: "src/KnowledgeHub/components/config/knowledge-config-resource.component.ts", lineNumber: 99 }); })();
2376
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(KnowledgeConfigResourceComponent, { className: "KnowledgeConfigResourceComponent", filePath: "src/KnowledgeHub/components/config/knowledge-config-resource.component.ts", lineNumber: 100 }); })();
2390
2377
  /** Tree-shaking prevention */
2391
2378
  export function LoadKnowledgeConfigResource() {
2392
2379
  // Prevents tree-shaking