@memberjunction/ng-dashboards 6.2.0-edge.6 → 6.2.0-edge.8

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 (233) hide show
  1. package/README.md +23 -16
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  4. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
  6. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
  7. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
  8. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
  9. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
  10. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
  11. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
  13. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
  14. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  15. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +31 -10
  16. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  17. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
  18. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
  19. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
  20. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
  21. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
  22. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  23. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
  24. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  25. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
  27. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  28. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  29. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
  30. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  31. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  32. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  33. package/dist/AI/components/tags/tags-resource.component.js +14 -24
  34. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  35. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  36. package/dist/AI/components/vectors/vector-management-resource.component.js +14 -7
  37. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  38. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  39. package/dist/AI/services/ai-instrumentation.service.js +4 -2
  40. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  41. package/dist/Actions/action-result-code.d.ts +80 -0
  42. package/dist/Actions/action-result-code.d.ts.map +1 -0
  43. package/dist/Actions/action-result-code.js +163 -0
  44. package/dist/Actions/action-result-code.js.map +1 -0
  45. package/dist/Actions/components/actions-overview.component.d.ts +8 -0
  46. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +12 -9
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
  50. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  51. package/dist/Actions/components/execution-monitoring.component.js +65 -42
  52. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  53. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  54. package/dist/Actions/components/explorer/action-card.component.js +5 -4
  55. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  56. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +92 -130
  57. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -1
  58. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +189 -274
  59. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -1
  60. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
  61. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
  62. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
  63. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
  64. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
  65. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
  66. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
  67. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
  68. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
  69. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
  70. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
  71. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
  72. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
  73. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
  74. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
  75. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
  76. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
  77. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
  78. package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
  79. package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
  80. package/dist/ChiefOfStaff/index.d.ts +4 -1
  81. package/dist/ChiefOfStaff/index.d.ts.map +1 -1
  82. package/dist/ChiefOfStaff/index.js +4 -1
  83. package/dist/ChiefOfStaff/index.js.map +1 -1
  84. package/dist/Communication/communication-monitor-resource.component.js +3 -3
  85. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  86. package/dist/Communication/communication-runs-resource.component.js +3 -3
  87. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  88. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  89. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  90. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  92. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
  93. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  95. package/dist/ComponentStudio/services/component-version.service.js +3 -0
  96. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  97. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +21 -2
  98. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  99. package/dist/DataExplorer/data-explorer-dashboard.component.js +32 -5
  100. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  101. package/dist/DevTools/graphql-console.component.js +2 -2
  102. package/dist/DevTools/lazy-module-status.component.js +2 -2
  103. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  104. package/dist/FormBuilder/form-builder-resource.component.js +5 -0
  105. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  106. package/dist/Integration/components/connections/connections.component.js +2 -2
  107. package/dist/Integration/services/integration-data.service.d.ts +1 -1
  108. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  109. package/dist/Integration/services/integration-data.service.js +4 -3
  110. package/dist/Integration/services/integration-data.service.js.map +1 -1
  111. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  112. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +11 -3
  113. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  114. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +16 -16
  115. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  116. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts +113 -0
  117. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts.map +1 -0
  118. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js +1184 -0
  119. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js.map +1 -0
  120. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts +1 -1
  121. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts.map +1 -1
  122. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js +1 -1
  123. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js.map +1 -1
  124. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +1 -1
  125. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -1
  126. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +21 -10
  127. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -1
  128. package/dist/Lists/components/lists-browse-resource.component.js +1 -1
  129. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  130. package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
  131. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  132. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  133. package/dist/LoginStudio/login-studio-resource.component.js +1 -0
  134. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  135. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  136. package/dist/PredictiveStudio/components/ps-experiments.component.js +1 -0
  137. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  138. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +2 -2
  139. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  140. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +3 -0
  141. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  142. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  143. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +1 -0
  144. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  145. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  146. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +1 -0
  147. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  148. package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
  149. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  150. package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
  151. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  152. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  153. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -2
  154. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  155. package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
  156. package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
  157. package/dist/UserRoutines/user-routines-resource.component.js +22 -4
  158. package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
  159. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  160. package/dist/VersionHistory/components/diff-resource.component.js +1 -0
  161. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  162. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
  163. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
  164. package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
  165. package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
  166. package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
  167. package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
  168. package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
  169. package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
  170. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
  171. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
  172. package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
  173. package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
  174. package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
  175. package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
  176. package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
  177. package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
  178. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
  179. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
  180. package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
  181. package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
  182. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
  183. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
  184. package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
  185. package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
  186. package/dist/VideoStudio/index.d.ts +12 -0
  187. package/dist/VideoStudio/index.d.ts.map +1 -0
  188. package/dist/VideoStudio/index.js +12 -0
  189. package/dist/VideoStudio/index.js.map +1 -0
  190. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
  191. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
  192. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
  193. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
  194. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
  195. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
  196. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
  197. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
  198. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
  199. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
  200. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
  201. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
  202. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
  203. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
  204. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
  205. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
  206. package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
  207. package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
  208. package/dist/VideoStudio/video-studio-agent-context.js +992 -0
  209. package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
  210. package/dist/ai-dashboards.module.d.ts +46 -41
  211. package/dist/ai-dashboards.module.d.ts.map +1 -1
  212. package/dist/ai-dashboards.module.js +33 -7
  213. package/dist/ai-dashboards.module.js.map +1 -1
  214. package/dist/module.d.ts +13 -12
  215. package/dist/module.d.ts.map +1 -1
  216. package/dist/module.js +7 -0
  217. package/dist/module.js.map +1 -1
  218. package/dist/public-api.d.ts +8 -1
  219. package/dist/public-api.d.ts.map +1 -1
  220. package/dist/public-api.js +10 -2
  221. package/dist/public-api.js.map +1 -1
  222. package/dist/shared/action-scheduled-job.d.ts.map +1 -1
  223. package/dist/shared/action-scheduled-job.js +2 -0
  224. package/dist/shared/action-scheduled-job.js.map +1 -1
  225. package/dist/video-studio-dashboards.module.d.ts +40 -0
  226. package/dist/video-studio-dashboards.module.d.ts.map +1 -0
  227. package/dist/video-studio-dashboards.module.js +159 -0
  228. package/dist/video-studio-dashboards.module.js.map +1 -0
  229. package/package.json +78 -71
  230. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +0 -195
  231. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +0 -1
  232. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +0 -2910
  233. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-graph-explorer.component.js","sourceRoot":"","sources":["../../../../../src/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.ts","../../../../../src/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.html"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Knowledge Hub Semantic Graph & Canon Explorer (Visualize > Graphs & Canon mode)\n *\n * Interactive 2-pane workspace built on `@memberjunction/ng-graph-view` (`<mj-graph-view>`)\n * for exploring `MJ: Graphs` (grouped by `MJ: Graph Types` and `IsCanon`), ranked\n * `MJ: Graph Concept Types` (`Policy #10`, `Metric #20`, `Process #30`, `Role #40`,\n * `Domain #50`, `Term #60`), `MJ: Graph Concepts`, grounded MJ primitives, source\n * provenance chunks (`SourcedFrom`), and cross-source authority conflicts (`Contradicts`).\n */\n\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n OnInit,\n inject,\n} from '@angular/core';\nimport { IMetadataProvider, RunView } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { NormalizeUUID, UUIDsEqual } from '@memberjunction/global';\nimport type {\n MJGraphTypeEntity,\n MJGraphConceptTypeEntity,\n MJGraphAuthorityTierEntity,\n MJGraphEntity,\n MJGraphConceptEntity,\n MJGraphEdgeEntity,\n} from '@memberjunction/core-entities';\nimport {\n DEFAULT_GRAPH_CATEGORIES,\n type GraphNode,\n type GraphEdge,\n type GraphCategoryConfig,\n type GraphLayoutMode,\n type GraphConflictItem,\n type GraphGroundingItem,\n type GraphProvenanceChunkItem,\n type NodeNavigatedEventArgs,\n type NodeActionEventArgs,\n type NodeSelectedEventArgs,\n} from '@memberjunction/ng-graph-view';\n\n/** Default ranked Canon & Semantic Graph categories used by the Knowledge Hub explorer. */\nexport const DEFAULT_SEMANTIC_GRAPH_CATEGORIES: GraphCategoryConfig[] = [\n { Category: 'Policy', Label: 'Policy', Color: '#f43f5e', IconClass: 'fa-solid fa-gavel', Rank: 10 },\n { Category: 'Metric', Label: 'Metric', Color: '#10b981', IconClass: 'fa-solid fa-chart-line', Rank: 20 },\n { Category: 'Process', Label: 'Process', Color: '#8b5cf6', IconClass: 'fa-solid fa-gears', Rank: 30 },\n { Category: 'Role', Label: 'Role', Color: '#f59e0b', IconClass: 'fa-solid fa-user-shield', Rank: 40 },\n { Category: 'Domain', Label: 'Domain', Color: '#3b82f6', IconClass: 'fa-solid fa-layer-group', Rank: 50 },\n { Category: 'Term', Label: 'Term', Color: '#06b6d4', IconClass: 'fa-solid fa-book-bookmark', Rank: 60 },\n { Category: 'grounding', Label: 'Grounded Primitive', Color: '#14b8a6', IconClass: 'fa-solid fa-bolt', Rank: 90 },\n { Category: 'chunk', Label: 'Source Chunk', Color: '#64748b', IconClass: 'fa-solid fa-file-lines', Rank: 95 },\n ...DEFAULT_GRAPH_CATEGORIES,\n];\n\n/** Summary of a selectable `MJ: Graphs` partition in the left rail. */\nexport interface SemanticGraphOption {\n ID: string;\n Name: string;\n Description: string;\n GraphTypeID: string;\n GraphTypeName: string;\n IsCanon: boolean;\n GraphTypeRank: number;\n IconClass: string;\n ConceptCount: number;\n ConflictCount: number;\n SourceNames: string[];\n IsSample?: boolean;\n}\n\n/** Ranked `MJ: Graph Concept Types` filter pill descriptor. */\nexport interface ConceptTypeFilterOption {\n ID: string;\n Name: string;\n Rank: number;\n IconClass: string;\n Color: string;\n Count: number;\n}\n\n/** Request to open an underlying MJ entity record in Explorer. */\nexport interface GraphRecordOpenRequest {\n EntityName: string;\n RecordID: string;\n}\n\n/** Emitted when a concept node is selected so the host can update agent context or drilldown. */\nexport interface GraphConceptSelection {\n NodeID: string;\n Label: string;\n ConceptType: string;\n Status: string;\n AuthorityTier: string;\n ConnectedChunkCount: number;\n ConflictCount: number;\n}\n\nconst SAMPLE_GRAPH_ID = 'D1000000-0000-4000-8000-000000000004';\n\nconst CONCEPT_TYPE_COLORS: Record<string, string> = {\n policy: '#f43f5e',\n metric: '#10b981',\n process: '#8b5cf6',\n role: '#f59e0b',\n domain: '#3b82f6',\n term: '#06b6d4',\n};\n\n@Component({\n standalone: false,\n selector: 'app-kh-semantic-graph',\n templateUrl: './semantic-graph-explorer.component.html',\n styleUrls: ['./semantic-graph-explorer.component.css'],\n})\nexport class SemanticGraphExplorerComponent extends BaseAngularComponent implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n\n @Input() override Provider: IMetadataProvider | null = null;\n\n /** Emitted when the user requests to open an entity record from the graph or inspector. */\n @Output() OpenRecordRequested = new EventEmitter<GraphRecordOpenRequest>();\n\n /** Emitted when a graph node is selected on canvas. */\n @Output() ConceptSelected = new EventEmitter<GraphConceptSelection>();\n\n // ================================================================\n // State\n // ================================================================\n\n public IsLoading = true;\n public LoadError: string | null = null;\n public ActionError: string | null = null;\n public GraphOptions: SemanticGraphOption[] = [];\n public ConceptTypeOptions: ConceptTypeFilterOption[] = [];\n public SelectedGraphID = '';\n public OnlyCanonGraphs = false;\n public ActiveConceptTypeFilter: string | null = null;\n public LayoutMode: GraphLayoutMode = 'force';\n private authorityTiersById = new Map<string, MJGraphAuthorityTierEntity>();\n\n /** Edge / Node Overlay Toggles */\n public ShowGroundedPrimitives = true;\n public ShowSourceChunks = true;\n public HighlightConflicts = true;\n\n /** Raw & Filtered Graph Data passed to <mj-graph-view> */\n private rawNodes: GraphNode[] = [];\n private rawEdges: GraphEdge[] = [];\n public Nodes: GraphNode[] = [];\n public Edges: GraphEdge[] = [];\n public Categories: GraphCategoryConfig[] = [...DEFAULT_SEMANTIC_GRAPH_CATEGORIES];\n public SelectedNodeId?: string;\n\n // ================================================================\n // Lifecycle\n // ================================================================\n\n async ngOnInit(): Promise<void> {\n await this.LoadGraphCatalog();\n }\n\n // ================================================================\n // Public Getters & Actions\n // ================================================================\n\n public get VisibleGraphOptions(): SemanticGraphOption[] {\n if (!this.OnlyCanonGraphs) {\n return this.GraphOptions;\n }\n return this.GraphOptions.filter(g => g.IsCanon);\n }\n\n public get SelectedGraph(): SemanticGraphOption | undefined {\n return this.GraphOptions.find(g => UUIDsEqual(g.ID, this.SelectedGraphID));\n }\n\n public async SelectGraph(graphId: string): Promise<void> {\n if (UUIDsEqual(this.SelectedGraphID, graphId)) {\n return;\n }\n this.SelectedGraphID = graphId;\n this.ActiveConceptTypeFilter = null;\n await this.LoadSelectedGraphData();\n }\n\n public ToggleCanonFilter(): void {\n this.OnlyCanonGraphs = !this.OnlyCanonGraphs;\n const visible = this.VisibleGraphOptions;\n if (visible.length > 0 && !visible.some(g => UUIDsEqual(g.ID, this.SelectedGraphID))) {\n void this.SelectGraph(visible[0].ID);\n } else {\n this.cdr.detectChanges();\n }\n }\n\n public ToggleConceptTypeFilter(typeName: string | null): void {\n if (!typeName || (this.ActiveConceptTypeFilter && this.ActiveConceptTypeFilter.toLowerCase() === typeName.toLowerCase())) {\n this.ActiveConceptTypeFilter = null;\n } else {\n this.ActiveConceptTypeFilter = typeName;\n }\n this.rebuildConceptTypeCounts();\n this.cdr.detectChanges();\n }\n\n public OnCategoryFilterChangedFromCanvas(category: string | null): void {\n this.ActiveConceptTypeFilter = category;\n this.cdr.detectChanges();\n }\n\n public OnOverlayToggleChanged(): void {\n this.applyOverlayFilters();\n this.cdr.detectChanges();\n }\n\n public CreateNewGraphRecord(): void {\n if (this.SelectedGraph && !this.SelectedGraph.IsSample) {\n this.OpenRecordRequested.emit({\n EntityName: 'MJ: Graphs',\n RecordID: this.SelectedGraph.ID,\n });\n }\n }\n\n public OnNodeSelected(event: NodeSelectedEventArgs): void {\n const node = event.Node;\n this.SelectedNodeId = node.ID;\n this.ConceptSelected.emit({\n NodeID: node.ID,\n Label: node.Label,\n ConceptType: String(node.Category),\n Status: String(node.Status ?? 'Approved'),\n AuthorityTier: String(node.AuthorityTier ?? 'Reference'),\n ConnectedChunkCount: node.ProvenanceChunks?.length ?? 0,\n ConflictCount: node.Conflicts?.length ?? 0,\n });\n }\n\n public OnNodeNavigated(event: NodeNavigatedEventArgs): void {\n const entityName = event.EntityName || String(event.Node.Data?.['EntityName'] ?? 'MJ: Graph Concepts');\n const recordId = event.RecordID || String(event.Node.Data?.['RecordID'] ?? event.Node.ID);\n if (entityName && recordId && !recordId.startsWith('sample-')) {\n this.OpenRecordRequested.emit({ EntityName: entityName, RecordID: recordId });\n }\n }\n\n public async OnNodeAction(event: NodeActionEventArgs): Promise<void> {\n if (event.Action === 'approve') {\n const node = event.Node;\n this.ActionError = null;\n if (node.ID.startsWith('sample-') || this.SelectedGraph?.IsSample) {\n node.Status = 'Approved';\n this.Nodes = [...this.Nodes];\n this.cdr.detectChanges();\n return;\n }\n try {\n const provider = this.ProviderToUse;\n const conceptEntity = await provider.GetEntityObject<MJGraphConceptEntity>(\n 'MJ: Graph Concepts',\n provider.CurrentUser,\n );\n if (await conceptEntity.Load(node.ID)) {\n conceptEntity.Status = 'Approved';\n const saved = await conceptEntity.Save();\n if (saved) {\n node.Status = 'Approved';\n this.Nodes = [...this.Nodes];\n } else {\n this.ActionError =\n conceptEntity.LatestResult?.CompleteMessage || 'Failed to save concept approval.';\n }\n } else {\n this.ActionError = `Could not load Graph Concept ${node.ID}.`;\n }\n } catch (err) {\n this.ActionError = err instanceof Error ? err.message : String(err);\n }\n this.cdr.detectChanges();\n }\n }\n\n public LoadSampleGraphPreview(): void {\n this.LoadError = null;\n this.ActionError = null;\n const sampleOpt = this.buildSampleGraphOption();\n if (!this.GraphOptions.some(o => UUIDsEqual(o.ID, sampleOpt.ID))) {\n this.GraphOptions = [...this.GraphOptions, sampleOpt];\n }\n this.SelectedGraphID = sampleOpt.ID;\n this.loadSampleCanonGraphNodesAndEdges();\n this.applyOverlayFilters();\n this.rebuildConceptTypeCounts();\n this.cdr.detectChanges();\n }\n\n // ================================================================\n // Data Loading (MJ: Graph Types, MJ: Graph Concept Types, MJ: Graphs)\n // ================================================================\n\n public async LoadGraphCatalog(): Promise<void> {\n this.IsLoading = true;\n this.LoadError = null;\n this.ActionError = null;\n this.cdr.detectChanges();\n\n try {\n const provider = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(provider);\n const user = provider.CurrentUser;\n\n const [graphTypesRes, conceptTypesRes, authorityTiersRes, graphsRes, sourcesRes] = await rv.RunViews([\n {\n EntityName: 'MJ: Graph Types',\n ExtraFilter: `Status = 'Active'`,\n OrderBy: 'Rank ASC, Name ASC',\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: Graph Concept Types',\n ExtraFilter: `Status = 'Active'`,\n OrderBy: 'Rank ASC, Name ASC',\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: Graph Authority Tiers',\n ExtraFilter: `Status = 'Active'`,\n OrderBy: 'Rank DESC, Name ASC',\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: Graphs',\n ExtraFilter: `Status = 'Active'`,\n OrderBy: 'Name ASC',\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: Content Sources',\n Fields: ['ID', 'Name', 'GraphID'],\n ResultType: 'simple',\n },\n ], user);\n\n const graphTypesById = new Map<string, MJGraphTypeEntity>();\n for (const gt of (graphTypesRes?.Results ?? []) as MJGraphTypeEntity[]) {\n graphTypesById.set(NormalizeUUID(gt.ID), gt);\n }\n\n this.authorityTiersById.clear();\n for (const at of (authorityTiersRes?.Results ?? []) as MJGraphAuthorityTierEntity[]) {\n this.authorityTiersById.set(NormalizeUUID(at.ID), at);\n }\n\n const conceptTypes = (conceptTypesRes?.Results ?? []) as MJGraphConceptTypeEntity[];\n this.ConceptTypeOptions = conceptTypes.length > 0\n ? conceptTypes.map(ct => ({\n ID: ct.ID,\n Name: ct.Name,\n Rank: ct.Rank ?? 100,\n IconClass: ct.IconClass || 'fa-solid fa-circle-dot',\n Color: this.resolveConceptTypeColor(ct.Name),\n Count: 0,\n }))\n : this.buildDefaultConceptTypeOptions();\n\n this.Categories = [\n ...this.ConceptTypeOptions.map(ct => ({\n Category: ct.Name,\n Label: ct.Name,\n Color: ct.Color,\n IconClass: ct.IconClass,\n Rank: ct.Rank,\n })),\n { Category: 'grounding', Label: 'Grounded Primitive', Color: '#14b8a6', IconClass: 'fa-solid fa-bolt', Rank: 90 },\n { Category: 'chunk', Label: 'Source Chunk', Color: '#64748b', IconClass: 'fa-solid fa-file-lines', Rank: 95 },\n ];\n\n const sourcesByGraphId = new Map<string, string[]>();\n for (const src of (sourcesRes?.Results ?? []) as Array<{ ID: string; Name: string; GraphID: string | null }>) {\n if (src.GraphID) {\n const key = NormalizeUUID(src.GraphID);\n const list = sourcesByGraphId.get(key) ?? [];\n list.push(src.Name || 'Untitled Source');\n sourcesByGraphId.set(key, list);\n }\n }\n\n const dbGraphs = (graphsRes?.Results ?? []) as MJGraphEntity[];\n const options: SemanticGraphOption[] = dbGraphs.map(g => {\n const gt = graphTypesById.get(NormalizeUUID(g.GraphTypeID));\n return {\n ID: g.ID,\n Name: g.Name,\n Description: g.Description ?? '',\n GraphTypeID: g.GraphTypeID,\n GraphTypeName: gt?.Name ?? g.GraphType ?? 'Custom',\n IsCanon: Boolean(gt?.IsCanon ?? (g.GraphType === 'Canon')),\n GraphTypeRank: gt?.Rank ?? 100,\n IconClass: gt?.IconClass || 'fa-solid fa-diagram-project',\n ConceptCount: 0,\n ConflictCount: 0,\n SourceNames: sourcesByGraphId.get(NormalizeUUID(g.ID)) ?? [],\n };\n }).sort((a, b) => a.GraphTypeRank - b.GraphTypeRank || a.Name.localeCompare(b.Name));\n\n this.GraphOptions = options;\n if (this.GraphOptions.length > 0) {\n if (!this.SelectedGraphID || !this.GraphOptions.some(o => UUIDsEqual(o.ID, this.SelectedGraphID))) {\n this.SelectedGraphID = this.GraphOptions[0].ID;\n }\n await this.LoadSelectedGraphData();\n } else {\n this.rawNodes = [];\n this.rawEdges = [];\n this.Nodes = [];\n this.Edges = [];\n }\n } catch (err) {\n this.LoadError = err instanceof Error ? err.message : String(err);\n this.ConceptTypeOptions = this.buildDefaultConceptTypeOptions();\n this.rawNodes = [];\n this.rawEdges = [];\n this.Nodes = [];\n this.Edges = [];\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n public async LoadSelectedGraphData(): Promise<void> {\n const selected = this.SelectedGraph;\n if (!selected) {\n this.rawNodes = [];\n this.rawEdges = [];\n this.applyOverlayFilters();\n this.rebuildConceptTypeCounts();\n this.cdr.detectChanges();\n return;\n }\n if (selected.IsSample) {\n this.loadSampleCanonGraphNodesAndEdges();\n this.applyOverlayFilters();\n this.rebuildConceptTypeCounts();\n this.cdr.detectChanges();\n return;\n }\n\n if (!this.isValidUUID(selected.ID)) {\n this.LoadError = `Invalid Graph ID: ${selected.ID}`;\n return;\n }\n\n this.IsLoading = true;\n this.LoadError = null;\n this.cdr.detectChanges();\n\n try {\n const provider = this.ProviderToUse;\n const rv = RunView.FromMetadataProvider(provider);\n const user = provider.CurrentUser;\n const normalizedGraphId = NormalizeUUID(selected.ID);\n\n const [conceptsRes, edgesRes] = await rv.RunViews([\n {\n EntityName: 'MJ: Graph Concepts',\n ExtraFilter: `GraphID = '${normalizedGraphId}'`,\n OrderBy: 'Name ASC',\n MaxRows: 500,\n ResultType: 'simple',\n },\n {\n EntityName: 'MJ: Graph Edges',\n ExtraFilter: `GraphID = '${normalizedGraphId}'`,\n MaxRows: 1000,\n ResultType: 'simple',\n },\n ], user);\n\n const concepts = (conceptsRes?.Results ?? []) as MJGraphConceptEntity[];\n const edges = (edgesRes?.Results ?? []) as MJGraphEdgeEntity[];\n\n if (concepts.length === 0 && edges.length === 0) {\n this.rawNodes = [];\n this.rawEdges = [];\n selected.ConceptCount = 0;\n selected.ConflictCount = 0;\n this.applyOverlayFilters();\n this.rebuildConceptTypeCounts();\n return;\n }\n\n const rankByTypeName = new Map<string, number>();\n for (const ct of this.ConceptTypeOptions) {\n rankByTypeName.set(ct.Name.toLowerCase(), ct.Rank);\n }\n\n const nodes: GraphNode[] = concepts.map(c => {\n const typeName = c.ConceptType || 'Term';\n const rank = rankByTypeName.get(typeName.toLowerCase()) ?? 60;\n const tierEntity = c.AuthorityTierID ? this.authorityTiersById.get(NormalizeUUID(c.AuthorityTierID)) : undefined;\n const tierLabel = tierEntity ? `${tierEntity.Name} (${tierEntity.Rank})` : (c.AuthorityTier || 'Reference');\n return {\n ID: c.ID,\n Label: c.Name,\n Sublabel: `${typeName} · ${tierEntity?.Name ?? c.AuthorityTier ?? 'Reference'}`,\n Category: typeName,\n Rank: rank,\n Badge: `#${rank}`,\n Status: c.Status,\n AuthorityTier: tierLabel,\n ParentID: c.ParentID ?? undefined,\n Description: c.Description,\n Specification: c.Specification ?? undefined,\n Conflicts: [],\n Groundings: [],\n ProvenanceChunks: [],\n Data: {\n EntityName: 'MJ: Graph Concepts',\n RecordID: c.ID,\n },\n };\n });\n\n const nodeById = new Map<string, GraphNode>();\n for (const n of nodes) {\n nodeById.set(NormalizeUUID(n.ID), n);\n }\n\n const graphEdges: GraphEdge[] = [];\n let conflictCount = 0;\n\n for (const e of edges) {\n const edgeLabel = e.EdgeType || 'Related To';\n const isConflict = edgeLabel.toLowerCase().includes('contradict');\n if (isConflict) {\n conflictCount++;\n }\n\n // Ensure synthetic endpoint nodes exist for non-concept endpoints (chunks or grounded MJ entities)\n const srcKey = NormalizeUUID(e.SourceRecordID);\n const tgtKey = NormalizeUUID(e.TargetRecordID);\n\n if (!nodeById.has(srcKey)) {\n const synth = this.createSyntheticEndpointNode(e.SourceEntity || 'Record', e.SourceRecordID, edgeLabel);\n nodes.push(synth);\n nodeById.set(srcKey, synth);\n }\n if (!nodeById.has(tgtKey)) {\n const synth = this.createSyntheticEndpointNode(e.TargetEntity || 'Record', e.TargetRecordID, edgeLabel);\n nodes.push(synth);\n nodeById.set(tgtKey, synth);\n }\n\n const srcNode = nodeById.get(srcKey)!;\n const tgtNode = nodeById.get(tgtKey)!;\n\n if (edgeLabel === 'Defines' || edgeLabel === 'Describes' || edgeLabel === 'Measures' || edgeLabel === 'Implements') {\n srcNode.Groundings = srcNode.Groundings ?? [];\n srcNode.Groundings.push({\n EdgeLabel: edgeLabel,\n TargetEntityName: e.TargetEntity || 'MJ: Entities',\n TargetRecordID: e.TargetRecordID,\n TargetDisplayName: `${e.TargetEntity || 'Entity'}: ${tgtNode.Label}`,\n });\n } else if (edgeLabel === 'SourcedFrom') {\n srcNode.ProvenanceChunks = srcNode.ProvenanceChunks ?? [];\n srcNode.ProvenanceChunks.push({\n ChunkID: e.TargetRecordID,\n SourceName: e.TargetEntity || 'MJ: Content Item Chunks',\n Snippet: `Chunk ${e.TargetRecordID.slice(0, 8)} (Confidence: ${Math.round((e.Confidence ?? 1) * 100)}%)`,\n });\n } else if (isConflict) {\n const conflictItem: GraphConflictItem = {\n HigherAuthoritySummary: srcNode.Label,\n ConflictingSummary: tgtNode.Label,\n ResolutionNote: 'Flagged by Contradicts edge for steward review.',\n EdgeID: e.ID,\n };\n srcNode.Conflicts = [...(srcNode.Conflicts ?? []), conflictItem];\n tgtNode.Conflicts = [...(tgtNode.Conflicts ?? []), conflictItem];\n }\n\n graphEdges.push({\n ID: e.ID,\n SourceID: e.SourceRecordID,\n TargetID: e.TargetRecordID,\n Label: edgeLabel,\n Direction: 'directed',\n Weight: e.Weight ?? 1,\n Style: isConflict ? 'dashed' : (edgeLabel === 'SourcedFrom' ? 'dotted' : 'solid'),\n Color: isConflict ? '#f43f5e' : undefined,\n Animated: isConflict,\n });\n }\n\n selected.ConceptCount = concepts.length;\n selected.ConflictCount = conflictCount;\n this.rawNodes = nodes;\n this.rawEdges = graphEdges;\n this.applyOverlayFilters();\n this.rebuildConceptTypeCounts();\n } catch (err) {\n console.error('[SemanticGraphExplorer] Error loading graph data:', err);\n } finally {\n this.IsLoading = false;\n this.cdr.detectChanges();\n }\n }\n\n // ================================================================\n // Private Helpers & Sample Canon Graph\n // ================================================================\n\n private applyOverlayFilters(): void {\n const filteredNodes = this.rawNodes.filter(n => {\n if (!this.ShowGroundedPrimitives && n.Category === 'grounding') {\n return false;\n }\n if (!this.ShowSourceChunks && n.Category === 'chunk') {\n return false;\n }\n return true;\n });\n\n const visibleNodeIds = new Set(filteredNodes.map(n => NormalizeUUID(n.ID)));\n const filteredEdges = this.rawEdges.filter(e => {\n if (!visibleNodeIds.has(NormalizeUUID(e.SourceID)) || !visibleNodeIds.has(NormalizeUUID(e.TargetID))) {\n return false;\n }\n if (!this.HighlightConflicts && e.Label.toLowerCase().includes('contradict')) {\n return false;\n }\n return true;\n });\n\n this.Nodes = filteredNodes;\n this.Edges = filteredEdges;\n }\n\n private rebuildConceptTypeCounts(): void {\n const counts = new Map<string, number>();\n for (const n of this.rawNodes) {\n const key = String(n.Category || '').toLowerCase();\n counts.set(key, (counts.get(key) ?? 0) + 1);\n }\n this.ConceptTypeOptions = this.ConceptTypeOptions.map(opt => ({\n ...opt,\n Count: counts.get(opt.Name.toLowerCase()) ?? 0,\n }));\n }\n\n private createSyntheticEndpointNode(entityName: string, recordId: string, edgeLabel: string): GraphNode {\n const isChunk = entityName.toLowerCase().includes('chunk') || edgeLabel === 'SourcedFrom';\n return {\n ID: recordId,\n Label: isChunk ? `Chunk ${recordId.slice(0, 6)}` : `${entityName.replace(/^MJ:\\s*/, '')}`,\n Sublabel: entityName,\n Category: isChunk ? 'chunk' : 'grounding',\n Badge: isChunk ? '§' : '⚡',\n Radius: 20,\n Status: 'Approved',\n Data: {\n EntityName: entityName,\n RecordID: recordId,\n },\n };\n }\n\n public OpenGroundingRecord(grounding: GraphGroundingItem): void {\n if (grounding.TargetEntityName && grounding.TargetRecordID && !grounding.TargetRecordID.startsWith('sample-')) {\n this.OpenRecordRequested.emit({\n EntityName: grounding.TargetEntityName,\n RecordID: grounding.TargetRecordID,\n });\n }\n }\n\n private isValidUUID(id: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id.trim());\n }\n\n private resolveConceptTypeColor(name: string): string {\n return CONCEPT_TYPE_COLORS[name.trim().toLowerCase()] ?? '#38bdf8';\n }\n\n private buildDefaultConceptTypeOptions(): ConceptTypeFilterOption[] {\n return [\n { ID: 'ct-policy', Name: 'Policy', Rank: 10, IconClass: 'fa-solid fa-gavel', Color: '#f43f5e', Count: 0 },\n { ID: 'ct-metric', Name: 'Metric', Rank: 20, IconClass: 'fa-solid fa-chart-line', Color: '#10b981', Count: 0 },\n { ID: 'ct-process', Name: 'Process', Rank: 30, IconClass: 'fa-solid fa-gears', Color: '#8b5cf6', Count: 0 },\n { ID: 'ct-role', Name: 'Role', Rank: 40, IconClass: 'fa-solid fa-user-shield', Color: '#f59e0b', Count: 0 },\n { ID: 'ct-domain', Name: 'Domain', Rank: 50, IconClass: 'fa-solid fa-layer-group', Color: '#3b82f6', Count: 0 },\n { ID: 'ct-term', Name: 'Term', Rank: 60, IconClass: 'fa-solid fa-book-bookmark', Color: '#06b6d4', Count: 0 },\n ];\n }\n\n private buildSampleGraphOption(): SemanticGraphOption {\n return {\n ID: SAMPLE_GRAPH_ID,\n Name: 'Association Governance Canon',\n Description: 'Multi-source Canon graph illustrating ranked Concept Types, AuthorityTier precedence, grounded ABVs/Queries, and Contradicts conflict detection.',\n GraphTypeID: 'A4B9E210-1001-4C81-9A01-000000000001',\n GraphTypeName: 'Canon',\n IsCanon: true,\n GraphTypeRank: 10,\n IconClass: 'fa-solid fa-scale-balanced',\n ConceptCount: 5,\n ConflictCount: 1,\n SourceNames: ['Association Bylaws (PDF)', 'Finance & Dues SOPs', 'Staff Desk Manual'],\n IsSample: true,\n };\n }\n\n private loadSampleCanonGraphNodesAndEdges(): void {\n const ID_DOMAIN_GOV = 'C3000000-0000-4000-8000-000000000001';\n const ID_POLICY_GRACE = 'C3000000-0000-4000-8000-000000000002';\n const ID_METRIC_NRR = 'C3000000-0000-4000-8000-000000000003';\n const ID_PROCESS_RENEWAL = 'C3000000-0000-4000-8000-000000000004';\n const ID_ROLE_STEWARD = 'C3000000-0000-4000-8000-000000000005';\n const ID_CHUNK_BYLAWS = 'C3000000-0000-4000-8000-000000000006';\n const ID_CHUNK_MANUAL = 'C3000000-0000-4000-8000-000000000007';\n const ID_ABV_GRACE = 'B4000000-0000-4000-8000-000000000001';\n const ID_ABV_ACTIVE = 'B4000000-0000-4000-8000-000000000002';\n const ID_QUERY_RETENTION = 'B4000000-0000-4000-8000-000000000003';\n\n const conflictDetail: GraphConflictItem = {\n HigherAuthoritySummary: 'Association Bylaws (Article IV §4.2) — \"60 days\"',\n ConflictingSummary: 'Staff Desk Manual (Ch. 3 p. 42) — \"90 days\"',\n ResolutionNote: 'Resolved in favor of Bylaws (Rank 100 > DeptPractice 40); Contradicts edge flagged for steward review.',\n };\n\n const sampleChunks: GraphProvenanceChunkItem[] = [\n {\n ChunkID: ID_CHUNK_BYLAWS,\n SourceName: 'Association Bylaws PDF',\n Locator: 'Article IV > §4.2',\n AuthorityTier: 'Bylaws (100)',\n Snippet: 'A member whose dues remain unpaid 60 days after the renewal date shall be suspended.',\n },\n {\n ChunkID: ID_CHUNK_MANUAL,\n SourceName: 'Staff Desk Manual',\n Locator: 'Chapter 3 > Grace Handling',\n AuthorityTier: 'DeptPractice (40)',\n Snippet: 'Customer service reps wait 90 days before deactivating member portal access.',\n },\n ];\n\n const sampleGroundingsGrace: GraphGroundingItem[] = [\n {\n EdgeLabel: 'Defines',\n TargetEntityName: 'MJ: Entity Alternate Base Views',\n TargetRecordID: ID_ABV_GRACE,\n TargetDisplayName: 'MembersInGracePeriod (vwUsers)',\n },\n ];\n\n const sampleGroundingsMetric: GraphGroundingItem[] = [\n {\n EdgeLabel: 'Measures',\n TargetEntityName: 'MJ: Queries',\n TargetRecordID: ID_QUERY_RETENTION,\n TargetDisplayName: 'Golden Query: Annual Cohort Retention',\n },\n {\n EdgeLabel: 'Defines',\n TargetEntityName: 'MJ: Entity Alternate Base Views',\n TargetRecordID: ID_ABV_ACTIVE,\n TargetDisplayName: 'Active Subscribers (vwUsers)',\n },\n ];\n\n this.rawNodes = [\n {\n ID: ID_DOMAIN_GOV,\n Label: 'Membership Governance',\n Sublabel: 'Domain · Bylaws',\n Category: 'Domain',\n Rank: 50,\n Badge: '#50',\n Status: 'Approved',\n AuthorityTier: 'Bylaws (100)',\n Description: 'Umbrella governance domain for member standing, eligibility, dues billing, and suspension rules.',\n Specification: '### Scope\\nCovers all active membership classes, renewal cycles, and standing transitions across national and chapter tiers.',\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_DOMAIN_GOV },\n },\n {\n ID: ID_POLICY_GRACE,\n Label: 'Renewal Grace Period',\n Sublabel: 'Policy · Bylaws',\n Category: 'Policy',\n Rank: 10,\n Badge: '#10',\n ParentID: ID_DOMAIN_GOV,\n Status: 'Proposed',\n AuthorityTier: 'Bylaws (100)',\n Description: 'Members have 60 calendar days after invoice due date before benefits are suspended.',\n Specification: '### Canonical Rule (Bylaws Precedence)\\n- Grace Window: Strictly 60 calendar days past invoice due date.\\n- Late Notice: Triggered at day 30 and day 45.\\n- Overrides the 90-day informal practice in the Staff Desk Manual.',\n Conflicts: [conflictDetail],\n Groundings: sampleGroundingsGrace,\n ProvenanceChunks: sampleChunks,\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_POLICY_GRACE },\n },\n {\n ID: ID_METRIC_NRR,\n Label: 'Net Member Retention Rate',\n Sublabel: 'Metric · ExecutiveSOP',\n Category: 'Metric',\n Rank: 20,\n Badge: '#20',\n ParentID: ID_DOMAIN_GOV,\n Status: 'Approved',\n AuthorityTier: 'ExecutiveSOP (60)',\n Description: 'Percentage of active cohort members renewing within the 60-day grace window.',\n Specification: '### Formula\\nRenewedActiveMembers / PriorPeriodActiveSubscribers * 100',\n Groundings: sampleGroundingsMetric,\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_METRIC_NRR },\n },\n {\n ID: ID_PROCESS_RENEWAL,\n Label: 'Dues Renewal & Escalation',\n Sublabel: 'Process · ExecutiveSOP',\n Category: 'Process',\n Rank: 30,\n Badge: '#30',\n ParentID: ID_DOMAIN_GOV,\n Status: 'Proposed',\n AuthorityTier: 'ExecutiveSOP (60)',\n Description: 'End-to-end invoice dispatch, D&B credit check, 60-day grace monitoring, and suspension workflow.',\n Specification: '### Steps\\n1. Dispatch invoice 30 days prior to expiration.\\n2. Run credit risk check for enterprise tiers.\\n3. Enforce 60-day Renewal Grace Period.',\n Groundings: [\n {\n EdgeLabel: 'Defines',\n TargetEntityName: 'MJ: Entity Alternate Base Views',\n TargetRecordID: ID_ABV_GRACE,\n TargetDisplayName: 'MembersInGracePeriod (vwUsers)',\n },\n ],\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_PROCESS_RENEWAL },\n },\n {\n ID: ID_ROLE_STEWARD,\n Label: 'Finance Policy Steward',\n Sublabel: 'Role · Bylaws',\n Category: 'Role',\n Rank: 40,\n Badge: '#40',\n ParentID: ID_DOMAIN_GOV,\n Status: 'Approved',\n AuthorityTier: 'Bylaws (100)',\n Description: 'Designated officer authorized to approve grace waivers and canon policy updates.',\n Specification: '### Authority\\nApproves Proposed GraphConcepts in the Association Core Canon and resolves Contradicts edges.',\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_ROLE_STEWARD },\n },\n {\n ID: ID_ABV_ACTIVE,\n Label: 'ABV: Active Subscribers',\n Sublabel: 'MJ: Entity Alternate Base Views',\n Category: 'grounding',\n Badge: '⚡',\n Radius: 21,\n Status: 'Approved',\n AuthorityTier: 'Schema Grounded',\n Description: 'Governed SQL cohort view filtering active paid members.',\n Specification: \"WHERE Status = 'Active' AND PaidThroughDate >= GETUTCDATE()\",\n Data: { EntityName: 'MJ: Entity Alternate Base Views', RecordID: ID_ABV_ACTIVE },\n },\n {\n ID: ID_QUERY_RETENTION,\n Label: 'Query: Cohort Retention',\n Sublabel: 'MJ: Queries',\n Category: 'grounding',\n Badge: '⚡',\n Radius: 21,\n Status: 'Approved',\n AuthorityTier: 'Schema Grounded',\n Description: 'Verified Golden Query computing trailing 12-month cohort retention.',\n Data: { EntityName: 'MJ: Queries', RecordID: ID_QUERY_RETENTION },\n },\n {\n ID: ID_CHUNK_BYLAWS,\n Label: 'Bylaws §4.2 (\"60 days\")',\n Sublabel: 'Association Bylaws PDF',\n Category: 'chunk',\n Badge: '§',\n Radius: 20,\n Status: 'Approved',\n AuthorityTier: 'Bylaws (100)',\n Description: 'Authoritative chunk from Association Bylaws Article IV §4.2.',\n Specification: '\"A member whose dues remain unpaid 60 days after the renewal date shall be suspended from good standing.\"',\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_CHUNK_BYLAWS },\n },\n {\n ID: ID_CHUNK_MANUAL,\n Label: 'Desk Manual p.42 (\"90 days\")',\n Sublabel: 'Staff Desk Manual',\n Category: 'chunk',\n Badge: '§',\n Radius: 20,\n Status: 'Proposed',\n AuthorityTier: 'DeptPractice (40)',\n Description: 'Conflicting lower-authority chunk from Staff Desk Manual Ch. 3.',\n Specification: '\"Customer service reps wait 90 days before deactivating member portal access.\"',\n Conflicts: [conflictDetail],\n Data: { EntityName: 'MJ: Graph Concepts', RecordID: ID_CHUNK_MANUAL },\n },\n ];\n\n this.rawEdges = [\n { ID: 'e-1', SourceID: ID_DOMAIN_GOV, TargetID: ID_POLICY_GRACE, Label: 'Broader Than', Direction: 'directed' },\n { ID: 'e-2', SourceID: ID_DOMAIN_GOV, TargetID: ID_METRIC_NRR, Label: 'Broader Than', Direction: 'directed' },\n { ID: 'e-3', SourceID: ID_DOMAIN_GOV, TargetID: ID_PROCESS_RENEWAL, Label: 'Broader Than', Direction: 'directed' },\n { ID: 'e-4', SourceID: ID_ROLE_STEWARD, TargetID: ID_POLICY_GRACE, Label: 'Governs', Direction: 'directed' },\n { ID: 'e-5', SourceID: ID_METRIC_NRR, TargetID: ID_ABV_ACTIVE, Label: 'Defines', Direction: 'directed' },\n { ID: 'e-6', SourceID: ID_METRIC_NRR, TargetID: ID_QUERY_RETENTION, Label: 'Measures', Direction: 'directed' },\n { ID: 'e-7', SourceID: ID_POLICY_GRACE, TargetID: ID_CHUNK_BYLAWS, Label: 'SourcedFrom', Direction: 'directed', Style: 'dotted' },\n { ID: 'e-8', SourceID: ID_POLICY_GRACE, TargetID: ID_CHUNK_MANUAL, Label: 'SourcedFrom', Direction: 'directed', Style: 'dotted' },\n {\n ID: 'e-conflict-1',\n SourceID: ID_CHUNK_BYLAWS,\n TargetID: ID_CHUNK_MANUAL,\n Label: 'Contradicts (60d vs 90d)',\n Direction: 'directed',\n Style: 'dashed',\n Color: '#f43f5e',\n Animated: true,\n Weight: 2.5,\n },\n ];\n\n this.SelectedNodeId = ID_POLICY_GRACE;\n }\n}\n\n/** Tree-shaking prevention */\nexport function LoadSemanticGraphExplorerComponent(): void {\n // Prevents tree-shaking of the component\n}\n","<div class=\"semantic-graph-studio\">\n <!-- Left Rail: MJ: Graphs Selector, Ranked MJ: Graph Concept Types, Overlays & Connected Sources -->\n <aside class=\"semantic-graph-rail\">\n <div class=\"rail-scroll\">\n <!-- 1. MJ: Graphs Partition Selector -->\n <section class=\"rail-section\">\n <div class=\"rail-section-header\">\n <span class=\"rail-section-title\">MJ: Graphs</span>\n <button\n type=\"button\"\n class=\"canon-filter-toggle\"\n [class.active]=\"OnlyCanonGraphs\"\n (click)=\"ToggleCanonFilter()\"\n title=\"Filter to Graph Types with IsCanon = true\">\n <i class=\"fa-solid fa-star\"></i>\n Canon Only\n </button>\n </div>\n\n <div class=\"graph-list\">\n @for (g of VisibleGraphOptions; track g.ID) {\n <button\n type=\"button\"\n class=\"graph-card\"\n [class.selected]=\"SelectedGraph?.ID === g.ID\"\n (click)=\"SelectGraph(g.ID)\">\n <div class=\"graph-card-top\">\n <span class=\"graph-card-name\">\n <i [class]=\"g.IconClass\" class=\"graph-card-icon\"></i>\n {{ g.Name }}\n </span>\n <span class=\"graph-type-badge\" [class.is-canon]=\"g.IsCanon\">\n @if (g.IsCanon) { ★ } {{ g.GraphTypeName }} · #{{ g.GraphTypeRank }}\n </span>\n </div>\n <div class=\"graph-card-meta\">\n <span>{{ g.ConceptCount }} concepts</span>\n @if (g.ConflictCount > 0) {\n <span class=\"conflict-pill\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{ g.ConflictCount }} {{ g.ConflictCount === 1 ? 'conflict' : 'conflicts' }}\n </span>\n }\n </div>\n </button>\n }\n </div>\n </section>\n\n <!-- 2. Ranked MJ: Graph Concept Types Filter -->\n <section class=\"rail-section\">\n <div class=\"rail-section-header\">\n <span class=\"rail-section-title\">Concept Types (By Rank)</span>\n @if (ActiveConceptTypeFilter) {\n <button type=\"button\" class=\"rail-reset-btn\" (click)=\"ToggleConceptTypeFilter(null)\">\n All\n </button>\n }\n </div>\n\n <div class=\"concept-type-list\">\n @for (ct of ConceptTypeOptions; track ct.ID) {\n <button\n type=\"button\"\n class=\"concept-type-pill\"\n [class.active]=\"ActiveConceptTypeFilter?.toLowerCase() === ct.Name.toLowerCase()\"\n [class.dimmed]=\"ActiveConceptTypeFilter && ActiveConceptTypeFilter.toLowerCase() !== ct.Name.toLowerCase()\"\n (click)=\"ToggleConceptTypeFilter(ct.Name)\">\n <span class=\"concept-type-left\">\n <span class=\"concept-type-dot\" [style.background]=\"ct.Color\"></span>\n <i [class]=\"ct.IconClass\" class=\"concept-type-icon\"></i>\n <span class=\"concept-type-name\">{{ ct.Name }}</span>\n </span>\n <span class=\"concept-type-right\">\n Rank #{{ ct.Rank }} · <strong>{{ ct.Count }}</strong>\n </span>\n </button>\n }\n </div>\n </section>\n\n <!-- 3. Edge & Node Overlay Toggles -->\n <section class=\"rail-section\">\n <span class=\"rail-section-title\">Graph Overlays</span>\n <div class=\"overlay-toggle-list\">\n <label class=\"overlay-toggle-row\">\n <span>Grounded MJ Primitives</span>\n <input\n type=\"checkbox\"\n [(ngModel)]=\"ShowGroundedPrimitives\"\n (ngModelChange)=\"OnOverlayToggleChanged()\" />\n </label>\n <label class=\"overlay-toggle-row\">\n <span>Source Chunks (SourcedFrom)</span>\n <input\n type=\"checkbox\"\n [(ngModel)]=\"ShowSourceChunks\"\n (ngModelChange)=\"OnOverlayToggleChanged()\" />\n </label>\n <label class=\"overlay-toggle-row conflict-toggle\">\n <span>Highlight Contradicts Edges</span>\n <input\n type=\"checkbox\"\n [(ngModel)]=\"HighlightConflicts\"\n (ngModelChange)=\"OnOverlayToggleChanged()\" />\n </label>\n </div>\n </section>\n\n <!-- 4. Connected Content Sources -->\n @if (SelectedGraph && SelectedGraph.SourceNames.length > 0) {\n <section class=\"rail-section\">\n <span class=\"rail-section-title\">Connected Content Sources</span>\n <div class=\"connected-source-list\">\n @for (srcName of SelectedGraph.SourceNames; track srcName) {\n <div class=\"connected-source-row\">\n <i class=\"fa-solid fa-database\"></i>\n <span>{{ srcName }}</span>\n </div>\n }\n </div>\n </section>\n }\n </div>\n </aside>\n\n <!-- Main Canvas: <mj-graph-view> with Force/Hierarchy/Circular Layouts & Projected Canon Inspector -->\n <main class=\"semantic-graph-canvas\">\n @if (LoadError || ActionError) {\n <div class=\"semantic-graph-alert\" role=\"alert\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError || ActionError }}</span>\n </div>\n }\n\n @if (!IsLoading && Nodes.length === 0) {\n <div class=\"semantic-graph-empty-banner\">\n <span>No concepts or edges in this graph yet.</span>\n <button type=\"button\" class=\"sample-preview-btn\" (click)=\"LoadSampleGraphPreview()\">\n Load Example Canon Graph\n </button>\n </div>\n }\n\n @if (IsLoading) {\n <div class=\"semantic-graph-loading\">\n <mj-loading text=\"Loading Semantic Graph &amp; Canon concepts...\"></mj-loading>\n </div>\n } @else {\n <mj-graph-view\n [Title]=\"SelectedGraph?.Name || 'Semantic Graph'\"\n [Nodes]=\"Nodes\"\n [Edges]=\"Edges\"\n [Categories]=\"Categories\"\n [LayoutMode]=\"LayoutMode\"\n [SelectedNodeId]=\"SelectedNodeId\"\n [ActiveCategoryFilter]=\"ActiveConceptTypeFilter\"\n [AutoOpenInspector]=\"true\"\n [ShowToolbar]=\"true\"\n [ShowLegend]=\"true\"\n [ShowInspector]=\"true\"\n [InspectorCustomTemplate]=\"canonInspectorTemplate\"\n [Searchable]=\"true\"\n (NodeSelected)=\"OnNodeSelected($event)\"\n (NodeNavigated)=\"OnNodeNavigated($event)\"\n (NodeAction)=\"OnNodeAction($event)\"\n (CategoryFilterChanged)=\"OnCategoryFilterChangedFromCanvas($event)\">\n </mj-graph-view>\n }\n\n <ng-template #canonInspectorTemplate let-node>\n @if (node.Specification) {\n <div class=\"canon-inspector-section\">\n <span class=\"canon-inspector-section-label\">Specification</span>\n <pre class=\"canon-inspector-spec\">{{ node.Specification }}</pre>\n </div>\n }\n\n @if (node.Conflicts && node.Conflicts.length > 0) {\n <div class=\"canon-conflict-box\">\n <div class=\"canon-conflict-title\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n Authority Conflict (Contradicts Edge)\n </div>\n @for (conflict of node.Conflicts; track conflict.HigherAuthoritySummary) {\n <div class=\"canon-conflict-details\">\n <div><strong>Higher Tier:</strong> {{ conflict.HigherAuthoritySummary }}</div>\n <div><strong>Conflicting:</strong> {{ conflict.ConflictingSummary }}</div>\n @if (conflict.ResolutionNote) {\n <div class=\"canon-conflict-note\">{{ conflict.ResolutionNote }}</div>\n }\n </div>\n }\n </div>\n }\n\n @if (node.Groundings && node.Groundings.length > 0) {\n <div class=\"canon-inspector-section\">\n <span class=\"canon-inspector-section-label\">Grounded MJ Primitives ({{ node.Groundings.length }})</span>\n <div class=\"canon-grounding-list\">\n @for (g of node.Groundings; track g.TargetRecordID + g.EdgeLabel) {\n <button\n type=\"button\"\n class=\"canon-grounding-item\"\n (click)=\"OpenGroundingRecord(g)\">\n <span class=\"canon-grounding-edge\">{{ g.EdgeLabel }}</span>\n <span class=\"canon-grounding-target\">{{ g.TargetDisplayName }}</span>\n <i class=\"fa-solid fa-arrow-up-right-from-square canon-grounding-icon\"></i>\n </button>\n }\n </div>\n </div>\n }\n\n @if (node.ProvenanceChunks && node.ProvenanceChunks.length > 0) {\n <div class=\"canon-inspector-section\">\n <span class=\"canon-inspector-section-label\">SourcedFrom Chunks ({{ node.ProvenanceChunks.length }})</span>\n <div class=\"canon-chunk-list\">\n @for (chunk of node.ProvenanceChunks; track chunk.ChunkID) {\n <div class=\"canon-chunk-card\">\n <div class=\"canon-chunk-header\">\n <span>{{ chunk.SourceName }}{{ chunk.Locator ? ' · ' + chunk.Locator : '' }}</span>\n @if (chunk.AuthorityTier) {\n <span class=\"canon-chunk-tier\">{{ chunk.AuthorityTier }}</span>\n }\n </div>\n <div class=\"canon-chunk-snippet\">{{ chunk.Snippet }}</div>\n </div>\n }\n </div>\n </div>\n }\n </ng-template>\n </main>\n</div>\n"]}
@@ -16,7 +16,7 @@
16
16
  * the salient title/subtitle the surface already shows on screen.
17
17
  */
18
18
  /** Visualization modes hosted by the Visualize surface. */
19
- export declare const VISUALIZATION_MODES: readonly ["clusters", "tagcloud"];
19
+ export declare const VISUALIZATION_MODES: readonly ["clusters", "tagcloud", "graph"];
20
20
  /** A Visualize-surface mode id. */
21
21
  export type VisualizationModeId = (typeof VISUALIZATION_MODES)[number];
22
22
  /** Type-guard for a visualization mode id; keeps the switch tool tolerant. */
@@ -1 +1 @@
1
- {"version":3,"file":"visualize-agent-context.d.ts","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/visualize/visualize-agent-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,mCAAoC,CAAC;AAErE,mCAAmC;AACnC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,8EAA8E;AAC9E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAEnF;AAED,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAEnF;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5D;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5D;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,wBAAwB,EACrE,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,GAAG,IAAI,CAcV;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,wBAAwB,EACrE,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,GAAG,IAAI,CAEV;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACvC,+DAA+D;IAC/D,UAAU,EAAE,mBAAmB,CAAC;IAChC,uCAAuC;IACvC,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,kDAAkD;IAClD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBrG;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErG"}
1
+ {"version":3,"file":"visualize-agent-context.d.ts","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/visualize/visualize-agent-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,4CAA6C,CAAC;AAE9E,mCAAmC;AACnC,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,8EAA8E;AAC9E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAEnF;AAED,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,mBAAmB,CAEnF;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5D;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5D;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,wBAAwB,EACrE,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,GAAG,IAAI,CAcV;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,wBAAwB,EACrE,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,CAAC,EAAE,GACzB,CAAC,GAAG,IAAI,CAEV;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACvC,+DAA+D;IAC/D,UAAU,EAAE,mBAAmB,CAAC;IAChC,uCAAuC;IACvC,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,kDAAkD;IAClD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,gBAAgB,EAAE,sBAAsB,EAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBrG;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErG"}
@@ -16,7 +16,7 @@
16
16
  * the salient title/subtitle the surface already shows on screen.
17
17
  */
18
18
  /** Visualization modes hosted by the Visualize surface. */
19
- export const VISUALIZATION_MODES = ['clusters', 'tagcloud'];
19
+ export const VISUALIZATION_MODES = ['clusters', 'tagcloud', 'graph'];
20
20
  /** Type-guard for a visualization mode id; keeps the switch tool tolerant. */
21
21
  export function IsValidVisualizationMode(mode) {
22
22
  return typeof mode === 'string' && VISUALIZATION_MODES.includes(mode);
@@ -1 +1 @@
1
- {"version":3,"file":"visualize-agent-context.js","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/visualize/visualize-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure, framework-agnostic helpers for the Knowledge Hub\n * \"Visualize\" host surface's AI-agent integration.\n *\n * These functions are free of Angular / component dependencies so they can be\n * unit-tested in isolation. The host component\n * ({@link VisualizeResourceComponent}) supplies a plain snapshot of its current\n * state (active visualization mode plus the shared record-drilldown state) and\n * these helpers shape it into the key-value `AgentContext` object that flows to\n * the async chat agent and the realtime co-agent via\n * `NavigationService.SetAgentContext`. They also resolve agent-supplied\n * references (a drilldown record by id/title) the way a user refers to them.\n *\n * 🚨 SAFETY: these helpers only SHAPE read-only state and RESOLVE references —\n * no mutation, no side effects. Nothing here lists tagged record bodies beyond\n * the salient title/subtitle the surface already shows on screen.\n */\n\n/** Visualization modes hosted by the Visualize surface. */\nexport const VISUALIZATION_MODES = ['clusters', 'tagcloud'] as const;\n\n/** A Visualize-surface mode id. */\nexport type VisualizationModeId = (typeof VISUALIZATION_MODES)[number];\n\n/** Type-guard for a visualization mode id; keeps the switch tool tolerant. */\nexport function IsValidVisualizationMode(mode: unknown): mode is VisualizationModeId {\n return typeof mode === 'string' && (VISUALIZATION_MODES as readonly string[]).includes(mode);\n}\n\n/** @deprecated Use {@link IsValidVisualizationMode}. */\nexport function isValidVisualizationMode(mode: unknown): mode is VisualizationModeId {\n return IsValidVisualizationMode(mode);\n}\n\n/** Upper bound on how many drilldown record summaries we publish. */\nexport const VISUALIZE_CONTEXT_LIST_CAP = 25;\n\n/** Cap an array to {@link VISUALIZE_CONTEXT_LIST_CAP} entries. Pure; never mutates input. */\nexport function CapVisualizeList<T>(items: readonly T[]): T[] {\n return items.slice(0, VISUALIZE_CONTEXT_LIST_CAP);\n}\n\n/** @deprecated Use {@link CapVisualizeList}. */\nexport function capVisualizeList<T>(items: readonly T[]): T[] {\n return CapVisualizeList(items);\n}\n\n/**\n * A minimal id+title descriptor for a record currently listed in the shared\n * drilldown panel, supplied by the component so the pure resolver can match\n * agent input against what the user sees.\n */\nexport interface DrilldownRecordCandidate {\n RecordID: string;\n Title: string;\n}\n\n/**\n * Resolve an agent-supplied drilldown-record reference (id or title) to one of\n * the records currently listed in the panel. Tries, in order:\n * 1. exact record id (case-insensitive — SQL-Server-uppercase vs PG-lowercase UUIDs)\n * 2. exact title (case-insensitive)\n * 3. first case-insensitive *contains* match on the title\n *\n * Pure + deterministic; returns the matched candidate, or null on a miss.\n */\nexport function ResolveDrilldownRecord<T extends DrilldownRecordCandidate>(\n input: string,\n candidates: readonly T[],\n): T | null {\n const needle = (input ?? '').trim().toLowerCase();\n if (!needle) {\n return null;\n }\n const byId = candidates.find(c => c.RecordID.toLowerCase() === needle);\n if (byId) {\n return byId;\n }\n const byTitle = candidates.find(c => c.Title.toLowerCase() === needle);\n if (byTitle) {\n return byTitle;\n }\n return candidates.find(c => c.Title.toLowerCase().includes(needle)) ?? null;\n}\n\n/** @deprecated Use {@link ResolveDrilldownRecord}. */\nexport function resolveDrilldownRecord<T extends DrilldownRecordCandidate>(\n input: string,\n candidates: readonly T[],\n): T | null {\n return ResolveDrilldownRecord(input, candidates);\n}\n\n/**\n * A drilldown record summary the component derives from its loaded rows (id,\n * title, subtitle) so the agent knows what's openable without re-querying.\n */\nexport interface DrilldownRecordSummary {\n RecordID: string;\n Title: string;\n Subtitle: string;\n}\n\n/**\n * The plain, component-supplied snapshot used to build the Visualize agent context.\n * Mirrors the salient slice of the host's state: the active mode, the available\n * modes, and the shared drilldown panel (open/loading state, what it's showing,\n * and the records it currently lists).\n */\nexport interface VisualizeAgentContextInput {\n /** The active visualization mode ('clusters' | 'tagcloud'). */\n ActiveMode: VisualizationModeId;\n /** The mode ids the surface offers. */\n AvailableModes: VisualizationModeId[];\n /** Whether the shared drilldown panel is open. */\n DrilldownVisible: boolean;\n /** Whether the drilldown panel is loading records. */\n DrilldownLoading: boolean;\n /** The drilldown panel title (e.g. the selected tag), or empty. */\n DrilldownTitle: string;\n /** The drilldown panel subtitle (e.g. \"12 tagged records\"), or empty. */\n DrilldownSubtitle: string;\n /** Records currently listed in the drilldown. Component supplies all; helper bounds. */\n DrilldownRecords: DrilldownRecordSummary[];\n}\n\n/**\n * Build the agent-visible context object for the Visualize host surface.\n * Pure function (no `this`) so the context shape is unit-testable.\n *\n * @param input - the host's current state snapshot\n * @returns a flat key-value object suitable for `SetAgentContext`\n */\nexport function BuildVisualizeAgentContext(input: VisualizeAgentContextInput): Record<string, unknown> {\n const context: Record<string, unknown> = {\n // Surfaced under the tool's parameter name so the agent can correlate\n // context with the SwitchVisualizationMode tool.\n ActiveVisualizationMode: input.ActiveMode,\n AvailableVisualizationModes: input.AvailableModes,\n DrilldownVisible: input.DrilldownVisible,\n DrilldownLoading: input.DrilldownLoading,\n };\n\n if (input.DrilldownVisible) {\n context['DrilldownTitle'] = input.DrilldownTitle || null;\n context['DrilldownSubtitle'] = input.DrilldownSubtitle || null;\n if (input.DrilldownRecords.length > 0) {\n context['DrilldownRecords'] = CapVisualizeList(input.DrilldownRecords);\n context['DrilldownRecordCount'] = input.DrilldownRecords.length;\n }\n }\n\n return context;\n}\n\n/** @deprecated Use {@link BuildVisualizeAgentContext}. */\nexport function buildVisualizeAgentContext(input: VisualizeAgentContextInput): Record<string, unknown> {\n return BuildVisualizeAgentContext(input);\n}\n"]}
1
+ {"version":3,"file":"visualize-agent-context.js","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/visualize/visualize-agent-context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Pure, framework-agnostic helpers for the Knowledge Hub\n * \"Visualize\" host surface's AI-agent integration.\n *\n * These functions are free of Angular / component dependencies so they can be\n * unit-tested in isolation. The host component\n * ({@link VisualizeResourceComponent}) supplies a plain snapshot of its current\n * state (active visualization mode plus the shared record-drilldown state) and\n * these helpers shape it into the key-value `AgentContext` object that flows to\n * the async chat agent and the realtime co-agent via\n * `NavigationService.SetAgentContext`. They also resolve agent-supplied\n * references (a drilldown record by id/title) the way a user refers to them.\n *\n * 🚨 SAFETY: these helpers only SHAPE read-only state and RESOLVE references —\n * no mutation, no side effects. Nothing here lists tagged record bodies beyond\n * the salient title/subtitle the surface already shows on screen.\n */\n\n/** Visualization modes hosted by the Visualize surface. */\nexport const VISUALIZATION_MODES = ['clusters', 'tagcloud', 'graph'] as const;\n\n/** A Visualize-surface mode id. */\nexport type VisualizationModeId = (typeof VISUALIZATION_MODES)[number];\n\n/** Type-guard for a visualization mode id; keeps the switch tool tolerant. */\nexport function IsValidVisualizationMode(mode: unknown): mode is VisualizationModeId {\n return typeof mode === 'string' && (VISUALIZATION_MODES as readonly string[]).includes(mode);\n}\n\n/** @deprecated Use {@link IsValidVisualizationMode}. */\nexport function isValidVisualizationMode(mode: unknown): mode is VisualizationModeId {\n return IsValidVisualizationMode(mode);\n}\n\n/** Upper bound on how many drilldown record summaries we publish. */\nexport const VISUALIZE_CONTEXT_LIST_CAP = 25;\n\n/** Cap an array to {@link VISUALIZE_CONTEXT_LIST_CAP} entries. Pure; never mutates input. */\nexport function CapVisualizeList<T>(items: readonly T[]): T[] {\n return items.slice(0, VISUALIZE_CONTEXT_LIST_CAP);\n}\n\n/** @deprecated Use {@link CapVisualizeList}. */\nexport function capVisualizeList<T>(items: readonly T[]): T[] {\n return CapVisualizeList(items);\n}\n\n/**\n * A minimal id+title descriptor for a record currently listed in the shared\n * drilldown panel, supplied by the component so the pure resolver can match\n * agent input against what the user sees.\n */\nexport interface DrilldownRecordCandidate {\n RecordID: string;\n Title: string;\n}\n\n/**\n * Resolve an agent-supplied drilldown-record reference (id or title) to one of\n * the records currently listed in the panel. Tries, in order:\n * 1. exact record id (case-insensitive — SQL-Server-uppercase vs PG-lowercase UUIDs)\n * 2. exact title (case-insensitive)\n * 3. first case-insensitive *contains* match on the title\n *\n * Pure + deterministic; returns the matched candidate, or null on a miss.\n */\nexport function ResolveDrilldownRecord<T extends DrilldownRecordCandidate>(\n input: string,\n candidates: readonly T[],\n): T | null {\n const needle = (input ?? '').trim().toLowerCase();\n if (!needle) {\n return null;\n }\n const byId = candidates.find(c => c.RecordID.toLowerCase() === needle);\n if (byId) {\n return byId;\n }\n const byTitle = candidates.find(c => c.Title.toLowerCase() === needle);\n if (byTitle) {\n return byTitle;\n }\n return candidates.find(c => c.Title.toLowerCase().includes(needle)) ?? null;\n}\n\n/** @deprecated Use {@link ResolveDrilldownRecord}. */\nexport function resolveDrilldownRecord<T extends DrilldownRecordCandidate>(\n input: string,\n candidates: readonly T[],\n): T | null {\n return ResolveDrilldownRecord(input, candidates);\n}\n\n/**\n * A drilldown record summary the component derives from its loaded rows (id,\n * title, subtitle) so the agent knows what's openable without re-querying.\n */\nexport interface DrilldownRecordSummary {\n RecordID: string;\n Title: string;\n Subtitle: string;\n}\n\n/**\n * The plain, component-supplied snapshot used to build the Visualize agent context.\n * Mirrors the salient slice of the host's state: the active mode, the available\n * modes, and the shared drilldown panel (open/loading state, what it's showing,\n * and the records it currently lists).\n */\nexport interface VisualizeAgentContextInput {\n /** The active visualization mode ('clusters' | 'tagcloud'). */\n ActiveMode: VisualizationModeId;\n /** The mode ids the surface offers. */\n AvailableModes: VisualizationModeId[];\n /** Whether the shared drilldown panel is open. */\n DrilldownVisible: boolean;\n /** Whether the drilldown panel is loading records. */\n DrilldownLoading: boolean;\n /** The drilldown panel title (e.g. the selected tag), or empty. */\n DrilldownTitle: string;\n /** The drilldown panel subtitle (e.g. \"12 tagged records\"), or empty. */\n DrilldownSubtitle: string;\n /** Records currently listed in the drilldown. Component supplies all; helper bounds. */\n DrilldownRecords: DrilldownRecordSummary[];\n}\n\n/**\n * Build the agent-visible context object for the Visualize host surface.\n * Pure function (no `this`) so the context shape is unit-testable.\n *\n * @param input - the host's current state snapshot\n * @returns a flat key-value object suitable for `SetAgentContext`\n */\nexport function BuildVisualizeAgentContext(input: VisualizeAgentContextInput): Record<string, unknown> {\n const context: Record<string, unknown> = {\n // Surfaced under the tool's parameter name so the agent can correlate\n // context with the SwitchVisualizationMode tool.\n ActiveVisualizationMode: input.ActiveMode,\n AvailableVisualizationModes: input.AvailableModes,\n DrilldownVisible: input.DrilldownVisible,\n DrilldownLoading: input.DrilldownLoading,\n };\n\n if (input.DrilldownVisible) {\n context['DrilldownTitle'] = input.DrilldownTitle || null;\n context['DrilldownSubtitle'] = input.DrilldownSubtitle || null;\n if (input.DrilldownRecords.length > 0) {\n context['DrilldownRecords'] = CapVisualizeList(input.DrilldownRecords);\n context['DrilldownRecordCount'] = input.DrilldownRecords.length;\n }\n }\n\n return context;\n}\n\n/** @deprecated Use {@link BuildVisualizeAgentContext}. */\nexport function buildVisualizeAgentContext(input: VisualizeAgentContextInput): Record<string, unknown> {\n return BuildVisualizeAgentContext(input);\n}\n"]}
@@ -22,7 +22,7 @@ import { TagCloudComponent, TagCloudSelection } from './tag-cloud/tag-cloud.comp
22
22
  import { DrilldownRecord, DrilldownOpenRequest } from './record-drilldown/record-drilldown.component';
23
23
  import * as i0 from "@angular/core";
24
24
  /** Visualization modes hosted by this surface. */
25
- export type VisualizationMode = 'clusters' | 'tagcloud';
25
+ export type VisualizationMode = 'clusters' | 'tagcloud' | 'graph';
26
26
  interface ModeOption {
27
27
  ID: VisualizationMode;
28
28
  Label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"visualize-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/visualize/visualize-resource.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAgC,SAAS,EAAE,aAAa,EAAqB,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAkB,MAAM,+BAA+B,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;;AAWtG,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,UAAU,CAAC;AAExD,UAAU,UAAU;IAChB,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,qBAOa,0BAA2B,SAAQ,qBAAsB,YAAW,aAAa,EAAE,SAAS;IAC9E,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAEpD,wCAAwC;IACxC,IAAI,QAAQ,IAAI,iBAAiB,GAAG,SAAS,CAE5C;IACD,wCAAwC;IACxC,IAAI,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAEhD;IAED,OAAO,CAAC,GAAG,CAA6B;IACxC,UAAmB,iBAAiB,oBAA6B;IACjE,UAAmB,QAAQ,gBAAuB;IAM5C,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,oBAAoB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzD,KAAK,EAAE,UAAU,EAAE,CAGxB;IAEK,UAAU,EAAE,iBAAiB,CAAc;IAM3C,gBAAgB,UAAS;IACzB,cAAc,SAAM;IACpB,iBAAiB,SAAM;IACvB,aAAa,SAAsB;IACnC,gBAAgB,UAAS;IACzB,gBAAgB,EAAE,eAAe,EAAE,CAAM;IAMhD,kDAAkD;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACxD,2DAA2D;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;IAM7D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAatC,WAAW,IAAI,IAAI;IAUZ,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAWzC,YAAY,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO;IAI9C,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAQ5D,gEAAgE;IACzD,mBAAmB,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAInF,kFAAkF;IACrE,aAAa,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvE,4DAA4D;IACrD,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAI1D,cAAc,IAAI,IAAI;IAY7B;;;;OAIG;YACW,iBAAiB;IAyD/B,6EAA6E;IAC7E,OAAO,CAAC,eAAe;IAiBvB,4EAA4E;IAC5E,OAAO,CAAC,gBAAgB;IAaxB;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAYxB,0FAA0F;IAC1F,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,kBAAkB;IAgF1B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,kBAAkB;yCAvXjB,0BAA0B;2CAA1B,0BAA0B;CA+XtC;AAED,8BAA8B;AAC9B,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"visualize-resource.component.d.ts","sourceRoot":"","sources":["../../../../src/KnowledgeHub/components/visualize/visualize-resource.component.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,8 @@ import * as i0 from "@angular/core";
33
33
  import * as i1 from "@memberjunction/ng-ui-components";
34
34
  import * as i2 from "../clusters/cluster-visualization-resource.component";
35
35
  import * as i3 from "./tag-cloud/tag-cloud.component";
36
- import * as i4 from "./record-drilldown/record-drilldown.component";
36
+ import * as i4 from "./semantic-graph/semantic-graph-explorer.component";
37
+ import * as i5 from "./record-drilldown/record-drilldown.component";
37
38
  const _c0 = ["tagCloud"];
38
39
  function VisualizeResourceComponent_For_5_Template(rf, ctx) { if (rf & 1) {
39
40
  const _r1 = i0.ɵɵgetCurrentView();
@@ -70,6 +71,15 @@ function VisualizeResourceComponent_Conditional_10_Template(rf, ctx) { if (rf &
70
71
  const ctx_r2 = i0.ɵɵnextContext();
71
72
  i0.ɵɵproperty("Provider", ctx_r2.Provider);
72
73
  } }
74
+ function VisualizeResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
75
+ const _r6 = i0.ɵɵgetCurrentView();
76
+ i0.ɵɵelementStart(0, "app-kh-semantic-graph", 14);
77
+ i0.ɵɵlistener("OpenRecordRequested", function VisualizeResourceComponent_Conditional_11_Template_app_kh_semantic_graph_OpenRecordRequested_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnClusterOpenRecord($event)); });
78
+ i0.ɵɵelementEnd();
79
+ } if (rf & 2) {
80
+ const ctx_r2 = i0.ɵɵnextContext();
81
+ i0.ɵɵproperty("Provider", ctx_r2.Provider);
82
+ } }
73
83
  let VisualizeResourceComponent = class VisualizeResourceComponent extends BaseResourceComponent {
74
84
  static { VisualizeResourceComponent_1 = this; }
75
85
  TagCloud;
@@ -99,6 +109,7 @@ let VisualizeResourceComponent = class VisualizeResourceComponent extends BaseRe
99
109
  Modes = [
100
110
  { ID: 'clusters', Label: 'Clusters', Icon: 'fa-solid fa-circle-nodes' },
101
111
  { ID: 'tagcloud', Label: 'Tag Cloud', Icon: 'fa-solid fa-cloud' },
112
+ { ID: 'graph', Label: 'Graphs & Canon', Icon: 'fa-solid fa-diagram-project' },
102
113
  ];
103
114
  ActiveMode = 'clusters';
104
115
  // ================================================================
@@ -407,7 +418,7 @@ let VisualizeResourceComponent = class VisualizeResourceComponent extends BaseRe
407
418
  // Prefer the new key; fall back to the legacy "Clusters" tab key.
408
419
  const raw = UserInfoEngine.Instance.GetSetting(VisualizeResourceComponent_1.PREFS_KEY)
409
420
  ?? UserInfoEngine.Instance.GetSetting(VisualizeResourceComponent_1.LEGACY_PREFS_KEY);
410
- if (raw === 'clusters' || raw === 'tagcloud') {
421
+ if (raw === 'clusters' || raw === 'tagcloud' || raw === 'graph') {
411
422
  this.ActiveMode = raw;
412
423
  }
413
424
  }
@@ -417,15 +428,15 @@ let VisualizeResourceComponent = class VisualizeResourceComponent extends BaseRe
417
428
  } if (rf & 2) {
418
429
  let _t;
419
430
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.TagCloud = _t.first);
420
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 9, consts: [["tagCloud", ""], ["Title", "Visualize", "Icon", "fa-solid fa-circle-nodes", "Subtitle", "Explore your knowledge base as clusters or a tag cloud"], ["toolbar", ""], ["role", "tablist", 1, "mode-switch"], ["type", "button", "role", "tab", 1, "mode-switch-btn", 3, "active"], [3, "Flex", "Padding"], [1, "visualize-container"], [1, "visualize-main"], [3, "Embedded"], [3, "Provider"], [3, "Closed", "OpenRecord", "Visible", "IsLoading", "Title", "Subtitle", "Icon", "Records"], ["type", "button", "role", "tab", 1, "mode-switch-btn", 3, "click"], [3, "OpenRecordRequested", "Embedded"], [3, "TagSelected", "Provider"]], template: function VisualizeResourceComponent_Template(rf, ctx) { if (rf & 1) {
431
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 9, consts: [["tagCloud", ""], ["Title", "Visualize", "Icon", "fa-solid fa-circle-nodes", "Subtitle", "Explore your knowledge base as clusters or a tag cloud"], ["toolbar", ""], ["role", "tablist", 1, "mode-switch"], ["type", "button", "role", "tab", 1, "mode-switch-btn", 3, "active"], [3, "Flex", "Padding"], [1, "visualize-container"], [1, "visualize-main"], [3, "Embedded"], [3, "Provider"], [3, "Closed", "OpenRecord", "Visible", "IsLoading", "Title", "Subtitle", "Icon", "Records"], ["type", "button", "role", "tab", 1, "mode-switch-btn", 3, "click"], [3, "OpenRecordRequested", "Embedded"], [3, "TagSelected", "Provider"], [3, "OpenRecordRequested", "Provider"]], template: function VisualizeResourceComponent_Template(rf, ctx) { if (rf & 1) {
421
432
  i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2)(3, "div", 3);
422
433
  i0.ɵɵrepeaterCreate(4, VisualizeResourceComponent_For_5_Template, 4, 6, "button", 4, ctx.TrackByMode, true);
423
434
  i0.ɵɵelementEnd()()();
424
435
  i0.ɵɵelementStart(6, "mj-page-body", 5)(7, "div", 6)(8, "div", 7);
425
- i0.ɵɵconditionalCreate(9, VisualizeResourceComponent_Conditional_9_Template, 1, 1, "app-cluster-visualization-resource", 8)(10, VisualizeResourceComponent_Conditional_10_Template, 2, 1, "app-kh-tag-cloud", 9);
436
+ i0.ɵɵconditionalCreate(9, VisualizeResourceComponent_Conditional_9_Template, 1, 1, "app-cluster-visualization-resource", 8)(10, VisualizeResourceComponent_Conditional_10_Template, 2, 1, "app-kh-tag-cloud", 9)(11, VisualizeResourceComponent_Conditional_11_Template, 1, 1, "app-kh-semantic-graph", 9);
426
437
  i0.ɵɵelementEnd();
427
- i0.ɵɵelementStart(11, "app-kh-record-drilldown", 10);
428
- i0.ɵɵlistener("Closed", function VisualizeResourceComponent_Template_app_kh_record_drilldown_Closed_11_listener() { return ctx.CloseDrilldown(); })("OpenRecord", function VisualizeResourceComponent_Template_app_kh_record_drilldown_OpenRecord_11_listener($event) { return ctx.OnDrilldownOpenRecord($event); });
438
+ i0.ɵɵelementStart(12, "app-kh-record-drilldown", 10);
439
+ i0.ɵɵlistener("Closed", function VisualizeResourceComponent_Template_app_kh_record_drilldown_Closed_12_listener() { return ctx.CloseDrilldown(); })("OpenRecord", function VisualizeResourceComponent_Template_app_kh_record_drilldown_OpenRecord_12_listener($event) { return ctx.OnDrilldownOpenRecord($event); });
429
440
  i0.ɵɵelementEnd()()()();
430
441
  } if (rf & 2) {
431
442
  i0.ɵɵadvance(4);
@@ -433,10 +444,10 @@ let VisualizeResourceComponent = class VisualizeResourceComponent extends BaseRe
433
444
  i0.ɵɵadvance(2);
434
445
  i0.ɵɵproperty("Flex", true)("Padding", false);
435
446
  i0.ɵɵadvance(3);
436
- i0.ɵɵconditional(ctx.IsActiveMode("clusters") ? 9 : 10);
437
- i0.ɵɵadvance(2);
447
+ i0.ɵɵconditional(ctx.IsActiveMode("clusters") ? 9 : ctx.IsActiveMode("tagcloud") ? 10 : 11);
448
+ i0.ɵɵadvance(3);
438
449
  i0.ɵɵproperty("Visible", ctx.DrilldownVisible)("IsLoading", ctx.DrilldownLoading)("Title", ctx.DrilldownTitle)("Subtitle", ctx.DrilldownSubtitle)("Icon", ctx.DrilldownIcon)("Records", ctx.DrilldownRecords);
439
- } }, dependencies: [i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i2.ClusterVisualizationResourceComponent, i3.TagCloudComponent, i4.RecordDrilldownComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.mode-switch[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 2px;\n padding: 3px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.mode-switch-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n}\n\n.mode-switch-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.mode-switch-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n\n.visualize-container[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n min-height: 0;\n width: 100%;\n}\n\n.visualize-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.visualize-main[_ngcontent-%COMP%] > app-cluster-visualization-resource[_ngcontent-%COMP%], \n.visualize-main[_ngcontent-%COMP%] > app-kh-tag-cloud[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}"] });
450
+ } }, dependencies: [i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i2.ClusterVisualizationResourceComponent, i3.TagCloudComponent, i4.SemanticGraphExplorerComponent, i5.RecordDrilldownComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.mode-switch[_ngcontent-%COMP%] {\n display: inline-flex;\n gap: 2px;\n padding: 3px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.mode-switch-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n}\n\n.mode-switch-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.mode-switch-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n\n.visualize-container[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n min-height: 0;\n width: 100%;\n}\n\n.visualize-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.visualize-main[_ngcontent-%COMP%] > app-cluster-visualization-resource[_ngcontent-%COMP%], \n.visualize-main[_ngcontent-%COMP%] > app-kh-tag-cloud[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}"] });
440
451
  };
441
452
  VisualizeResourceComponent = VisualizeResourceComponent_1 = __decorate([
442
453
  RegisterClass(BaseResourceComponent, 'VisualizationResource')
@@ -444,7 +455,7 @@ VisualizeResourceComponent = VisualizeResourceComponent_1 = __decorate([
444
455
  export { VisualizeResourceComponent };
445
456
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VisualizeResourceComponent, [{
446
457
  type: Component,
447
- args: [{ standalone: false, selector: 'app-visualize-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Visualize\"\n Icon=\"fa-solid fa-circle-nodes\"\n Subtitle=\"Explore your knowledge base as clusters or a tag cloud\">\n <div toolbar>\n <div class=\"mode-switch\" role=\"tablist\">\n @for (mode of Modes; track TrackByMode($index, mode)) {\n <button\n type=\"button\"\n class=\"mode-switch-btn\"\n role=\"tab\"\n [class.active]=\"IsActiveMode(mode.ID)\"\n [attr.aria-selected]=\"IsActiveMode(mode.ID)\"\n (click)=\"SelectMode(mode.ID)\">\n <i [class]=\"mode.Icon\"></i>\n <span>{{ mode.Label }}</span>\n </button>\n }\n </div>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n <div class=\"visualize-container\">\n <div class=\"visualize-main\">\n @if (IsActiveMode('clusters')) {\n <app-cluster-visualization-resource\n [Embedded]=\"true\"\n (OpenRecordRequested)=\"OnClusterOpenRecord($event)\">\n </app-cluster-visualization-resource>\n } @else {\n <app-kh-tag-cloud\n #tagCloud\n [Provider]=\"Provider\"\n (TagSelected)=\"OnTagSelected($event)\">\n </app-kh-tag-cloud>\n }\n </div>\n\n <app-kh-record-drilldown\n [Visible]=\"DrilldownVisible\"\n [IsLoading]=\"DrilldownLoading\"\n [Title]=\"DrilldownTitle\"\n [Subtitle]=\"DrilldownSubtitle\"\n [Icon]=\"DrilldownIcon\"\n [Records]=\"DrilldownRecords\"\n (Closed)=\"CloseDrilldown()\"\n (OpenRecord)=\"OnDrilldownOpenRecord($event)\">\n </app-kh-record-drilldown>\n </div>\n </mj-page-body>\n</mj-page-layout>\n", styles: [":host {\n display: block;\n height: 100%;\n}\n\n/* Segmented mode switch in the header toolbar */\n.mode-switch {\n display: inline-flex;\n gap: 2px;\n padding: 3px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.mode-switch-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n}\n\n.mode-switch-btn:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.mode-switch-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n/* Body layout: main visualization + drilldown side panel */\n.visualize-container {\n display: flex;\n height: 100%;\n min-height: 0;\n width: 100%;\n}\n\n.visualize-main {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.visualize-main > app-cluster-visualization-resource,\n.visualize-main > app-kh-tag-cloud {\n flex: 1;\n min-height: 0;\n display: block;\n}\n"] }]
458
+ args: [{ standalone: false, selector: 'app-visualize-resource', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Visualize\"\n Icon=\"fa-solid fa-circle-nodes\"\n Subtitle=\"Explore your knowledge base as clusters or a tag cloud\">\n <div toolbar>\n <div class=\"mode-switch\" role=\"tablist\">\n @for (mode of Modes; track TrackByMode($index, mode)) {\n <button\n type=\"button\"\n class=\"mode-switch-btn\"\n role=\"tab\"\n [class.active]=\"IsActiveMode(mode.ID)\"\n [attr.aria-selected]=\"IsActiveMode(mode.ID)\"\n (click)=\"SelectMode(mode.ID)\">\n <i [class]=\"mode.Icon\"></i>\n <span>{{ mode.Label }}</span>\n </button>\n }\n </div>\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n <div class=\"visualize-container\">\n <div class=\"visualize-main\">\n @if (IsActiveMode('clusters')) {\n <app-cluster-visualization-resource\n [Embedded]=\"true\"\n (OpenRecordRequested)=\"OnClusterOpenRecord($event)\">\n </app-cluster-visualization-resource>\n } @else if (IsActiveMode('tagcloud')) {\n <app-kh-tag-cloud\n #tagCloud\n [Provider]=\"Provider\"\n (TagSelected)=\"OnTagSelected($event)\">\n </app-kh-tag-cloud>\n } @else {\n <app-kh-semantic-graph\n [Provider]=\"Provider\"\n (OpenRecordRequested)=\"OnClusterOpenRecord($event)\">\n </app-kh-semantic-graph>\n }\n </div>\n\n <app-kh-record-drilldown\n [Visible]=\"DrilldownVisible\"\n [IsLoading]=\"DrilldownLoading\"\n [Title]=\"DrilldownTitle\"\n [Subtitle]=\"DrilldownSubtitle\"\n [Icon]=\"DrilldownIcon\"\n [Records]=\"DrilldownRecords\"\n (Closed)=\"CloseDrilldown()\"\n (OpenRecord)=\"OnDrilldownOpenRecord($event)\">\n </app-kh-record-drilldown>\n </div>\n </mj-page-body>\n</mj-page-layout>\n", styles: [":host {\n display: block;\n height: 100%;\n}\n\n/* Segmented mode switch in the header toolbar */\n.mode-switch {\n display: inline-flex;\n gap: 2px;\n padding: 3px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n}\n\n.mode-switch-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease, color 0.15s ease;\n}\n\n.mode-switch-btn:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.mode-switch-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 2px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n}\n\n/* Body layout: main visualization + drilldown side panel */\n.visualize-container {\n display: flex;\n height: 100%;\n min-height: 0;\n width: 100%;\n}\n\n.visualize-main {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.visualize-main > app-cluster-visualization-resource,\n.visualize-main > app-kh-tag-cloud {\n flex: 1;\n min-height: 0;\n display: block;\n}\n"] }]
448
459
  }], null, { TagCloud: [{
449
460
  type: ViewChild,
450
461
  args: ['tagCloud']