@memberjunction/ng-dashboards 5.24.0 → 5.26.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.
- package/dist/AI/components/agents/agent-configuration.component.d.ts +15 -33
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +233 -493
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -2
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +7 -7
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +43 -6
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +1135 -864
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +4 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts +4 -5
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +14 -15
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +4 -4
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +5 -5
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +4 -4
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +5 -5
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +2 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -0
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +2 -3
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +9 -11
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +44 -8
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +648 -384
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +2 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +2 -0
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +4 -5
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +11 -12
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +2 -3
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +4 -6
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +2 -3
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +4 -6
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +4 -5
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +10 -11
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +13 -12
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +39 -66
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.d.ts +2 -3
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +4 -6
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +2 -3
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +4 -6
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.d.ts +112 -0
- package/dist/ApplicationRoles/application-roles-resource.component.d.ts.map +1 -0
- package/dist/ApplicationRoles/application-roles-resource.component.js +532 -0
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -0
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +1 -0
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +4 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +4 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +4 -1
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +4 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +4 -1
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +2 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +2 -0
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +2 -3
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +10 -11
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +2 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +2 -0
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts +4 -4
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +8 -9
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +2 -3
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +11 -12
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -0
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +2 -3
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +9 -10
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +23 -15
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +167 -213
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +68 -32
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +453 -420
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +10 -3
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +35 -11
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +12 -3
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js +5 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +4 -4
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +4 -5
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -0
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +1 -0
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +2 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +2 -0
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +4 -3
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +4 -3
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +1 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +13 -3
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +220 -138
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +4 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +1 -0
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/index.d.ts +0 -1
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +0 -1
- package/dist/KnowledgeHub/index.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +2 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +2 -0
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +2 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +2 -0
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +2 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +2 -0
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +2 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +2 -0
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +7 -28
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +25 -107
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
- package/dist/MCP/mcp-resource.component.js +1 -0
- package/dist/MCP/mcp-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +10 -23
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +41 -103
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +1 -0
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +1 -0
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +1 -0
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +9 -10
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +2 -0
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +2 -0
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +2 -0
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +2 -0
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +2 -0
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +1 -0
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts +4 -4
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +9 -10
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts +2 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +2 -0
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +4 -4
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +10 -11
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.d.ts +2 -1
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +2 -0
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +19 -19
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +4 -5
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +19 -18
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +8 -0
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +2 -1
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +7 -3
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +49 -48
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +0 -166
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +0 -1
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +0 -991
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts","../../src/ComponentStudio/component-studio-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport {\n MJComponentEntityExtended,\n MJArtifactVersionEntity,\n ResourceData,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ArtifactSelectionResult } from './components/artifact-selection-dialog.component';\nimport { ArtifactLoadResult } from './components/artifact-load-dialog.component';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ComponentStudioStateService, FileLoadedComponent, ComponentError } from './services/component-studio-state.service';\nimport { ComponentVersionService } from './services/component-version.service';\nimport { SaveVersionResult } from './components/save-version-dialog/save-version-dialog.component';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * User preferences persisted via UserInfoEngine.\n */\ninterface ComponentStudioPreferences {\n leftPanelWidth: number;\n rightPanelWidth: number;\n previewFlexPercent: number;\n isAIPanelCollapsed: boolean;\n isLeftPanelCollapsed: boolean;\n isEditorPanelCollapsed: boolean;\n}\n\n/**\n * Result from the New Component dialog.\n */\nexport interface NewComponentResult {\n name: string;\n title: string;\n description: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-component-studio-dashboard',\n templateUrl: './component-studio-dashboard.component.html',\n styleUrls: ['./component-studio-dashboard.component.css'],\n providers: [ComponentStudioStateService, ComponentVersionService]\n})\n@RegisterClass(BaseDashboard, 'ComponentStudioDashboard')\nexport class ComponentStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n private static readonly USER_PREFS_KEY = 'ComponentStudio.UserPreferences';\n\n // --- Panel widths ---\n public leftPanelWidth = 340;\n public rightPanelWidth = 380;\n public previewFlex = '1 1 50%';\n public editorFlex = '1 1 50%';\n private previewFlexPercent = 50;\n\n // --- Dropdown states ---\n public exportDropdownOpen = false;\n\n // --- Resize state ---\n public IsResizing = false;\n private resizeType: 'left' | 'right' | 'center' | null = null;\n private resizeStartX = 0;\n private resizeStartValue = 0;\n\n // --- Collapsible panels ---\n public IsLeftPanelCollapsed = false;\n public IsEditorPanelCollapsed = false;\n\n // --- Dialog states ---\n public ShowNewComponentDialog = false;\n public ShowKeyboardShortcuts = false;\n public ShowSaveVersionDialog = false;\n public ShowTextImportDialog = false;\n public ShowArtifactLoadDialog = false;\n public ShowArtifactSelectionDialog = false;\n\n // --- Status bar ---\n public LastSavedTime: Date | null = null;\n\n // --- Preferences ---\n private prefsLoaded = false;\n\n @ViewChild('fileInput', { static: false }) fileInput?: ElementRef<HTMLInputElement>;\n\n private destroy$ = new Subject<void>();\n private metadata: Metadata = new Metadata();\n\n constructor(\n public state: ComponentStudioStateService,\n public versionService: ComponentVersionService,\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Component Studio';\n }\n\n async ngAfterViewInit() {\n this.initDashboard();\n\n // Subscribe to state changes for change detection\n this.state.StateChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.loadUserPreferences();\n await this.state.LoadComponents();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard\n }\n\n protected loadData(): void {\n this.state.LoadComponents();\n }\n\n // ============================================================\n // USER PREFERENCES\n // ============================================================\n\n private loadUserPreferences(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(ComponentStudioDashboardComponent.USER_PREFS_KEY);\n if (saved) {\n const prefs = JSON.parse(saved) as ComponentStudioPreferences;\n this.applyPreferences(prefs);\n }\n } catch (error) {\n console.warn('[ComponentStudio] Failed to load user preferences:', error);\n } finally {\n this.prefsLoaded = true;\n }\n }\n\n private applyPreferences(prefs: ComponentStudioPreferences): void {\n if (prefs.leftPanelWidth) this.leftPanelWidth = prefs.leftPanelWidth;\n if (prefs.rightPanelWidth) this.rightPanelWidth = prefs.rightPanelWidth;\n if (prefs.previewFlexPercent) {\n this.previewFlexPercent = prefs.previewFlexPercent;\n this.previewFlex = `1 1 ${prefs.previewFlexPercent}%`;\n this.editorFlex = `1 1 ${100 - prefs.previewFlexPercent}%`;\n }\n if (prefs.isAIPanelCollapsed != null) {\n this.state.IsAIPanelCollapsed = prefs.isAIPanelCollapsed;\n }\n if (prefs.isLeftPanelCollapsed != null) {\n this.IsLeftPanelCollapsed = prefs.isLeftPanelCollapsed;\n }\n if (prefs.isEditorPanelCollapsed != null) {\n this.IsEditorPanelCollapsed = prefs.isEditorPanelCollapsed;\n }\n }\n\n private getCurrentPreferences(): ComponentStudioPreferences {\n return {\n leftPanelWidth: this.leftPanelWidth,\n rightPanelWidth: this.rightPanelWidth,\n previewFlexPercent: this.previewFlexPercent,\n isAIPanelCollapsed: this.state.IsAIPanelCollapsed,\n isLeftPanelCollapsed: this.IsLeftPanelCollapsed,\n isEditorPanelCollapsed: this.IsEditorPanelCollapsed\n };\n }\n\n private saveUserPreferences(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSetting(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n private saveUserPreferencesDebounced(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSettingDebounced(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n // ============================================================\n // KEYBOARD SHORTCUTS\n // ============================================================\n\n @HostListener('document:keydown', ['$event'])\n OnKeyDown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n const isInputFocused = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // Ctrl+S / Cmd+S = Save Version\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n if (this.state.SelectedComponent) {\n this.SaveVersion();\n }\n }\n\n // Ctrl+N / Cmd+N = New Component\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n event.preventDefault();\n this.OnNewComponent();\n }\n\n // Ctrl+/ or ? = Toggle keyboard shortcuts\n if ((event.ctrlKey || event.metaKey) && event.key === '/') {\n event.preventDefault();\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n } else if (event.key === '?' && !isInputFocused) {\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n }\n\n // Escape = Close overlays\n if (event.key === 'Escape') {\n if (this.ShowKeyboardShortcuts) {\n this.ShowKeyboardShortcuts = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n // ============================================================\n // SAVE VERSION\n // ============================================================\n\n SaveVersion(): void {\n if (!this.state.SelectedComponent) return;\n this.ShowSaveVersionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnSaveVersionConfirm(result: SaveVersionResult): Promise<void> {\n this.ShowSaveVersionDialog = false;\n\n let success: boolean;\n if (result.Mode === 'update') {\n success = await this.versionService.UpdateCurrentVersion(result.Comment || undefined);\n } else {\n success = await this.versionService.SaveVersion(result.Comment || undefined);\n }\n\n if (success) {\n this.LastSavedTime = new Date();\n this.notificationService.CreateSimpleNotification(\n `Saved as v${this.versionService.CurrentVersionNumber}`,\n 'success',\n 3000\n );\n this.state.HasUnsavedChanges = false;\n } else {\n this.notificationService.CreateSimpleNotification(\n 'Failed to save version',\n 'error'\n );\n }\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // REFRESH COMPONENT\n // ============================================================\n\n RefreshComponent(): void {\n this.state.RefreshComponent.emit();\n }\n\n // ============================================================\n // AI PANEL\n // ============================================================\n\n ToggleAIPanel(): void {\n this.state.IsAIPanelCollapsed = !this.state.IsAIPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleLeftPanel(): void {\n this.IsLeftPanelCollapsed = !this.IsLeftPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleEditorPanel(): void {\n this.IsEditorPanelCollapsed = !this.IsEditorPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n OnAskAIToFix(error: ComponentError): void {\n // Open AI panel if collapsed\n if (this.state.IsAIPanelCollapsed) {\n this.state.IsAIPanelCollapsed = false;\n }\n // Send error to AI panel\n this.state.SendErrorToAI.emit(error);\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // NEW COMPONENT\n // ============================================================\n\n OnNewComponent(): void {\n this.ShowNewComponentDialog = true;\n this.cdr.detectChanges();\n }\n\n OnNewComponentDialogClose(result: NewComponentResult | null): void {\n this.ShowNewComponentDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n this.createComponentFromResult(result);\n this.cdr.detectChanges();\n }\n\n OnQuickStart(type: string): void {\n const typeNames: Record<string, string> = {\n dashboard: 'Dashboard',\n report: 'Report',\n chart: 'Chart',\n form: 'Form'\n };\n const typeName = typeNames[type] || 'Component';\n this.createComponentFromResult({\n name: `New ${typeName}`,\n title: `New ${typeName}`,\n description: '',\n type\n });\n }\n\n private createComponentFromResult(result: NewComponentResult): void {\n const newSpec: ComponentSpec = {\n name: result.name,\n title: result.title,\n description: result.description,\n type: result.type,\n location: 'embedded',\n exampleUsage: '',\n code: this.getTemplateCode(result.name, result.type),\n functionalRequirements: '',\n dataRequirements: { mode: 'views', entities: [], queries: [], description: '' },\n technicalDesign: ''\n } as ComponentSpec;\n\n const fileComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.name,\n description: result.description,\n specification: newSpec,\n filename: 'new-component.json',\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.type || 'Dashboard',\n status: 'New'\n };\n\n this.state.AddFileLoadedComponent(fileComponent);\n this.state.ExpandedComponent = fileComponent;\n this.state.RunComponent(fileComponent);\n }\n\n private getTemplateCode(name: string, type: string): string {\n return `function Component({ utilities, settings }) {\n const React = utilities.React;\n const { useState } = React;\n\n return React.createElement('div', {\n style: { padding: '24px', fontFamily: 'system-ui' }\n },\n React.createElement('h2', null, '${name}'),\n React.createElement('p', null, 'Start building your ${type || 'component'} here.')\n );\n}`;\n }\n\n // ============================================================\n // IMPORT / EXPORT\n // ============================================================\n\n ToggleExportDropdown(): void {\n this.exportDropdownOpen = !this.exportDropdownOpen;\n }\n\n @HostListener('document:click', ['$event'])\n OnDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.header-dropdown')) {\n this.exportDropdownOpen = false;\n }\n }\n\n ImportFromFile(): void {\n this.fileInput?.nativeElement.click();\n }\n\n ImportFromText(): void {\n this.ShowTextImportDialog = true;\n this.cdr.detectChanges();\n }\n\n OnTextImportSpec(spec: ComponentSpec): void {\n this.ShowTextImportDialog = false;\n this.handleSpecImport(spec, 'text-import.json', 'Text');\n this.cdr.detectChanges();\n }\n\n OnTextImportCancel(): void {\n this.ShowTextImportDialog = false;\n this.cdr.detectChanges();\n }\n\n ImportFromArtifact(): void {\n this.ShowArtifactLoadDialog = true;\n this.cdr.detectChanges();\n }\n\n OnArtifactLoadClose(result: ArtifactLoadResult | undefined): void {\n this.ShowArtifactLoadDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n\n const artifactComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.spec.name,\n description: result.spec.description,\n specification: result.spec,\n filename: `${result.artifactName} (v${result.versionNumber})`,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.spec.type || 'Component',\n status: 'Artifact',\n sourceArtifactID: result.artifactID,\n sourceVersionID: result.versionID\n };\n\n this.state.AddFileLoadedComponent(artifactComponent);\n this.state.ExpandedComponent = artifactComponent;\n this.state.RunComponent(artifactComponent);\n\n this.notificationService.CreateSimpleNotification(\n `Loaded \"${result.spec.name}\" from artifact`,\n 'success',\n 3000\n );\n this.cdr.detectChanges();\n }\n\n async HandleFileSelect(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file || !file.name.endsWith('.json')) return;\n\n try {\n const content = await this.readFile(file);\n const spec = JSON.parse(content) as ComponentSpec;\n if (!spec.name || !spec.code) {\n console.error('Invalid spec: missing name or code');\n return;\n }\n this.handleSpecImport(spec, file.name, 'File');\n input.value = '';\n } catch (error) {\n console.error('Error loading file:', error);\n }\n }\n\n private handleSpecImport(spec: ComponentSpec, filename: string, status: string): void {\n const component: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: spec.name,\n description: spec.description,\n specification: spec,\n filename,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: spec.type || 'Component',\n status\n };\n\n this.state.AddFileLoadedComponent(component);\n this.state.ExpandedComponent = component;\n this.state.RunComponent(component);\n }\n\n ExportToArtifact(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n this.ShowArtifactSelectionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnArtifactSelectionClose(result: ArtifactSelectionResult | undefined): Promise<void> {\n this.ShowArtifactSelectionDialog = false;\n if (!result?.action) {\n this.cdr.detectChanges();\n return;\n }\n\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n const artifact = result.artifact;\n let version: MJArtifactVersionEntity;\n\n if (result.action === 'update-version' && result.versionToUpdate) {\n version = result.versionToUpdate;\n } else {\n version = await this.metadata.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions');\n version.ArtifactID = artifact.ID;\n version.UserID = this.metadata.CurrentUser.ID;\n\n const rv = new RunView();\n const versionsResult = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifact.ID}'`,\n OrderBy: 'VersionNumber DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n version.VersionNumber = (versionsResult.Success && versionsResult.Results?.length > 0)\n ? versionsResult.Results[0].VersionNumber + 1\n : 1;\n }\n\n version.Content = JSON.stringify(currentSpec, null, 2);\n version.ContentHash = await this.generateSHA256Hash(version.Content);\n version.Name = currentSpec.name;\n version.Description = currentSpec.description || null;\n const timestamp = new Date().toISOString();\n const actionText = result.action === 'update-version' ? 'Updated' : 'Created';\n version.Comments = `${actionText} from Component Studio at ${timestamp}`;\n\n const saved = await version.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n `Saved as artifact version ${version.VersionNumber}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('Failed to save artifact version', 'error');\n }\n } catch (error) {\n console.error('Error saving to artifact:', error);\n this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');\n }\n this.cdr.detectChanges();\n }\n\n ExportToFile(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n const componentName = this.state.GetComponentName(this.state.SelectedComponent);\n const filename = componentName.replace(/\\s+/g, '-').replace(/[^a-z0-9\\-]/gi, '-').toLowerCase() + '.json';\n const blob = new Blob([JSON.stringify(currentSpec, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n async ExportToClipboard(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n await navigator.clipboard.writeText(JSON.stringify(currentSpec, null, 2));\n this.notificationService.CreateSimpleNotification('Copied to clipboard', 'success', 2000);\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to copy to clipboard', 'error');\n }\n }\n\n async RefreshData(): Promise<void> {\n await this.state.LoadComponents();\n }\n\n // ============================================================\n // RESIZE HANDLERS\n // ============================================================\n\n OnLeftResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'left';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.leftPanelWidth;\n this.addResizeListeners();\n }\n\n OnRightResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'right';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.rightPanelWidth;\n this.addResizeListeners();\n }\n\n OnCenterResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'center';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.previewFlexPercent;\n this.addResizeListeners();\n }\n\n private addResizeListeners(): void {\n this.IsResizing = true;\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (this.resizeType === 'left') {\n const delta = event.clientX - this.resizeStartX;\n this.leftPanelWidth = Math.max(280, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'right') {\n const delta = this.resizeStartX - event.clientX;\n this.rightPanelWidth = Math.max(300, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'center') {\n const centerPanel = document.querySelector('.panel-center') as HTMLElement;\n if (centerPanel) {\n const rect = centerPanel.getBoundingClientRect();\n const relativeX = event.clientX - rect.left;\n const percent = Math.max(20, Math.min(80, (relativeX / rect.width) * 100));\n this.previewFlexPercent = percent;\n this.previewFlex = `1 1 ${percent}%`;\n this.editorFlex = `1 1 ${100 - percent}%`;\n }\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n this.IsResizing = false;\n this.resizeType = null;\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveUserPreferencesDebounced();\n };\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private readFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.onerror = reject;\n reader.readAsText(file);\n });\n }\n\n private async generateSHA256Hash(content: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","<div class=\"component-studio\" [class.resizing]=\"IsResizing\">\n\n <!-- ============================================================\n TOOLBAR — Unified bar with integrated breadcrumb\n Left: hamburger + breadcrumb context\n Right: Save | Export | divider | AI | Keyboard | Refresh\n ============================================================ -->\n <div class=\"studio-toolbar\">\n <div class=\"toolbar-context\">\n <!-- Toggle left panel -->\n <button class=\"tb-btn icon-only\" title=\"Toggle browser panel\" (click)=\"ToggleLeftPanel()\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n\n @if (state.SelectedComponent) {\n <span class=\"breadcrumb-type\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.GetComponentType(state.SelectedComponent) || 'Component' }}\n </span>\n <span class=\"breadcrumb-sep\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <span class=\"component-label\">{{ state.GetComponentName(state.SelectedComponent) }}</span>\n\n @if (state.IsRunning) {\n <span class=\"running-badge\">\n <span class=\"running-dot-small\"></span>\n Running\n </span>\n }\n @if (state.HasUnsavedChanges) {\n <span class=\"unsaved-dot\" title=\"Unsaved changes\"></span>\n }\n }\n </div>\n\n <div class=\"toolbar-spacer\"></div>\n\n <div class=\"toolbar-actions\">\n <!-- Save Version -->\n @if (state.SelectedComponent) {\n <button class=\"tb-btn primary\" (click)=\"SaveVersion()\" title=\"Save version (Ctrl+S)\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n }\n\n <!-- Refresh Component -->\n @if (state.SelectedComponent && state.IsRunning) {\n <button class=\"tb-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n\n <!-- Export -->\n @if (state.SelectedComponent && state.IsRunning) {\n <div class=\"header-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button class=\"tb-btn\" (click)=\"ToggleExportDropdown()\">\n <i class=\"fa-solid fa-file-export\"></i> Export\n <i class=\"fa-solid fa-chevron-down dropdown-icon\"></i>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"ExportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> To Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToFile()\">\n <i class=\"fa-solid fa-file\"></i> To File\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> To Clipboard\n </button>\n </div>\n }\n </div>\n }\n\n <span class=\"toolbar-divider\"></span>\n\n <!-- AI Panel Toggle -->\n <button class=\"tb-btn icon-only\" [class.active-toggle]=\"!state.IsAIPanelCollapsed\"\n (click)=\"ToggleAIPanel()\"\n [title]=\"state.IsAIPanelCollapsed ? 'Show AI Assistant' : 'Hide AI Assistant'\">\n <i class=\"fa-solid fa-robot\"></i>\n </button>\n\n <!-- Keyboard Shortcuts -->\n <button class=\"tb-btn icon-only\" (click)=\"ShowKeyboardShortcuts = !ShowKeyboardShortcuts\"\n title=\"Keyboard shortcuts (?)\">\n <i class=\"fa-solid fa-keyboard\"></i>\n </button>\n\n <!-- Refresh -->\n <button class=\"tb-btn icon-only\" (click)=\"RefreshData()\" [disabled]=\"state.IsLoading\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"HandleFileSelect($event)\" style=\"display: none;\" />\n </div>\n\n <!-- ============================================================\n THREE-PANEL BODY\n ============================================================ -->\n <div class=\"studio-body\">\n\n <!-- Left Panel: Component Browser (collapsible) -->\n @if (!IsLeftPanelCollapsed) {\n <div class=\"panel panel-left\" [style.width.px]=\"leftPanelWidth\">\n <mj-component-browser\n (NewComponent)=\"OnNewComponent()\"\n (ImportFromFile)=\"ImportFromFile()\"\n (ImportFromText)=\"ImportFromText()\"\n (ImportFromArtifact)=\"ImportFromArtifact()\">\n </mj-component-browser>\n </div>\n\n <!-- Resize Handle: Left <-> Center -->\n <div class=\"resize-handle\" (mousedown)=\"OnLeftResizeStart($event)\"></div>\n }\n\n <!-- Center Panel: Workspace (side-by-side: Preview LEFT, Editor RIGHT) -->\n <div class=\"panel panel-center\">\n @if (state.SelectedComponent) {\n <!-- Preview (left side) -->\n <div class=\"workspace-preview\" [class.full-width]=\"IsEditorPanelCollapsed\" [style.flex]=\"IsEditorPanelCollapsed ? '1 1 100%' : previewFlex\">\n <div class=\"preview-sub-header\">\n <div class=\"preview-sub-left\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Preview</span>\n </div>\n <div class=\"preview-sub-right\">\n <!-- Toggle editor panel -->\n <button class=\"toggle-editors-btn\" [class.active]=\"!IsEditorPanelCollapsed\"\n (click)=\"ToggleEditorPanel()\" title=\"Toggle editor panel\">\n <i class=\"fa-solid fa-columns\"></i>\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <mj-component-preview\n (AskAIToFix)=\"OnAskAIToFix($event)\">\n </mj-component-preview>\n </div>\n </div>\n\n <!-- Resize Handle: Preview <-> Editor (obvious center divider) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"resize-handle center-divider\" (mousedown)=\"OnCenterResizeStart($event)\">\n <div class=\"divider-grip\"></div>\n </div>\n }\n\n <!-- Editor Tabs (right side, collapsible) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"workspace-editors\" [style.flex]=\"editorFlex\">\n <mj-editor-tabs></mj-editor-tabs>\n </div>\n }\n } @else {\n <!-- Enhanced Empty State -->\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <div class=\"empty-state-icon\">\n <i class=\"fa-solid fa-rocket\"></i>\n </div>\n <h2>Ready to Build</h2>\n <p>Select a component from the browser or create a new one to get started</p>\n <div class=\"empty-state-actions\">\n <button mjButton variant=\"primary\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button mjButton (click)=\"ImportFromFile()\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n </button>\n </div>\n <div class=\"quick-start-templates\">\n <span class=\"quick-start-label\">Quick start:</span>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('dashboard')\">\n <i class=\"fa-solid fa-chart-line\"></i> Dashboard\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('report')\">\n <i class=\"fa-solid fa-file-alt\"></i> Report\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('chart')\">\n <i class=\"fa-solid fa-chart-pie\"></i> Chart\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('form')\">\n <i class=\"fa-solid fa-edit\"></i> Form\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Resize Handle: Center <-> Right -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"resize-handle\" (mousedown)=\"OnRightResizeStart($event)\"></div>\n }\n\n <!-- Right Panel: AI Assistant -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"panel panel-right\" [style.width.px]=\"rightPanelWidth\">\n <mj-ai-assistant-panel></mj-ai-assistant-panel>\n </div>\n }\n </div>\n\n <!-- ============================================================\n STATUS BAR\n ============================================================ -->\n <div class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-item\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.FilteredComponents.length }} component{{ state.FilteredComponents.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"status-right\">\n @if (LastSavedTime) {\n <span class=\"status-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n Saved {{ LastSavedTime | date:'shortTime' }}\n </span>\n }\n <span class=\"status-item shortcut-hint\">\n <kbd>?</kbd> Shortcuts\n </span>\n </div>\n </div>\n\n <!-- ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ -->\n @if (ShowKeyboardShortcuts) {\n <div class=\"shortcuts-overlay\" (click)=\"ShowKeyboardShortcuts = false\">\n <div class=\"shortcuts-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcuts-header\">\n <h3>Keyboard Shortcuts</h3>\n <button class=\"shortcuts-close\" (click)=\"ShowKeyboardShortcuts = false\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcuts-body\">\n <div class=\"shortcut-group\">\n <h4>General</h4>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>S</kbd></span>\n <span class=\"shortcut-desc\">Save version</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>N</kbd></span>\n <span class=\"shortcut-desc\">New component</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>?</kbd></span>\n <span class=\"shortcut-desc\">Toggle shortcuts</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Esc</kbd></span>\n <span class=\"shortcut-desc\">Close overlay</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============================================================\n NEW COMPONENT DIALOG\n ============================================================ -->\n @if (ShowNewComponentDialog) {\n <mj-new-component-dialog\n [Visible]=\"ShowNewComponentDialog\"\n (Close)=\"OnNewComponentDialogClose($event)\">\n </mj-new-component-dialog>\n }\n\n @if (ShowSaveVersionDialog) {\n <mj-save-version-dialog\n [Visible]=\"ShowSaveVersionDialog\"\n [CurrentVersion]=\"versionService.CurrentVersionNumber\"\n (Save)=\"OnSaveVersionConfirm($event)\"\n (Cancel)=\"ShowSaveVersionDialog = false\">\n </mj-save-version-dialog>\n }\n\n <!-- Text Import Dialog -->\n @if (ShowTextImportDialog) {\n <mj-dialog [Visible]=\"true\" Title=\"Import Component from Text\" (Close)=\"OnTextImportCancel()\" [Width]=\"700\" [MinWidth]=\"500\">\n <app-text-import-dialog\n (importSpec)=\"OnTextImportSpec($event)\"\n (cancelDialog)=\"OnTextImportCancel()\">\n </app-text-import-dialog>\n </mj-dialog>\n }\n\n <!-- Artifact Load Dialog -->\n @if (ShowArtifactLoadDialog) {\n <app-artifact-load-dialog\n [Visible]=\"ShowArtifactLoadDialog\"\n (Close)=\"OnArtifactLoadClose($event)\">\n </app-artifact-load-dialog>\n }\n\n <!-- Artifact Selection Dialog -->\n @if (ShowArtifactSelectionDialog) {\n <app-artifact-selection-dialog\n [Visible]=\"ShowArtifactSelectionDialog\"\n (Close)=\"OnArtifactSelectionClose($event)\">\n </app-artifact-selection-dialog>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"component-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts","../../src/ComponentStudio/component-studio-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport {\n MJComponentEntityExtended,\n MJArtifactVersionEntity,\n ResourceData,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ArtifactSelectionResult } from './components/artifact-selection-dialog.component';\nimport { ArtifactLoadResult } from './components/artifact-load-dialog.component';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ComponentStudioStateService, FileLoadedComponent, ComponentError } from './services/component-studio-state.service';\nimport { ComponentVersionService } from './services/component-version.service';\nimport { SaveVersionResult } from './components/save-version-dialog/save-version-dialog.component';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * User preferences persisted via UserInfoEngine.\n */\ninterface ComponentStudioPreferences {\n leftPanelWidth: number;\n rightPanelWidth: number;\n previewFlexPercent: number;\n isAIPanelCollapsed: boolean;\n isLeftPanelCollapsed: boolean;\n isEditorPanelCollapsed: boolean;\n}\n\n/**\n * Result from the New Component dialog.\n */\nexport interface NewComponentResult {\n name: string;\n title: string;\n description: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-component-studio-dashboard',\n templateUrl: './component-studio-dashboard.component.html',\n styleUrls: ['./component-studio-dashboard.component.css'],\n providers: [ComponentStudioStateService, ComponentVersionService]\n})\n@RegisterClass(BaseDashboard, 'ComponentStudioDashboard')\nexport class ComponentStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n private static readonly USER_PREFS_KEY = 'ComponentStudio.UserPreferences';\n\n // --- Panel widths ---\n public leftPanelWidth = 340;\n public rightPanelWidth = 380;\n public previewFlex = '1 1 50%';\n public editorFlex = '1 1 50%';\n private previewFlexPercent = 50;\n\n // --- Dropdown states ---\n public exportDropdownOpen = false;\n\n // --- Resize state ---\n public IsResizing = false;\n private resizeType: 'left' | 'right' | 'center' | null = null;\n private resizeStartX = 0;\n private resizeStartValue = 0;\n\n // --- Collapsible panels ---\n public IsLeftPanelCollapsed = false;\n public IsEditorPanelCollapsed = false;\n\n // --- Dialog states ---\n public ShowNewComponentDialog = false;\n public ShowKeyboardShortcuts = false;\n public ShowSaveVersionDialog = false;\n public ShowTextImportDialog = false;\n public ShowArtifactLoadDialog = false;\n public ShowArtifactSelectionDialog = false;\n\n // --- Status bar ---\n public LastSavedTime: Date | null = null;\n\n // --- Preferences ---\n private prefsLoaded = false;\n\n @ViewChild('fileInput', { static: false }) fileInput?: ElementRef<HTMLInputElement>;\n\n protected override destroy$ = new Subject<void>();\n private metadata: Metadata = new Metadata();\n\n constructor(\n public state: ComponentStudioStateService,\n public versionService: ComponentVersionService,\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Component Studio';\n }\n\n async ngAfterViewInit() {\n this.initDashboard();\n\n // Subscribe to state changes for change detection\n this.state.StateChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.loadUserPreferences();\n await this.state.LoadComponents();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard\n }\n\n protected loadData(): void {\n this.state.LoadComponents();\n }\n\n // ============================================================\n // USER PREFERENCES\n // ============================================================\n\n private loadUserPreferences(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(ComponentStudioDashboardComponent.USER_PREFS_KEY);\n if (saved) {\n const prefs = JSON.parse(saved) as ComponentStudioPreferences;\n this.applyPreferences(prefs);\n }\n } catch (error) {\n console.warn('[ComponentStudio] Failed to load user preferences:', error);\n } finally {\n this.prefsLoaded = true;\n }\n }\n\n private applyPreferences(prefs: ComponentStudioPreferences): void {\n if (prefs.leftPanelWidth) this.leftPanelWidth = prefs.leftPanelWidth;\n if (prefs.rightPanelWidth) this.rightPanelWidth = prefs.rightPanelWidth;\n if (prefs.previewFlexPercent) {\n this.previewFlexPercent = prefs.previewFlexPercent;\n this.previewFlex = `1 1 ${prefs.previewFlexPercent}%`;\n this.editorFlex = `1 1 ${100 - prefs.previewFlexPercent}%`;\n }\n if (prefs.isAIPanelCollapsed != null) {\n this.state.IsAIPanelCollapsed = prefs.isAIPanelCollapsed;\n }\n if (prefs.isLeftPanelCollapsed != null) {\n this.IsLeftPanelCollapsed = prefs.isLeftPanelCollapsed;\n }\n if (prefs.isEditorPanelCollapsed != null) {\n this.IsEditorPanelCollapsed = prefs.isEditorPanelCollapsed;\n }\n }\n\n private getCurrentPreferences(): ComponentStudioPreferences {\n return {\n leftPanelWidth: this.leftPanelWidth,\n rightPanelWidth: this.rightPanelWidth,\n previewFlexPercent: this.previewFlexPercent,\n isAIPanelCollapsed: this.state.IsAIPanelCollapsed,\n isLeftPanelCollapsed: this.IsLeftPanelCollapsed,\n isEditorPanelCollapsed: this.IsEditorPanelCollapsed\n };\n }\n\n private saveUserPreferences(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSetting(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n private saveUserPreferencesDebounced(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSettingDebounced(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n // ============================================================\n // KEYBOARD SHORTCUTS\n // ============================================================\n\n @HostListener('document:keydown', ['$event'])\n OnKeyDown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n const isInputFocused = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // Ctrl+S / Cmd+S = Save Version\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n if (this.state.SelectedComponent) {\n this.SaveVersion();\n }\n }\n\n // Ctrl+N / Cmd+N = New Component\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n event.preventDefault();\n this.OnNewComponent();\n }\n\n // Ctrl+/ or ? = Toggle keyboard shortcuts\n if ((event.ctrlKey || event.metaKey) && event.key === '/') {\n event.preventDefault();\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n } else if (event.key === '?' && !isInputFocused) {\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n }\n\n // Escape = Close overlays\n if (event.key === 'Escape') {\n if (this.ShowKeyboardShortcuts) {\n this.ShowKeyboardShortcuts = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n // ============================================================\n // SAVE VERSION\n // ============================================================\n\n SaveVersion(): void {\n if (!this.state.SelectedComponent) return;\n this.ShowSaveVersionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnSaveVersionConfirm(result: SaveVersionResult): Promise<void> {\n this.ShowSaveVersionDialog = false;\n\n let success: boolean;\n if (result.Mode === 'update') {\n success = await this.versionService.UpdateCurrentVersion(result.Comment || undefined);\n } else {\n success = await this.versionService.SaveVersion(result.Comment || undefined);\n }\n\n if (success) {\n this.LastSavedTime = new Date();\n this.notificationService.CreateSimpleNotification(\n `Saved as v${this.versionService.CurrentVersionNumber}`,\n 'success',\n 3000\n );\n this.state.HasUnsavedChanges = false;\n } else {\n this.notificationService.CreateSimpleNotification(\n 'Failed to save version',\n 'error'\n );\n }\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // REFRESH COMPONENT\n // ============================================================\n\n RefreshComponent(): void {\n this.state.RefreshComponent.emit();\n }\n\n // ============================================================\n // AI PANEL\n // ============================================================\n\n ToggleAIPanel(): void {\n this.state.IsAIPanelCollapsed = !this.state.IsAIPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleLeftPanel(): void {\n this.IsLeftPanelCollapsed = !this.IsLeftPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleEditorPanel(): void {\n this.IsEditorPanelCollapsed = !this.IsEditorPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n OnAskAIToFix(error: ComponentError): void {\n // Open AI panel if collapsed\n if (this.state.IsAIPanelCollapsed) {\n this.state.IsAIPanelCollapsed = false;\n }\n // Send error to AI panel\n this.state.SendErrorToAI.emit(error);\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // NEW COMPONENT\n // ============================================================\n\n OnNewComponent(): void {\n this.ShowNewComponentDialog = true;\n this.cdr.detectChanges();\n }\n\n OnNewComponentDialogClose(result: NewComponentResult | null): void {\n this.ShowNewComponentDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n this.createComponentFromResult(result);\n this.cdr.detectChanges();\n }\n\n OnQuickStart(type: string): void {\n const typeNames: Record<string, string> = {\n dashboard: 'Dashboard',\n report: 'Report',\n chart: 'Chart',\n form: 'Form'\n };\n const typeName = typeNames[type] || 'Component';\n this.createComponentFromResult({\n name: `New ${typeName}`,\n title: `New ${typeName}`,\n description: '',\n type\n });\n }\n\n private createComponentFromResult(result: NewComponentResult): void {\n const newSpec: ComponentSpec = {\n name: result.name,\n title: result.title,\n description: result.description,\n type: result.type,\n location: 'embedded',\n exampleUsage: '',\n code: this.getTemplateCode(result.name, result.type),\n functionalRequirements: '',\n dataRequirements: { mode: 'views', entities: [], queries: [], description: '' },\n technicalDesign: ''\n } as ComponentSpec;\n\n const fileComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.name,\n description: result.description,\n specification: newSpec,\n filename: 'new-component.json',\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.type || 'Dashboard',\n status: 'New'\n };\n\n this.state.AddFileLoadedComponent(fileComponent);\n this.state.ExpandedComponent = fileComponent;\n this.state.RunComponent(fileComponent);\n }\n\n private getTemplateCode(name: string, type: string): string {\n return `function Component({ utilities, settings }) {\n const React = utilities.React;\n const { useState } = React;\n\n return React.createElement('div', {\n style: { padding: '24px', fontFamily: 'system-ui' }\n },\n React.createElement('h2', null, '${name}'),\n React.createElement('p', null, 'Start building your ${type || 'component'} here.')\n );\n}`;\n }\n\n // ============================================================\n // IMPORT / EXPORT\n // ============================================================\n\n ToggleExportDropdown(): void {\n this.exportDropdownOpen = !this.exportDropdownOpen;\n }\n\n @HostListener('document:click', ['$event'])\n OnDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.header-dropdown')) {\n this.exportDropdownOpen = false;\n }\n }\n\n ImportFromFile(): void {\n this.fileInput?.nativeElement.click();\n }\n\n ImportFromText(): void {\n this.ShowTextImportDialog = true;\n this.cdr.detectChanges();\n }\n\n OnTextImportSpec(spec: ComponentSpec): void {\n this.ShowTextImportDialog = false;\n this.handleSpecImport(spec, 'text-import.json', 'Text');\n this.cdr.detectChanges();\n }\n\n OnTextImportCancel(): void {\n this.ShowTextImportDialog = false;\n this.cdr.detectChanges();\n }\n\n ImportFromArtifact(): void {\n this.ShowArtifactLoadDialog = true;\n this.cdr.detectChanges();\n }\n\n OnArtifactLoadClose(result: ArtifactLoadResult | undefined): void {\n this.ShowArtifactLoadDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n\n const artifactComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.spec.name,\n description: result.spec.description,\n specification: result.spec,\n filename: `${result.artifactName} (v${result.versionNumber})`,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.spec.type || 'Component',\n status: 'Artifact',\n sourceArtifactID: result.artifactID,\n sourceVersionID: result.versionID\n };\n\n this.state.AddFileLoadedComponent(artifactComponent);\n this.state.ExpandedComponent = artifactComponent;\n this.state.RunComponent(artifactComponent);\n\n this.notificationService.CreateSimpleNotification(\n `Loaded \"${result.spec.name}\" from artifact`,\n 'success',\n 3000\n );\n this.cdr.detectChanges();\n }\n\n async HandleFileSelect(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file || !file.name.endsWith('.json')) return;\n\n try {\n const content = await this.readFile(file);\n const spec = JSON.parse(content) as ComponentSpec;\n if (!spec.name || !spec.code) {\n console.error('Invalid spec: missing name or code');\n return;\n }\n this.handleSpecImport(spec, file.name, 'File');\n input.value = '';\n } catch (error) {\n console.error('Error loading file:', error);\n }\n }\n\n private handleSpecImport(spec: ComponentSpec, filename: string, status: string): void {\n const component: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: spec.name,\n description: spec.description,\n specification: spec,\n filename,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: spec.type || 'Component',\n status\n };\n\n this.state.AddFileLoadedComponent(component);\n this.state.ExpandedComponent = component;\n this.state.RunComponent(component);\n }\n\n ExportToArtifact(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n this.ShowArtifactSelectionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnArtifactSelectionClose(result: ArtifactSelectionResult | undefined): Promise<void> {\n this.ShowArtifactSelectionDialog = false;\n if (!result?.action) {\n this.cdr.detectChanges();\n return;\n }\n\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n const artifact = result.artifact;\n let version: MJArtifactVersionEntity;\n\n if (result.action === 'update-version' && result.versionToUpdate) {\n version = result.versionToUpdate;\n } else {\n version = await this.metadata.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions');\n version.ArtifactID = artifact.ID;\n version.UserID = this.metadata.CurrentUser.ID;\n\n const rv = new RunView();\n const versionsResult = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifact.ID}'`,\n OrderBy: 'VersionNumber DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n version.VersionNumber = (versionsResult.Success && versionsResult.Results?.length > 0)\n ? versionsResult.Results[0].VersionNumber + 1\n : 1;\n }\n\n version.Content = JSON.stringify(currentSpec, null, 2);\n version.ContentHash = await this.generateSHA256Hash(version.Content);\n version.Name = currentSpec.name;\n version.Description = currentSpec.description || null;\n const timestamp = new Date().toISOString();\n const actionText = result.action === 'update-version' ? 'Updated' : 'Created';\n version.Comments = `${actionText} from Component Studio at ${timestamp}`;\n\n const saved = await version.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n `Saved as artifact version ${version.VersionNumber}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('Failed to save artifact version', 'error');\n }\n } catch (error) {\n console.error('Error saving to artifact:', error);\n this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');\n }\n this.cdr.detectChanges();\n }\n\n ExportToFile(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n const componentName = this.state.GetComponentName(this.state.SelectedComponent);\n const filename = componentName.replace(/\\s+/g, '-').replace(/[^a-z0-9\\-]/gi, '-').toLowerCase() + '.json';\n const blob = new Blob([JSON.stringify(currentSpec, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n async ExportToClipboard(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n await navigator.clipboard.writeText(JSON.stringify(currentSpec, null, 2));\n this.notificationService.CreateSimpleNotification('Copied to clipboard', 'success', 2000);\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to copy to clipboard', 'error');\n }\n }\n\n async RefreshData(): Promise<void> {\n await this.state.LoadComponents();\n }\n\n // ============================================================\n // RESIZE HANDLERS\n // ============================================================\n\n OnLeftResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'left';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.leftPanelWidth;\n this.addResizeListeners();\n }\n\n OnRightResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'right';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.rightPanelWidth;\n this.addResizeListeners();\n }\n\n OnCenterResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'center';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.previewFlexPercent;\n this.addResizeListeners();\n }\n\n private addResizeListeners(): void {\n this.IsResizing = true;\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (this.resizeType === 'left') {\n const delta = event.clientX - this.resizeStartX;\n this.leftPanelWidth = Math.max(280, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'right') {\n const delta = this.resizeStartX - event.clientX;\n this.rightPanelWidth = Math.max(300, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'center') {\n const centerPanel = document.querySelector('.panel-center') as HTMLElement;\n if (centerPanel) {\n const rect = centerPanel.getBoundingClientRect();\n const relativeX = event.clientX - rect.left;\n const percent = Math.max(20, Math.min(80, (relativeX / rect.width) * 100));\n this.previewFlexPercent = percent;\n this.previewFlex = `1 1 ${percent}%`;\n this.editorFlex = `1 1 ${100 - percent}%`;\n }\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n this.IsResizing = false;\n this.resizeType = null;\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveUserPreferencesDebounced();\n };\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private readFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.onerror = reject;\n reader.readAsText(file);\n });\n }\n\n private async generateSHA256Hash(content: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","<div class=\"component-studio\" [class.resizing]=\"IsResizing\">\n\n <!-- ============================================================\n TOOLBAR — Unified bar with integrated breadcrumb\n Left: hamburger + breadcrumb context\n Right: Save | Export | divider | AI | Keyboard | Refresh\n ============================================================ -->\n <div class=\"studio-toolbar\">\n <div class=\"toolbar-context\">\n <!-- Toggle left panel -->\n <button class=\"tb-btn icon-only\" title=\"Toggle browser panel\" (click)=\"ToggleLeftPanel()\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n\n @if (state.SelectedComponent) {\n <span class=\"breadcrumb-type\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.GetComponentType(state.SelectedComponent) || 'Component' }}\n </span>\n <span class=\"breadcrumb-sep\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <span class=\"component-label\">{{ state.GetComponentName(state.SelectedComponent) }}</span>\n\n @if (state.IsRunning) {\n <span class=\"running-badge\">\n <span class=\"running-dot-small\"></span>\n Running\n </span>\n }\n @if (state.HasUnsavedChanges) {\n <span class=\"unsaved-dot\" title=\"Unsaved changes\"></span>\n }\n }\n </div>\n\n <div class=\"toolbar-spacer\"></div>\n\n <div class=\"toolbar-actions\">\n <!-- Save Version -->\n @if (state.SelectedComponent) {\n <button class=\"tb-btn primary\" (click)=\"SaveVersion()\" title=\"Save version (Ctrl+S)\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n }\n\n <!-- Refresh Component -->\n @if (state.SelectedComponent && state.IsRunning) {\n <button class=\"tb-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n\n <!-- Export -->\n @if (state.SelectedComponent && state.IsRunning) {\n <div class=\"header-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button class=\"tb-btn\" (click)=\"ToggleExportDropdown()\">\n <i class=\"fa-solid fa-file-export\"></i> Export\n <i class=\"fa-solid fa-chevron-down dropdown-icon\"></i>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"ExportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> To Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToFile()\">\n <i class=\"fa-solid fa-file\"></i> To File\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> To Clipboard\n </button>\n </div>\n }\n </div>\n }\n\n <span class=\"toolbar-divider\"></span>\n\n <!-- AI Panel Toggle -->\n <button class=\"tb-btn icon-only\" [class.active-toggle]=\"!state.IsAIPanelCollapsed\"\n (click)=\"ToggleAIPanel()\"\n [title]=\"state.IsAIPanelCollapsed ? 'Show AI Assistant' : 'Hide AI Assistant'\">\n <i class=\"fa-solid fa-robot\"></i>\n </button>\n\n <!-- Keyboard Shortcuts -->\n <button class=\"tb-btn icon-only\" (click)=\"ShowKeyboardShortcuts = !ShowKeyboardShortcuts\"\n title=\"Keyboard shortcuts (?)\">\n <i class=\"fa-solid fa-keyboard\"></i>\n </button>\n\n <!-- Refresh -->\n <button class=\"tb-btn icon-only\" (click)=\"RefreshData()\" [disabled]=\"state.IsLoading\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"HandleFileSelect($event)\" style=\"display: none;\" />\n </div>\n\n <!-- ============================================================\n THREE-PANEL BODY\n ============================================================ -->\n <div class=\"studio-body\">\n\n <!-- Left Panel: Component Browser (collapsible) -->\n @if (!IsLeftPanelCollapsed) {\n <div class=\"panel panel-left\" [style.width.px]=\"leftPanelWidth\">\n <mj-component-browser\n (NewComponent)=\"OnNewComponent()\"\n (ImportFromFile)=\"ImportFromFile()\"\n (ImportFromText)=\"ImportFromText()\"\n (ImportFromArtifact)=\"ImportFromArtifact()\">\n </mj-component-browser>\n </div>\n\n <!-- Resize Handle: Left <-> Center -->\n <div class=\"resize-handle\" (mousedown)=\"OnLeftResizeStart($event)\"></div>\n }\n\n <!-- Center Panel: Workspace (side-by-side: Preview LEFT, Editor RIGHT) -->\n <div class=\"panel panel-center\">\n @if (state.SelectedComponent) {\n <!-- Preview (left side) -->\n <div class=\"workspace-preview\" [class.full-width]=\"IsEditorPanelCollapsed\" [style.flex]=\"IsEditorPanelCollapsed ? '1 1 100%' : previewFlex\">\n <div class=\"preview-sub-header\">\n <div class=\"preview-sub-left\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Preview</span>\n </div>\n <div class=\"preview-sub-right\">\n <!-- Toggle editor panel -->\n <button class=\"toggle-editors-btn\" [class.active]=\"!IsEditorPanelCollapsed\"\n (click)=\"ToggleEditorPanel()\" title=\"Toggle editor panel\">\n <i class=\"fa-solid fa-columns\"></i>\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <mj-component-preview\n (AskAIToFix)=\"OnAskAIToFix($event)\">\n </mj-component-preview>\n </div>\n </div>\n\n <!-- Resize Handle: Preview <-> Editor (obvious center divider) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"resize-handle center-divider\" (mousedown)=\"OnCenterResizeStart($event)\">\n <div class=\"divider-grip\"></div>\n </div>\n }\n\n <!-- Editor Tabs (right side, collapsible) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"workspace-editors\" [style.flex]=\"editorFlex\">\n <mj-editor-tabs></mj-editor-tabs>\n </div>\n }\n } @else {\n <!-- Enhanced Empty State -->\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <div class=\"empty-state-icon\">\n <i class=\"fa-solid fa-rocket\"></i>\n </div>\n <h2>Ready to Build</h2>\n <p>Select a component from the browser or create a new one to get started</p>\n <div class=\"empty-state-actions\">\n <button mjButton variant=\"primary\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button mjButton (click)=\"ImportFromFile()\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n </button>\n </div>\n <div class=\"quick-start-templates\">\n <span class=\"quick-start-label\">Quick start:</span>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('dashboard')\">\n <i class=\"fa-solid fa-chart-line\"></i> Dashboard\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('report')\">\n <i class=\"fa-solid fa-file-alt\"></i> Report\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('chart')\">\n <i class=\"fa-solid fa-chart-pie\"></i> Chart\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('form')\">\n <i class=\"fa-solid fa-edit\"></i> Form\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Resize Handle: Center <-> Right -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"resize-handle\" (mousedown)=\"OnRightResizeStart($event)\"></div>\n }\n\n <!-- Right Panel: AI Assistant -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"panel panel-right\" [style.width.px]=\"rightPanelWidth\">\n <mj-ai-assistant-panel></mj-ai-assistant-panel>\n </div>\n }\n </div>\n\n <!-- ============================================================\n STATUS BAR\n ============================================================ -->\n <div class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-item\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.FilteredComponents.length }} component{{ state.FilteredComponents.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"status-right\">\n @if (LastSavedTime) {\n <span class=\"status-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n Saved {{ LastSavedTime | date:'shortTime' }}\n </span>\n }\n <span class=\"status-item shortcut-hint\">\n <kbd>?</kbd> Shortcuts\n </span>\n </div>\n </div>\n\n <!-- ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ -->\n @if (ShowKeyboardShortcuts) {\n <div class=\"shortcuts-overlay\" (click)=\"ShowKeyboardShortcuts = false\">\n <div class=\"shortcuts-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcuts-header\">\n <h3>Keyboard Shortcuts</h3>\n <button class=\"shortcuts-close\" (click)=\"ShowKeyboardShortcuts = false\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcuts-body\">\n <div class=\"shortcut-group\">\n <h4>General</h4>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>S</kbd></span>\n <span class=\"shortcut-desc\">Save version</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>N</kbd></span>\n <span class=\"shortcut-desc\">New component</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>?</kbd></span>\n <span class=\"shortcut-desc\">Toggle shortcuts</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Esc</kbd></span>\n <span class=\"shortcut-desc\">Close overlay</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============================================================\n NEW COMPONENT DIALOG\n ============================================================ -->\n @if (ShowNewComponentDialog) {\n <mj-new-component-dialog\n [Visible]=\"ShowNewComponentDialog\"\n (Close)=\"OnNewComponentDialogClose($event)\">\n </mj-new-component-dialog>\n }\n\n @if (ShowSaveVersionDialog) {\n <mj-save-version-dialog\n [Visible]=\"ShowSaveVersionDialog\"\n [CurrentVersion]=\"versionService.CurrentVersionNumber\"\n (Save)=\"OnSaveVersionConfirm($event)\"\n (Cancel)=\"ShowSaveVersionDialog = false\">\n </mj-save-version-dialog>\n }\n\n <!-- Text Import Dialog -->\n @if (ShowTextImportDialog) {\n <mj-dialog [Visible]=\"true\" Title=\"Import Component from Text\" (Close)=\"OnTextImportCancel()\" [Width]=\"700\" [MinWidth]=\"500\">\n <app-text-import-dialog\n (importSpec)=\"OnTextImportSpec($event)\"\n (cancelDialog)=\"OnTextImportCancel()\">\n </app-text-import-dialog>\n </mj-dialog>\n }\n\n <!-- Artifact Load Dialog -->\n @if (ShowArtifactLoadDialog) {\n <app-artifact-load-dialog\n [Visible]=\"ShowArtifactLoadDialog\"\n (Close)=\"OnArtifactLoadClose($event)\">\n </app-artifact-load-dialog>\n }\n\n <!-- Artifact Selection Dialog -->\n @if (ShowArtifactSelectionDialog) {\n <app-artifact-selection-dialog\n [Visible]=\"ShowArtifactSelectionDialog\"\n (Close)=\"OnArtifactSelectionClose($event)\">\n </app-artifact-selection-dialog>\n }\n</div>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials-audit-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-audit-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAKlE,UAAU,mBAAoB,SAAQ,gBAAgB;IAClD,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,UAAU,aAAa;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,qBAQa,iCAAkC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAiBzF,OAAO,CAAC,GAAG;IAhBhB,SAAS,UAAQ;IACjB,SAAS,EAAE,mBAAmB,EAAE,CAAM;IACtC,YAAY,EAAE,mBAAmB,EAAE,CAAM;IACzC,cAAc,EAAE,aAAa,EAAE,CAAM;IAErC,cAAc,SAAM;IACpB,iBAAiB,SAAM;IACvB,SAAS,SAAO;IAChB,UAAU,SAAM;IAChB,QAAQ,EAAE,OAAO,GAAG,UAAU,CAAc;IAC5C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGpC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;IACrE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;gBAEpC,GAAG,EAAE,iBAAiB;IAI1C,QAAQ,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"credentials-audit-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-audit-resource.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -549,9 +549,11 @@ let CredentialsAuditResourceComponent = class CredentialsAuditResourceComponent
|
|
|
549
549
|
this.cdr = cdr;
|
|
550
550
|
}
|
|
551
551
|
ngOnInit() {
|
|
552
|
+
super.ngOnInit();
|
|
552
553
|
this.loadData();
|
|
553
554
|
}
|
|
554
555
|
ngOnDestroy() {
|
|
556
|
+
super.ngOnDestroy();
|
|
555
557
|
// Cleanup if needed
|
|
556
558
|
}
|
|
557
559
|
async GetResourceDisplayName(data) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials-audit-resource.component.js","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-audit-resource.component.ts","../../../src/Credentials/components/credentials-audit-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { ResourceData, MJAuditLogEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\n// The Credential Access AuditLogType ID from metadata\nconst CREDENTIAL_ACCESS_AUDIT_LOG_TYPE_ID = 'E8D4D100-E785-42D3-997F-ECFF3B0BCFC0';\n\ninterface AuditLogWithDetails extends MJAuditLogEntity {\n parsedDetails?: ParsedDetails;\n}\n\ninterface ParsedDetails {\n operation?: string;\n subsystem?: string;\n credentialType?: string;\n credentialId?: string;\n ipAddress?: string;\n userAgent?: string;\n duration?: number;\n errorMessage?: string;\n}\n\ninterface TimelineGroup {\n date: string;\n displayDate: string;\n logs: AuditLogWithDetails[];\n}\n\n@RegisterClass(BaseResourceComponent, 'CredentialsAuditResource')\n@Component({\n standalone: false,\n selector: 'mj-credentials-audit-resource',\n templateUrl: './credentials-audit-resource.component.html',\n styleUrls: ['./credentials-audit-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CredentialsAuditResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public auditLogs: AuditLogWithDetails[] = [];\n public filteredLogs: AuditLogWithDetails[] = [];\n public timelineGroups: TimelineGroup[] = [];\n\n public selectedStatus = '';\n public selectedOperation = '';\n public dateRange = '7'; // days\n public searchText = '';\n public viewMode: 'table' | 'timeline' = 'timeline';\n public expandedLogId: string | null = null;\n\n // Chart data\n public hourlyData: { hour: string; success: number; failed: number }[] = [];\n public operationCounts: Map<string, number> = new Map();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Audit Trail';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-clipboard-list';\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n // Calculate date filter\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - parseInt(this.dateRange, 10));\n const dateFilter = `AuditLogTypeID = '${CREDENTIAL_ACCESS_AUDIT_LOG_TYPE_ID}' AND __mj_CreatedAt >= '${startDate.toISOString()}'`;\n\n const result = await rv.RunView<AuditLogWithDetails>({\n EntityName: 'MJ: Audit Logs',\n ExtraFilter: dateFilter,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 500,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.auditLogs = result.Results;\n this.parseAllDetails();\n this.applyFilters();\n this.buildChartData();\n }\n\n } catch (error) {\n console.error('Error loading audit logs:', error);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private parseAllDetails(): void {\n for (const log of this.auditLogs) {\n log.parsedDetails = this.parseDetails(log);\n }\n }\n\n private parseDetails(log: MJAuditLogEntity): ParsedDetails {\n try {\n if (log.Details) {\n return JSON.parse(log.Details);\n }\n } catch (e) {\n // Ignore parse errors\n }\n return {};\n }\n\n public onStatusFilterChange(status: string): void {\n this.selectedStatus = status;\n this.applyFilters();\n }\n\n public onOperationFilterChange(operation: string): void {\n this.selectedOperation = operation;\n this.applyFilters();\n }\n\n public onDateRangeChange(days: string): void {\n this.dateRange = days;\n this.loadData();\n }\n\n public onSearchChange(value: string): void {\n this.searchText = value;\n this.applyFilters();\n }\n\n public clearSearch(): void {\n this.searchText = '';\n this.applyFilters();\n }\n\n public setViewMode(mode: 'table' | 'timeline'): void {\n this.viewMode = mode;\n this.cdr.markForCheck();\n }\n\n public toggleLogExpand(logId: string): void {\n this.expandedLogId = this.expandedLogId === logId ? null : logId;\n this.cdr.markForCheck();\n }\n\n public applyFilters(): void {\n let filtered = [...this.auditLogs];\n\n if (this.selectedStatus) {\n filtered = filtered.filter(log => log.Status === this.selectedStatus);\n }\n\n if (this.selectedOperation) {\n filtered = filtered.filter(log => {\n const op = log.parsedDetails?.operation || 'Access';\n return op === this.selectedOperation;\n });\n }\n\n if (this.searchText) {\n const searchLower = this.searchText.toLowerCase();\n filtered = filtered.filter(log => {\n const user = (log.User || '').toLowerCase();\n const desc = (log.Description || '').toLowerCase();\n const subsystem = (log.parsedDetails?.subsystem || '').toLowerCase();\n const credType = (log.parsedDetails?.credentialType || '').toLowerCase();\n return user.includes(searchLower) ||\n desc.includes(searchLower) ||\n subsystem.includes(searchLower) ||\n credType.includes(searchLower);\n });\n }\n\n this.filteredLogs = filtered;\n this.buildTimelineGroups();\n this.cdr.markForCheck();\n }\n\n private buildTimelineGroups(): void {\n const groups = new Map<string, AuditLogWithDetails[]>();\n\n for (const log of this.filteredLogs) {\n const date = new Date(log.__mj_CreatedAt);\n const dateKey = date.toISOString().split('T')[0];\n\n if (!groups.has(dateKey)) {\n groups.set(dateKey, []);\n }\n groups.get(dateKey)!.push(log);\n }\n\n this.timelineGroups = Array.from(groups.entries())\n .sort((a, b) => b[0].localeCompare(a[0]))\n .map(([date, logs]) => ({\n date,\n displayDate: this.formatGroupDate(date),\n logs\n }));\n }\n\n private formatGroupDate(dateString: string): string {\n const date = new Date(dateString);\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'Today';\n } else if (date.toDateString() === yesterday.toDateString()) {\n return 'Yesterday';\n } else {\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: date.getFullYear() !== today.getFullYear() ? 'numeric' : undefined\n });\n }\n }\n\n private buildChartData(): void {\n // Build hourly distribution for today\n const hourCounts: { [key: string]: { success: number; failed: number } } = {};\n const today = new Date().toDateString();\n\n for (let i = 0; i < 24; i++) {\n const hour = i.toString().padStart(2, '0') + ':00';\n hourCounts[hour] = { success: 0, failed: 0 };\n }\n\n for (const log of this.auditLogs) {\n const date = new Date(log.__mj_CreatedAt);\n if (date.toDateString() === today) {\n const hour = date.getHours().toString().padStart(2, '0') + ':00';\n if (log.Status === 'Success') {\n hourCounts[hour].success++;\n } else {\n hourCounts[hour].failed++;\n }\n }\n }\n\n this.hourlyData = Object.entries(hourCounts).map(([hour, counts]) => ({\n hour,\n ...counts\n }));\n\n // Build operation counts\n this.operationCounts.clear();\n for (const log of this.auditLogs) {\n const op = log.parsedDetails?.operation || 'Access';\n this.operationCounts.set(op, (this.operationCounts.get(op) || 0) + 1);\n }\n }\n\n public getMaxHourlyCount(): number {\n return Math.max(...this.hourlyData.map(d => d.success + d.failed), 1);\n }\n\n public getOperationList(): string[] {\n return Array.from(this.operationCounts.keys());\n }\n\n public getStatusClass(status: string): string {\n switch (status) {\n case 'Success': return 'success';\n case 'Failed': return 'failed';\n default: return 'unknown';\n }\n }\n\n public getOperationType(log: AuditLogWithDetails): string {\n return log.parsedDetails?.operation || 'Access';\n }\n\n public getSubsystem(log: AuditLogWithDetails): string {\n return log.parsedDetails?.subsystem || '';\n }\n\n public getOperationIcon(operation: string): string {\n switch (operation.toLowerCase()) {\n case 'access': return 'fa-solid fa-eye';\n case 'create': return 'fa-solid fa-plus';\n case 'update': return 'fa-solid fa-pen';\n case 'delete': return 'fa-solid fa-trash';\n case 'rotate': return 'fa-solid fa-rotate';\n case 'validate': return 'fa-solid fa-check-circle';\n default: return 'fa-solid fa-circle';\n }\n }\n\n public getOperationColor(operation: string): string {\n switch (operation.toLowerCase()) {\n case 'access': return 'var(--mj-brand-primary)';\n case 'create': return 'var(--mj-status-success)';\n case 'update': return 'var(--mj-status-warning)';\n case 'delete': return 'var(--mj-status-error)';\n case 'rotate': return 'var(--mj-brand-primary)';\n case 'validate': return 'var(--mj-brand-primary)';\n default: return 'var(--mj-text-secondary)';\n }\n }\n\n public formatDate(date: Date | string | null): string {\n if (!date) return '';\n const d = new Date(date);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n\n public formatTime(date: Date | string | null): string {\n if (!date) return '';\n const d = new Date(date);\n return d.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n\n public formatDuration(ms: number | undefined): string {\n if (!ms) return '-';\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n }\n\n public refresh(): void {\n this.loadData();\n }\n\n public getSuccessCount(): number {\n return this.auditLogs.filter(log => log.Status === 'Success').length;\n }\n\n public getFailedCount(): number {\n return this.auditLogs.filter(log => log.Status === 'Failed').length;\n }\n\n public getSuccessRate(): number {\n if (this.auditLogs.length === 0) return 0;\n return Math.round((this.getSuccessCount() / this.auditLogs.length) * 100);\n }\n\n public getUniqueUserCount(): number {\n const users = new Set(this.auditLogs.map(log => log.User).filter(Boolean));\n return users.size;\n }\n\n public exportToCSV(): void {\n const headers = ['Timestamp', 'User', 'Operation', 'Status', 'Description', 'Subsystem', 'Credential Type'];\n const rows = this.filteredLogs.map(log => [\n this.formatDate(log.__mj_CreatedAt),\n log.User || '',\n this.getOperationType(log),\n log.Status || '',\n log.Description || '',\n this.getSubsystem(log),\n log.parsedDetails?.credentialType || ''\n ]);\n\n const csvContent = [\n headers.join(','),\n ...rows.map(row => row.map(cell => `\"${cell.replace(/\"/g, '\"\"')}\"`).join(','))\n ].join('\\n');\n\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = `credential-audit-log-${new Date().toISOString().split('T')[0]}.csv`;\n link.click();\n }\n}\n","<div class=\"audit-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading audit logs...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header -->\n <div class=\"audit-header\">\n <div class=\"header-info\">\n <h2 class=\"audit-title\">Audit Trail</h2>\n <p class=\"audit-subtitle\">Credential access and modification history</p>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-secondary\" (click)=\"exportToCSV()\" title=\"Export to CSV\">\n <i class=\"fa-solid fa-download\"></i>\n <span>Export</span>\n </button>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Stats Cards -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon total\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{auditLogs.length}}</div>\n <div class=\"stat-label\">Total Events</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value success\">{{getSuccessCount()}}</div>\n <div class=\"stat-label\">Successful</div>\n </div>\n <div class=\"stat-rate\">{{getSuccessRate()}}%</div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon failed\">\n <i class=\"fa-solid fa-times-circle\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value failed\">{{getFailedCount()}}</div>\n <div class=\"stat-label\">Failed</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon users\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{getUniqueUserCount()}}</div>\n <div class=\"stat-label\">Unique Users</div>\n </div>\n </div>\n </div>\n <!-- Activity Chart -->\n @if (hourlyData.length > 0) {\n <div class=\"activity-chart\">\n <div class=\"chart-header\">\n <h3>\n <i class=\"fa-solid fa-chart-bar\"></i>\n Today's Activity\n </h3>\n </div>\n <div class=\"chart-container\">\n <div class=\"chart-bars\">\n @for (data of hourlyData; track data) {\n <div\n class=\"chart-bar-wrapper\"\n [title]=\"data.hour + ': ' + (data.success + data.failed) + ' events'\"\n >\n <div class=\"chart-bar\">\n <div\n class=\"bar-segment success\"\n [style.height.%]=\"(data.success / getMaxHourlyCount()) * 100\"\n ></div>\n <div\n class=\"bar-segment failed\"\n [style.height.%]=\"(data.failed / getMaxHourlyCount()) * 100\"\n ></div>\n </div>\n <span class=\"chart-label\">{{data.hour.split(':')[0]}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"chart-legend\">\n <span class=\"legend-item\">\n <span class=\"legend-color success\"></span>\n Success\n </span>\n <span class=\"legend-item\">\n <span class=\"legend-color failed\"></span>\n Failed\n </span>\n </div>\n </div>\n }\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search logs...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatus\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"Success\">Success</option>\n <option value=\"Failed\">Failed</option>\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedOperation\"\n (change)=\"onOperationFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Operations</option>\n @for (op of getOperationList(); track op) {\n <option [value]=\"op\">{{op}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"dateRange\"\n (change)=\"onDateRangeChange($any($event.target).value)\"\n >\n <option value=\"1\">Last 24 hours</option>\n <option value=\"7\">Last 7 days</option>\n <option value=\"30\">Last 30 days</option>\n <option value=\"90\">Last 90 days</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredLogs.length}} of {{auditLogs.length}} events\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'timeline'\"\n (click)=\"setViewMode('timeline')\"\n title=\"Timeline View\"\n >\n <i class=\"fa-solid fa-timeline\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'table'\"\n (click)=\"setViewMode('table')\"\n title=\"Table View\"\n >\n <i class=\"fa-solid fa-table\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Timeline View -->\n @if (viewMode === 'timeline' && timelineGroups.length > 0) {\n <div class=\"timeline-container\">\n @for (group of timelineGroups; track group) {\n <div class=\"timeline-group\">\n <div class=\"timeline-date\">\n <span class=\"date-label\">{{group.displayDate}}</span>\n <span class=\"date-count\">{{group.logs.length}} events</span>\n </div>\n <div class=\"timeline-items\">\n @for (log of group.logs; track log) {\n <div\n class=\"timeline-item\"\n [class.expanded]=\"expandedLogId === log.ID\"\n [class.failed]=\"log.Status === 'Failed'\"\n >\n <div class=\"timeline-line\">\n <div\n class=\"timeline-dot\"\n [style.backgroundColor]=\"getOperationColor(getOperationType(log))\"\n ></div>\n </div>\n <div class=\"timeline-content\" (click)=\"toggleLogExpand(log.ID)\">\n <div class=\"timeline-header\">\n <div class=\"timeline-operation\">\n <i [class]=\"getOperationIcon(getOperationType(log))\" [style.color]=\"getOperationColor(getOperationType(log))\"></i>\n <span class=\"operation-name\">{{getOperationType(log)}}</span>\n </div>\n <div class=\"timeline-time\">{{formatTime(log.__mj_CreatedAt)}}</div>\n </div>\n <div class=\"timeline-body\">\n <div class=\"timeline-user\">\n <i class=\"fa-solid fa-user\"></i>\n {{log.User || 'Unknown'}}\n </div>\n @if (log.Description) {\n <div class=\"timeline-description\">\n {{log.Description}}\n </div>\n }\n <div class=\"timeline-badges\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(log.Status)\">\n <i [class]=\"log.Status === 'Success' ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n {{log.Status}}\n </span>\n @if (getSubsystem(log)) {\n <span class=\"subsystem-badge\">\n {{getSubsystem(log)}}\n </span>\n }\n @if (log.parsedDetails?.credentialType) {\n <span class=\"type-badge\">\n <i class=\"fa-solid fa-key\"></i>\n {{log.parsedDetails?.credentialType}}\n </span>\n }\n </div>\n </div>\n @if (expandedLogId === log.ID) {\n <div class=\"timeline-details\">\n <div class=\"detail-grid\">\n @if (log.parsedDetails?.ipAddress) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">IP Address</span>\n <span class=\"detail-value\">{{log.parsedDetails?.ipAddress}}</span>\n </div>\n }\n @if (log.parsedDetails?.duration) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Duration</span>\n <span class=\"detail-value\">{{formatDuration(log.parsedDetails?.duration)}}</span>\n </div>\n }\n @if (log.parsedDetails?.credentialId) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Credential ID</span>\n <span class=\"detail-value mono\">{{log.parsedDetails?.credentialId}}</span>\n </div>\n }\n @if (log.parsedDetails?.errorMessage) {\n <div class=\"detail-item full-width\">\n <span class=\"detail-label\">Error Message</span>\n <span class=\"detail-value error\">{{log.parsedDetails?.errorMessage}}</span>\n </div>\n }\n @if (log.parsedDetails?.userAgent) {\n <div class=\"detail-item full-width\">\n <span class=\"detail-label\">User Agent</span>\n <span class=\"detail-value mono small\">{{log.parsedDetails?.userAgent}}</span>\n </div>\n }\n </div>\n </div>\n }\n <button class=\"expand-btn\">\n <i [class]=\"expandedLogId === log.ID ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Table View -->\n @if (viewMode === 'table' && filteredLogs.length > 0) {\n <div class=\"audit-table-container\">\n <table class=\"audit-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User</th>\n <th>Operation</th>\n <th>Description</th>\n <th>Subsystem</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (log of filteredLogs; track log) {\n <tr [class.failed-row]=\"log.Status === 'Failed'\">\n <td class=\"timestamp\">{{formatDate(log.__mj_CreatedAt)}}</td>\n <td class=\"user\">{{log.User || 'Unknown'}}</td>\n <td class=\"operation\">\n <span class=\"operation-badge\" [style.backgroundColor]=\"getOperationColor(getOperationType(log)) + '20'\" [style.color]=\"getOperationColor(getOperationType(log))\">\n <i [class]=\"getOperationIcon(getOperationType(log))\"></i>\n {{getOperationType(log)}}\n </span>\n </td>\n <td class=\"description\">{{log.Description || '-'}}</td>\n <td class=\"subsystem\">{{getSubsystem(log) || '-'}}</td>\n <td class=\"status\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(log.Status)\">\n <i [class]=\"log.Status === 'Success' ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n {{log.Status}}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredLogs.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n </div>\n <h3>No Audit Logs</h3>\n @if (searchText || selectedStatus || selectedOperation) {\n <p>\n No events match your current filters.\n <button class=\"btn-link\" (click)=\"searchText = ''; selectedStatus = ''; selectedOperation = ''; applyFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedStatus && !selectedOperation) {\n <p>\n No credential access events in the selected time range.\n </p>\n }\n </div>\n }\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"credentials-audit-resource.component.js","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-audit-resource.component.ts","../../../src/Credentials/components/credentials-audit-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { ResourceData, MJAuditLogEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\n// The Credential Access AuditLogType ID from metadata\nconst CREDENTIAL_ACCESS_AUDIT_LOG_TYPE_ID = 'E8D4D100-E785-42D3-997F-ECFF3B0BCFC0';\n\ninterface AuditLogWithDetails extends MJAuditLogEntity {\n parsedDetails?: ParsedDetails;\n}\n\ninterface ParsedDetails {\n operation?: string;\n subsystem?: string;\n credentialType?: string;\n credentialId?: string;\n ipAddress?: string;\n userAgent?: string;\n duration?: number;\n errorMessage?: string;\n}\n\ninterface TimelineGroup {\n date: string;\n displayDate: string;\n logs: AuditLogWithDetails[];\n}\n\n@RegisterClass(BaseResourceComponent, 'CredentialsAuditResource')\n@Component({\n standalone: false,\n selector: 'mj-credentials-audit-resource',\n templateUrl: './credentials-audit-resource.component.html',\n styleUrls: ['./credentials-audit-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CredentialsAuditResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public auditLogs: AuditLogWithDetails[] = [];\n public filteredLogs: AuditLogWithDetails[] = [];\n public timelineGroups: TimelineGroup[] = [];\n\n public selectedStatus = '';\n public selectedOperation = '';\n public dateRange = '7'; // days\n public searchText = '';\n public viewMode: 'table' | 'timeline' = 'timeline';\n public expandedLogId: string | null = null;\n\n // Chart data\n public hourlyData: { hour: string; success: number; failed: number }[] = [];\n public operationCounts: Map<string, number> = new Map();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n // Cleanup if needed\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Audit Trail';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-clipboard-list';\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n // Calculate date filter\n const startDate = new Date();\n startDate.setDate(startDate.getDate() - parseInt(this.dateRange, 10));\n const dateFilter = `AuditLogTypeID = '${CREDENTIAL_ACCESS_AUDIT_LOG_TYPE_ID}' AND __mj_CreatedAt >= '${startDate.toISOString()}'`;\n\n const result = await rv.RunView<AuditLogWithDetails>({\n EntityName: 'MJ: Audit Logs',\n ExtraFilter: dateFilter,\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 500,\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.auditLogs = result.Results;\n this.parseAllDetails();\n this.applyFilters();\n this.buildChartData();\n }\n\n } catch (error) {\n console.error('Error loading audit logs:', error);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private parseAllDetails(): void {\n for (const log of this.auditLogs) {\n log.parsedDetails = this.parseDetails(log);\n }\n }\n\n private parseDetails(log: MJAuditLogEntity): ParsedDetails {\n try {\n if (log.Details) {\n return JSON.parse(log.Details);\n }\n } catch (e) {\n // Ignore parse errors\n }\n return {};\n }\n\n public onStatusFilterChange(status: string): void {\n this.selectedStatus = status;\n this.applyFilters();\n }\n\n public onOperationFilterChange(operation: string): void {\n this.selectedOperation = operation;\n this.applyFilters();\n }\n\n public onDateRangeChange(days: string): void {\n this.dateRange = days;\n this.loadData();\n }\n\n public onSearchChange(value: string): void {\n this.searchText = value;\n this.applyFilters();\n }\n\n public clearSearch(): void {\n this.searchText = '';\n this.applyFilters();\n }\n\n public setViewMode(mode: 'table' | 'timeline'): void {\n this.viewMode = mode;\n this.cdr.markForCheck();\n }\n\n public toggleLogExpand(logId: string): void {\n this.expandedLogId = this.expandedLogId === logId ? null : logId;\n this.cdr.markForCheck();\n }\n\n public applyFilters(): void {\n let filtered = [...this.auditLogs];\n\n if (this.selectedStatus) {\n filtered = filtered.filter(log => log.Status === this.selectedStatus);\n }\n\n if (this.selectedOperation) {\n filtered = filtered.filter(log => {\n const op = log.parsedDetails?.operation || 'Access';\n return op === this.selectedOperation;\n });\n }\n\n if (this.searchText) {\n const searchLower = this.searchText.toLowerCase();\n filtered = filtered.filter(log => {\n const user = (log.User || '').toLowerCase();\n const desc = (log.Description || '').toLowerCase();\n const subsystem = (log.parsedDetails?.subsystem || '').toLowerCase();\n const credType = (log.parsedDetails?.credentialType || '').toLowerCase();\n return user.includes(searchLower) ||\n desc.includes(searchLower) ||\n subsystem.includes(searchLower) ||\n credType.includes(searchLower);\n });\n }\n\n this.filteredLogs = filtered;\n this.buildTimelineGroups();\n this.cdr.markForCheck();\n }\n\n private buildTimelineGroups(): void {\n const groups = new Map<string, AuditLogWithDetails[]>();\n\n for (const log of this.filteredLogs) {\n const date = new Date(log.__mj_CreatedAt);\n const dateKey = date.toISOString().split('T')[0];\n\n if (!groups.has(dateKey)) {\n groups.set(dateKey, []);\n }\n groups.get(dateKey)!.push(log);\n }\n\n this.timelineGroups = Array.from(groups.entries())\n .sort((a, b) => b[0].localeCompare(a[0]))\n .map(([date, logs]) => ({\n date,\n displayDate: this.formatGroupDate(date),\n logs\n }));\n }\n\n private formatGroupDate(dateString: string): string {\n const date = new Date(dateString);\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'Today';\n } else if (date.toDateString() === yesterday.toDateString()) {\n return 'Yesterday';\n } else {\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: date.getFullYear() !== today.getFullYear() ? 'numeric' : undefined\n });\n }\n }\n\n private buildChartData(): void {\n // Build hourly distribution for today\n const hourCounts: { [key: string]: { success: number; failed: number } } = {};\n const today = new Date().toDateString();\n\n for (let i = 0; i < 24; i++) {\n const hour = i.toString().padStart(2, '0') + ':00';\n hourCounts[hour] = { success: 0, failed: 0 };\n }\n\n for (const log of this.auditLogs) {\n const date = new Date(log.__mj_CreatedAt);\n if (date.toDateString() === today) {\n const hour = date.getHours().toString().padStart(2, '0') + ':00';\n if (log.Status === 'Success') {\n hourCounts[hour].success++;\n } else {\n hourCounts[hour].failed++;\n }\n }\n }\n\n this.hourlyData = Object.entries(hourCounts).map(([hour, counts]) => ({\n hour,\n ...counts\n }));\n\n // Build operation counts\n this.operationCounts.clear();\n for (const log of this.auditLogs) {\n const op = log.parsedDetails?.operation || 'Access';\n this.operationCounts.set(op, (this.operationCounts.get(op) || 0) + 1);\n }\n }\n\n public getMaxHourlyCount(): number {\n return Math.max(...this.hourlyData.map(d => d.success + d.failed), 1);\n }\n\n public getOperationList(): string[] {\n return Array.from(this.operationCounts.keys());\n }\n\n public getStatusClass(status: string): string {\n switch (status) {\n case 'Success': return 'success';\n case 'Failed': return 'failed';\n default: return 'unknown';\n }\n }\n\n public getOperationType(log: AuditLogWithDetails): string {\n return log.parsedDetails?.operation || 'Access';\n }\n\n public getSubsystem(log: AuditLogWithDetails): string {\n return log.parsedDetails?.subsystem || '';\n }\n\n public getOperationIcon(operation: string): string {\n switch (operation.toLowerCase()) {\n case 'access': return 'fa-solid fa-eye';\n case 'create': return 'fa-solid fa-plus';\n case 'update': return 'fa-solid fa-pen';\n case 'delete': return 'fa-solid fa-trash';\n case 'rotate': return 'fa-solid fa-rotate';\n case 'validate': return 'fa-solid fa-check-circle';\n default: return 'fa-solid fa-circle';\n }\n }\n\n public getOperationColor(operation: string): string {\n switch (operation.toLowerCase()) {\n case 'access': return 'var(--mj-brand-primary)';\n case 'create': return 'var(--mj-status-success)';\n case 'update': return 'var(--mj-status-warning)';\n case 'delete': return 'var(--mj-status-error)';\n case 'rotate': return 'var(--mj-brand-primary)';\n case 'validate': return 'var(--mj-brand-primary)';\n default: return 'var(--mj-text-secondary)';\n }\n }\n\n public formatDate(date: Date | string | null): string {\n if (!date) return '';\n const d = new Date(date);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n\n public formatTime(date: Date | string | null): string {\n if (!date) return '';\n const d = new Date(date);\n return d.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n });\n }\n\n public formatDuration(ms: number | undefined): string {\n if (!ms) return '-';\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n }\n\n public refresh(): void {\n this.loadData();\n }\n\n public getSuccessCount(): number {\n return this.auditLogs.filter(log => log.Status === 'Success').length;\n }\n\n public getFailedCount(): number {\n return this.auditLogs.filter(log => log.Status === 'Failed').length;\n }\n\n public getSuccessRate(): number {\n if (this.auditLogs.length === 0) return 0;\n return Math.round((this.getSuccessCount() / this.auditLogs.length) * 100);\n }\n\n public getUniqueUserCount(): number {\n const users = new Set(this.auditLogs.map(log => log.User).filter(Boolean));\n return users.size;\n }\n\n public exportToCSV(): void {\n const headers = ['Timestamp', 'User', 'Operation', 'Status', 'Description', 'Subsystem', 'Credential Type'];\n const rows = this.filteredLogs.map(log => [\n this.formatDate(log.__mj_CreatedAt),\n log.User || '',\n this.getOperationType(log),\n log.Status || '',\n log.Description || '',\n this.getSubsystem(log),\n log.parsedDetails?.credentialType || ''\n ]);\n\n const csvContent = [\n headers.join(','),\n ...rows.map(row => row.map(cell => `\"${cell.replace(/\"/g, '\"\"')}\"`).join(','))\n ].join('\\n');\n\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = `credential-audit-log-${new Date().toISOString().split('T')[0]}.csv`;\n link.click();\n }\n}\n","<div class=\"audit-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading audit logs...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header -->\n <div class=\"audit-header\">\n <div class=\"header-info\">\n <h2 class=\"audit-title\">Audit Trail</h2>\n <p class=\"audit-subtitle\">Credential access and modification history</p>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-secondary\" (click)=\"exportToCSV()\" title=\"Export to CSV\">\n <i class=\"fa-solid fa-download\"></i>\n <span>Export</span>\n </button>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Stats Cards -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-icon total\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{auditLogs.length}}</div>\n <div class=\"stat-label\">Total Events</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon success\">\n <i class=\"fa-solid fa-check-circle\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value success\">{{getSuccessCount()}}</div>\n <div class=\"stat-label\">Successful</div>\n </div>\n <div class=\"stat-rate\">{{getSuccessRate()}}%</div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon failed\">\n <i class=\"fa-solid fa-times-circle\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value failed\">{{getFailedCount()}}</div>\n <div class=\"stat-label\">Failed</div>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-icon users\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"stat-content\">\n <div class=\"stat-value\">{{getUniqueUserCount()}}</div>\n <div class=\"stat-label\">Unique Users</div>\n </div>\n </div>\n </div>\n <!-- Activity Chart -->\n @if (hourlyData.length > 0) {\n <div class=\"activity-chart\">\n <div class=\"chart-header\">\n <h3>\n <i class=\"fa-solid fa-chart-bar\"></i>\n Today's Activity\n </h3>\n </div>\n <div class=\"chart-container\">\n <div class=\"chart-bars\">\n @for (data of hourlyData; track data) {\n <div\n class=\"chart-bar-wrapper\"\n [title]=\"data.hour + ': ' + (data.success + data.failed) + ' events'\"\n >\n <div class=\"chart-bar\">\n <div\n class=\"bar-segment success\"\n [style.height.%]=\"(data.success / getMaxHourlyCount()) * 100\"\n ></div>\n <div\n class=\"bar-segment failed\"\n [style.height.%]=\"(data.failed / getMaxHourlyCount()) * 100\"\n ></div>\n </div>\n <span class=\"chart-label\">{{data.hour.split(':')[0]}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"chart-legend\">\n <span class=\"legend-item\">\n <span class=\"legend-color success\"></span>\n Success\n </span>\n <span class=\"legend-item\">\n <span class=\"legend-color failed\"></span>\n Failed\n </span>\n </div>\n </div>\n }\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search logs...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatus\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"Success\">Success</option>\n <option value=\"Failed\">Failed</option>\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedOperation\"\n (change)=\"onOperationFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Operations</option>\n @for (op of getOperationList(); track op) {\n <option [value]=\"op\">{{op}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"dateRange\"\n (change)=\"onDateRangeChange($any($event.target).value)\"\n >\n <option value=\"1\">Last 24 hours</option>\n <option value=\"7\">Last 7 days</option>\n <option value=\"30\">Last 30 days</option>\n <option value=\"90\">Last 90 days</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredLogs.length}} of {{auditLogs.length}} events\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'timeline'\"\n (click)=\"setViewMode('timeline')\"\n title=\"Timeline View\"\n >\n <i class=\"fa-solid fa-timeline\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'table'\"\n (click)=\"setViewMode('table')\"\n title=\"Table View\"\n >\n <i class=\"fa-solid fa-table\"></i>\n </button>\n </div>\n </div>\n </div>\n <!-- Timeline View -->\n @if (viewMode === 'timeline' && timelineGroups.length > 0) {\n <div class=\"timeline-container\">\n @for (group of timelineGroups; track group) {\n <div class=\"timeline-group\">\n <div class=\"timeline-date\">\n <span class=\"date-label\">{{group.displayDate}}</span>\n <span class=\"date-count\">{{group.logs.length}} events</span>\n </div>\n <div class=\"timeline-items\">\n @for (log of group.logs; track log) {\n <div\n class=\"timeline-item\"\n [class.expanded]=\"expandedLogId === log.ID\"\n [class.failed]=\"log.Status === 'Failed'\"\n >\n <div class=\"timeline-line\">\n <div\n class=\"timeline-dot\"\n [style.backgroundColor]=\"getOperationColor(getOperationType(log))\"\n ></div>\n </div>\n <div class=\"timeline-content\" (click)=\"toggleLogExpand(log.ID)\">\n <div class=\"timeline-header\">\n <div class=\"timeline-operation\">\n <i [class]=\"getOperationIcon(getOperationType(log))\" [style.color]=\"getOperationColor(getOperationType(log))\"></i>\n <span class=\"operation-name\">{{getOperationType(log)}}</span>\n </div>\n <div class=\"timeline-time\">{{formatTime(log.__mj_CreatedAt)}}</div>\n </div>\n <div class=\"timeline-body\">\n <div class=\"timeline-user\">\n <i class=\"fa-solid fa-user\"></i>\n {{log.User || 'Unknown'}}\n </div>\n @if (log.Description) {\n <div class=\"timeline-description\">\n {{log.Description}}\n </div>\n }\n <div class=\"timeline-badges\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(log.Status)\">\n <i [class]=\"log.Status === 'Success' ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n {{log.Status}}\n </span>\n @if (getSubsystem(log)) {\n <span class=\"subsystem-badge\">\n {{getSubsystem(log)}}\n </span>\n }\n @if (log.parsedDetails?.credentialType) {\n <span class=\"type-badge\">\n <i class=\"fa-solid fa-key\"></i>\n {{log.parsedDetails?.credentialType}}\n </span>\n }\n </div>\n </div>\n @if (expandedLogId === log.ID) {\n <div class=\"timeline-details\">\n <div class=\"detail-grid\">\n @if (log.parsedDetails?.ipAddress) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">IP Address</span>\n <span class=\"detail-value\">{{log.parsedDetails?.ipAddress}}</span>\n </div>\n }\n @if (log.parsedDetails?.duration) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Duration</span>\n <span class=\"detail-value\">{{formatDuration(log.parsedDetails?.duration)}}</span>\n </div>\n }\n @if (log.parsedDetails?.credentialId) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Credential ID</span>\n <span class=\"detail-value mono\">{{log.parsedDetails?.credentialId}}</span>\n </div>\n }\n @if (log.parsedDetails?.errorMessage) {\n <div class=\"detail-item full-width\">\n <span class=\"detail-label\">Error Message</span>\n <span class=\"detail-value error\">{{log.parsedDetails?.errorMessage}}</span>\n </div>\n }\n @if (log.parsedDetails?.userAgent) {\n <div class=\"detail-item full-width\">\n <span class=\"detail-label\">User Agent</span>\n <span class=\"detail-value mono small\">{{log.parsedDetails?.userAgent}}</span>\n </div>\n }\n </div>\n </div>\n }\n <button class=\"expand-btn\">\n <i [class]=\"expandedLogId === log.ID ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Table View -->\n @if (viewMode === 'table' && filteredLogs.length > 0) {\n <div class=\"audit-table-container\">\n <table class=\"audit-table\">\n <thead>\n <tr>\n <th>Timestamp</th>\n <th>User</th>\n <th>Operation</th>\n <th>Description</th>\n <th>Subsystem</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n @for (log of filteredLogs; track log) {\n <tr [class.failed-row]=\"log.Status === 'Failed'\">\n <td class=\"timestamp\">{{formatDate(log.__mj_CreatedAt)}}</td>\n <td class=\"user\">{{log.User || 'Unknown'}}</td>\n <td class=\"operation\">\n <span class=\"operation-badge\" [style.backgroundColor]=\"getOperationColor(getOperationType(log)) + '20'\" [style.color]=\"getOperationColor(getOperationType(log))\">\n <i [class]=\"getOperationIcon(getOperationType(log))\"></i>\n {{getOperationType(log)}}\n </span>\n </td>\n <td class=\"description\">{{log.Description || '-'}}</td>\n <td class=\"subsystem\">{{getSubsystem(log) || '-'}}</td>\n <td class=\"status\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass(log.Status)\">\n <i [class]=\"log.Status === 'Success' ? 'fa-solid fa-check' : 'fa-solid fa-times'\"></i>\n {{log.Status}}\n </span>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredLogs.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-clipboard-list\"></i>\n </div>\n <h3>No Audit Logs</h3>\n @if (searchText || selectedStatus || selectedOperation) {\n <p>\n No events match your current filters.\n <button class=\"btn-link\" (click)=\"searchText = ''; selectedStatus = ''; selectedOperation = ''; applyFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedStatus && !selectedOperation) {\n <p>\n No credential access events in the selected time range.\n </p>\n }\n </div>\n }\n }\n</div>\n"]}
|