@memberjunction/ng-dashboards 5.26.0 → 5.27.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 (98) hide show
  1. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +96 -0
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -0
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +710 -0
  4. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -0
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +52 -0
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -0
  7. package/dist/AI/components/analytics/ai-analytics-resource.component.js +356 -0
  8. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -0
  9. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +52 -0
  10. package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -0
  11. package/dist/AI/components/analytics/analytics-filter-bar.component.js +306 -0
  12. package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -0
  13. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +81 -0
  14. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -0
  15. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +744 -0
  16. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -0
  17. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +61 -0
  18. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -0
  19. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +490 -0
  20. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -0
  21. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +77 -0
  22. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -0
  23. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +673 -0
  24. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -0
  25. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +65 -0
  26. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -0
  27. package/dist/AI/components/analytics/model-performance/model-performance.component.js +537 -0
  28. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -0
  29. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +131 -0
  30. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -0
  31. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +1030 -0
  32. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -0
  33. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +78 -0
  34. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -0
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +569 -0
  36. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -0
  37. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  38. package/dist/AI/components/execution-monitoring.component.js +4 -14
  39. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  40. package/dist/AI/components/overview/ai-overview-hub.component.d.ts +58 -0
  41. package/dist/AI/components/overview/ai-overview-hub.component.d.ts.map +1 -0
  42. package/dist/AI/components/overview/ai-overview-hub.component.js +315 -0
  43. package/dist/AI/components/overview/ai-overview-hub.component.js.map +1 -0
  44. package/dist/AI/components/prompts/prompt-management.component.js +1 -1
  45. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  46. package/dist/AI/index.d.ts +11 -0
  47. package/dist/AI/index.d.ts.map +1 -1
  48. package/dist/AI/index.js +13 -0
  49. package/dist/AI/index.js.map +1 -1
  50. package/dist/AI/interfaces/analytics-preferences.interface.d.ts +50 -0
  51. package/dist/AI/interfaces/analytics-preferences.interface.d.ts.map +1 -0
  52. package/dist/AI/interfaces/analytics-preferences.interface.js +9 -0
  53. package/dist/AI/interfaces/analytics-preferences.interface.js.map +1 -0
  54. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  55. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +1 -1
  56. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  57. package/dist/Home/home-dashboard.component.js +2 -2
  58. package/dist/MCP/index.d.ts +1 -0
  59. package/dist/MCP/index.d.ts.map +1 -1
  60. package/dist/MCP/index.js +2 -0
  61. package/dist/MCP/index.js.map +1 -1
  62. package/dist/MCP/mcp-dashboard.component.d.ts +1 -0
  63. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  64. package/dist/MCP/mcp-dashboard.component.js +5 -4
  65. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  66. package/dist/MCP/mcp-resource.component.d.ts +6 -5
  67. package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
  68. package/dist/MCP/mcp-resource.component.js +7 -8
  69. package/dist/MCP/mcp-resource.component.js.map +1 -1
  70. package/dist/ai-dashboards.module.d.ts +27 -17
  71. package/dist/ai-dashboards.module.d.ts.map +1 -1
  72. package/dist/ai-dashboards.module.js +66 -3
  73. package/dist/ai-dashboards.module.js.map +1 -1
  74. package/dist/public-api.d.ts +1 -1
  75. package/dist/public-api.d.ts.map +1 -1
  76. package/dist/public-api.js +1 -1
  77. package/dist/public-api.js.map +1 -1
  78. package/package.json +48 -48
  79. package/dist/__tests__/analytics-resource.test.d.ts +0 -2
  80. package/dist/__tests__/analytics-resource.test.d.ts.map +0 -1
  81. package/dist/__tests__/analytics-resource.test.js +0 -181
  82. package/dist/__tests__/analytics-resource.test.js.map +0 -1
  83. package/dist/__tests__/dashboards.test.d.ts +0 -2
  84. package/dist/__tests__/dashboards.test.d.ts.map +0 -1
  85. package/dist/__tests__/dashboards.test.js +0 -40
  86. package/dist/__tests__/dashboards.test.js.map +0 -1
  87. package/dist/__tests__/integration-data-service.test.d.ts +0 -2
  88. package/dist/__tests__/integration-data-service.test.d.ts.map +0 -1
  89. package/dist/__tests__/integration-data-service.test.js +0 -132
  90. package/dist/__tests__/integration-data-service.test.js.map +0 -1
  91. package/dist/__tests__/mapping-validation.test.d.ts +0 -2
  92. package/dist/__tests__/mapping-validation.test.d.ts.map +0 -1
  93. package/dist/__tests__/mapping-validation.test.js +0 -170
  94. package/dist/__tests__/mapping-validation.test.js.map +0 -1
  95. package/dist/__tests__/scheduling.test.d.ts +0 -2
  96. package/dist/__tests__/scheduling.test.d.ts.map +0 -1
  97. package/dist/__tests__/scheduling.test.js +0 -205
  98. package/dist/__tests__/scheduling.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-load-dialog.component.js","sourceRoot":"","sources":["../../../src/ComponentStudio/components/artifact-load-dialog.component.ts","../../../src/ComponentStudio/components/artifact-load-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport {\n MJArtifactEntity,\n MJArtifactVersionEntity,\n MJCollectionEntity,\n MJCollectionArtifactEntity\n} from '@memberjunction/core-entities';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SkipAPIAnalysisCompleteResponse } from '@memberjunction/skip-types';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport interface ArtifactLoadResult {\n spec: ComponentSpec;\n artifactID: string;\n versionID: string;\n versionNumber: number;\n artifactName: string;\n}\n\n@Component({\n standalone: false,\n selector: 'app-artifact-load-dialog',\n templateUrl: './artifact-load-dialog.component.html',\n styleUrl: './artifact-load-dialog.component.css'\n})\nexport class ArtifactLoadDialogComponent implements OnInit, OnDestroy {\n @Input() Visible = false;\n @Output() Close = new EventEmitter<ArtifactLoadResult | undefined>();\n\n // Tab state\n activeTab = 0; // 0 = Artifacts, 1 = Collections\n\n // Artifacts data\n artifacts: MJArtifactEntity[] = [];\n artifactVersions: MJArtifactVersionEntity[] = [];\n selectedArtifact: MJArtifactEntity | null = null;\n selectedVersion: MJArtifactVersionEntity | null = null;\n\n // Collections data\n collections: MJCollectionEntity[] = [];\n selectedCollection: MJCollectionEntity | null = null;\n collectionArtifacts: MJArtifactEntity[] = [];\n\n // Search and filter\n searchTerm = '';\n selectedArtifactType = '';\n userEmail = '';\n\n // Paging\n currentPage = 0;\n pageSize = 25;\n totalArtifacts = 0;\n hasMorePages = false;\n\n // UI state\n isLoading = true;\n isLoadingVersions = false;\n isLoadingCollections = false;\n isFilterPanelCollapsed = false;\n\n // Preview\n previewSpec: ComponentSpec | null = null;\n previewError: string | null = null;\n showJsonPreview = false;\n\n private metadata = new Metadata();\n private destroy$ = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n async ngOnInit() {\n // Setup search debouncing\n this.searchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.filterArtifacts();\n });\n\n await Promise.all([\n this.loadArtifacts(),\n this.loadCollections()\n ]);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadArtifacts() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const startRow = this.currentPage * this.pageSize;\n\n const result = await rv.RunView<MJArtifactEntity>({\n EntityName: 'MJ: Artifacts',\n ExtraFilter: this.buildArtifactFilter(),\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: this.pageSize,\n StartRow: startRow,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.artifacts = result.Results;\n this.totalArtifacts = result.TotalRowCount || 0;\n const totalPages = Math.ceil(this.totalArtifacts / this.pageSize);\n this.hasMorePages = this.currentPage < totalPages - 1;\n }\n } catch (error) {\n console.error('Error loading artifacts:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n async loadCollections() {\n this.isLoadingCollections = true;\n try {\n const currentUserId = this.metadata.CurrentUser?.ID;\n if (!currentUserId) {\n this.collections = [];\n return;\n }\n\n const rv = new RunView();\n const result = await rv.RunView<MJCollectionEntity>({\n EntityName: 'MJ: Collections',\n ExtraFilter: `UserID = '${currentUserId}' OR ID IN (\n SELECT CollectionID FROM __mj.vwCollectionPermissions\n WHERE UserID = '${currentUserId}' AND CanRead = 1\n )`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.collections = result.Results || [];\n }\n } catch (error) {\n console.error('Error loading collections:', error);\n this.collections = [];\n } finally {\n this.isLoadingCollections = false;\n }\n }\n\n async selectCollection(collection: MJCollectionEntity) {\n this.selectedCollection = collection;\n this.selectedArtifact = null;\n this.selectedVersion = null;\n this.artifactVersions = [];\n\n // Load artifacts in this collection\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJArtifactEntity>({\n EntityName: 'MJ: Artifacts',\n ExtraFilter: `ID IN (\n SELECT DISTINCT av.ArtifactID\n FROM __mj.vwArtifactVersions av\n INNER JOIN __mj.vwCollectionArtifacts ca ON ca.ArtifactVersionID = av.ID\n WHERE ca.CollectionID = '${collection.ID}'\n )`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.collectionArtifacts = result.Results || [];\n }\n } catch (error) {\n console.error('Error loading collection artifacts:', error);\n this.collectionArtifacts = [];\n }\n }\n\n private buildArtifactFilter(): string {\n const filters: string[] = [];\n\n // Always filter to Component type by default\n if (this.selectedArtifactType) {\n filters.push(`TypeID IN (SELECT ID FROM __mj.vwArtifactTypes WHERE Name = '${this.selectedArtifactType}')`);\n } else {\n filters.push(`TypeID IN (SELECT ID FROM __mj.vwArtifactTypes WHERE Name = 'Component')`);\n }\n\n // Search filter\n if (this.searchTerm?.trim()) {\n const term = this.searchTerm.toLowerCase();\n filters.push(`(Name LIKE '%${term}%' OR Description LIKE '%${term}%')`);\n }\n\n // User email filter\n if (this.userEmail?.trim()) {\n const md = new Metadata();\n const schemaName = md.EntityByName(\"MJ: Users\")?.SchemaName || \"__mj\";\n filters.push(`UserID IN (SELECT ID FROM ${schemaName}.vwUsers WHERE Email LIKE '%${this.userEmail.trim()}%')`);\n }\n\n return filters.length > 0 ? filters.join(' AND ') : '';\n }\n\n async selectArtifact(artifact: MJArtifactEntity) {\n this.selectedArtifact = artifact;\n this.selectedVersion = null;\n this.previewSpec = null;\n this.previewError = null;\n\n await this.loadVersions(artifact.ID);\n }\n\n async loadVersions(artifactId: string) {\n this.isLoadingVersions = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifactId}'`,\n OrderBy: 'VersionNumber DESC',\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.artifactVersions = result.Results;\n\n // Auto-select the latest version\n if (this.artifactVersions.length > 0) {\n await this.selectVersion(this.artifactVersions[0]);\n }\n }\n } catch (error) {\n console.error('Error loading versions:', error);\n this.artifactVersions = [];\n } finally {\n this.isLoadingVersions = false;\n }\n }\n\n async selectVersion(version: MJArtifactVersionEntity) {\n this.selectedVersion = version;\n await this.loadPreview(version);\n }\n\n async loadPreview(version: MJArtifactVersionEntity) {\n try {\n this.previewError = null;\n\n // Try Content field first (new schema)\n if (version.Content) {\n this.previewSpec = JSON.parse(version.Content) as ComponentSpec;\n }\n // Fallback to Configuration field (legacy)\n else if (version.Configuration) {\n const config = JSON.parse(version.Configuration);\n\n // Extract from SkipAPIAnalysisCompleteResponse if needed\n if (config.componentOptions && config.componentOptions.length > 0) {\n this.previewSpec = config.componentOptions[0].option;\n } else {\n this.previewSpec = config;\n }\n }\n else {\n this.previewError = 'No content found in this version';\n }\n } catch (error) {\n this.previewError = `Failed to parse: ${error}`;\n this.previewSpec = null;\n }\n }\n\n async filterArtifacts() {\n this.currentPage = 0;\n await this.loadArtifacts();\n }\n\n onSearchInput() {\n this.searchSubject.next(this.searchTerm);\n }\n\n onArtifactTypeChange() {\n this.selectedArtifact = null;\n this.selectedVersion = null;\n this.artifactVersions = [];\n this.filterArtifacts();\n }\n\n async nextPage() {\n if (this.hasMorePages) {\n this.currentPage++;\n await this.loadArtifacts();\n }\n }\n\n async previousPage() {\n if (this.currentPage > 0) {\n this.currentPage--;\n await this.loadArtifacts();\n }\n }\n\n canGoNext(): boolean {\n return this.hasMorePages;\n }\n\n canGoPrevious(): boolean {\n return this.currentPage > 0;\n }\n\n getTotalPages(): number {\n return Math.ceil(this.totalArtifacts / this.pageSize);\n }\n\n toggleFilterPanel() {\n this.isFilterPanelCollapsed = !this.isFilterPanelCollapsed;\n }\n\n getActiveFilterCount(): number {\n let count = 0;\n if (this.searchTerm?.trim()) count++;\n if (this.selectedArtifactType) count++;\n if (this.userEmail?.trim()) count++;\n return count;\n }\n\n canLoad(): boolean {\n return this.selectedArtifact !== null &&\n this.selectedVersion !== null &&\n this.previewSpec !== null;\n }\n\n cancel() {\n this.Close.emit(undefined);\n }\n\n load() {\n if (!this.canLoad()) return;\n\n const result: ArtifactLoadResult = {\n spec: this.previewSpec!,\n artifactID: this.selectedArtifact!.ID,\n versionID: this.selectedVersion!.ID,\n versionNumber: this.selectedVersion!.VersionNumber,\n artifactName: this.selectedArtifact!.Name\n };\n\n this.Close.emit(result);\n }\n\n onTabSelect(index: number) {\n this.activeTab = index;\n }\n\n getArtifactsByTab(): MJArtifactEntity[] {\n return this.activeTab === 0 ? this.artifacts : this.collectionArtifacts;\n }\n\n toggleJsonPreview(): void {\n this.showJsonPreview = !this.showJsonPreview;\n }\n\n getPreviewJSON(): string {\n return this.previewSpec ? JSON.stringify(this.previewSpec, null, 2) : '';\n }\n\n /** Case-insensitive UUID check whether an artifact is the currently selected artifact. */\n IsArtifactSelected(artifact: MJArtifactEntity): boolean {\n return UUIDsEqual(this.selectedArtifact?.ID, artifact.ID);\n }\n\n /** Case-insensitive UUID check whether a collection is the currently selected collection. */\n IsCollectionSelected(collection: MJCollectionEntity): boolean {\n return UUIDsEqual(this.selectedCollection?.ID, collection.ID);\n }\n\n /** Case-insensitive UUID check whether a version is the currently selected version. */\n IsVersionSelected(version: MJArtifactVersionEntity): boolean {\n return UUIDsEqual(this.selectedVersion?.ID, version.ID);\n }\n}\n","<mj-dialog [Visible]=\"true\" Title=\"Load Component from Artifact\" (Close)=\"cancel()\" [Width]=\"1200\" [MinWidth]=\"600\">\n <div class=\"artifact-load-content\">\n <!-- Left Filter Panel -->\n <div class=\"filter-panel\" [style.width]=\"isFilterPanelCollapsed ? '40px' : '280px'\">\n <div class=\"panel-header\">\n @if (!isFilterPanelCollapsed) {\n <span>Filters</span>\n }\n <button mjButton (click)=\"toggleFilterPanel()\"\n variant=\"flat\"\n [class.filter-active]=\"getActiveFilterCount() > 0\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (isFilterPanelCollapsed && getActiveFilterCount() > 0) {\n <span class=\"filter-count\">{{ getActiveFilterCount() }}</span>\n }\n </button>\n </div>\n\n @if (!isFilterPanelCollapsed) {\n <div class=\"filter-content\">\n <!-- Search -->\n <div class=\"filter-group\">\n <label>Search</label>\n <input type=\"text\"\n [(ngModel)]=\"searchTerm\"\n (input)=\"onSearchInput()\"\n placeholder=\"Name or description...\"\n class=\"filter-input\">\n </div>\n\n <!-- Artifact Type -->\n <div class=\"filter-group\">\n <label>Artifact Type</label>\n <select [(ngModel)]=\"selectedArtifactType\"\n (change)=\"onArtifactTypeChange()\"\n class=\"filter-select\">\n <option value=\"\">Component (default)</option>\n <option value=\"Component\">Component</option>\n <option value=\"Report\">Report</option>\n <option value=\"Dashboard\">Dashboard</option>\n </select>\n </div>\n\n <!-- User Email -->\n <div class=\"filter-group\">\n <label>Filter by User</label>\n <input type=\"text\"\n [(ngModel)]=\"userEmail\"\n (input)=\"filterArtifacts()\"\n placeholder=\"Enter user email...\"\n class=\"filter-input\">\n </div>\n </div>\n }\n </div>\n\n <!-- Main Content Area -->\n <div class=\"main-content\">\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 0\"\n (click)=\"onTabSelect(0)\">\n <i class=\"fa-solid fa-file-code\"></i> All Artifacts\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 1\"\n (click)=\"onTabSelect(1)\">\n <i class=\"fa-solid fa-folder\"></i> Collections\n </button>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Artifacts Tab -->\n @if (activeTab === 0) {\n <div class=\"artifacts-view\">\n <!-- Paging Controls -->\n <div class=\"paging-controls\">\n <button mjButton\n (click)=\"previousPage()\"\n [disabled]=\"!canGoPrevious()\">\n <i class=\"fa-solid fa-chevron-left\"></i> Previous\n </button>\n <span class=\"page-info\">\n Page {{ currentPage + 1 }} of {{ getTotalPages() }}\n ({{ totalArtifacts }} total)\n </span>\n <button mjButton\n (click)=\"nextPage()\"\n [disabled]=\"!canGoNext()\">\n Next <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n\n <!-- Artifacts List -->\n <div class=\"artifacts-list\">\n @if (isLoading) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading artifacts...\" size=\"small\"></mj-loading>\n </div>\n }\n @else if (artifacts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No artifacts found</p>\n </div>\n }\n @else {\n @for (artifact of artifacts; track artifact.ID) {\n <div class=\"artifact-item\"\n [class.selected]=\"IsArtifactSelected(artifact)\"\n (click)=\"selectArtifact(artifact)\">\n <div class=\"artifact-content\">\n <div class=\"artifact-main\">\n <div class=\"artifact-name\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>{{ artifact.Name }}</span>\n </div>\n @if (artifact.Description) {\n <div class=\"artifact-description\">\n {{ artifact.Description }}\n </div>\n }\n </div>\n <div class=\"artifact-meta\">\n <div>{{ artifact.Type }}</div>\n <div>{{ artifact.__mj_UpdatedAt | date:'short' }}</div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n\n <!-- Collections Tab -->\n @if (activeTab === 1) {\n <div class=\"collections-view\">\n <div class=\"collections-list\">\n @if (isLoadingCollections) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading collections...\" size=\"small\"></mj-loading>\n </div>\n }\n @else if (collections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No collections found</p>\n </div>\n }\n @else {\n @for (collection of collections; track collection.ID) {\n <div class=\"collection-item\"\n [class.selected]=\"IsCollectionSelected(collection)\"\n (click)=\"selectCollection(collection)\">\n <div class=\"collection-icon\">\n <i class=\"fa-solid fa-folder\"></i>\n </div>\n <div class=\"collection-info\">\n <div class=\"collection-name\">{{ collection.Name }}</div>\n @if (collection.Description) {\n <div class=\"collection-description\">{{ collection.Description }}</div>\n }\n </div>\n </div>\n }\n }\n </div>\n\n @if (selectedCollection) {\n <div class=\"collection-artifacts\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-file-code\"></i>\n Artifacts in \"{{ selectedCollection.Name }}\"\n </div>\n @if (collectionArtifacts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No artifacts in this collection</p>\n </div>\n }\n @else {\n @for (artifact of collectionArtifacts; track artifact.ID) {\n <div class=\"artifact-item\"\n [class.selected]=\"IsArtifactSelected(artifact)\"\n (click)=\"selectArtifact(artifact)\">\n <div class=\"artifact-content\">\n <div class=\"artifact-main\">\n <div class=\"artifact-name\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>{{ artifact.Name }}</span>\n </div>\n @if (artifact.Description) {\n <div class=\"artifact-description\">\n {{ artifact.Description }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Right Version/Preview Panel -->\n @if (selectedArtifact) {\n <div class=\"version-panel\">\n <div class=\"panel-header\">\n <h4><i class=\"fa-solid fa-code-branch\"></i> Versions</h4>\n </div>\n\n <div class=\"version-content\">\n @if (isLoadingVersions) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading versions...\" size=\"small\"></mj-loading>\n </div>\n }\n @else if (artifactVersions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <p>No versions available</p>\n </div>\n }\n @else {\n <div class=\"version-list\">\n @for (version of artifactVersions; track version.ID) {\n <div class=\"version-item\"\n [class.selected]=\"IsVersionSelected(version)\"\n (click)=\"selectVersion(version)\">\n <div class=\"version-number\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Version {{ version.VersionNumber }}\n </div>\n <div class=\"version-meta\">\n <div>{{ version.__mj_UpdatedAt | date:'short' }}</div>\n @if (version.Comments) {\n <div class=\"version-comments\">{{ version.Comments }}</div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Preview Section -->\n @if (selectedVersion) {\n <div class=\"preview-section\">\n <div class=\"preview-header\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n @if (previewError) {\n <div class=\"preview-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ previewError }}\n </div>\n }\n @else if (previewSpec) {\n <div class=\"preview-content\">\n <div class=\"preview-item\">\n <strong>Name:</strong> {{ previewSpec.name }}\n </div>\n @if (previewSpec.description) {\n <div class=\"preview-item\">\n <strong>Description:</strong> {{ previewSpec.description }}\n </div>\n }\n @if (previewSpec.type) {\n <div class=\"preview-item\">\n <strong>Type:</strong> {{ previewSpec.type }}\n </div>\n }\n @if (previewSpec.namespace) {\n <div class=\"preview-item\">\n <strong>Namespace:</strong> {{ previewSpec.namespace }}\n </div>\n }\n <div class=\"preview-item\">\n <strong>Has Code:</strong> {{ previewSpec.code ? 'Yes' : 'No' }}\n </div>\n @if (previewSpec.dependencies && previewSpec.dependencies.length > 0) {\n <div class=\"preview-item\">\n <strong>Dependencies:</strong> {{ previewSpec.dependencies.length }}\n </div>\n }\n\n <!-- Full Spec JSON Viewer -->\n <div class=\"preview-json-section\">\n <div class=\"preview-json-header\" (click)=\"toggleJsonPreview()\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"!showJsonPreview\" [class.fa-chevron-down]=\"showJsonPreview\"></i>\n <strong>Full Specification (JSON)</strong>\n </div>\n @if (showJsonPreview) {\n <div class=\"preview-json-content\">\n <mj-code-editor\n [value]=\"getPreviewJSON()\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n [setup]=\"'basic'\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n\n <mj-dialog-actions>\n <button mjButton\n variant=\"primary\"\n (click)=\"load()\"\n [disabled]=\"!canLoad()\">\n <i class=\"fa-solid fa-download\"></i>\n Load Component\n </button>\n <button mjButton (click)=\"cancel()\">Cancel</button>\n </mj-dialog-actions>\n</mj-dialog>\n"]}
1
+ {"version":3,"file":"artifact-load-dialog.component.js","sourceRoot":"","sources":["../../../src/ComponentStudio/components/artifact-load-dialog.component.ts","../../../src/ComponentStudio/components/artifact-load-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport {\n MJArtifactEntity,\n MJArtifactVersionEntity,\n MJCollectionEntity,\n MJCollectionArtifactEntity\n} from '@memberjunction/core-entities';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport interface ArtifactLoadResult {\n spec: ComponentSpec;\n artifactID: string;\n versionID: string;\n versionNumber: number;\n artifactName: string;\n}\n\n@Component({\n standalone: false,\n selector: 'app-artifact-load-dialog',\n templateUrl: './artifact-load-dialog.component.html',\n styleUrl: './artifact-load-dialog.component.css'\n})\nexport class ArtifactLoadDialogComponent implements OnInit, OnDestroy {\n @Input() Visible = false;\n @Output() Close = new EventEmitter<ArtifactLoadResult | undefined>();\n\n // Tab state\n activeTab = 0; // 0 = Artifacts, 1 = Collections\n\n // Artifacts data\n artifacts: MJArtifactEntity[] = [];\n artifactVersions: MJArtifactVersionEntity[] = [];\n selectedArtifact: MJArtifactEntity | null = null;\n selectedVersion: MJArtifactVersionEntity | null = null;\n\n // Collections data\n collections: MJCollectionEntity[] = [];\n selectedCollection: MJCollectionEntity | null = null;\n collectionArtifacts: MJArtifactEntity[] = [];\n\n // Search and filter\n searchTerm = '';\n selectedArtifactType = '';\n userEmail = '';\n\n // Paging\n currentPage = 0;\n pageSize = 25;\n totalArtifacts = 0;\n hasMorePages = false;\n\n // UI state\n isLoading = true;\n isLoadingVersions = false;\n isLoadingCollections = false;\n isFilterPanelCollapsed = false;\n\n // Preview\n previewSpec: ComponentSpec | null = null;\n previewError: string | null = null;\n showJsonPreview = false;\n\n private metadata = new Metadata();\n private destroy$ = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n async ngOnInit() {\n // Setup search debouncing\n this.searchSubject.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(() => {\n this.filterArtifacts();\n });\n\n await Promise.all([\n this.loadArtifacts(),\n this.loadCollections()\n ]);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async loadArtifacts() {\n this.isLoading = true;\n try {\n const rv = new RunView();\n const startRow = this.currentPage * this.pageSize;\n\n const result = await rv.RunView<MJArtifactEntity>({\n EntityName: 'MJ: Artifacts',\n ExtraFilter: this.buildArtifactFilter(),\n OrderBy: '__mj_UpdatedAt DESC',\n MaxRows: this.pageSize,\n StartRow: startRow,\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.artifacts = result.Results;\n this.totalArtifacts = result.TotalRowCount || 0;\n const totalPages = Math.ceil(this.totalArtifacts / this.pageSize);\n this.hasMorePages = this.currentPage < totalPages - 1;\n }\n } catch (error) {\n console.error('Error loading artifacts:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n async loadCollections() {\n this.isLoadingCollections = true;\n try {\n const currentUserId = this.metadata.CurrentUser?.ID;\n if (!currentUserId) {\n this.collections = [];\n return;\n }\n\n const rv = new RunView();\n const result = await rv.RunView<MJCollectionEntity>({\n EntityName: 'MJ: Collections',\n ExtraFilter: `UserID = '${currentUserId}' OR ID IN (\n SELECT CollectionID FROM __mj.vwCollectionPermissions\n WHERE UserID = '${currentUserId}' AND CanRead = 1\n )`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.collections = result.Results || [];\n }\n } catch (error) {\n console.error('Error loading collections:', error);\n this.collections = [];\n } finally {\n this.isLoadingCollections = false;\n }\n }\n\n async selectCollection(collection: MJCollectionEntity) {\n this.selectedCollection = collection;\n this.selectedArtifact = null;\n this.selectedVersion = null;\n this.artifactVersions = [];\n\n // Load artifacts in this collection\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJArtifactEntity>({\n EntityName: 'MJ: Artifacts',\n ExtraFilter: `ID IN (\n SELECT DISTINCT av.ArtifactID\n FROM __mj.vwArtifactVersions av\n INNER JOIN __mj.vwCollectionArtifacts ca ON ca.ArtifactVersionID = av.ID\n WHERE ca.CollectionID = '${collection.ID}'\n )`,\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.collectionArtifacts = result.Results || [];\n }\n } catch (error) {\n console.error('Error loading collection artifacts:', error);\n this.collectionArtifacts = [];\n }\n }\n\n private buildArtifactFilter(): string {\n const filters: string[] = [];\n\n // Always filter to Component type by default\n if (this.selectedArtifactType) {\n filters.push(`TypeID IN (SELECT ID FROM __mj.vwArtifactTypes WHERE Name = '${this.selectedArtifactType}')`);\n } else {\n filters.push(`TypeID IN (SELECT ID FROM __mj.vwArtifactTypes WHERE Name = 'Component')`);\n }\n\n // Search filter\n if (this.searchTerm?.trim()) {\n const term = this.searchTerm.toLowerCase();\n filters.push(`(Name LIKE '%${term}%' OR Description LIKE '%${term}%')`);\n }\n\n // User email filter\n if (this.userEmail?.trim()) {\n const md = new Metadata();\n const schemaName = md.EntityByName(\"MJ: Users\")?.SchemaName || \"__mj\";\n filters.push(`UserID IN (SELECT ID FROM ${schemaName}.vwUsers WHERE Email LIKE '%${this.userEmail.trim()}%')`);\n }\n\n return filters.length > 0 ? filters.join(' AND ') : '';\n }\n\n async selectArtifact(artifact: MJArtifactEntity) {\n this.selectedArtifact = artifact;\n this.selectedVersion = null;\n this.previewSpec = null;\n this.previewError = null;\n\n await this.loadVersions(artifact.ID);\n }\n\n async loadVersions(artifactId: string) {\n this.isLoadingVersions = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifactId}'`,\n OrderBy: 'VersionNumber DESC',\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.artifactVersions = result.Results;\n\n // Auto-select the latest version\n if (this.artifactVersions.length > 0) {\n await this.selectVersion(this.artifactVersions[0]);\n }\n }\n } catch (error) {\n console.error('Error loading versions:', error);\n this.artifactVersions = [];\n } finally {\n this.isLoadingVersions = false;\n }\n }\n\n async selectVersion(version: MJArtifactVersionEntity) {\n this.selectedVersion = version;\n await this.loadPreview(version);\n }\n\n async loadPreview(version: MJArtifactVersionEntity) {\n try {\n this.previewError = null;\n\n // Try Content field first (new schema)\n if (version.Content) {\n this.previewSpec = JSON.parse(version.Content) as ComponentSpec;\n }\n // Fallback to Configuration field (legacy)\n else if (version.Configuration) {\n const config = JSON.parse(version.Configuration);\n\n // Extract from SkipAPIAnalysisCompleteResponse if needed\n if (config.componentOptions && config.componentOptions.length > 0) {\n this.previewSpec = config.componentOptions[0].option;\n } else {\n this.previewSpec = config;\n }\n }\n else {\n this.previewError = 'No content found in this version';\n }\n } catch (error) {\n this.previewError = `Failed to parse: ${error}`;\n this.previewSpec = null;\n }\n }\n\n async filterArtifacts() {\n this.currentPage = 0;\n await this.loadArtifacts();\n }\n\n onSearchInput() {\n this.searchSubject.next(this.searchTerm);\n }\n\n onArtifactTypeChange() {\n this.selectedArtifact = null;\n this.selectedVersion = null;\n this.artifactVersions = [];\n this.filterArtifacts();\n }\n\n async nextPage() {\n if (this.hasMorePages) {\n this.currentPage++;\n await this.loadArtifacts();\n }\n }\n\n async previousPage() {\n if (this.currentPage > 0) {\n this.currentPage--;\n await this.loadArtifacts();\n }\n }\n\n canGoNext(): boolean {\n return this.hasMorePages;\n }\n\n canGoPrevious(): boolean {\n return this.currentPage > 0;\n }\n\n getTotalPages(): number {\n return Math.ceil(this.totalArtifacts / this.pageSize);\n }\n\n toggleFilterPanel() {\n this.isFilterPanelCollapsed = !this.isFilterPanelCollapsed;\n }\n\n getActiveFilterCount(): number {\n let count = 0;\n if (this.searchTerm?.trim()) count++;\n if (this.selectedArtifactType) count++;\n if (this.userEmail?.trim()) count++;\n return count;\n }\n\n canLoad(): boolean {\n return this.selectedArtifact !== null &&\n this.selectedVersion !== null &&\n this.previewSpec !== null;\n }\n\n cancel() {\n this.Close.emit(undefined);\n }\n\n load() {\n if (!this.canLoad()) return;\n\n const result: ArtifactLoadResult = {\n spec: this.previewSpec!,\n artifactID: this.selectedArtifact!.ID,\n versionID: this.selectedVersion!.ID,\n versionNumber: this.selectedVersion!.VersionNumber,\n artifactName: this.selectedArtifact!.Name\n };\n\n this.Close.emit(result);\n }\n\n onTabSelect(index: number) {\n this.activeTab = index;\n }\n\n getArtifactsByTab(): MJArtifactEntity[] {\n return this.activeTab === 0 ? this.artifacts : this.collectionArtifacts;\n }\n\n toggleJsonPreview(): void {\n this.showJsonPreview = !this.showJsonPreview;\n }\n\n getPreviewJSON(): string {\n return this.previewSpec ? JSON.stringify(this.previewSpec, null, 2) : '';\n }\n\n /** Case-insensitive UUID check whether an artifact is the currently selected artifact. */\n IsArtifactSelected(artifact: MJArtifactEntity): boolean {\n return UUIDsEqual(this.selectedArtifact?.ID, artifact.ID);\n }\n\n /** Case-insensitive UUID check whether a collection is the currently selected collection. */\n IsCollectionSelected(collection: MJCollectionEntity): boolean {\n return UUIDsEqual(this.selectedCollection?.ID, collection.ID);\n }\n\n /** Case-insensitive UUID check whether a version is the currently selected version. */\n IsVersionSelected(version: MJArtifactVersionEntity): boolean {\n return UUIDsEqual(this.selectedVersion?.ID, version.ID);\n }\n}\n","<mj-dialog [Visible]=\"true\" Title=\"Load Component from Artifact\" (Close)=\"cancel()\" [Width]=\"1200\" [MinWidth]=\"600\">\n <div class=\"artifact-load-content\">\n <!-- Left Filter Panel -->\n <div class=\"filter-panel\" [style.width]=\"isFilterPanelCollapsed ? '40px' : '280px'\">\n <div class=\"panel-header\">\n @if (!isFilterPanelCollapsed) {\n <span>Filters</span>\n }\n <button mjButton (click)=\"toggleFilterPanel()\"\n variant=\"flat\"\n [class.filter-active]=\"getActiveFilterCount() > 0\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (isFilterPanelCollapsed && getActiveFilterCount() > 0) {\n <span class=\"filter-count\">{{ getActiveFilterCount() }}</span>\n }\n </button>\n </div>\n\n @if (!isFilterPanelCollapsed) {\n <div class=\"filter-content\">\n <!-- Search -->\n <div class=\"filter-group\">\n <label>Search</label>\n <input type=\"text\"\n [(ngModel)]=\"searchTerm\"\n (input)=\"onSearchInput()\"\n placeholder=\"Name or description...\"\n class=\"filter-input\">\n </div>\n\n <!-- Artifact Type -->\n <div class=\"filter-group\">\n <label>Artifact Type</label>\n <select [(ngModel)]=\"selectedArtifactType\"\n (change)=\"onArtifactTypeChange()\"\n class=\"filter-select\">\n <option value=\"\">Component (default)</option>\n <option value=\"Component\">Component</option>\n <option value=\"Report\">Report</option>\n <option value=\"Dashboard\">Dashboard</option>\n </select>\n </div>\n\n <!-- User Email -->\n <div class=\"filter-group\">\n <label>Filter by User</label>\n <input type=\"text\"\n [(ngModel)]=\"userEmail\"\n (input)=\"filterArtifacts()\"\n placeholder=\"Enter user email...\"\n class=\"filter-input\">\n </div>\n </div>\n }\n </div>\n\n <!-- Main Content Area -->\n <div class=\"main-content\">\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 0\"\n (click)=\"onTabSelect(0)\">\n <i class=\"fa-solid fa-file-code\"></i> All Artifacts\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 1\"\n (click)=\"onTabSelect(1)\">\n <i class=\"fa-solid fa-folder\"></i> Collections\n </button>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Artifacts Tab -->\n @if (activeTab === 0) {\n <div class=\"artifacts-view\">\n <!-- Paging Controls -->\n <div class=\"paging-controls\">\n <button mjButton\n (click)=\"previousPage()\"\n [disabled]=\"!canGoPrevious()\">\n <i class=\"fa-solid fa-chevron-left\"></i> Previous\n </button>\n <span class=\"page-info\">\n Page {{ currentPage + 1 }} of {{ getTotalPages() }}\n ({{ totalArtifacts }} total)\n </span>\n <button mjButton\n (click)=\"nextPage()\"\n [disabled]=\"!canGoNext()\">\n Next <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n\n <!-- Artifacts List -->\n <div class=\"artifacts-list\">\n @if (isLoading) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading artifacts...\" size=\"small\"></mj-loading>\n </div>\n }\n @else if (artifacts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No artifacts found</p>\n </div>\n }\n @else {\n @for (artifact of artifacts; track artifact.ID) {\n <div class=\"artifact-item\"\n [class.selected]=\"IsArtifactSelected(artifact)\"\n (click)=\"selectArtifact(artifact)\">\n <div class=\"artifact-content\">\n <div class=\"artifact-main\">\n <div class=\"artifact-name\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>{{ artifact.Name }}</span>\n </div>\n @if (artifact.Description) {\n <div class=\"artifact-description\">\n {{ artifact.Description }}\n </div>\n }\n </div>\n <div class=\"artifact-meta\">\n <div>{{ artifact.Type }}</div>\n <div>{{ artifact.__mj_UpdatedAt | date:'short' }}</div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n\n <!-- Collections Tab -->\n @if (activeTab === 1) {\n <div class=\"collections-view\">\n <div class=\"collections-list\">\n @if (isLoadingCollections) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading collections...\" size=\"small\"></mj-loading>\n </div>\n }\n @else if (collections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No collections found</p>\n </div>\n }\n @else {\n @for (collection of collections; track collection.ID) {\n <div class=\"collection-item\"\n [class.selected]=\"IsCollectionSelected(collection)\"\n (click)=\"selectCollection(collection)\">\n <div class=\"collection-icon\">\n <i class=\"fa-solid fa-folder\"></i>\n </div>\n <div class=\"collection-info\">\n <div class=\"collection-name\">{{ collection.Name }}</div>\n @if (collection.Description) {\n <div class=\"collection-description\">{{ collection.Description }}</div>\n }\n </div>\n </div>\n }\n }\n </div>\n\n @if (selectedCollection) {\n <div class=\"collection-artifacts\">\n <div class=\"section-header\">\n <i class=\"fa-solid fa-file-code\"></i>\n Artifacts in \"{{ selectedCollection.Name }}\"\n </div>\n @if (collectionArtifacts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No artifacts in this collection</p>\n </div>\n }\n @else {\n @for (artifact of collectionArtifacts; track artifact.ID) {\n <div class=\"artifact-item\"\n [class.selected]=\"IsArtifactSelected(artifact)\"\n (click)=\"selectArtifact(artifact)\">\n <div class=\"artifact-content\">\n <div class=\"artifact-main\">\n <div class=\"artifact-name\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>{{ artifact.Name }}</span>\n </div>\n @if (artifact.Description) {\n <div class=\"artifact-description\">\n {{ artifact.Description }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Right Version/Preview Panel -->\n @if (selectedArtifact) {\n <div class=\"version-panel\">\n <div class=\"panel-header\">\n <h4><i class=\"fa-solid fa-code-branch\"></i> Versions</h4>\n </div>\n\n <div class=\"version-content\">\n @if (isLoadingVersions) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading versions...\" size=\"small\"></mj-loading>\n </div>\n }\n @else if (artifactVersions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <p>No versions available</p>\n </div>\n }\n @else {\n <div class=\"version-list\">\n @for (version of artifactVersions; track version.ID) {\n <div class=\"version-item\"\n [class.selected]=\"IsVersionSelected(version)\"\n (click)=\"selectVersion(version)\">\n <div class=\"version-number\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Version {{ version.VersionNumber }}\n </div>\n <div class=\"version-meta\">\n <div>{{ version.__mj_UpdatedAt | date:'short' }}</div>\n @if (version.Comments) {\n <div class=\"version-comments\">{{ version.Comments }}</div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Preview Section -->\n @if (selectedVersion) {\n <div class=\"preview-section\">\n <div class=\"preview-header\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n @if (previewError) {\n <div class=\"preview-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ previewError }}\n </div>\n }\n @else if (previewSpec) {\n <div class=\"preview-content\">\n <div class=\"preview-item\">\n <strong>Name:</strong> {{ previewSpec.name }}\n </div>\n @if (previewSpec.description) {\n <div class=\"preview-item\">\n <strong>Description:</strong> {{ previewSpec.description }}\n </div>\n }\n @if (previewSpec.type) {\n <div class=\"preview-item\">\n <strong>Type:</strong> {{ previewSpec.type }}\n </div>\n }\n @if (previewSpec.namespace) {\n <div class=\"preview-item\">\n <strong>Namespace:</strong> {{ previewSpec.namespace }}\n </div>\n }\n <div class=\"preview-item\">\n <strong>Has Code:</strong> {{ previewSpec.code ? 'Yes' : 'No' }}\n </div>\n @if (previewSpec.dependencies && previewSpec.dependencies.length > 0) {\n <div class=\"preview-item\">\n <strong>Dependencies:</strong> {{ previewSpec.dependencies.length }}\n </div>\n }\n\n <!-- Full Spec JSON Viewer -->\n <div class=\"preview-json-section\">\n <div class=\"preview-json-header\" (click)=\"toggleJsonPreview()\">\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"!showJsonPreview\" [class.fa-chevron-down]=\"showJsonPreview\"></i>\n <strong>Full Specification (JSON)</strong>\n </div>\n @if (showJsonPreview) {\n <div class=\"preview-json-content\">\n <mj-code-editor\n [value]=\"getPreviewJSON()\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n [setup]=\"'basic'\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n\n <mj-dialog-actions>\n <button mjButton\n variant=\"primary\"\n (click)=\"load()\"\n [disabled]=\"!canLoad()\">\n <i class=\"fa-solid fa-download\"></i>\n Load Component\n </button>\n <button mjButton (click)=\"cancel()\">Cancel</button>\n </mj-dialog-actions>\n</mj-dialog>\n"]}