@memberjunction/ng-dashboards 5.32.0 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  2. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  3. package/dist/Admin/admin-data-schema.component.d.ts +16 -0
  4. package/dist/Admin/admin-data-schema.component.d.ts.map +1 -0
  5. package/dist/Admin/admin-data-schema.component.js +136 -0
  6. package/dist/Admin/admin-data-schema.component.js.map +1 -0
  7. package/dist/Admin/admin-dev-tools-resource.component.d.ts +14 -0
  8. package/dist/Admin/admin-dev-tools-resource.component.d.ts.map +1 -0
  9. package/dist/Admin/admin-dev-tools-resource.component.js +162 -0
  10. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -0
  11. package/dist/Admin/admin-identity-access.component.d.ts +15 -0
  12. package/dist/Admin/admin-identity-access.component.d.ts.map +1 -0
  13. package/dist/Admin/admin-identity-access.component.js +156 -0
  14. package/dist/Admin/admin-identity-access.component.js.map +1 -0
  15. package/dist/Admin/admin-monitoring.component.d.ts +15 -0
  16. package/dist/Admin/admin-monitoring.component.d.ts.map +1 -0
  17. package/dist/Admin/admin-monitoring.component.js +130 -0
  18. package/dist/Admin/admin-monitoring.component.js.map +1 -0
  19. package/dist/Admin/base-admin-container.component.d.ts +80 -0
  20. package/dist/Admin/base-admin-container.component.d.ts.map +1 -0
  21. package/dist/Admin/base-admin-container.component.js +198 -0
  22. package/dist/Admin/base-admin-container.component.js.map +1 -0
  23. package/dist/Admin/index.d.ts +6 -0
  24. package/dist/Admin/index.d.ts.map +1 -0
  25. package/dist/Admin/index.js +6 -0
  26. package/dist/Admin/index.js.map +1 -0
  27. package/dist/ComponentStudio/components/workspace/component-preview.component.js +1 -1
  28. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  29. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +28 -8
  30. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  31. package/dist/ComponentStudio/services/component-studio-state.service.js +45 -27
  32. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  33. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +18 -3
  34. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  35. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +51 -11
  36. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  37. package/dist/DataExplorer/data-explorer-dashboard.component.js +2 -2
  38. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  39. package/dist/DevTools/app-state-inspector.component.d.ts +53 -0
  40. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -0
  41. package/dist/DevTools/app-state-inspector.component.js +301 -0
  42. package/dist/DevTools/app-state-inspector.component.js.map +1 -0
  43. package/dist/DevTools/class-registry.component.d.ts +64 -0
  44. package/dist/DevTools/class-registry.component.d.ts.map +1 -0
  45. package/dist/DevTools/class-registry.component.js +423 -0
  46. package/dist/DevTools/class-registry.component.js.map +1 -0
  47. package/dist/DevTools/dev-tools-prefs.d.ts +21 -0
  48. package/dist/DevTools/dev-tools-prefs.d.ts.map +1 -0
  49. package/dist/DevTools/dev-tools-prefs.js +48 -0
  50. package/dist/DevTools/dev-tools-prefs.js.map +1 -0
  51. package/dist/DevTools/event-monitor.component.d.ts +78 -0
  52. package/dist/DevTools/event-monitor.component.d.ts.map +1 -0
  53. package/dist/DevTools/event-monitor.component.js +659 -0
  54. package/dist/DevTools/event-monitor.component.js.map +1 -0
  55. package/dist/DevTools/graphql-console.component.d.ts +153 -0
  56. package/dist/DevTools/graphql-console.component.d.ts.map +1 -0
  57. package/dist/DevTools/graphql-console.component.js +1463 -0
  58. package/dist/DevTools/graphql-console.component.js.map +1 -0
  59. package/dist/DevTools/index.d.ts +8 -0
  60. package/dist/DevTools/index.d.ts.map +1 -0
  61. package/dist/DevTools/index.js +8 -0
  62. package/dist/DevTools/index.js.map +1 -0
  63. package/dist/DevTools/layout-inspector.component.d.ts +42 -0
  64. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -0
  65. package/dist/DevTools/layout-inspector.component.js +208 -0
  66. package/dist/DevTools/layout-inspector.component.js.map +1 -0
  67. package/dist/DevTools/lazy-module-status.component.d.ts +65 -0
  68. package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -0
  69. package/dist/DevTools/lazy-module-status.component.js +388 -0
  70. package/dist/DevTools/lazy-module-status.component.js.map +1 -0
  71. package/dist/DevTools/settings-explorer.component.d.ts +55 -0
  72. package/dist/DevTools/settings-explorer.component.d.ts.map +1 -0
  73. package/dist/DevTools/settings-explorer.component.js +394 -0
  74. package/dist/DevTools/settings-explorer.component.js.map +1 -0
  75. package/dist/Integration/components/widgets/integration-card.component.js +2 -2
  76. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  77. package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
  78. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  79. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +134 -1
  80. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  81. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +1227 -24
  82. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  83. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
  84. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  85. package/dist/Testing/components/testing-runs.component.js +3 -3
  86. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  87. package/dist/core-dashboards.module.d.ts +45 -34
  88. package/dist/core-dashboards.module.d.ts.map +1 -1
  89. package/dist/core-dashboards.module.js +57 -0
  90. package/dist/core-dashboards.module.js.map +1 -1
  91. package/dist/public-api.d.ts +2 -0
  92. package/dist/public-api.d.ts.map +1 -1
  93. package/dist/public-api.js +2 -0
  94. package/dist/public-api.js.map +1 -1
  95. package/package.json +52 -52
@@ -470,8 +470,8 @@ export class AgentEditorComponent extends BaseAngularComponent {
470
470
  .append('svg')
471
471
  .attr('width', width)
472
472
  .attr('height', height)
473
- .style('background', '#fafafa')
474
- .style('border', '1px solid #e0e0e0');
473
+ .style('background', 'var(--mj-bg-surface-card)')
474
+ .style('border', '1px solid var(--mj-border-default)');
475
475
  // Create zoom behavior with wheel support
476
476
  this.zoom = d3.zoom()
477
477
  .scaleExtent([0.1, 3])
@@ -1 +1 @@
1
- {"version":3,"file":"agent-editor.component.js","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-editor.component.ts","../../../../src/AI/components/agents/agent-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { RunView, LogError, LogStatus } from '@memberjunction/core';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { CreateAgentService, CreateAgentResult } from '@memberjunction/ng-agents';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport * as d3 from 'd3';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\ninterface AgentHierarchyNode {\n id: string;\n name: string;\n agent: MJAIAgentEntityExtended;\n children?: AgentHierarchyNode[];\n parent?: AgentHierarchyNode;\n x?: number;\n y?: number;\n}\n\ninterface AgentPrompt {\n id: string;\n name: string;\n content: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-agent-editor',\n templateUrl: './agent-editor.component.html',\n styleUrls: ['./agent-editor.component.css']\n})\nexport class AgentEditorComponent extends BaseAngularComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() agentId: string | null = null;\n @Output() close = new EventEmitter<void>();\n @Output() openAgent = new EventEmitter<string>();\n @Output() openEntityRecord = new EventEmitter<{entityName: string, recordId: string}>();\n\n @ViewChild('hierarchyChart', { static: false }) hierarchyChartRef!: ElementRef;\n\n public isLoading = false;\n public error: string | null = null;\n public currentAgent: MJAIAgentEntityExtended | null = null;\n public allAgents: MJAIAgentEntityExtended[] = [];\n public hierarchyData: AgentHierarchyNode | null = null;\n public selectedNode: AgentHierarchyNode | null = null;\n public agentPrompts: AgentPrompt[] = [];\n\n // Tab settings\n public activeTab: 'hierarchy' | 'prompts' | 'properties' = 'hierarchy';\n \n // Legacy layout settings (keeping for compatibility)\n public showHierarchy = true;\n public showPrompts = true;\n public showProperties = true;\n \n // D3 variables\n private svg: any;\n private g: any;\n private tree: any;\n private root: any;\n private zoom: any;\n\n constructor(\n private navigationService: NavigationService,\n private createAgentService: CreateAgentService) { super(); }\n\n ngOnInit(): void {\n if (this.agentId) {\n this.loadAgentData();\n }\n }\n\n ngAfterViewInit(): void {\n // Chart initialization now happens after data loading in loadAgentData()\n }\n\n ngOnDestroy(): void {\n // Cleanup D3\n if (this.svg) {\n this.svg.remove();\n }\n }\n\n public async loadAgentData(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n\n // Load all agents to build hierarchy\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: AI Agents',\n ExtraFilter: '',\n OrderBy: 'Name',\n MaxRows: 1000\n });\n\n this.allAgents = result.Results as MJAIAgentEntityExtended[];\n this.currentAgent = this.allAgents.find(a => UUIDsEqual(a.ID, this.agentId)) || null;\n\n if (this.currentAgent) {\n this.buildHierarchy();\n this.loadAgentPrompts();\n \n // Initialize chart after data is loaded\n setTimeout(() => {\n if (this.hierarchyChartRef) {\n this.initializeChart();\n }\n }, 100);\n }\n } catch (error) {\n console.error('Error loading agent data:', error);\n this.error = 'Failed to load agent data';\n } finally {\n this.isLoading = false;\n }\n }\n\n private buildHierarchy(): void {\n if (!this.currentAgent) return;\n\n // Find the root of the hierarchy that contains our current agent\n const rootAgent = this.findRootAgent(this.currentAgent);\n \n this.hierarchyData = this.buildHierarchyTree(rootAgent);\n this.selectedNode = this.findNodeInHierarchy(this.hierarchyData, this.currentAgent.ID);\n }\n\n private findRootAgent(agent: MJAIAgentEntityExtended): MJAIAgentEntityExtended {\n let current = agent;\n while (current.ParentID) {\n const parent = this.allAgents.find(a => UUIDsEqual(a.ID, current.ParentID));\n if (!parent) break;\n current = parent;\n }\n return current;\n }\n\n private buildHierarchyTree(agent: MJAIAgentEntityExtended): AgentHierarchyNode {\n const children = this.allAgents\n .filter(a => UUIDsEqual(a.ParentID, agent.ID))\n .map(child => this.buildHierarchyTree(child));\n\n const node: AgentHierarchyNode = {\n id: agent.ID,\n name: agent.Name || 'Unnamed Agent',\n agent: agent,\n children: children\n };\n\n // Set parent references\n if (node.children) {\n node.children.forEach(child => child.parent = node);\n }\n\n return node;\n }\n\n private findNodeInHierarchy(node: AgentHierarchyNode, agentId: string): AgentHierarchyNode | null {\n if (node.id === agentId) return node;\n \n if (node.children) {\n for (const child of node.children) {\n const found = this.findNodeInHierarchy(child, agentId);\n if (found) return found;\n }\n }\n \n return null;\n }\n\n private async loadAgentPrompts(): Promise<void> {\n if (!this.currentAgent) return;\n \n try {\n // This would load prompts associated with the agent\n // For now, using mock data structure\n this.agentPrompts = [\n { id: '1', name: 'System Prompt', content: 'Default system instructions...', type: 'system' },\n { id: '2', name: 'User Prompt', content: 'User interaction template...', type: 'user' }\n ];\n } catch (error) {\n console.error('Error loading agent prompts:', error);\n }\n }\n\n private initializeChart(): void {\n if (!this.hierarchyChartRef?.nativeElement) {\n return;\n }\n\n const container = this.hierarchyChartRef.nativeElement;\n const width = container.clientWidth || 800;\n const height = container.clientHeight || 600;\n\n // Clear any existing SVG\n d3.select(container).selectAll('*').remove();\n\n // Create SVG with zoom/pan functionality\n this.svg = d3.select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .style('background', '#fafafa')\n .style('border', '1px solid #e0e0e0');\n\n // Create zoom behavior with wheel support\n this.zoom = d3.zoom()\n .scaleExtent([0.1, 3])\n .wheelDelta((event: any) => -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1))\n .on('zoom', (event) => {\n this.g.attr('transform', event.transform);\n });\n\n // Apply zoom to SVG\n this.svg.call(this.zoom);\n\n // Create main group for chart content\n this.g = this.svg.append('g');\n\n // Create tree layout with proper spacing - use nodeSize for fixed spacing\n this.tree = d3.tree()\n .nodeSize([150, 100]) // Fixed node spacing: 150px horizontal, 100px vertical\n .separation((a: any, b: any) => a.parent === b.parent ? 1 : 1.5);\n\n this.renderHierarchy();\n }\n\n private renderHierarchy(): void {\n if (!this.hierarchyData || !this.g || !this.tree) {\n return;\n }\n\n // Create hierarchy\n this.root = d3.hierarchy(this.hierarchyData);\n this.tree(this.root);\n\n // Clear previous render\n this.g.selectAll('*').remove();\n\n // Get container dimensions\n const container = this.hierarchyChartRef.nativeElement;\n const containerWidth = container.clientWidth || 800;\n \n // Calculate the tree bounds after layout\n const treeBounds = this.getTreeBounds(this.root);\n \n // Calculate centering offsets\n const offsetX = (containerWidth - treeBounds.width) / 2 - treeBounds.minX;\n const offsetY = 150; // Top margin for the tree\n \n // Apply transform to center the tree properly\n this.g.attr('transform', `translate(${offsetX}, ${offsetY})`);\n\n // Draw links\n this.g.selectAll('.link')\n .data(this.root.links())\n .enter().append('path')\n .attr('class', 'link')\n .attr('d', d3.linkVertical()\n .x((d: any) => d.x)\n .y((d: any) => d.y))\n .style('fill', 'none')\n .style('stroke', '#999')\n .style('stroke-width', '2px')\n .style('stroke-opacity', 0.6);\n\n // Draw nodes\n const nodes = this.g.selectAll('.node')\n .data(this.root.descendants())\n .enter().append('g')\n .attr('class', 'node')\n .attr('transform', (d: any) => `translate(${d.x}, ${d.y})`)\n .style('cursor', 'pointer')\n .on('click', (_event: any, d: any) => this.onNodeClick(d.data));\n\n // Add rectangles for nodes\n const nodeWidth = 120;\n const nodeHeight = 40;\n \n nodes.append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .style('fill', (d: any) => this.getNodeColor(d))\n .style('stroke', (d: any) => this.getNodeStrokeColor(d))\n .style('stroke-width', (d: any) => d.data.id === this.currentAgent?.ID ? '3px' : '2px')\n .style('opacity', 0.9);\n\n // Add node labels (agent names)\n nodes.append('text')\n .attr('dy', -2)\n .attr('text-anchor', 'middle')\n .style('font-size', '11px')\n .style('font-weight', (d: any) => d.data.id === this.currentAgent?.ID ? 'bold' : '500')\n .style('fill', '#333')\n .style('pointer-events', 'none')\n .text((d: any) => {\n const name = d.data.name;\n return name.length > 14 ? name.substring(0, 11) + '...' : name;\n });\n\n // Add execution mode labels\n nodes.append('text')\n .attr('dy', 12)\n .attr('text-anchor', 'middle')\n .style('font-size', '9px')\n .style('fill', '#666')\n .style('pointer-events', 'none')\n .text((d: any) => d.data.agent.ExecutionMode);\n\n // Add level indicators\n nodes.append('text')\n .attr('x', nodeWidth / 2 - 8)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('text-anchor', 'middle')\n .style('font-size', '8px')\n .style('font-weight', 'bold')\n .style('fill', '#fff')\n .style('pointer-events', 'none')\n .text((d: any) => `L${d.depth}`);\n }\n\n private getTreeBounds(root: any): { width: number, height: number, minX: number, maxX: number, minY: number, maxY: number } {\n let minX = Infinity, maxX = -Infinity;\n let minY = Infinity, maxY = -Infinity;\n \n root.descendants().forEach((d: any) => {\n minX = Math.min(minX, d.x);\n maxX = Math.max(maxX, d.x);\n minY = Math.min(minY, d.y);\n maxY = Math.max(maxY, d.y);\n });\n \n return {\n width: maxX - minX,\n height: maxY - minY,\n minX,\n maxX,\n minY,\n maxY\n };\n }\n\n private getNodeColor(d: any): string {\n const level = d.depth;\n const isCurrentAgent = d.data.id === this.currentAgent?.ID;\n \n // Level-based color scheme\n const levelColors = [\n '#1976d2', // Level 0 (root) - Blue\n '#388e3c', // Level 1 - Green \n '#f57c00', // Level 2 - Orange\n '#7b1fa2', // Level 3 - Purple\n '#c2185b', // Level 4 - Pink\n '#5d4037' // Level 5+ - Brown\n ];\n \n const baseColor = levelColors[Math.min(level, levelColors.length - 1)];\n \n // Highlight current agent with brighter color\n if (isCurrentAgent) {\n return baseColor;\n }\n \n // Make non-current agents slightly lighter\n return this.lightenColor(baseColor, 0.3);\n }\n\n private getNodeStrokeColor(d: any): string {\n const isCurrentAgent = d.data.id === this.currentAgent?.ID;\n if (isCurrentAgent) {\n return '#000';\n }\n return '#666';\n }\n\n private lightenColor(color: string, factor: number): string {\n // Simple color lightening function\n const hex = color.replace('#', '');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n \n const newR = Math.min(255, Math.floor(r + (255 - r) * factor));\n const newG = Math.min(255, Math.floor(g + (255 - g) * factor));\n const newB = Math.min(255, Math.floor(b + (255 - b) * factor));\n \n return `rgb(${newR}, ${newG}, ${newB})`;\n }\n\n public onNodeClick(node: AgentHierarchyNode): void {\n if (node.id !== this.currentAgent?.ID) {\n this.openAgent.emit(node.id);\n }\n }\n\n public zoomIn(): void {\n if (this.svg && this.zoom) {\n this.svg.transition().call(\n this.zoom.scaleBy, 1.5\n );\n }\n }\n\n public zoomOut(): void {\n if (this.svg && this.zoom) {\n this.svg.transition().call(\n this.zoom.scaleBy, 1 / 1.5\n );\n }\n }\n\n public resetZoom(): void {\n if (this.svg && this.zoom) {\n // Reset to initial centered position\n this.svg.transition().call(\n this.zoom.transform,\n d3.zoomIdentity\n );\n }\n }\n\n public navigateToAgent(agentId: string): void {\n this.openAgent.emit(agentId);\n }\n\n public closeEditor(): void {\n this.close.emit();\n }\n\n public setActiveTab(tab: 'hierarchy' | 'prompts' | 'properties'): void {\n this.activeTab = tab;\n }\n\n public getExecutionModeColor(mode: string): string {\n return mode === 'Sequential' ? '#2196f3' : '#4caf50';\n }\n\n public getExecutionModeIcon(mode: string): string {\n return mode === 'Sequential' ? 'fa-solid fa-list-ol' : 'fa-solid fa-layer-group';\n }\n\n /**\n * Opens the create sub-agent slide-in panel using the new CreateAgentService.\n * After successful creation, saves the agent and navigates to it.\n */\n public openCreateSubAgent(): void {\n if (!this.currentAgent) return;\n\n this.error = null;\n\n this.createAgentService.OpenSubAgentSlideIn(\n this.currentAgent.ID,\n this.currentAgent.Name || 'Agent'\n ).subscribe({\n next: async (dialogResult) => {\n if (!dialogResult.Cancelled && dialogResult.Result) {\n await this.handleAgentCreated(dialogResult.Result);\n }\n },\n error: (err) => {\n console.error('Error in create sub-agent slide-in:', err);\n this.error = 'Failed to open create sub-agent panel';\n }\n });\n }\n\n /**\n * Handles the result from the create agent slide-in.\n * Saves the agent and navigates to the new record.\n */\n private async handleAgentCreated(result: CreateAgentResult): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n\n const agent = result.Agent;\n\n // Create the agent and all of its linked prompts/actions in one atomic transaction.\n // agent.ID is assigned client-side by NewRecord() so we can use it on child records before submit.\n const md = this.ProviderToUse;\n const tg = await md.CreateTransactionGroup();\n\n agent.TransactionGroup = tg;\n await agent.Save();\n\n if (result.AgentPrompts && result.AgentPrompts.length > 0) {\n for (const agentPrompt of result.AgentPrompts) {\n agentPrompt.AgentID = agent.ID;\n agentPrompt.TransactionGroup = tg;\n await agentPrompt.Save();\n }\n }\n\n if (result.AgentActions && result.AgentActions.length > 0) {\n for (const agentAction of result.AgentActions) {\n agentAction.AgentID = agent.ID;\n agentAction.TransactionGroup = tg;\n await agentAction.Save();\n }\n }\n\n if (await tg.Submit()) {\n LogStatus('Sub-agent created successfully');\n\n // Reload agent data to show the new hierarchy\n await this.loadAgentData();\n\n // Navigate to the newly created agent record\n this.navigationService.OpenEntityRecord('MJ: AI Agents', agent.PrimaryKey);\n } else {\n const errorMessage = agent.LatestResult?.Message || 'Unknown error occurred while creating sub-agent';\n this.error = `Failed to create sub-agent: ${errorMessage}`;\n LogError('Sub-agent creation failed', undefined, errorMessage);\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';\n this.error = `Failed to create sub-agent: ${errorMessage}`;\n LogError('Error creating sub-agent', undefined, error);\n } finally {\n this.isLoading = false;\n }\n }\n\n public hasChildren(): boolean {\n return this.selectedNode?.children && this.selectedNode.children.length > 0 || false;\n }\n\n public hasParent(): boolean {\n return this.selectedNode?.parent !== undefined;\n }\n\n public getChildCount(): number {\n return this.selectedNode?.children?.length || 0;\n }\n\n public openCurrentAgentRecord(): void {\n if (this.currentAgent) {\n this.openEntityRecord.emit({ entityName: 'MJ: AI Agents', recordId: this.currentAgent.ID });\n }\n }\n}","<div class=\"agent-editor-container\">\n <!-- Header -->\n <div class=\"editor-header\">\n <div class=\"header-info\">\n <div class=\"header-actions\">\n <button \n type=\"button\" \n class=\"back-btn\"\n (click)=\"closeEditor()\"\n title=\"Back to Agent List\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Agents\n </button>\n \n @if (currentAgent) {\n <button \n type=\"button\" \n class=\"open-btn\"\n (click)=\"openCurrentAgentRecord()\"\n title=\"Open Agent Record\">\n <i class=\"fa-solid fa-external-link\"></i>\n Open Record\n </button>\n }\n </div>\n \n @if (currentAgent) {\n <div class=\"agent-breadcrumb\">\n <h2>{{ currentAgent.Name }}</h2>\n @if (currentAgent.Parent) {\n <span class=\"breadcrumb-item\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n Child of {{ currentAgent.Parent }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Tab Navigation -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-navigation\">\n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'hierarchy'\"\n (click)=\"setActiveTab('hierarchy')\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Hierarchy\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'prompts'\"\n (click)=\"setActiveTab('prompts')\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Prompts\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'properties'\"\n (click)=\"setActiveTab('properties')\">\n <i class=\"fa-solid fa-cog\"></i>\n Properties\n </button>\n </div>\n }\n\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading agent data...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Error Loading Agent</h3>\n <p>{{ error }}</p>\n <button class=\"retry-btn\" (click)=\"loadAgentData()\">\n <i class=\"fa-solid fa-retry\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n\n <!-- Tab Content -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-content\" >\n \n <!-- Hierarchy Tab -->\n @if (activeTab === 'hierarchy') {\n <div class=\"hierarchy-section\" >\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-sitemap\"></i>\n Agent Hierarchy\n </h3>\n \n <div class=\"hierarchy-controls\">\n <div class=\"zoom-controls\">\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomIn()\"\n title=\"Zoom In\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomOut()\"\n title=\"Zoom Out\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"resetZoom()\"\n title=\"Reset Zoom\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n \n <div class=\"hierarchy-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-rect level-0\"></div>\n <span>Root</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-1\"></div>\n <span>Level 1</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-2\"></div>\n <span>Level 2+</span>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"hierarchy-chart\" #hierarchyChart >\n <!-- Help text overlay -->\n @if (hierarchyData && (hasChildren() || hasParent())) {\n <div class=\"chart-help\">\n <small>\n <i class=\"fa-solid fa-hand-pointer\"></i>\n Drag to pan • Use zoom controls or scroll to zoom • Click nodes to navigate\n </small>\n </div>\n }\n \n <!-- Empty state for hierarchy -->\n @if (!hierarchyData || (!hasChildren() && !hasParent())) {\n <div class=\"empty-hierarchy\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h4>No Agent Hierarchy</h4>\n <p>This agent doesn't have any parent or child agents yet.</p>\n <button class=\"create-subagent-btn\" (click)=\"openCreateSubAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Prompts Tab -->\n @if (activeTab === 'prompts') {\n <div class=\"prompts-section\" >\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-comment-dots\"></i>\n Agent Prompts\n </h3>\n <button class=\"add-prompt-btn\" title=\"Add New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Prompt\n </button>\n </div>\n \n <div class=\"prompts-list\">\n @if (agentPrompts.length === 0) {\n <div class=\"empty-prompts\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <p>No prompts configured for this agent</p>\n <button class=\"add-first-prompt-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add First Prompt\n </button>\n </div>\n } @else {\n @for (prompt of agentPrompts; track prompt.id) {\n <div class=\"prompt-card\">\n <div class=\"prompt-header\">\n <div class=\"prompt-info\">\n <h4>{{ prompt.name }}</h4>\n <span class=\"prompt-type\">{{ prompt.type }}</span>\n </div>\n <div class=\"prompt-actions\">\n <button class=\"action-btn\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"action-btn danger\" title=\"Delete Prompt\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"prompt-content\">\n <p>{{ prompt.content }}</p>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n \n <!-- Properties Tab -->\n @if (activeTab === 'properties') {\n <div class=\"properties-section\" >\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-cog\"></i>\n Agent Properties\n </h3>\n <button class=\"save-btn\" title=\"Save Changes\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n </div>\n \n <div class=\"properties-form\">\n <div class=\"form-group\">\n <label>Name</label>\n <input \n type=\"text\" \n class=\"form-input\"\n [value]=\"currentAgent.Name\"\n placeholder=\"Agent name\">\n </div>\n \n <div class=\"form-group\">\n <label>Description</label>\n <textarea \n class=\"form-textarea\"\n [value]=\"currentAgent.Description\"\n placeholder=\"Agent description\"\n rows=\"3\"></textarea>\n </div>\n \n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Execution Mode</label>\n <select class=\"form-select\" [value]=\"currentAgent.ExecutionMode\">\n <option value=\"Sequential\">Sequential</option>\n <option value=\"Parallel\">Parallel</option>\n </select>\n </div>\n \n <div class=\"form-group\">\n <label>Execution Order</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ExecutionOrder\"\n min=\"0\">\n </div>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.ExposeAsAction\">\n <span class=\"checkmark\"></span>\n Expose as Action\n </label>\n <small>Allow this agent to be used as an action by other agents</small>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.EnableContextCompression\">\n <span class=\"checkmark\"></span>\n Enable Context Compression\n </label>\n <small>Automatically compress conversation context when threshold is reached</small>\n </div>\n \n @if (currentAgent.EnableContextCompression) {\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Message Threshold</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageThreshold\"\n min=\"1\"\n placeholder=\"Number of messages\">\n </div>\n \n <div class=\"form-group\">\n <label>Retention Count</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageRetentionCount\"\n min=\"0\"\n placeholder=\"Messages to keep\">\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Sub-Agent creation now uses CreateAgentService slide-in panel -->\n</div>"]}
1
+ {"version":3,"file":"agent-editor.component.js","sourceRoot":"","sources":["../../../../src/AI/components/agents/agent-editor.component.ts","../../../../src/AI/components/agents/agent-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { RunView, LogError, LogStatus } from '@memberjunction/core';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { CreateAgentService, CreateAgentResult } from '@memberjunction/ng-agents';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport * as d3 from 'd3';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\ninterface AgentHierarchyNode {\n id: string;\n name: string;\n agent: MJAIAgentEntityExtended;\n children?: AgentHierarchyNode[];\n parent?: AgentHierarchyNode;\n x?: number;\n y?: number;\n}\n\ninterface AgentPrompt {\n id: string;\n name: string;\n content: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-agent-editor',\n templateUrl: './agent-editor.component.html',\n styleUrls: ['./agent-editor.component.css']\n})\nexport class AgentEditorComponent extends BaseAngularComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() agentId: string | null = null;\n @Output() close = new EventEmitter<void>();\n @Output() openAgent = new EventEmitter<string>();\n @Output() openEntityRecord = new EventEmitter<{entityName: string, recordId: string}>();\n\n @ViewChild('hierarchyChart', { static: false }) hierarchyChartRef!: ElementRef;\n\n public isLoading = false;\n public error: string | null = null;\n public currentAgent: MJAIAgentEntityExtended | null = null;\n public allAgents: MJAIAgentEntityExtended[] = [];\n public hierarchyData: AgentHierarchyNode | null = null;\n public selectedNode: AgentHierarchyNode | null = null;\n public agentPrompts: AgentPrompt[] = [];\n\n // Tab settings\n public activeTab: 'hierarchy' | 'prompts' | 'properties' = 'hierarchy';\n \n // Legacy layout settings (keeping for compatibility)\n public showHierarchy = true;\n public showPrompts = true;\n public showProperties = true;\n \n // D3 variables\n private svg: any;\n private g: any;\n private tree: any;\n private root: any;\n private zoom: any;\n\n constructor(\n private navigationService: NavigationService,\n private createAgentService: CreateAgentService) { super(); }\n\n ngOnInit(): void {\n if (this.agentId) {\n this.loadAgentData();\n }\n }\n\n ngAfterViewInit(): void {\n // Chart initialization now happens after data loading in loadAgentData()\n }\n\n ngOnDestroy(): void {\n // Cleanup D3\n if (this.svg) {\n this.svg.remove();\n }\n }\n\n public async loadAgentData(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n\n // Load all agents to build hierarchy\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView({\n EntityName: 'MJ: AI Agents',\n ExtraFilter: '',\n OrderBy: 'Name',\n MaxRows: 1000\n });\n\n this.allAgents = result.Results as MJAIAgentEntityExtended[];\n this.currentAgent = this.allAgents.find(a => UUIDsEqual(a.ID, this.agentId)) || null;\n\n if (this.currentAgent) {\n this.buildHierarchy();\n this.loadAgentPrompts();\n \n // Initialize chart after data is loaded\n setTimeout(() => {\n if (this.hierarchyChartRef) {\n this.initializeChart();\n }\n }, 100);\n }\n } catch (error) {\n console.error('Error loading agent data:', error);\n this.error = 'Failed to load agent data';\n } finally {\n this.isLoading = false;\n }\n }\n\n private buildHierarchy(): void {\n if (!this.currentAgent) return;\n\n // Find the root of the hierarchy that contains our current agent\n const rootAgent = this.findRootAgent(this.currentAgent);\n \n this.hierarchyData = this.buildHierarchyTree(rootAgent);\n this.selectedNode = this.findNodeInHierarchy(this.hierarchyData, this.currentAgent.ID);\n }\n\n private findRootAgent(agent: MJAIAgentEntityExtended): MJAIAgentEntityExtended {\n let current = agent;\n while (current.ParentID) {\n const parent = this.allAgents.find(a => UUIDsEqual(a.ID, current.ParentID));\n if (!parent) break;\n current = parent;\n }\n return current;\n }\n\n private buildHierarchyTree(agent: MJAIAgentEntityExtended): AgentHierarchyNode {\n const children = this.allAgents\n .filter(a => UUIDsEqual(a.ParentID, agent.ID))\n .map(child => this.buildHierarchyTree(child));\n\n const node: AgentHierarchyNode = {\n id: agent.ID,\n name: agent.Name || 'Unnamed Agent',\n agent: agent,\n children: children\n };\n\n // Set parent references\n if (node.children) {\n node.children.forEach(child => child.parent = node);\n }\n\n return node;\n }\n\n private findNodeInHierarchy(node: AgentHierarchyNode, agentId: string): AgentHierarchyNode | null {\n if (node.id === agentId) return node;\n \n if (node.children) {\n for (const child of node.children) {\n const found = this.findNodeInHierarchy(child, agentId);\n if (found) return found;\n }\n }\n \n return null;\n }\n\n private async loadAgentPrompts(): Promise<void> {\n if (!this.currentAgent) return;\n \n try {\n // This would load prompts associated with the agent\n // For now, using mock data structure\n this.agentPrompts = [\n { id: '1', name: 'System Prompt', content: 'Default system instructions...', type: 'system' },\n { id: '2', name: 'User Prompt', content: 'User interaction template...', type: 'user' }\n ];\n } catch (error) {\n console.error('Error loading agent prompts:', error);\n }\n }\n\n private initializeChart(): void {\n if (!this.hierarchyChartRef?.nativeElement) {\n return;\n }\n\n const container = this.hierarchyChartRef.nativeElement;\n const width = container.clientWidth || 800;\n const height = container.clientHeight || 600;\n\n // Clear any existing SVG\n d3.select(container).selectAll('*').remove();\n\n // Create SVG with zoom/pan functionality\n this.svg = d3.select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .style('background', 'var(--mj-bg-surface-card)')\n .style('border', '1px solid var(--mj-border-default)');\n\n // Create zoom behavior with wheel support\n this.zoom = d3.zoom()\n .scaleExtent([0.1, 3])\n .wheelDelta((event: any) => -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1))\n .on('zoom', (event) => {\n this.g.attr('transform', event.transform);\n });\n\n // Apply zoom to SVG\n this.svg.call(this.zoom);\n\n // Create main group for chart content\n this.g = this.svg.append('g');\n\n // Create tree layout with proper spacing - use nodeSize for fixed spacing\n this.tree = d3.tree()\n .nodeSize([150, 100]) // Fixed node spacing: 150px horizontal, 100px vertical\n .separation((a: any, b: any) => a.parent === b.parent ? 1 : 1.5);\n\n this.renderHierarchy();\n }\n\n private renderHierarchy(): void {\n if (!this.hierarchyData || !this.g || !this.tree) {\n return;\n }\n\n // Create hierarchy\n this.root = d3.hierarchy(this.hierarchyData);\n this.tree(this.root);\n\n // Clear previous render\n this.g.selectAll('*').remove();\n\n // Get container dimensions\n const container = this.hierarchyChartRef.nativeElement;\n const containerWidth = container.clientWidth || 800;\n \n // Calculate the tree bounds after layout\n const treeBounds = this.getTreeBounds(this.root);\n \n // Calculate centering offsets\n const offsetX = (containerWidth - treeBounds.width) / 2 - treeBounds.minX;\n const offsetY = 150; // Top margin for the tree\n \n // Apply transform to center the tree properly\n this.g.attr('transform', `translate(${offsetX}, ${offsetY})`);\n\n // Draw links\n this.g.selectAll('.link')\n .data(this.root.links())\n .enter().append('path')\n .attr('class', 'link')\n .attr('d', d3.linkVertical()\n .x((d: any) => d.x)\n .y((d: any) => d.y))\n .style('fill', 'none')\n .style('stroke', '#999')\n .style('stroke-width', '2px')\n .style('stroke-opacity', 0.6);\n\n // Draw nodes\n const nodes = this.g.selectAll('.node')\n .data(this.root.descendants())\n .enter().append('g')\n .attr('class', 'node')\n .attr('transform', (d: any) => `translate(${d.x}, ${d.y})`)\n .style('cursor', 'pointer')\n .on('click', (_event: any, d: any) => this.onNodeClick(d.data));\n\n // Add rectangles for nodes\n const nodeWidth = 120;\n const nodeHeight = 40;\n \n nodes.append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .style('fill', (d: any) => this.getNodeColor(d))\n .style('stroke', (d: any) => this.getNodeStrokeColor(d))\n .style('stroke-width', (d: any) => d.data.id === this.currentAgent?.ID ? '3px' : '2px')\n .style('opacity', 0.9);\n\n // Add node labels (agent names)\n nodes.append('text')\n .attr('dy', -2)\n .attr('text-anchor', 'middle')\n .style('font-size', '11px')\n .style('font-weight', (d: any) => d.data.id === this.currentAgent?.ID ? 'bold' : '500')\n .style('fill', '#333')\n .style('pointer-events', 'none')\n .text((d: any) => {\n const name = d.data.name;\n return name.length > 14 ? name.substring(0, 11) + '...' : name;\n });\n\n // Add execution mode labels\n nodes.append('text')\n .attr('dy', 12)\n .attr('text-anchor', 'middle')\n .style('font-size', '9px')\n .style('fill', '#666')\n .style('pointer-events', 'none')\n .text((d: any) => d.data.agent.ExecutionMode);\n\n // Add level indicators\n nodes.append('text')\n .attr('x', nodeWidth / 2 - 8)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('text-anchor', 'middle')\n .style('font-size', '8px')\n .style('font-weight', 'bold')\n .style('fill', '#fff')\n .style('pointer-events', 'none')\n .text((d: any) => `L${d.depth}`);\n }\n\n private getTreeBounds(root: any): { width: number, height: number, minX: number, maxX: number, minY: number, maxY: number } {\n let minX = Infinity, maxX = -Infinity;\n let minY = Infinity, maxY = -Infinity;\n \n root.descendants().forEach((d: any) => {\n minX = Math.min(minX, d.x);\n maxX = Math.max(maxX, d.x);\n minY = Math.min(minY, d.y);\n maxY = Math.max(maxY, d.y);\n });\n \n return {\n width: maxX - minX,\n height: maxY - minY,\n minX,\n maxX,\n minY,\n maxY\n };\n }\n\n private getNodeColor(d: any): string {\n const level = d.depth;\n const isCurrentAgent = d.data.id === this.currentAgent?.ID;\n \n // Level-based color scheme\n const levelColors = [\n '#1976d2', // Level 0 (root) - Blue\n '#388e3c', // Level 1 - Green \n '#f57c00', // Level 2 - Orange\n '#7b1fa2', // Level 3 - Purple\n '#c2185b', // Level 4 - Pink\n '#5d4037' // Level 5+ - Brown\n ];\n \n const baseColor = levelColors[Math.min(level, levelColors.length - 1)];\n \n // Highlight current agent with brighter color\n if (isCurrentAgent) {\n return baseColor;\n }\n \n // Make non-current agents slightly lighter\n return this.lightenColor(baseColor, 0.3);\n }\n\n private getNodeStrokeColor(d: any): string {\n const isCurrentAgent = d.data.id === this.currentAgent?.ID;\n if (isCurrentAgent) {\n return '#000';\n }\n return '#666';\n }\n\n private lightenColor(color: string, factor: number): string {\n // Simple color lightening function\n const hex = color.replace('#', '');\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n \n const newR = Math.min(255, Math.floor(r + (255 - r) * factor));\n const newG = Math.min(255, Math.floor(g + (255 - g) * factor));\n const newB = Math.min(255, Math.floor(b + (255 - b) * factor));\n \n return `rgb(${newR}, ${newG}, ${newB})`;\n }\n\n public onNodeClick(node: AgentHierarchyNode): void {\n if (node.id !== this.currentAgent?.ID) {\n this.openAgent.emit(node.id);\n }\n }\n\n public zoomIn(): void {\n if (this.svg && this.zoom) {\n this.svg.transition().call(\n this.zoom.scaleBy, 1.5\n );\n }\n }\n\n public zoomOut(): void {\n if (this.svg && this.zoom) {\n this.svg.transition().call(\n this.zoom.scaleBy, 1 / 1.5\n );\n }\n }\n\n public resetZoom(): void {\n if (this.svg && this.zoom) {\n // Reset to initial centered position\n this.svg.transition().call(\n this.zoom.transform,\n d3.zoomIdentity\n );\n }\n }\n\n public navigateToAgent(agentId: string): void {\n this.openAgent.emit(agentId);\n }\n\n public closeEditor(): void {\n this.close.emit();\n }\n\n public setActiveTab(tab: 'hierarchy' | 'prompts' | 'properties'): void {\n this.activeTab = tab;\n }\n\n public getExecutionModeColor(mode: string): string {\n return mode === 'Sequential' ? '#2196f3' : '#4caf50';\n }\n\n public getExecutionModeIcon(mode: string): string {\n return mode === 'Sequential' ? 'fa-solid fa-list-ol' : 'fa-solid fa-layer-group';\n }\n\n /**\n * Opens the create sub-agent slide-in panel using the new CreateAgentService.\n * After successful creation, saves the agent and navigates to it.\n */\n public openCreateSubAgent(): void {\n if (!this.currentAgent) return;\n\n this.error = null;\n\n this.createAgentService.OpenSubAgentSlideIn(\n this.currentAgent.ID,\n this.currentAgent.Name || 'Agent'\n ).subscribe({\n next: async (dialogResult) => {\n if (!dialogResult.Cancelled && dialogResult.Result) {\n await this.handleAgentCreated(dialogResult.Result);\n }\n },\n error: (err) => {\n console.error('Error in create sub-agent slide-in:', err);\n this.error = 'Failed to open create sub-agent panel';\n }\n });\n }\n\n /**\n * Handles the result from the create agent slide-in.\n * Saves the agent and navigates to the new record.\n */\n private async handleAgentCreated(result: CreateAgentResult): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n\n const agent = result.Agent;\n\n // Create the agent and all of its linked prompts/actions in one atomic transaction.\n // agent.ID is assigned client-side by NewRecord() so we can use it on child records before submit.\n const md = this.ProviderToUse;\n const tg = await md.CreateTransactionGroup();\n\n agent.TransactionGroup = tg;\n await agent.Save();\n\n if (result.AgentPrompts && result.AgentPrompts.length > 0) {\n for (const agentPrompt of result.AgentPrompts) {\n agentPrompt.AgentID = agent.ID;\n agentPrompt.TransactionGroup = tg;\n await agentPrompt.Save();\n }\n }\n\n if (result.AgentActions && result.AgentActions.length > 0) {\n for (const agentAction of result.AgentActions) {\n agentAction.AgentID = agent.ID;\n agentAction.TransactionGroup = tg;\n await agentAction.Save();\n }\n }\n\n if (await tg.Submit()) {\n LogStatus('Sub-agent created successfully');\n\n // Reload agent data to show the new hierarchy\n await this.loadAgentData();\n\n // Navigate to the newly created agent record\n this.navigationService.OpenEntityRecord('MJ: AI Agents', agent.PrimaryKey);\n } else {\n const errorMessage = agent.LatestResult?.Message || 'Unknown error occurred while creating sub-agent';\n this.error = `Failed to create sub-agent: ${errorMessage}`;\n LogError('Sub-agent creation failed', undefined, errorMessage);\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';\n this.error = `Failed to create sub-agent: ${errorMessage}`;\n LogError('Error creating sub-agent', undefined, error);\n } finally {\n this.isLoading = false;\n }\n }\n\n public hasChildren(): boolean {\n return this.selectedNode?.children && this.selectedNode.children.length > 0 || false;\n }\n\n public hasParent(): boolean {\n return this.selectedNode?.parent !== undefined;\n }\n\n public getChildCount(): number {\n return this.selectedNode?.children?.length || 0;\n }\n\n public openCurrentAgentRecord(): void {\n if (this.currentAgent) {\n this.openEntityRecord.emit({ entityName: 'MJ: AI Agents', recordId: this.currentAgent.ID });\n }\n }\n}","<div class=\"agent-editor-container\">\n <!-- Header -->\n <div class=\"editor-header\">\n <div class=\"header-info\">\n <div class=\"header-actions\">\n <button \n type=\"button\" \n class=\"back-btn\"\n (click)=\"closeEditor()\"\n title=\"Back to Agent List\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Agents\n </button>\n \n @if (currentAgent) {\n <button \n type=\"button\" \n class=\"open-btn\"\n (click)=\"openCurrentAgentRecord()\"\n title=\"Open Agent Record\">\n <i class=\"fa-solid fa-external-link\"></i>\n Open Record\n </button>\n }\n </div>\n \n @if (currentAgent) {\n <div class=\"agent-breadcrumb\">\n <h2>{{ currentAgent.Name }}</h2>\n @if (currentAgent.Parent) {\n <span class=\"breadcrumb-item\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n Child of {{ currentAgent.Parent }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Tab Navigation -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-navigation\">\n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'hierarchy'\"\n (click)=\"setActiveTab('hierarchy')\">\n <i class=\"fa-solid fa-sitemap\"></i>\n Hierarchy\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'prompts'\"\n (click)=\"setActiveTab('prompts')\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n Prompts\n </button>\n \n <button \n type=\"button\" \n class=\"tab-btn\"\n [class.active]=\"activeTab === 'properties'\"\n (click)=\"setActiveTab('properties')\">\n <i class=\"fa-solid fa-cog\"></i>\n Properties\n </button>\n </div>\n }\n\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading agent data...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Error State -->\n @if (error) {\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Error Loading Agent</h3>\n <p>{{ error }}</p>\n <button class=\"retry-btn\" (click)=\"loadAgentData()\">\n <i class=\"fa-solid fa-retry\"></i>\n Retry\n </button>\n </div>\n </div>\n }\n\n <!-- Tab Content -->\n @if (!isLoading && !error && currentAgent) {\n <div class=\"tab-content\" >\n \n <!-- Hierarchy Tab -->\n @if (activeTab === 'hierarchy') {\n <div class=\"hierarchy-section\" >\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-sitemap\"></i>\n Agent Hierarchy\n </h3>\n \n <div class=\"hierarchy-controls\">\n <div class=\"zoom-controls\">\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomIn()\"\n title=\"Zoom In\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"zoomOut()\"\n title=\"Zoom Out\">\n <i class=\"fa-solid fa-minus\"></i>\n </button>\n <button \n type=\"button\" \n class=\"zoom-btn\"\n (click)=\"resetZoom()\"\n title=\"Reset Zoom\">\n <i class=\"fa-solid fa-expand\"></i>\n </button>\n </div>\n \n <div class=\"hierarchy-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-rect level-0\"></div>\n <span>Root</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-1\"></div>\n <span>Level 1</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-rect level-2\"></div>\n <span>Level 2+</span>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"hierarchy-chart\" #hierarchyChart >\n <!-- Help text overlay -->\n @if (hierarchyData && (hasChildren() || hasParent())) {\n <div class=\"chart-help\">\n <small>\n <i class=\"fa-solid fa-hand-pointer\"></i>\n Drag to pan • Use zoom controls or scroll to zoom • Click nodes to navigate\n </small>\n </div>\n }\n \n <!-- Empty state for hierarchy -->\n @if (!hierarchyData || (!hasChildren() && !hasParent())) {\n <div class=\"empty-hierarchy\">\n <i class=\"fa-solid fa-sitemap\"></i>\n <h4>No Agent Hierarchy</h4>\n <p>This agent doesn't have any parent or child agents yet.</p>\n <button class=\"create-subagent-btn\" (click)=\"openCreateSubAgent()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Prompts Tab -->\n @if (activeTab === 'prompts') {\n <div class=\"prompts-section\" >\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-comment-dots\"></i>\n Agent Prompts\n </h3>\n <button class=\"add-prompt-btn\" title=\"Add New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Prompt\n </button>\n </div>\n \n <div class=\"prompts-list\">\n @if (agentPrompts.length === 0) {\n <div class=\"empty-prompts\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <p>No prompts configured for this agent</p>\n <button class=\"add-first-prompt-btn\">\n <i class=\"fa-solid fa-plus\"></i>\n Add First Prompt\n </button>\n </div>\n } @else {\n @for (prompt of agentPrompts; track prompt.id) {\n <div class=\"prompt-card\">\n <div class=\"prompt-header\">\n <div class=\"prompt-info\">\n <h4>{{ prompt.name }}</h4>\n <span class=\"prompt-type\">{{ prompt.type }}</span>\n </div>\n <div class=\"prompt-actions\">\n <button class=\"action-btn\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"action-btn danger\" title=\"Delete Prompt\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n </div>\n <div class=\"prompt-content\">\n <p>{{ prompt.content }}</p>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n \n <!-- Properties Tab -->\n @if (activeTab === 'properties') {\n <div class=\"properties-section\" >\n <div class=\"section-header\">\n <h3>\n <i class=\"fa-solid fa-cog\"></i>\n Agent Properties\n </h3>\n <button class=\"save-btn\" title=\"Save Changes\">\n <i class=\"fa-solid fa-save\"></i>\n Save\n </button>\n </div>\n \n <div class=\"properties-form\">\n <div class=\"form-group\">\n <label>Name</label>\n <input \n type=\"text\" \n class=\"form-input\"\n [value]=\"currentAgent.Name\"\n placeholder=\"Agent name\">\n </div>\n \n <div class=\"form-group\">\n <label>Description</label>\n <textarea \n class=\"form-textarea\"\n [value]=\"currentAgent.Description\"\n placeholder=\"Agent description\"\n rows=\"3\"></textarea>\n </div>\n \n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Execution Mode</label>\n <select class=\"form-select\" [value]=\"currentAgent.ExecutionMode\">\n <option value=\"Sequential\">Sequential</option>\n <option value=\"Parallel\">Parallel</option>\n </select>\n </div>\n \n <div class=\"form-group\">\n <label>Execution Order</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ExecutionOrder\"\n min=\"0\">\n </div>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.ExposeAsAction\">\n <span class=\"checkmark\"></span>\n Expose as Action\n </label>\n <small>Allow this agent to be used as an action by other agents</small>\n </div>\n \n <div class=\"form-group checkbox-group\">\n <label class=\"checkbox-label\">\n <input \n type=\"checkbox\" \n [checked]=\"currentAgent.EnableContextCompression\">\n <span class=\"checkmark\"></span>\n Enable Context Compression\n </label>\n <small>Automatically compress conversation context when threshold is reached</small>\n </div>\n \n @if (currentAgent.EnableContextCompression) {\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label>Message Threshold</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageThreshold\"\n min=\"1\"\n placeholder=\"Number of messages\">\n </div>\n \n <div class=\"form-group\">\n <label>Retention Count</label>\n <input \n type=\"number\" \n class=\"form-input\"\n [value]=\"currentAgent.ContextCompressionMessageRetentionCount\"\n min=\"0\"\n placeholder=\"Messages to keep\">\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Sub-Agent creation now uses CreateAgentService slide-in panel -->\n</div>"]}
@@ -0,0 +1,16 @@
1
+ import { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Admin → Data & Schema. ERD viewer, query browser, and the database
5
+ * designer wizard. Order matters here: ERD first (overview), then Query
6
+ * Browser (read), then Database Designer (write).
7
+ */
8
+ export declare class AdminDataSchemaComponent extends BaseAdminContainerComponent {
9
+ readonly ContainerTitle = "Data & Schema";
10
+ readonly ContainerIcon = "fa-solid fa-database";
11
+ readonly ContainerSubtitle = "Schema visualization, queries, and database design";
12
+ readonly Sections: AdminSection[];
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminDataSchemaComponent, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminDataSchemaComponent, "mj-admin-data-schema", never, {}, {}, never, never, false, never>;
15
+ }
16
+ //# sourceMappingURL=admin-data-schema.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-data-schema.component.d.ts","sourceRoot":"","sources":["../../src/Admin/admin-data-schema.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;AAE7F;;;;GAIG;AACH,qBAOa,wBAAyB,SAAQ,2BAA2B;IACrE,SAAgB,cAAc,mBAAmB;IACjD,SAAgB,aAAa,0BAA0B;IACvD,SAAgB,iBAAiB,wDAAwD;IAEzF,SAAgB,QAAQ,EAAE,YAAY,EAAE,CAsBtC;yCA3BO,wBAAwB;2CAAxB,wBAAwB;CA4BpC"}
@@ -0,0 +1,136 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
9
+ import { RegisterClass } from '@memberjunction/global';
10
+ import { BaseAdminContainerComponent } from './base-admin-container.component';
11
+ import * as i0 from "@angular/core";
12
+ const _forTrack0 = ($index, $item) => $item.id;
13
+ function AdminDataSchemaComponent_For_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 17);
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const section_r2 = i0.ɵɵnextContext().$implicit;
19
+ i0.ɵɵadvance();
20
+ i0.ɵɵtextInterpolate(section_r2.description);
21
+ } }
22
+ function AdminDataSchemaComponent_For_12_Template(rf, ctx) { if (rf & 1) {
23
+ const _r1 = i0.ɵɵgetCurrentView();
24
+ i0.ɵɵelementStart(0, "button", 13);
25
+ i0.ɵɵlistener("click", function AdminDataSchemaComponent_For_12_Template_button_click_0_listener() { const section_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionClick(section_r2)); });
26
+ i0.ɵɵelement(1, "i", 14);
27
+ i0.ɵɵelementStart(2, "div", 15)(3, "div", 16);
28
+ i0.ɵɵtext(4);
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵconditionalCreate(5, AdminDataSchemaComponent_For_12_Conditional_5_Template, 2, 1, "div", 17);
31
+ i0.ɵɵelementEnd()();
32
+ } if (rf & 2) {
33
+ const section_r2 = ctx.$implicit;
34
+ const ctx_r2 = i0.ɵɵnextContext();
35
+ i0.ɵɵclassProp("admin-container__nav-item--active", ctx_r2.ActiveSection === section_r2.id);
36
+ i0.ɵɵadvance();
37
+ i0.ɵɵclassMap(section_r2.icon);
38
+ i0.ɵɵadvance(3);
39
+ i0.ɵɵtextInterpolate(section_r2.label);
40
+ i0.ɵɵadvance();
41
+ i0.ɵɵconditional(section_r2.description ? 5 : -1);
42
+ } }
43
+ function AdminDataSchemaComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "div", 10);
45
+ i0.ɵɵelement(1, "i", 18);
46
+ i0.ɵɵelementStart(2, "span");
47
+ i0.ɵɵtext(3);
48
+ i0.ɵɵelementEnd()();
49
+ } if (rf & 2) {
50
+ const ctx_r2 = i0.ɵɵnextContext();
51
+ i0.ɵɵadvance(3);
52
+ i0.ɵɵtextInterpolate(ctx_r2.LoadError);
53
+ } }
54
+ function AdminDataSchemaComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 11);
56
+ i0.ɵɵelement(1, "i", 19);
57
+ i0.ɵɵelementStart(2, "span");
58
+ i0.ɵɵtext(3, "Loading\u2026");
59
+ i0.ɵɵelementEnd()();
60
+ } }
61
+ /**
62
+ * Admin → Data & Schema. ERD viewer, query browser, and the database
63
+ * designer wizard. Order matters here: ERD first (overview), then Query
64
+ * Browser (read), then Database Designer (write).
65
+ */
66
+ let AdminDataSchemaComponent = class AdminDataSchemaComponent extends BaseAdminContainerComponent {
67
+ ContainerTitle = 'Data & Schema';
68
+ ContainerIcon = 'fa-solid fa-database';
69
+ ContainerSubtitle = 'Schema visualization, queries, and database design';
70
+ Sections = [
71
+ {
72
+ id: 'erd',
73
+ label: 'ERD',
74
+ icon: 'fa-solid fa-diagram-project',
75
+ description: 'Entity-relationship diagram',
76
+ source: { kind: 'dashboard', dashboardName: 'ERD' }
77
+ },
78
+ {
79
+ id: 'query-browser',
80
+ label: 'Query Browser',
81
+ icon: 'fa-solid fa-magnifying-glass',
82
+ description: 'Browse and run stored queries',
83
+ source: { kind: 'resource', driverClass: 'QueryBrowserResource' }
84
+ },
85
+ {
86
+ id: 'database-designer',
87
+ label: 'Database Designer',
88
+ icon: 'fa-solid fa-wand-magic-sparkles',
89
+ description: 'Create entities and fields',
90
+ source: { kind: 'resource', driverClass: 'DatabaseDesignerDashboard' }
91
+ }
92
+ ];
93
+ static ɵfac = /*@__PURE__*/ (() => { let ɵAdminDataSchemaComponent_BaseFactory; return function AdminDataSchemaComponent_Factory(__ngFactoryType__) { return (ɵAdminDataSchemaComponent_BaseFactory || (ɵAdminDataSchemaComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AdminDataSchemaComponent)))(__ngFactoryType__ || AdminDataSchemaComponent); }; })();
94
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminDataSchemaComponent, selectors: [["mj-admin-data-schema"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 7, consts: [["contentHost", ""], [1, "admin-container"], [1, "admin-container__header"], [1, "admin-container__header-icon"], [1, "admin-container__header-title"], [1, "admin-container__header-sub"], [1, "admin-container__body"], [1, "admin-container__nav"], ["type", "button", 1, "admin-container__nav-item", 3, "admin-container__nav-item--active"], [1, "admin-container__content"], [1, "admin-container__error"], [1, "admin-container__loading"], [1, "admin-container__host"], ["type", "button", 1, "admin-container__nav-item", 3, "click"], [1, "admin-container__nav-icon"], [1, "admin-container__nav-text"], [1, "admin-container__nav-label"], [1, "admin-container__nav-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AdminDataSchemaComponent_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementStart(0, "div", 1)(1, "header", 2)(2, "div", 3);
96
+ i0.ɵɵelement(3, "i");
97
+ i0.ɵɵelementEnd();
98
+ i0.ɵɵelementStart(4, "div")(5, "h3", 4);
99
+ i0.ɵɵtext(6);
100
+ i0.ɵɵelementEnd();
101
+ i0.ɵɵelementStart(7, "div", 5);
102
+ i0.ɵɵtext(8);
103
+ i0.ɵɵelementEnd()()();
104
+ i0.ɵɵelementStart(9, "div", 6)(10, "aside", 7);
105
+ i0.ɵɵrepeaterCreate(11, AdminDataSchemaComponent_For_12_Template, 6, 6, "button", 8, _forTrack0);
106
+ i0.ɵɵelementEnd();
107
+ i0.ɵɵelementStart(13, "main", 9);
108
+ i0.ɵɵconditionalCreate(14, AdminDataSchemaComponent_Conditional_14_Template, 4, 1, "div", 10)(15, AdminDataSchemaComponent_Conditional_15_Template, 4, 0, "div", 11);
109
+ i0.ɵɵelementStart(16, "div", 12);
110
+ i0.ɵɵelementContainer(17, null, 0);
111
+ i0.ɵɵelementEnd()()()();
112
+ } if (rf & 2) {
113
+ i0.ɵɵadvance(3);
114
+ i0.ɵɵclassMap(ctx.ContainerIcon);
115
+ i0.ɵɵadvance(3);
116
+ i0.ɵɵtextInterpolate(ctx.ContainerTitle);
117
+ i0.ɵɵadvance(2);
118
+ i0.ɵɵtextInterpolate(ctx.ContainerSubtitle);
119
+ i0.ɵɵadvance(3);
120
+ i0.ɵɵrepeater(ctx.Sections);
121
+ i0.ɵɵadvance(3);
122
+ i0.ɵɵconditional(ctx.LoadError ? 14 : ctx.IsLoading ? 15 : -1);
123
+ i0.ɵɵadvance(2);
124
+ i0.ɵɵclassProp("admin-container__host--hidden", ctx.LoadError || ctx.IsLoading);
125
+ } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.admin-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.admin-container__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.admin-container__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.admin-container__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] .admin-container__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.admin-container__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n\n\n.admin-container__host[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden[_ngcontent-%COMP%] { display: none; }\n.admin-container__host[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.admin-container__empty[_ngcontent-%COMP%], \n.admin-container__error[_ngcontent-%COMP%], \n.admin-container__loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.admin-container__error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 20px; }\n.admin-container__loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body[_ngcontent-%COMP%] { flex-direction: column; }\n .admin-container__nav[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc[_ngcontent-%COMP%] { display: none; }\n .admin-container__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}"] });
126
+ };
127
+ AdminDataSchemaComponent = __decorate([
128
+ RegisterClass(BaseResourceComponent, 'AdminDataSchema')
129
+ ], AdminDataSchemaComponent);
130
+ export { AdminDataSchemaComponent };
131
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminDataSchemaComponent, [{
132
+ type: Component,
133
+ args: [{ standalone: false, selector: 'mj-admin-data-schema', template: "<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading\u2026</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.admin-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.admin-container__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Layout: sidebar + content */\n.admin-container__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text { flex: 1; min-width: 0; }\n.admin-container__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active .admin-container__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.admin-container__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n/* Dynamic host */\n.admin-container__host {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden { display: none; }\n.admin-container__host > * {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty + error + loading states */\n.admin-container__empty,\n.admin-container__error,\n.admin-container__loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error {\n color: var(--mj-status-error);\n}\n.admin-container__error i { font-size: 20px; }\n.admin-container__loading i { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body { flex-direction: column; }\n .admin-container__nav {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc { display: none; }\n .admin-container__header { padding: 12px 14px; gap: 10px; }\n}\n"] }]
134
+ }], null, null); })();
135
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AdminDataSchemaComponent, { className: "AdminDataSchemaComponent", filePath: "src/Admin/admin-data-schema.component.ts", lineNumber: 18 }); })();
136
+ //# sourceMappingURL=admin-data-schema.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-data-schema.component.js","sourceRoot":"","sources":["../../src/Admin/admin-data-schema.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAgB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;;;ICiBjE,+BAAuC;IAAA,YAAyB;IAAA,iBAAM;;;IAA/B,cAAyB;IAAzB,4CAAyB;;;;IAR5E,kCAG0C;IAAlC,kNAAS,iCAAuB,KAAC;IACrC,wBAAgE;IAE5D,AADJ,+BAAuC,cACK;IAAA,YAAmB;IAAA,iBAAM;IACjE,kGAA2B;IAInC,AADI,iBAAM,EACD;;;;IATD,2FAAwE;IAEvC,cAAsB;IAAtB,8BAAsB;IAEf,eAAmB;IAAnB,sCAAmB;IAC3D,cAEC;IAFD,iDAEC;;;IAQT,+BAAoC;IAChC,wBAAgD;IAChD,4BAAM;IAAA,YAAe;IACzB,AADyB,iBAAO,EAC1B;;;IADI,eAAe;IAAf,sCAAe;;;IAGzB,+BAAsC;IAClC,wBAA2C;IAC3C,4BAAM;IAAA,6BAAQ;IAClB,AADkB,iBAAO,EACnB;;ADhCtB;;;;GAIG;AAQI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2BAA2B;IACrD,cAAc,GAAG,eAAe,CAAC;IACjC,aAAa,GAAG,sBAAsB,CAAC;IACvC,iBAAiB,GAAG,oDAAoD,CAAC;IAEzE,QAAQ,GAAmB;QACvC;YACI,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,6BAA6B;YACnC,WAAW,EAAE,6BAA6B;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE;SACtD;QACD;YACI,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,8BAA8B;YACpC,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE;SACpE;QACD;YACI,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,iCAAiC;YACvC,WAAW,EAAE,4BAA4B;YACzC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACzE;KACJ,CAAC;6QA3BO,wBAAwB,yBAAxB,wBAAwB;6DAAxB,wBAAwB;YCf7B,AADJ,AADJ,8BAA6B,gBACe,aACM;YAAA,oBAA+B;YAAA,iBAAM;YAE3E,AADJ,2BAAK,YACyC;YAAA,YAAoB;YAAA,iBAAK;YACnE,8BAAyC;YAAA,YAAuB;YAExE,AADI,AADoE,iBAAM,EACpE,EACD;YAGL,AADJ,8BAAmC,gBACK;YAChC,gGAaC;YACL,iBAAQ;YAER,gCAAuC;YAMjC,AALF,6FAAiB,uEAKO;YAMxB,gCAAkG;YAC9F,kCAA0C;YAI1D,AADI,AADI,AADI,iBAAM,EACH,EACL,EACJ;;YA1C+C,eAAuB;YAAvB,gCAAuB;YAEtB,eAAoB;YAApB,wCAAoB;YACrB,eAAuB;YAAvB,2CAAuB;YAMhE,eAaC;YAbD,2BAaC;YAID,eAUC;YAVD,8DAUC;YACkC,eAA8D;YAA9D,+EAA8D;;;ADtBhG,wBAAwB;IAPpC,aAAa,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;GAO3C,wBAAwB,CA4BpC;;iFA5BY,wBAAwB;cANpC,SAAS;6BACM,KAAK,YACP,sBAAsB;;kFAIvB,wBAAwB","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Data & Schema. ERD viewer, query browser, and the database\n * designer wizard. Order matters here: ERD first (overview), then Query\n * Browser (read), then Database Designer (write).\n */\n@RegisterClass(BaseResourceComponent, 'AdminDataSchema')\n@Component({\n standalone: false,\n selector: 'mj-admin-data-schema',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminDataSchemaComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Data & Schema';\n public readonly ContainerIcon = 'fa-solid fa-database';\n public readonly ContainerSubtitle = 'Schema visualization, queries, and database design';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'erd',\n label: 'ERD',\n icon: 'fa-solid fa-diagram-project',\n description: 'Entity-relationship diagram',\n source: { kind: 'dashboard', dashboardName: 'ERD' }\n },\n {\n id: 'query-browser',\n label: 'Query Browser',\n icon: 'fa-solid fa-magnifying-glass',\n description: 'Browse and run stored queries',\n source: { kind: 'resource', driverClass: 'QueryBrowserResource' }\n },\n {\n id: 'database-designer',\n label: 'Database Designer',\n icon: 'fa-solid fa-wand-magic-sparkles',\n description: 'Create entities and fields',\n source: { kind: 'resource', driverClass: 'DatabaseDesignerDashboard' }\n }\n ];\n}\n","<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading…</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n"]}
@@ -0,0 +1,14 @@
1
+ import { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Admin → Developer Tools. Diagnostic and inspection sub-tools for developers.
5
+ */
6
+ export declare class AdminDevToolsResourceComponent extends BaseAdminContainerComponent {
7
+ readonly ContainerTitle = "Developer Tools";
8
+ readonly ContainerIcon = "fa-solid fa-screwdriver-wrench";
9
+ readonly ContainerSubtitle = "Diagnostic and inspection tools for developers";
10
+ readonly Sections: AdminSection[];
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminDevToolsResourceComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminDevToolsResourceComponent, "mj-admin-dev-tools-resource", never, {}, {}, never, never, false, never>;
13
+ }
14
+ //# sourceMappingURL=admin-dev-tools-resource.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-dev-tools-resource.component.d.ts","sourceRoot":"","sources":["../../src/Admin/admin-dev-tools-resource.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;AAE7F;;GAEG;AACH,qBAOa,8BAA+B,SAAQ,2BAA2B;IAC3E,SAAgB,cAAc,qBAAqB;IACnD,SAAgB,aAAa,oCAAoC;IACjE,SAAgB,iBAAiB,oDAAoD;IAErF,SAAgB,QAAQ,EAAE,YAAY,EAAE,CAkDtC;yCAvDO,8BAA8B;2CAA9B,8BAA8B;CAwD1C"}