@memberjunction/ng-dashboards 3.4.0 → 4.1.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/README.md +102 -339
- package/dist/AI/components/agents/agent-configuration.component.d.ts +12 -5
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +103 -44
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +14 -5
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +149 -211
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +4 -4
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
- package/dist/AI/components/charts/performance-heatmap.component.js +4 -6
- package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
- package/dist/AI/components/charts/time-series-chart.component.js +6 -7
- package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts +0 -4
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +33 -37
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +3 -6
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +34 -27
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +22 -17
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +4 -4
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +3 -6
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +34 -32
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +33 -28
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +4 -4
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +0 -4
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +26 -27
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/kpi-card.component.js +52 -42
- package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
- package/dist/AI/components/widgets/live-execution-widget.component.js +7 -7
- package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +193 -189
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +0 -2
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +175 -180
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +231 -225
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +0 -2
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +113 -114
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +0 -2
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +294 -302
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +151 -155
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +0 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +237 -234
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +15 -14
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +3 -6
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +17 -19
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -6
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.d.ts +0 -4
- package/dist/Actions/components/code-management.component.d.ts.map +1 -1
- package/dist/Actions/components/code-management.component.js +3 -9
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.d.ts +0 -4
- package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +3 -9
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +3 -6
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +13 -16
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +3 -3
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-breadcrumb.component.js +6 -6
- package/dist/Actions/components/explorer/action-breadcrumb.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +11 -10
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +0 -4
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +10 -14
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -8
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +15 -14
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +11 -10
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -4
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +10 -10
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +8 -8
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.d.ts +0 -4
- package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +3 -9
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.d.ts +0 -4
- package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +3 -9
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/Actions/index.d.ts +0 -7
- package/dist/Actions/index.d.ts.map +1 -1
- package/dist/Actions/index.js +0 -8
- package/dist/Actions/index.js.map +1 -1
- package/dist/Communication/communication-dashboard.component.d.ts +0 -1
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -1
- package/dist/Communication/communication-dashboard.component.js +38 -51
- package/dist/Communication/communication-dashboard.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +0 -4
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +112 -108
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts +0 -4
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +210 -201
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.d.ts +0 -4
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +136 -124
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts +0 -4
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +91 -88
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +0 -4
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -122
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +0 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +21 -20
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +11 -12
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +25 -22
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +16 -16
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +23 -21
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +10 -10
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +13 -13
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +7 -7
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +5 -5
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +9 -9
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +4 -4
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +10 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +4 -4
- package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +200 -196
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +195 -190
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +251 -240
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +228 -226
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +0 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +214 -210
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts +0 -1
- package/dist/Credentials/credentials-dashboard.component.d.ts.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +31 -44
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.d.ts.map +1 -1
- package/dist/Credentials/pipes/group-by.pipe.js +2 -1
- package/dist/Credentials/pipes/group-by.pipe.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts +0 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +73 -80
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +46 -45
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +7 -7
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +15 -15
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +17 -11
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +2 -4
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +83 -64
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts +0 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +3 -6
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/DataExplorer/index.d.ts +2 -2
- package/dist/DataExplorer/index.d.ts.map +1 -1
- package/dist/DataExplorer/index.js +2 -2
- package/dist/DataExplorer/index.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +0 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +6 -7
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-application.d.ts +109 -27
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +351 -75
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +48 -12
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +267 -187
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +761 -685
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +340 -316
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts +0 -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 +530 -482
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +0 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +508 -455
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +44 -39
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +0 -1
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +0 -11
- package/dist/Lists/index.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +0 -4
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +33 -39
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts +0 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +42 -44
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +3 -4
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +186 -77
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts +0 -4
- package/dist/MCP/components/mcp-test-tool-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +187 -187
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/index.d.ts +5 -5
- package/dist/MCP/index.d.ts.map +1 -1
- package/dist/MCP/index.js +5 -5
- package/dist/MCP/index.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +65 -7
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +976 -697
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp-filter-panel.component.d.ts +54 -0
- package/dist/MCP/mcp-filter-panel.component.d.ts.map +1 -0
- package/dist/MCP/mcp-filter-panel.component.js +288 -0
- package/dist/MCP/mcp-filter-panel.component.js.map +1 -0
- package/dist/MCP/mcp-resource.component.d.ts +11 -5
- package/dist/MCP/mcp-resource.component.d.ts.map +1 -1
- package/dist/MCP/mcp-resource.component.js +8 -9
- package/dist/MCP/mcp-resource.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +16 -19
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +17 -26
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/MCP/services/mcp-tools.service.d.ts +10 -4
- package/dist/MCP/services/mcp-tools.service.d.ts.map +1 -1
- package/dist/MCP/services/mcp-tools.service.js +5 -6
- package/dist/MCP/services/mcp-tools.service.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +0 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +79 -88
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.d.ts.map +1 -1
- package/dist/Scheduling/components/job-slideout.component.js +117 -116
- package/dist/Scheduling/components/job-slideout.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +134 -134
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +102 -97
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +0 -4
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +3 -9
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +127 -122
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +0 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +35 -43
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +0 -4
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1552 -1534
- 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 +3 -3
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +30 -30
- package/dist/Testing/components/testing-analytics.component.js.map +1 -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 +3 -3
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +7 -7
- package/dist/Testing/components/testing-dashboard-tab.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 +3 -3
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +42 -35
- package/dist/Testing/components/testing-explorer.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 +3 -3
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +16 -16
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +3 -3
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +15 -15
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +73 -61
- package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/suite-tree.component.js +34 -31
- package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.d.ts.map +1 -1
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js +180 -171
- package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +0 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +9 -8
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts +119 -0
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js +1162 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts +67 -0
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/graph-resource.component.js +521 -0
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/index.d.ts +5 -0
- package/dist/VersionHistory/components/index.d.ts.map +1 -0
- package/dist/VersionHistory/components/index.js +5 -0
- package/dist/VersionHistory/components/index.js.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts +89 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/labels-resource.component.js +968 -0
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts +40 -0
- package/dist/VersionHistory/components/restore-resource.component.d.ts.map +1 -0
- package/dist/VersionHistory/components/restore-resource.component.js +472 -0
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -0
- package/dist/VersionHistory/index.d.ts +2 -0
- package/dist/VersionHistory/index.d.ts.map +1 -0
- package/dist/VersionHistory/index.js +2 -0
- package/dist/VersionHistory/index.js.map +1 -0
- package/dist/module.d.ts +42 -36
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +41 -7
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +20 -19
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +22 -120
- package/dist/public-api.js.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.d.ts.map +1 -1
- package/dist/shared/pipes/highlight-search.pipe.js +2 -1
- package/dist/shared/pipes/highlight-search.pipe.js.map +1 -1
- package/package.json +64 -62
|
@@ -0,0 +1,1162 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var VersionHistoryDiffResourceComponent_1;
|
|
8
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
9
|
+
import { Subject } from 'rxjs';
|
|
10
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
11
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
12
|
+
import { RunView, Metadata, CompositeKey, EntityRecordNameInput } from '@memberjunction/core';
|
|
13
|
+
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@memberjunction/ng-shared";
|
|
16
|
+
import * as i2 from "@angular/common";
|
|
17
|
+
import * as i3 from "@angular/forms";
|
|
18
|
+
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
19
|
+
function VersionHistoryDiffResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelement(0, "mj-loading", 1);
|
|
21
|
+
} }
|
|
22
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_For_22_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelementStart(0, "option", 16);
|
|
24
|
+
i0.ɵɵtext(1);
|
|
25
|
+
i0.ɵɵelementEnd();
|
|
26
|
+
} if (rf & 2) {
|
|
27
|
+
const label_r3 = ctx.$implicit;
|
|
28
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
29
|
+
i0.ɵɵproperty("value", label_r3.ID);
|
|
30
|
+
i0.ɵɵadvance();
|
|
31
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatLabelOption(label_r3), " ");
|
|
32
|
+
} }
|
|
33
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
35
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "button", 22);
|
|
36
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_23_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SwapLabels()); });
|
|
37
|
+
i0.ɵɵelement(2, "i", 23);
|
|
38
|
+
i0.ɵɵelementEnd()();
|
|
39
|
+
} }
|
|
40
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
42
|
+
i0.ɵɵelement(1, "i", 24);
|
|
43
|
+
i0.ɵɵelementStart(2, "span", 25);
|
|
44
|
+
i0.ɵɵtext(3, "Current State");
|
|
45
|
+
i0.ɵɵelementEnd()();
|
|
46
|
+
} }
|
|
47
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_25_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
i0.ɵɵelementStart(0, "option", 16);
|
|
49
|
+
i0.ɵɵtext(1);
|
|
50
|
+
i0.ɵɵelementEnd();
|
|
51
|
+
} if (rf & 2) {
|
|
52
|
+
const label_r6 = ctx.$implicit;
|
|
53
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
54
|
+
i0.ɵɵproperty("value", label_r6.ID);
|
|
55
|
+
i0.ɵɵadvance();
|
|
56
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatLabelOption(label_r6), " ");
|
|
57
|
+
} }
|
|
58
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
59
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
60
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "label", 13);
|
|
61
|
+
i0.ɵɵtext(2, "To label");
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
i0.ɵɵelementStart(3, "select", 14);
|
|
64
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_25_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ToLabelId, $event) || (ctx_r1.ToLabelId = $event); return i0.ɵɵresetView($event); });
|
|
65
|
+
i0.ɵɵelementStart(4, "option", 15);
|
|
66
|
+
i0.ɵɵtext(5, "Select a label...");
|
|
67
|
+
i0.ɵɵelementEnd();
|
|
68
|
+
i0.ɵɵrepeaterCreate(6, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_25_For_7_Template, 2, 2, "option", 16, i0.ɵɵrepeaterTrackByIdentity);
|
|
69
|
+
i0.ɵɵelementEnd()();
|
|
70
|
+
} if (rf & 2) {
|
|
71
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
72
|
+
i0.ɵɵadvance(3);
|
|
73
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ToLabelId);
|
|
74
|
+
i0.ɵɵadvance(3);
|
|
75
|
+
i0.ɵɵrepeater(ctx_r1.FilteredToLabels);
|
|
76
|
+
} }
|
|
77
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
78
|
+
i0.ɵɵelement(0, "i", 19);
|
|
79
|
+
} }
|
|
80
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
i0.ɵɵelement(0, "i", 20);
|
|
82
|
+
} }
|
|
83
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
85
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "div", 39);
|
|
86
|
+
i0.ɵɵelement(2, "i", 40);
|
|
87
|
+
i0.ɵɵelementStart(3, "input", 41);
|
|
88
|
+
i0.ɵɵlistener("ngModelChange", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffSearchChange($event)); });
|
|
89
|
+
i0.ɵɵelementEnd()();
|
|
90
|
+
i0.ɵɵelementStart(4, "div", 42)(5, "button", 43);
|
|
91
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffFilterChange("all")); });
|
|
92
|
+
i0.ɵɵtext(6, "All");
|
|
93
|
+
i0.ɵɵelementEnd();
|
|
94
|
+
i0.ɵɵelementStart(7, "button", 44);
|
|
95
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffFilterChange("added")); });
|
|
96
|
+
i0.ɵɵtext(8, "Added");
|
|
97
|
+
i0.ɵɵelementEnd();
|
|
98
|
+
i0.ɵɵelementStart(9, "button", 45);
|
|
99
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffFilterChange("removed")); });
|
|
100
|
+
i0.ɵɵtext(10, "Removed");
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
i0.ɵɵelementStart(11, "button", 46);
|
|
103
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffFilterChange("modified")); });
|
|
104
|
+
i0.ɵɵtext(12, "Modified");
|
|
105
|
+
i0.ɵɵelementEnd()();
|
|
106
|
+
i0.ɵɵelementStart(13, "div", 47)(14, "button", 48);
|
|
107
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ExpandAllGroups()); });
|
|
108
|
+
i0.ɵɵelement(15, "i", 49);
|
|
109
|
+
i0.ɵɵelementEnd();
|
|
110
|
+
i0.ɵɵelementStart(16, "button", 50);
|
|
111
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CollapseAllGroups()); });
|
|
112
|
+
i0.ɵɵelement(17, "i", 51);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵelementStart(18, "div", 52)(19, "button", 53);
|
|
115
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffSortChange("name")); });
|
|
116
|
+
i0.ɵɵelement(20, "i", 54);
|
|
117
|
+
i0.ɵɵelementEnd();
|
|
118
|
+
i0.ɵɵelementStart(21, "button", 55);
|
|
119
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDiffSortChange("count")); });
|
|
120
|
+
i0.ɵɵelement(22, "i", 54);
|
|
121
|
+
i0.ɵɵelementEnd()()()();
|
|
122
|
+
} if (rf & 2) {
|
|
123
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
124
|
+
i0.ɵɵadvance(3);
|
|
125
|
+
i0.ɵɵproperty("ngModel", ctx_r1.DiffSearch);
|
|
126
|
+
i0.ɵɵadvance(2);
|
|
127
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffFilterType === "all");
|
|
128
|
+
i0.ɵɵadvance(2);
|
|
129
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffFilterType === "added");
|
|
130
|
+
i0.ɵɵadvance(2);
|
|
131
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffFilterType === "removed");
|
|
132
|
+
i0.ɵɵadvance(2);
|
|
133
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffFilterType === "modified");
|
|
134
|
+
i0.ɵɵadvance(8);
|
|
135
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffSortBy === "name");
|
|
136
|
+
i0.ɵɵadvance();
|
|
137
|
+
i0.ɵɵproperty("ngClass", ctx_r1.DiffSortBy === "name" && ctx_r1.DiffSortDir === "desc" ? "fa-arrow-up-z-a" : "fa-arrow-down-a-z");
|
|
138
|
+
i0.ɵɵadvance();
|
|
139
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffSortBy === "count");
|
|
140
|
+
i0.ɵɵadvance();
|
|
141
|
+
i0.ɵɵproperty("ngClass", ctx_r1.DiffSortBy === "count" && ctx_r1.DiffSortDir === "asc" ? "fa-arrow-up-1-9" : "fa-arrow-down-9-1");
|
|
142
|
+
} }
|
|
143
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
i0.ɵɵelementStart(0, "span", 63);
|
|
145
|
+
i0.ɵɵtext(1);
|
|
146
|
+
i0.ɵɵelementEnd();
|
|
147
|
+
} if (rf & 2) {
|
|
148
|
+
const group_r9 = i0.ɵɵnextContext().$implicit;
|
|
149
|
+
i0.ɵɵadvance();
|
|
150
|
+
i0.ɵɵtextInterpolate1(" +", group_r9.AddedCount, " ");
|
|
151
|
+
} }
|
|
152
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
153
|
+
i0.ɵɵelementStart(0, "span", 64);
|
|
154
|
+
i0.ɵɵtext(1);
|
|
155
|
+
i0.ɵɵelementEnd();
|
|
156
|
+
} if (rf & 2) {
|
|
157
|
+
const group_r9 = i0.ɵɵnextContext().$implicit;
|
|
158
|
+
i0.ɵɵadvance();
|
|
159
|
+
i0.ɵɵtextInterpolate1(" -", group_r9.RemovedCount, " ");
|
|
160
|
+
} }
|
|
161
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
162
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
163
|
+
i0.ɵɵtext(1);
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
} if (rf & 2) {
|
|
166
|
+
const group_r9 = i0.ɵɵnextContext().$implicit;
|
|
167
|
+
i0.ɵɵadvance();
|
|
168
|
+
i0.ɵɵtextInterpolate1(" ~", group_r9.ModifiedCount, " ");
|
|
169
|
+
} }
|
|
170
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
172
|
+
i0.ɵɵtext(1);
|
|
173
|
+
i0.ɵɵelementEnd();
|
|
174
|
+
} if (rf & 2) {
|
|
175
|
+
const item_r11 = i0.ɵɵnextContext().$implicit;
|
|
176
|
+
i0.ɵɵadvance();
|
|
177
|
+
i0.ɵɵtextInterpolate1(" (", item_r11.DisplayName, ")");
|
|
178
|
+
} }
|
|
179
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
180
|
+
i0.ɵɵelement(0, "i", 77);
|
|
181
|
+
} if (rf & 2) {
|
|
182
|
+
const item_r11 = i0.ɵɵnextContext().$implicit;
|
|
183
|
+
i0.ɵɵclassProp("expanded", item_r11.IsExpanded);
|
|
184
|
+
} }
|
|
185
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
+
i0.ɵɵelement(0, "mj-loading", 78);
|
|
187
|
+
} }
|
|
188
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
189
|
+
i0.ɵɵelementStart(0, "span", 83);
|
|
190
|
+
i0.ɵɵtext(1);
|
|
191
|
+
i0.ɵɵpipe(2, "slice");
|
|
192
|
+
i0.ɵɵelementEnd();
|
|
193
|
+
} if (rf & 2) {
|
|
194
|
+
const field_r12 = i0.ɵɵnextContext().$implicit;
|
|
195
|
+
i0.ɵɵadvance();
|
|
196
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind3(2, 1, field_r12.OldValue, 0, 60));
|
|
197
|
+
} }
|
|
198
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
+
i0.ɵɵelement(0, "i", 84);
|
|
200
|
+
} }
|
|
201
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "span", 85);
|
|
203
|
+
i0.ɵɵtext(1);
|
|
204
|
+
i0.ɵɵpipe(2, "slice");
|
|
205
|
+
i0.ɵɵelementEnd();
|
|
206
|
+
} if (rf & 2) {
|
|
207
|
+
const field_r12 = i0.ɵɵnextContext().$implicit;
|
|
208
|
+
i0.ɵɵadvance();
|
|
209
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind3(2, 1, field_r12.NewValue, 0, 60));
|
|
210
|
+
} }
|
|
211
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "span", 81);
|
|
213
|
+
i0.ɵɵtext(2);
|
|
214
|
+
i0.ɵɵelementEnd();
|
|
215
|
+
i0.ɵɵelementStart(3, "span", 82);
|
|
216
|
+
i0.ɵɵconditionalCreate(4, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Conditional_4_Template, 3, 5, "span", 83);
|
|
217
|
+
i0.ɵɵconditionalCreate(5, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Conditional_5_Template, 1, 0, "i", 84);
|
|
218
|
+
i0.ɵɵconditionalCreate(6, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Conditional_6_Template, 3, 5, "span", 85);
|
|
219
|
+
i0.ɵɵelementEnd()();
|
|
220
|
+
} if (rf & 2) {
|
|
221
|
+
const field_r12 = ctx.$implicit;
|
|
222
|
+
const ctx_r1 = i0.ɵɵnextContext(9);
|
|
223
|
+
i0.ɵɵproperty("ngClass", ctx_r1.GetChangeTypeClass(field_r12.ChangeType));
|
|
224
|
+
i0.ɵɵadvance(2);
|
|
225
|
+
i0.ɵɵtextInterpolate(field_r12.FieldName);
|
|
226
|
+
i0.ɵɵadvance(2);
|
|
227
|
+
i0.ɵɵconditional(field_r12.OldValue ? 4 : -1);
|
|
228
|
+
i0.ɵɵadvance();
|
|
229
|
+
i0.ɵɵconditional(field_r12.OldValue && field_r12.NewValue ? 5 : -1);
|
|
230
|
+
i0.ɵɵadvance();
|
|
231
|
+
i0.ɵɵconditional(field_r12.NewValue ? 6 : -1);
|
|
232
|
+
} }
|
|
233
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
234
|
+
i0.ɵɵrepeaterCreate(0, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_For_1_Template, 7, 5, "div", 80, i0.ɵɵrepeaterTrackByIdentity);
|
|
235
|
+
} if (rf & 2) {
|
|
236
|
+
const item_r11 = i0.ɵɵnextContext(2).$implicit;
|
|
237
|
+
i0.ɵɵrepeater(item_r11.FieldChanges);
|
|
238
|
+
} }
|
|
239
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
240
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "span");
|
|
241
|
+
i0.ɵɵtext(2, "No field-level changes available");
|
|
242
|
+
i0.ɵɵelementEnd()();
|
|
243
|
+
} }
|
|
244
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
245
|
+
i0.ɵɵelementStart(0, "div", 76);
|
|
246
|
+
i0.ɵɵconditionalCreate(1, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_1_Template, 1, 0, "mj-loading", 78);
|
|
247
|
+
i0.ɵɵconditionalCreate(2, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_2_Template, 2, 0);
|
|
248
|
+
i0.ɵɵconditionalCreate(3, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Conditional_3_Template, 3, 0, "div", 79);
|
|
249
|
+
i0.ɵɵelementEnd();
|
|
250
|
+
} if (rf & 2) {
|
|
251
|
+
const item_r11 = i0.ɵɵnextContext().$implicit;
|
|
252
|
+
i0.ɵɵadvance();
|
|
253
|
+
i0.ɵɵconditional(item_r11.IsLoadingFields ? 1 : -1);
|
|
254
|
+
i0.ɵɵadvance();
|
|
255
|
+
i0.ɵɵconditional(!item_r11.IsLoadingFields && item_r11.FieldChanges.length > 0 ? 2 : -1);
|
|
256
|
+
i0.ɵɵadvance();
|
|
257
|
+
i0.ɵɵconditional(!item_r11.IsLoadingFields && item_r11.FieldsLoaded && item_r11.FieldChanges.length === 0 ? 3 : -1);
|
|
258
|
+
} }
|
|
259
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
260
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
261
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "div", 68);
|
|
262
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Template_div_click_1_listener() { const item_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.ToggleItem(item_r11)); });
|
|
263
|
+
i0.ɵɵelement(2, "i", 69);
|
|
264
|
+
i0.ɵɵelementStart(3, "span", 70);
|
|
265
|
+
i0.ɵɵtext(4);
|
|
266
|
+
i0.ɵɵconditionalCreate(5, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_5_Template, 2, 1, "span", 71);
|
|
267
|
+
i0.ɵɵelementEnd();
|
|
268
|
+
i0.ɵɵelementStart(6, "span", 72);
|
|
269
|
+
i0.ɵɵtext(7);
|
|
270
|
+
i0.ɵɵelementEnd();
|
|
271
|
+
i0.ɵɵelementStart(8, "button", 73);
|
|
272
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Template_button_click_8_listener($event) { const item_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(6); ctx_r1.OnOpenRecord(item_r11); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
273
|
+
i0.ɵɵelement(9, "i", 74);
|
|
274
|
+
i0.ɵɵelementEnd();
|
|
275
|
+
i0.ɵɵconditionalCreate(10, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_10_Template, 1, 2, "i", 75);
|
|
276
|
+
i0.ɵɵelementEnd();
|
|
277
|
+
i0.ɵɵconditionalCreate(11, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Conditional_11_Template, 4, 3, "div", 76);
|
|
278
|
+
i0.ɵɵelementEnd();
|
|
279
|
+
} if (rf & 2) {
|
|
280
|
+
const item_r11 = ctx.$implicit;
|
|
281
|
+
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
282
|
+
i0.ɵɵadvance();
|
|
283
|
+
i0.ɵɵclassProp("clickable", item_r11.ChangeType === "Modified");
|
|
284
|
+
i0.ɵɵproperty("ngClass", ctx_r1.GetChangeTypeClass(item_r11.ChangeType));
|
|
285
|
+
i0.ɵɵadvance();
|
|
286
|
+
i0.ɵɵclassMap(ctx_r1.GetChangeTypeIcon(item_r11.ChangeType));
|
|
287
|
+
i0.ɵɵadvance(2);
|
|
288
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatRecordID(item_r11.RecordID), " ");
|
|
289
|
+
i0.ɵɵadvance();
|
|
290
|
+
i0.ɵɵconditional(item_r11.DisplayName ? 5 : -1);
|
|
291
|
+
i0.ɵɵadvance(2);
|
|
292
|
+
i0.ɵɵtextInterpolate(item_r11.ChangeType);
|
|
293
|
+
i0.ɵɵadvance(3);
|
|
294
|
+
i0.ɵɵconditional(item_r11.ChangeType === "Modified" ? 10 : -1);
|
|
295
|
+
i0.ɵɵadvance();
|
|
296
|
+
i0.ɵɵconditional(item_r11.IsExpanded && item_r11.ChangeType === "Modified" ? 11 : -1);
|
|
297
|
+
} }
|
|
298
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 66);
|
|
300
|
+
i0.ɵɵrepeaterCreate(1, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_For_2_Template, 12, 10, "div", 67, i0.ɵɵrepeaterTrackByIdentity);
|
|
301
|
+
i0.ɵɵelementEnd();
|
|
302
|
+
} if (rf & 2) {
|
|
303
|
+
const group_r9 = i0.ɵɵnextContext().$implicit;
|
|
304
|
+
i0.ɵɵadvance();
|
|
305
|
+
i0.ɵɵrepeater(group_r9.Items);
|
|
306
|
+
} }
|
|
307
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
308
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
309
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 57);
|
|
310
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Template_div_click_1_listener() { const group_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ToggleEntityGroup(group_r9)); });
|
|
311
|
+
i0.ɵɵelementStart(2, "div", 58);
|
|
312
|
+
i0.ɵɵelement(3, "i", 59)(4, "i", 60);
|
|
313
|
+
i0.ɵɵelementStart(5, "span", 61);
|
|
314
|
+
i0.ɵɵtext(6);
|
|
315
|
+
i0.ɵɵelementEnd()();
|
|
316
|
+
i0.ɵɵelementStart(7, "div", 62);
|
|
317
|
+
i0.ɵɵconditionalCreate(8, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_8_Template, 2, 1, "span", 63);
|
|
318
|
+
i0.ɵɵconditionalCreate(9, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_9_Template, 2, 1, "span", 64);
|
|
319
|
+
i0.ɵɵconditionalCreate(10, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_10_Template, 2, 1, "span", 65);
|
|
320
|
+
i0.ɵɵelementEnd()();
|
|
321
|
+
i0.ɵɵconditionalCreate(11, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Conditional_11_Template, 3, 0, "div", 66);
|
|
322
|
+
i0.ɵɵelementEnd();
|
|
323
|
+
} if (rf & 2) {
|
|
324
|
+
const group_r9 = ctx.$implicit;
|
|
325
|
+
i0.ɵɵadvance(3);
|
|
326
|
+
i0.ɵɵclassProp("expanded", group_r9.IsExpanded);
|
|
327
|
+
i0.ɵɵadvance();
|
|
328
|
+
i0.ɵɵclassMap(group_r9.EntityIcon);
|
|
329
|
+
i0.ɵɵadvance(2);
|
|
330
|
+
i0.ɵɵtextInterpolate(group_r9.EntityName);
|
|
331
|
+
i0.ɵɵadvance(2);
|
|
332
|
+
i0.ɵɵconditional(group_r9.AddedCount > 0 ? 8 : -1);
|
|
333
|
+
i0.ɵɵadvance();
|
|
334
|
+
i0.ɵɵconditional(group_r9.RemovedCount > 0 ? 9 : -1);
|
|
335
|
+
i0.ɵɵadvance();
|
|
336
|
+
i0.ɵɵconditional(group_r9.ModifiedCount > 0 ? 10 : -1);
|
|
337
|
+
i0.ɵɵadvance();
|
|
338
|
+
i0.ɵɵconditional(group_r9.IsExpanded ? 11 : -1);
|
|
339
|
+
} }
|
|
340
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
342
|
+
i0.ɵɵrepeaterCreate(1, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_For_2_Template, 12, 9, "div", 56, i0.ɵɵrepeaterTrackByIdentity);
|
|
343
|
+
i0.ɵɵelementEnd();
|
|
344
|
+
} if (rf & 2) {
|
|
345
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
346
|
+
i0.ɵɵadvance();
|
|
347
|
+
i0.ɵɵrepeater(ctx_r1.FilteredEntityGroups);
|
|
348
|
+
} }
|
|
349
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
350
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
351
|
+
i0.ɵɵelement(1, "i", 86);
|
|
352
|
+
i0.ɵɵelementStart(2, "h3");
|
|
353
|
+
i0.ɵɵtext(3, "No differences found");
|
|
354
|
+
i0.ɵɵelementEnd();
|
|
355
|
+
i0.ɵɵelementStart(4, "p");
|
|
356
|
+
i0.ɵɵtext(5, "The compared states are identical.");
|
|
357
|
+
i0.ɵɵelementEnd()();
|
|
358
|
+
} }
|
|
359
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
+
i0.ɵɵelementStart(0, "div", 26)(1, "div", 27);
|
|
361
|
+
i0.ɵɵelement(2, "i", 28);
|
|
362
|
+
i0.ɵɵelementStart(3, "span", 29);
|
|
363
|
+
i0.ɵɵtext(4);
|
|
364
|
+
i0.ɵɵelementEnd();
|
|
365
|
+
i0.ɵɵelementStart(5, "span", 30);
|
|
366
|
+
i0.ɵɵtext(6, "Added");
|
|
367
|
+
i0.ɵɵelementEnd()();
|
|
368
|
+
i0.ɵɵelementStart(7, "div", 31);
|
|
369
|
+
i0.ɵɵelement(8, "i", 32);
|
|
370
|
+
i0.ɵɵelementStart(9, "span", 29);
|
|
371
|
+
i0.ɵɵtext(10);
|
|
372
|
+
i0.ɵɵelementEnd();
|
|
373
|
+
i0.ɵɵelementStart(11, "span", 30);
|
|
374
|
+
i0.ɵɵtext(12, "Removed");
|
|
375
|
+
i0.ɵɵelementEnd()();
|
|
376
|
+
i0.ɵɵelementStart(13, "div", 33);
|
|
377
|
+
i0.ɵɵelement(14, "i", 34);
|
|
378
|
+
i0.ɵɵelementStart(15, "span", 29);
|
|
379
|
+
i0.ɵɵtext(16);
|
|
380
|
+
i0.ɵɵelementEnd();
|
|
381
|
+
i0.ɵɵelementStart(17, "span", 30);
|
|
382
|
+
i0.ɵɵtext(18, "Modified");
|
|
383
|
+
i0.ɵɵelementEnd()();
|
|
384
|
+
i0.ɵɵelementStart(19, "div", 35);
|
|
385
|
+
i0.ɵɵelement(20, "i", 36);
|
|
386
|
+
i0.ɵɵelementStart(21, "span", 29);
|
|
387
|
+
i0.ɵɵtext(22);
|
|
388
|
+
i0.ɵɵelementEnd();
|
|
389
|
+
i0.ɵɵelementStart(23, "span", 30);
|
|
390
|
+
i0.ɵɵtext(24, "Unchanged");
|
|
391
|
+
i0.ɵɵelementEnd()()();
|
|
392
|
+
i0.ɵɵconditionalCreate(25, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_25_Template, 23, 15, "div", 37);
|
|
393
|
+
i0.ɵɵconditionalCreate(26, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_26_Template, 3, 0, "div", 38);
|
|
394
|
+
i0.ɵɵconditionalCreate(27, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Conditional_27_Template, 6, 0, "div", 21);
|
|
395
|
+
} if (rf & 2) {
|
|
396
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
397
|
+
i0.ɵɵadvance(4);
|
|
398
|
+
i0.ɵɵtextInterpolate(ctx_r1.TotalAdded);
|
|
399
|
+
i0.ɵɵadvance(6);
|
|
400
|
+
i0.ɵɵtextInterpolate(ctx_r1.TotalRemoved);
|
|
401
|
+
i0.ɵɵadvance(6);
|
|
402
|
+
i0.ɵɵtextInterpolate(ctx_r1.TotalModified);
|
|
403
|
+
i0.ɵɵadvance(6);
|
|
404
|
+
i0.ɵɵtextInterpolate(ctx_r1.TotalUnchanged);
|
|
405
|
+
i0.ɵɵadvance(3);
|
|
406
|
+
i0.ɵɵconditional(ctx_r1.EntityGroups.length > 0 ? 25 : -1);
|
|
407
|
+
i0.ɵɵadvance();
|
|
408
|
+
i0.ɵɵconditional(ctx_r1.FilteredEntityGroups.length > 0 ? 26 : -1);
|
|
409
|
+
i0.ɵɵadvance();
|
|
410
|
+
i0.ɵɵconditional(ctx_r1.FilteredEntityGroups.length === 0 && ctx_r1.TotalChanges === 0 ? 27 : -1);
|
|
411
|
+
} }
|
|
412
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
413
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
414
|
+
i0.ɵɵelement(1, "i", 87);
|
|
415
|
+
i0.ɵɵelementStart(2, "h3");
|
|
416
|
+
i0.ɵɵtext(3, "Select labels to compare");
|
|
417
|
+
i0.ɵɵelementEnd();
|
|
418
|
+
i0.ɵɵelementStart(4, "p");
|
|
419
|
+
i0.ɵɵtext(5, "Choose a diff mode and select labels above, then click Compare.");
|
|
420
|
+
i0.ɵɵelementEnd()();
|
|
421
|
+
} }
|
|
422
|
+
function VersionHistoryDiffResourceComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
423
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
424
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "h2", 4);
|
|
425
|
+
i0.ɵɵtext(3, "Diff Viewer");
|
|
426
|
+
i0.ɵɵelementEnd();
|
|
427
|
+
i0.ɵɵelementStart(4, "p", 5);
|
|
428
|
+
i0.ɵɵtext(5, "Compare states between version labels or against current data");
|
|
429
|
+
i0.ɵɵelementEnd()()();
|
|
430
|
+
i0.ɵɵelementStart(6, "div", 6)(7, "div", 7)(8, "button", 8);
|
|
431
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiffModeChange("label-to-current")); });
|
|
432
|
+
i0.ɵɵelement(9, "i", 9);
|
|
433
|
+
i0.ɵɵtext(10, " Label vs Current ");
|
|
434
|
+
i0.ɵɵelementEnd();
|
|
435
|
+
i0.ɵɵelementStart(11, "button", 8);
|
|
436
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDiffModeChange("label-to-label")); });
|
|
437
|
+
i0.ɵɵelement(12, "i", 10);
|
|
438
|
+
i0.ɵɵtext(13, " Label vs Label ");
|
|
439
|
+
i0.ɵɵelementEnd()();
|
|
440
|
+
i0.ɵɵelementStart(14, "div", 11)(15, "div", 12)(16, "label", 13);
|
|
441
|
+
i0.ɵɵtext(17);
|
|
442
|
+
i0.ɵɵelementEnd();
|
|
443
|
+
i0.ɵɵelementStart(18, "select", 14);
|
|
444
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VersionHistoryDiffResourceComponent_Conditional_2_Template_select_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.FromLabelId, $event) || (ctx_r1.FromLabelId = $event); return i0.ɵɵresetView($event); });
|
|
445
|
+
i0.ɵɵelementStart(19, "option", 15);
|
|
446
|
+
i0.ɵɵtext(20, "Select a label...");
|
|
447
|
+
i0.ɵɵelementEnd();
|
|
448
|
+
i0.ɵɵrepeaterCreate(21, VersionHistoryDiffResourceComponent_Conditional_2_For_22_Template, 2, 2, "option", 16, i0.ɵɵrepeaterTrackByIdentity);
|
|
449
|
+
i0.ɵɵelementEnd()();
|
|
450
|
+
i0.ɵɵconditionalCreate(23, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_23_Template, 3, 0, "div", 17);
|
|
451
|
+
i0.ɵɵconditionalCreate(24, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_24_Template, 4, 0, "div", 17);
|
|
452
|
+
i0.ɵɵconditionalCreate(25, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_25_Template, 8, 1, "div", 12);
|
|
453
|
+
i0.ɵɵelementEnd();
|
|
454
|
+
i0.ɵɵelementStart(26, "button", 18);
|
|
455
|
+
i0.ɵɵlistener("click", function VersionHistoryDiffResourceComponent_Conditional_2_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.RunDiff()); });
|
|
456
|
+
i0.ɵɵconditionalCreate(27, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_27_Template, 1, 0, "i", 19);
|
|
457
|
+
i0.ɵɵconditionalCreate(28, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_28_Template, 1, 0, "i", 20);
|
|
458
|
+
i0.ɵɵelementStart(29, "span");
|
|
459
|
+
i0.ɵɵtext(30);
|
|
460
|
+
i0.ɵɵelementEnd()()();
|
|
461
|
+
i0.ɵɵconditionalCreate(31, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_31_Template, 28, 7);
|
|
462
|
+
i0.ɵɵconditionalCreate(32, VersionHistoryDiffResourceComponent_Conditional_2_Conditional_32_Template, 6, 0, "div", 21);
|
|
463
|
+
} if (rf & 2) {
|
|
464
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
465
|
+
i0.ɵɵadvance(8);
|
|
466
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffMode === "label-to-current");
|
|
467
|
+
i0.ɵɵadvance(3);
|
|
468
|
+
i0.ɵɵclassProp("active", ctx_r1.DiffMode === "label-to-label");
|
|
469
|
+
i0.ɵɵadvance(6);
|
|
470
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DiffMode === "label-to-current" ? "Compare label" : "From label", " ");
|
|
471
|
+
i0.ɵɵadvance();
|
|
472
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.FromLabelId);
|
|
473
|
+
i0.ɵɵadvance(3);
|
|
474
|
+
i0.ɵɵrepeater(ctx_r1.FilteredFromLabels);
|
|
475
|
+
i0.ɵɵadvance(2);
|
|
476
|
+
i0.ɵɵconditional(ctx_r1.DiffMode === "label-to-label" ? 23 : -1);
|
|
477
|
+
i0.ɵɵadvance();
|
|
478
|
+
i0.ɵɵconditional(ctx_r1.DiffMode === "label-to-current" ? 24 : -1);
|
|
479
|
+
i0.ɵɵadvance();
|
|
480
|
+
i0.ɵɵconditional(ctx_r1.DiffMode === "label-to-label" ? 25 : -1);
|
|
481
|
+
i0.ɵɵadvance();
|
|
482
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanRunDiff || ctx_r1.IsDiffLoading);
|
|
483
|
+
i0.ɵɵadvance();
|
|
484
|
+
i0.ɵɵconditional(!ctx_r1.IsDiffLoading ? 27 : -1);
|
|
485
|
+
i0.ɵɵadvance();
|
|
486
|
+
i0.ɵɵconditional(ctx_r1.IsDiffLoading ? 28 : -1);
|
|
487
|
+
i0.ɵɵadvance(2);
|
|
488
|
+
i0.ɵɵtextInterpolate(ctx_r1.IsDiffLoading ? "Comparing..." : "Compare");
|
|
489
|
+
i0.ɵɵadvance();
|
|
490
|
+
i0.ɵɵconditional(ctx_r1.HasDiffResult ? 31 : -1);
|
|
491
|
+
i0.ɵɵadvance();
|
|
492
|
+
i0.ɵɵconditional(!ctx_r1.HasDiffResult && !ctx_r1.IsDiffLoading ? 32 : -1);
|
|
493
|
+
} }
|
|
494
|
+
let VersionHistoryDiffResourceComponent = class VersionHistoryDiffResourceComponent extends BaseResourceComponent {
|
|
495
|
+
static { VersionHistoryDiffResourceComponent_1 = this; }
|
|
496
|
+
cdr;
|
|
497
|
+
navigationService;
|
|
498
|
+
IsLoading = true;
|
|
499
|
+
IsDiffLoading = false;
|
|
500
|
+
HasDiffResult = false;
|
|
501
|
+
// Label selection
|
|
502
|
+
AvailableLabels = [];
|
|
503
|
+
FromLabelId = '';
|
|
504
|
+
ToLabelId = '';
|
|
505
|
+
DiffMode = 'label-to-current';
|
|
506
|
+
// Diff results
|
|
507
|
+
EntityGroups = [];
|
|
508
|
+
FilteredEntityGroups = [];
|
|
509
|
+
TotalAdded = 0;
|
|
510
|
+
TotalRemoved = 0;
|
|
511
|
+
TotalModified = 0;
|
|
512
|
+
TotalUnchanged = 0;
|
|
513
|
+
// Diff result filtering/sorting
|
|
514
|
+
DiffSortBy = 'count';
|
|
515
|
+
DiffSortDir = 'desc';
|
|
516
|
+
DiffFilterType = 'all';
|
|
517
|
+
DiffSearch = '';
|
|
518
|
+
// UI state
|
|
519
|
+
ExpandedEntities = new Set();
|
|
520
|
+
static PREFS_KEY = 'VersionHistory.Diff.UserPreferences';
|
|
521
|
+
preferencesLoaded = false;
|
|
522
|
+
destroy$ = new Subject();
|
|
523
|
+
metadata = new Metadata();
|
|
524
|
+
constructor(cdr, navigationService) {
|
|
525
|
+
super();
|
|
526
|
+
this.cdr = cdr;
|
|
527
|
+
this.navigationService = navigationService;
|
|
528
|
+
}
|
|
529
|
+
ngOnInit() {
|
|
530
|
+
this.loadUserPreferences();
|
|
531
|
+
this.LoadLabels();
|
|
532
|
+
}
|
|
533
|
+
ngOnDestroy() {
|
|
534
|
+
this.destroy$.next();
|
|
535
|
+
this.destroy$.complete();
|
|
536
|
+
}
|
|
537
|
+
async GetResourceDisplayName(data) {
|
|
538
|
+
return 'Diff Viewer';
|
|
539
|
+
}
|
|
540
|
+
async GetResourceIconClass(data) {
|
|
541
|
+
return 'fa-solid fa-code-compare';
|
|
542
|
+
}
|
|
543
|
+
async LoadLabels() {
|
|
544
|
+
try {
|
|
545
|
+
this.IsLoading = true;
|
|
546
|
+
this.cdr.markForCheck();
|
|
547
|
+
const rv = new RunView();
|
|
548
|
+
const result = await rv.RunView({
|
|
549
|
+
EntityName: 'MJ: Version Labels',
|
|
550
|
+
ExtraFilter: "Status = 'Active'",
|
|
551
|
+
OrderBy: '__mj_CreatedAt DESC',
|
|
552
|
+
MaxRows: 200,
|
|
553
|
+
ResultType: 'simple'
|
|
554
|
+
});
|
|
555
|
+
if (result.Success) {
|
|
556
|
+
this.AvailableLabels = result.Results;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
catch (error) {
|
|
560
|
+
console.error('Error loading labels for diff:', error);
|
|
561
|
+
}
|
|
562
|
+
finally {
|
|
563
|
+
this.IsLoading = false;
|
|
564
|
+
this.NotifyLoadComplete();
|
|
565
|
+
this.cdr.markForCheck();
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
OnDiffModeChange(mode) {
|
|
569
|
+
this.DiffMode = mode;
|
|
570
|
+
this.HasDiffResult = false;
|
|
571
|
+
this.EntityGroups = [];
|
|
572
|
+
this.cdr.markForCheck();
|
|
573
|
+
this.persistPreferences();
|
|
574
|
+
}
|
|
575
|
+
loadUserPreferences() {
|
|
576
|
+
try {
|
|
577
|
+
const raw = UserInfoEngine.Instance.GetSetting(VersionHistoryDiffResourceComponent_1.PREFS_KEY);
|
|
578
|
+
if (raw) {
|
|
579
|
+
const prefs = JSON.parse(raw);
|
|
580
|
+
if (prefs.DiffMode === 'label-to-label' || prefs.DiffMode === 'label-to-current') {
|
|
581
|
+
this.DiffMode = prefs.DiffMode;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
catch (error) {
|
|
586
|
+
console.error('Error loading diff preferences:', error);
|
|
587
|
+
this.DiffMode = 'label-to-current';
|
|
588
|
+
}
|
|
589
|
+
this.preferencesLoaded = true;
|
|
590
|
+
}
|
|
591
|
+
persistPreferences() {
|
|
592
|
+
if (!this.preferencesLoaded)
|
|
593
|
+
return;
|
|
594
|
+
const prefs = {
|
|
595
|
+
DiffMode: this.DiffMode
|
|
596
|
+
};
|
|
597
|
+
UserInfoEngine.Instance.SetSettingDebounced(VersionHistoryDiffResourceComponent_1.PREFS_KEY, JSON.stringify(prefs));
|
|
598
|
+
}
|
|
599
|
+
async RunDiff() {
|
|
600
|
+
if (!this.FromLabelId)
|
|
601
|
+
return;
|
|
602
|
+
if (this.DiffMode === 'label-to-label' && !this.ToLabelId)
|
|
603
|
+
return;
|
|
604
|
+
try {
|
|
605
|
+
this.IsDiffLoading = true;
|
|
606
|
+
this.HasDiffResult = false;
|
|
607
|
+
this.cdr.markForCheck();
|
|
608
|
+
// Load label items for comparison
|
|
609
|
+
const rv = new RunView();
|
|
610
|
+
const fromItems = await this.loadLabelItems(rv, this.FromLabelId);
|
|
611
|
+
if (this.DiffMode === 'label-to-label') {
|
|
612
|
+
const toItems = await this.loadLabelItems(rv, this.ToLabelId);
|
|
613
|
+
this.computeDiff(fromItems, toItems);
|
|
614
|
+
}
|
|
615
|
+
else {
|
|
616
|
+
// Label-to-current: compare label state against live data
|
|
617
|
+
await this.computeDiffToCurrentState(rv, fromItems);
|
|
618
|
+
}
|
|
619
|
+
this.HasDiffResult = true;
|
|
620
|
+
}
|
|
621
|
+
catch (error) {
|
|
622
|
+
console.error('Error running diff:', error);
|
|
623
|
+
}
|
|
624
|
+
finally {
|
|
625
|
+
this.IsDiffLoading = false;
|
|
626
|
+
this.cdr.markForCheck();
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
async loadLabelItems(rv, labelId) {
|
|
630
|
+
const result = await rv.RunView({
|
|
631
|
+
EntityName: 'MJ: Version Label Items',
|
|
632
|
+
ExtraFilter: `VersionLabelID = '${labelId}'`,
|
|
633
|
+
ResultType: 'simple'
|
|
634
|
+
});
|
|
635
|
+
return result.Success ? result.Results : [];
|
|
636
|
+
}
|
|
637
|
+
computeDiff(fromItems, toItems) {
|
|
638
|
+
const entityMap = new Map();
|
|
639
|
+
// Build lookup maps keyed by EntityID + RecordID
|
|
640
|
+
const fromMap = this.buildItemKeyMap(fromItems);
|
|
641
|
+
const toMap = this.buildItemKeyMap(toItems);
|
|
642
|
+
// Items in 'to' but not in 'from' = Added
|
|
643
|
+
for (const [key, item] of toMap) {
|
|
644
|
+
const entityName = this.resolveEntityName(item.EntityID ?? '');
|
|
645
|
+
if (!entityMap.has(entityName))
|
|
646
|
+
entityMap.set(entityName, []);
|
|
647
|
+
if (!fromMap.has(key)) {
|
|
648
|
+
entityMap.get(entityName).push({
|
|
649
|
+
EntityName: entityName,
|
|
650
|
+
EntityID: item.EntityID ?? '',
|
|
651
|
+
RecordID: item.RecordID ?? '',
|
|
652
|
+
DisplayName: '',
|
|
653
|
+
ChangeType: 'Added',
|
|
654
|
+
FieldChanges: [],
|
|
655
|
+
IsExpanded: false,
|
|
656
|
+
IsLoadingFields: false,
|
|
657
|
+
FieldsLoaded: false,
|
|
658
|
+
FromRecordChangeID: '',
|
|
659
|
+
ToRecordChangeID: item.RecordChangeID ?? ''
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
// Items in 'from' but not in 'to' = Removed
|
|
664
|
+
for (const [key, item] of fromMap) {
|
|
665
|
+
const entityName = this.resolveEntityName(item.EntityID ?? '');
|
|
666
|
+
if (!entityMap.has(entityName))
|
|
667
|
+
entityMap.set(entityName, []);
|
|
668
|
+
if (!toMap.has(key)) {
|
|
669
|
+
entityMap.get(entityName).push({
|
|
670
|
+
EntityName: entityName,
|
|
671
|
+
EntityID: item.EntityID ?? '',
|
|
672
|
+
RecordID: item.RecordID ?? '',
|
|
673
|
+
DisplayName: '',
|
|
674
|
+
ChangeType: 'Removed',
|
|
675
|
+
FieldChanges: [],
|
|
676
|
+
IsExpanded: false,
|
|
677
|
+
IsLoadingFields: false,
|
|
678
|
+
FieldsLoaded: false,
|
|
679
|
+
FromRecordChangeID: item.RecordChangeID ?? '',
|
|
680
|
+
ToRecordChangeID: ''
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
else {
|
|
684
|
+
// Both exist - check if RecordChangeID differs (= Modified)
|
|
685
|
+
const toItem = toMap.get(key);
|
|
686
|
+
const changeType = item.RecordChangeID !== toItem.RecordChangeID
|
|
687
|
+
? 'Modified' : 'Unchanged';
|
|
688
|
+
entityMap.get(entityName).push({
|
|
689
|
+
EntityName: entityName,
|
|
690
|
+
EntityID: item.EntityID ?? '',
|
|
691
|
+
RecordID: item.RecordID ?? '',
|
|
692
|
+
DisplayName: '',
|
|
693
|
+
ChangeType: changeType,
|
|
694
|
+
FieldChanges: [],
|
|
695
|
+
IsExpanded: false,
|
|
696
|
+
IsLoadingFields: false,
|
|
697
|
+
FieldsLoaded: false,
|
|
698
|
+
FromRecordChangeID: item.RecordChangeID ?? '',
|
|
699
|
+
ToRecordChangeID: toItem.RecordChangeID ?? ''
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
this.buildEntityGroups(entityMap);
|
|
704
|
+
}
|
|
705
|
+
async computeDiffToCurrentState(rv, labelItems) {
|
|
706
|
+
// For label-to-current, compare snapshot RecordChangeIDs against
|
|
707
|
+
// the latest RecordChange for each entity/record combination.
|
|
708
|
+
const entityMap = new Map();
|
|
709
|
+
for (const item of labelItems) {
|
|
710
|
+
const entityId = item.EntityID ?? '';
|
|
711
|
+
const entityName = this.resolveEntityName(entityId);
|
|
712
|
+
if (!entityMap.has(entityName))
|
|
713
|
+
entityMap.set(entityName, []);
|
|
714
|
+
// Load the latest RecordChange for this record
|
|
715
|
+
const latestChangeId = await this.loadLatestRecordChange(rv, entityId, item.RecordID ?? '');
|
|
716
|
+
const isModified = latestChangeId != null && latestChangeId !== item.RecordChangeID;
|
|
717
|
+
entityMap.get(entityName).push({
|
|
718
|
+
EntityName: entityName,
|
|
719
|
+
EntityID: entityId,
|
|
720
|
+
RecordID: item.RecordID ?? '',
|
|
721
|
+
DisplayName: '',
|
|
722
|
+
ChangeType: isModified ? 'Modified' : 'Unchanged',
|
|
723
|
+
FieldChanges: [],
|
|
724
|
+
IsExpanded: false,
|
|
725
|
+
IsLoadingFields: false,
|
|
726
|
+
FieldsLoaded: false,
|
|
727
|
+
FromRecordChangeID: item.RecordChangeID ?? '',
|
|
728
|
+
ToRecordChangeID: latestChangeId ?? ''
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
this.buildEntityGroups(entityMap);
|
|
732
|
+
}
|
|
733
|
+
buildItemKeyMap(items) {
|
|
734
|
+
const map = new Map();
|
|
735
|
+
for (const item of items) {
|
|
736
|
+
const key = `${item.EntityID ?? ''}|${item.RecordID ?? ''}`;
|
|
737
|
+
map.set(key, item);
|
|
738
|
+
}
|
|
739
|
+
return map;
|
|
740
|
+
}
|
|
741
|
+
buildEntityGroups(entityMap) {
|
|
742
|
+
this.TotalAdded = 0;
|
|
743
|
+
this.TotalRemoved = 0;
|
|
744
|
+
this.TotalModified = 0;
|
|
745
|
+
this.TotalUnchanged = 0;
|
|
746
|
+
this.EntityGroups = Array.from(entityMap.entries()).map(([entityName, items]) => {
|
|
747
|
+
const added = items.filter(i => i.ChangeType === 'Added').length;
|
|
748
|
+
const removed = items.filter(i => i.ChangeType === 'Removed').length;
|
|
749
|
+
const modified = items.filter(i => i.ChangeType === 'Modified').length;
|
|
750
|
+
this.TotalAdded += added;
|
|
751
|
+
this.TotalRemoved += removed;
|
|
752
|
+
this.TotalModified += modified;
|
|
753
|
+
this.TotalUnchanged += items.filter(i => i.ChangeType === 'Unchanged').length;
|
|
754
|
+
// Resolve entity icon from first item's EntityID
|
|
755
|
+
const firstItem = items[0];
|
|
756
|
+
const entityIcon = this.resolveEntityIcon(firstItem?.EntityID ?? '');
|
|
757
|
+
return {
|
|
758
|
+
EntityName: entityName,
|
|
759
|
+
EntityIcon: entityIcon,
|
|
760
|
+
Items: items.filter(i => i.ChangeType !== 'Unchanged'),
|
|
761
|
+
AddedCount: added,
|
|
762
|
+
RemovedCount: removed,
|
|
763
|
+
ModifiedCount: modified,
|
|
764
|
+
IsExpanded: false,
|
|
765
|
+
NamesLoaded: false,
|
|
766
|
+
IsLoadingNames: false
|
|
767
|
+
};
|
|
768
|
+
}).filter(g => g.Items.length > 0)
|
|
769
|
+
.sort((a, b) => b.Items.length - a.Items.length);
|
|
770
|
+
this.ExpandedEntities.clear();
|
|
771
|
+
this.applySortAndFilterDiff();
|
|
772
|
+
}
|
|
773
|
+
resolveEntityName(entityId) {
|
|
774
|
+
if (!entityId)
|
|
775
|
+
return 'Unknown';
|
|
776
|
+
const entity = this.metadata.Entities.find(e => e.ID === entityId);
|
|
777
|
+
return entity ? entity.Name : 'Unknown';
|
|
778
|
+
}
|
|
779
|
+
resolveEntityIcon(entityId) {
|
|
780
|
+
if (!entityId)
|
|
781
|
+
return 'fa-solid fa-table';
|
|
782
|
+
const entity = this.metadata.Entities.find(e => e.ID === entityId);
|
|
783
|
+
return entity?.Icon || 'fa-solid fa-table';
|
|
784
|
+
}
|
|
785
|
+
// =========================================================================
|
|
786
|
+
// Expand / Collapse
|
|
787
|
+
// =========================================================================
|
|
788
|
+
ToggleEntityGroup(group) {
|
|
789
|
+
group.IsExpanded = !group.IsExpanded;
|
|
790
|
+
if (group.IsExpanded) {
|
|
791
|
+
this.ExpandedEntities.add(group.EntityName);
|
|
792
|
+
// Auto-expand all Modified items so field details show immediately
|
|
793
|
+
for (const item of group.Items) {
|
|
794
|
+
if (item.ChangeType === 'Modified') {
|
|
795
|
+
item.IsExpanded = true;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
// Auto-load field changes for modified items when group opens
|
|
799
|
+
this.loadFieldChangesForGroup(group);
|
|
800
|
+
// Load record display names
|
|
801
|
+
if (!group.NamesLoaded && !group.IsLoadingNames) {
|
|
802
|
+
this.loadGroupRecordNames(group);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
else {
|
|
806
|
+
this.ExpandedEntities.delete(group.EntityName);
|
|
807
|
+
}
|
|
808
|
+
this.cdr.markForCheck();
|
|
809
|
+
}
|
|
810
|
+
ToggleItem(item) {
|
|
811
|
+
if (item.ChangeType !== 'Modified')
|
|
812
|
+
return;
|
|
813
|
+
item.IsExpanded = !item.IsExpanded;
|
|
814
|
+
if (item.IsExpanded && !item.FieldsLoaded) {
|
|
815
|
+
this.loadFieldChangesForItem(item);
|
|
816
|
+
}
|
|
817
|
+
this.cdr.markForCheck();
|
|
818
|
+
}
|
|
819
|
+
ExpandAllGroups() {
|
|
820
|
+
for (const group of this.FilteredEntityGroups) {
|
|
821
|
+
group.IsExpanded = true;
|
|
822
|
+
this.ExpandedEntities.add(group.EntityName);
|
|
823
|
+
this.loadFieldChangesForGroup(group);
|
|
824
|
+
for (const item of group.Items) {
|
|
825
|
+
if (item.ChangeType === 'Modified') {
|
|
826
|
+
item.IsExpanded = true;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
if (!group.NamesLoaded && !group.IsLoadingNames) {
|
|
830
|
+
this.loadGroupRecordNames(group);
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
this.cdr.markForCheck();
|
|
834
|
+
}
|
|
835
|
+
CollapseAllGroups() {
|
|
836
|
+
for (const group of this.FilteredEntityGroups) {
|
|
837
|
+
group.IsExpanded = false;
|
|
838
|
+
this.ExpandedEntities.delete(group.EntityName);
|
|
839
|
+
for (const item of group.Items) {
|
|
840
|
+
item.IsExpanded = false;
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
this.cdr.markForCheck();
|
|
844
|
+
}
|
|
845
|
+
IsEntityExpanded(entityName) {
|
|
846
|
+
return this.ExpandedEntities.has(entityName);
|
|
847
|
+
}
|
|
848
|
+
/** Open a record in the explorer via NavigationService. */
|
|
849
|
+
OnOpenRecord(item) {
|
|
850
|
+
const rawId = this.extractRawRecordId(item.RecordID);
|
|
851
|
+
const pkey = new CompositeKey([{ FieldName: 'ID', Value: rawId }]);
|
|
852
|
+
this.navigationService.OpenEntityRecord(item.EntityName, pkey);
|
|
853
|
+
}
|
|
854
|
+
// =========================================================================
|
|
855
|
+
// Record name resolution
|
|
856
|
+
// =========================================================================
|
|
857
|
+
/** Lazy-load record display names for a group using Metadata.GetEntityRecordNames. */
|
|
858
|
+
async loadGroupRecordNames(group) {
|
|
859
|
+
group.IsLoadingNames = true;
|
|
860
|
+
this.cdr.markForCheck();
|
|
861
|
+
try {
|
|
862
|
+
const inputs = group.Items.map(item => {
|
|
863
|
+
const rawId = this.extractRawRecordId(item.RecordID);
|
|
864
|
+
const input = new EntityRecordNameInput();
|
|
865
|
+
input.EntityName = group.EntityName;
|
|
866
|
+
input.CompositeKey = new CompositeKey([{ FieldName: 'ID', Value: rawId }]);
|
|
867
|
+
return input;
|
|
868
|
+
});
|
|
869
|
+
const results = await this.metadata.GetEntityRecordNames(inputs);
|
|
870
|
+
for (const result of results) {
|
|
871
|
+
if (result.Success && result.RecordName) {
|
|
872
|
+
const resultId = result.CompositeKey?.KeyValuePairs?.[0]?.Value;
|
|
873
|
+
if (resultId) {
|
|
874
|
+
const item = group.Items.find(i => this.extractRawRecordId(i.RecordID) === String(resultId));
|
|
875
|
+
if (item) {
|
|
876
|
+
item.DisplayName = result.RecordName;
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
catch (e) {
|
|
883
|
+
console.error('Error loading record names for group:', group.EntityName, e);
|
|
884
|
+
}
|
|
885
|
+
finally {
|
|
886
|
+
group.IsLoadingNames = false;
|
|
887
|
+
group.NamesLoaded = true;
|
|
888
|
+
this.cdr.markForCheck();
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
/** Extract the raw UUID from a RecordID that may be in "ID|<uuid>" format. */
|
|
892
|
+
extractRawRecordId(recordId) {
|
|
893
|
+
if (!recordId)
|
|
894
|
+
return '';
|
|
895
|
+
const parts = recordId.split('||');
|
|
896
|
+
if (parts.length === 1) {
|
|
897
|
+
const singleParts = recordId.split('|');
|
|
898
|
+
if (singleParts.length === 2) {
|
|
899
|
+
return singleParts[1];
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
return recordId;
|
|
903
|
+
}
|
|
904
|
+
// =========================================================================
|
|
905
|
+
// Field-level diff loading
|
|
906
|
+
// =========================================================================
|
|
907
|
+
/** Auto-load field changes for all modified items in a group (when first expanded). */
|
|
908
|
+
loadFieldChangesForGroup(group) {
|
|
909
|
+
for (const item of group.Items) {
|
|
910
|
+
if (item.ChangeType === 'Modified' && !item.FieldsLoaded && !item.IsLoadingFields) {
|
|
911
|
+
this.loadFieldChangesForItem(item);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
/** Lazy-load field-level changes for a single modified item. */
|
|
916
|
+
async loadFieldChangesForItem(item) {
|
|
917
|
+
if (!item.FromRecordChangeID || !item.ToRecordChangeID) {
|
|
918
|
+
item.FieldsLoaded = true;
|
|
919
|
+
return;
|
|
920
|
+
}
|
|
921
|
+
item.IsLoadingFields = true;
|
|
922
|
+
this.cdr.markForCheck();
|
|
923
|
+
try {
|
|
924
|
+
item.FieldChanges = await this.computeFieldChanges(item.FromRecordChangeID, item.ToRecordChangeID);
|
|
925
|
+
}
|
|
926
|
+
catch (e) {
|
|
927
|
+
console.error('Error loading field changes:', e);
|
|
928
|
+
}
|
|
929
|
+
finally {
|
|
930
|
+
item.IsLoadingFields = false;
|
|
931
|
+
item.FieldsLoaded = true;
|
|
932
|
+
this.cdr.markForCheck();
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
async loadLatestRecordChange(rv, entityId, recordId) {
|
|
936
|
+
if (!entityId || !recordId)
|
|
937
|
+
return null;
|
|
938
|
+
const result = await rv.RunView({
|
|
939
|
+
EntityName: 'Record Changes',
|
|
940
|
+
ExtraFilter: `EntityID = '${entityId}' AND RecordID = '${recordId}'`,
|
|
941
|
+
OrderBy: 'ChangedAt DESC',
|
|
942
|
+
MaxRows: 1,
|
|
943
|
+
Fields: ['ID'],
|
|
944
|
+
ResultType: 'simple'
|
|
945
|
+
});
|
|
946
|
+
if (result.Success && result.Results.length > 0) {
|
|
947
|
+
return result.Results[0].ID;
|
|
948
|
+
}
|
|
949
|
+
return null;
|
|
950
|
+
}
|
|
951
|
+
async computeFieldChanges(oldChangeId, newChangeId) {
|
|
952
|
+
if (!oldChangeId || !newChangeId)
|
|
953
|
+
return [];
|
|
954
|
+
try {
|
|
955
|
+
const rv = new RunView();
|
|
956
|
+
const [oldResult, newResult] = await rv.RunViews([
|
|
957
|
+
{
|
|
958
|
+
EntityName: 'Record Changes',
|
|
959
|
+
ExtraFilter: `ID = '${oldChangeId}'`,
|
|
960
|
+
Fields: ['FullRecordJSON'],
|
|
961
|
+
ResultType: 'simple'
|
|
962
|
+
},
|
|
963
|
+
{
|
|
964
|
+
EntityName: 'Record Changes',
|
|
965
|
+
ExtraFilter: `ID = '${newChangeId}'`,
|
|
966
|
+
Fields: ['FullRecordJSON'],
|
|
967
|
+
ResultType: 'simple'
|
|
968
|
+
}
|
|
969
|
+
]);
|
|
970
|
+
if (!oldResult.Success || !newResult.Success)
|
|
971
|
+
return [];
|
|
972
|
+
if (oldResult.Results.length === 0 || newResult.Results.length === 0)
|
|
973
|
+
return [];
|
|
974
|
+
const oldRow = oldResult.Results[0];
|
|
975
|
+
const newRow = newResult.Results[0];
|
|
976
|
+
return this.diffRecordJson(oldRow.FullRecordJSON, newRow.FullRecordJSON);
|
|
977
|
+
}
|
|
978
|
+
catch {
|
|
979
|
+
return [];
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
diffRecordJson(oldJson, newJson) {
|
|
983
|
+
const changes = [];
|
|
984
|
+
try {
|
|
985
|
+
const oldData = JSON.parse(oldJson || '{}');
|
|
986
|
+
const newData = JSON.parse(newJson || '{}');
|
|
987
|
+
const allKeys = new Set([...Object.keys(oldData), ...Object.keys(newData)]);
|
|
988
|
+
for (const key of allKeys) {
|
|
989
|
+
if (key.startsWith('__mj_'))
|
|
990
|
+
continue;
|
|
991
|
+
const oldVal = oldData[key];
|
|
992
|
+
const newVal = newData[key];
|
|
993
|
+
if (oldVal === undefined && newVal !== undefined) {
|
|
994
|
+
changes.push({ FieldName: key, OldValue: '', NewValue: this.formatFieldValue(newVal), ChangeType: 'Added' });
|
|
995
|
+
}
|
|
996
|
+
else if (oldVal !== undefined && newVal === undefined) {
|
|
997
|
+
changes.push({ FieldName: key, OldValue: this.formatFieldValue(oldVal), NewValue: '', ChangeType: 'Removed' });
|
|
998
|
+
}
|
|
999
|
+
else if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {
|
|
1000
|
+
changes.push({ FieldName: key, OldValue: this.formatFieldValue(oldVal), NewValue: this.formatFieldValue(newVal), ChangeType: 'Modified' });
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
catch {
|
|
1005
|
+
// Invalid JSON - skip
|
|
1006
|
+
}
|
|
1007
|
+
return changes;
|
|
1008
|
+
}
|
|
1009
|
+
formatFieldValue(value) {
|
|
1010
|
+
if (value == null)
|
|
1011
|
+
return 'null';
|
|
1012
|
+
if (typeof value === 'object')
|
|
1013
|
+
return JSON.stringify(value);
|
|
1014
|
+
return String(value);
|
|
1015
|
+
}
|
|
1016
|
+
// =========================================================================
|
|
1017
|
+
// Display helpers
|
|
1018
|
+
// =========================================================================
|
|
1019
|
+
GetChangeTypeClass(changeType) {
|
|
1020
|
+
const classes = {
|
|
1021
|
+
'Added': 'change-added',
|
|
1022
|
+
'Removed': 'change-removed',
|
|
1023
|
+
'Modified': 'change-modified',
|
|
1024
|
+
'Unchanged': 'change-unchanged'
|
|
1025
|
+
};
|
|
1026
|
+
return classes[changeType] ?? '';
|
|
1027
|
+
}
|
|
1028
|
+
GetChangeTypeIcon(changeType) {
|
|
1029
|
+
const icons = {
|
|
1030
|
+
'Added': 'fa-solid fa-plus',
|
|
1031
|
+
'Removed': 'fa-solid fa-minus',
|
|
1032
|
+
'Modified': 'fa-solid fa-pen',
|
|
1033
|
+
'Unchanged': 'fa-solid fa-equals'
|
|
1034
|
+
};
|
|
1035
|
+
return icons[changeType] ?? 'fa-solid fa-circle';
|
|
1036
|
+
}
|
|
1037
|
+
FormatRecordID(recordId) {
|
|
1038
|
+
return this.extractRawRecordId(recordId);
|
|
1039
|
+
}
|
|
1040
|
+
FormatLabelOption(label) {
|
|
1041
|
+
const dateVal = label.__mj_CreatedAt;
|
|
1042
|
+
const date = dateVal instanceof Date
|
|
1043
|
+
? dateVal.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })
|
|
1044
|
+
: new Date(dateVal).toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
|
|
1045
|
+
return `${label.Name} (${label.Scope}, ${date})`;
|
|
1046
|
+
}
|
|
1047
|
+
Refresh() {
|
|
1048
|
+
this.LoadLabels();
|
|
1049
|
+
}
|
|
1050
|
+
get CanRunDiff() {
|
|
1051
|
+
if (!this.FromLabelId)
|
|
1052
|
+
return false;
|
|
1053
|
+
if (this.DiffMode === 'label-to-label' && !this.ToLabelId)
|
|
1054
|
+
return false;
|
|
1055
|
+
return true;
|
|
1056
|
+
}
|
|
1057
|
+
get TotalChanges() {
|
|
1058
|
+
return this.TotalAdded + this.TotalRemoved + this.TotalModified;
|
|
1059
|
+
}
|
|
1060
|
+
// =========================================================================
|
|
1061
|
+
// Label selection helpers
|
|
1062
|
+
// =========================================================================
|
|
1063
|
+
/** From dropdown excludes the currently selected To label. */
|
|
1064
|
+
get FilteredFromLabels() {
|
|
1065
|
+
if (!this.ToLabelId)
|
|
1066
|
+
return this.AvailableLabels;
|
|
1067
|
+
return this.AvailableLabels.filter(l => l.ID !== this.ToLabelId);
|
|
1068
|
+
}
|
|
1069
|
+
/** To dropdown excludes the currently selected From label. */
|
|
1070
|
+
get FilteredToLabels() {
|
|
1071
|
+
if (!this.FromLabelId)
|
|
1072
|
+
return this.AvailableLabels;
|
|
1073
|
+
return this.AvailableLabels.filter(l => l.ID !== this.FromLabelId);
|
|
1074
|
+
}
|
|
1075
|
+
/** Swap From and To label selections. */
|
|
1076
|
+
SwapLabels() {
|
|
1077
|
+
const temp = this.FromLabelId;
|
|
1078
|
+
this.FromLabelId = this.ToLabelId;
|
|
1079
|
+
this.ToLabelId = temp;
|
|
1080
|
+
this.cdr.markForCheck();
|
|
1081
|
+
}
|
|
1082
|
+
// =========================================================================
|
|
1083
|
+
// Diff result sorting & filtering
|
|
1084
|
+
// =========================================================================
|
|
1085
|
+
OnDiffSortChange(sortBy) {
|
|
1086
|
+
if (this.DiffSortBy === sortBy) {
|
|
1087
|
+
this.DiffSortDir = this.DiffSortDir === 'asc' ? 'desc' : 'asc';
|
|
1088
|
+
}
|
|
1089
|
+
else {
|
|
1090
|
+
this.DiffSortBy = sortBy;
|
|
1091
|
+
this.DiffSortDir = sortBy === 'name' ? 'asc' : 'desc';
|
|
1092
|
+
}
|
|
1093
|
+
this.applySortAndFilterDiff();
|
|
1094
|
+
this.cdr.markForCheck();
|
|
1095
|
+
}
|
|
1096
|
+
OnDiffFilterChange(filterType) {
|
|
1097
|
+
this.DiffFilterType = filterType;
|
|
1098
|
+
this.applySortAndFilterDiff();
|
|
1099
|
+
this.cdr.markForCheck();
|
|
1100
|
+
}
|
|
1101
|
+
OnDiffSearchChange(text) {
|
|
1102
|
+
this.DiffSearch = text;
|
|
1103
|
+
this.applySortAndFilterDiff();
|
|
1104
|
+
this.cdr.markForCheck();
|
|
1105
|
+
}
|
|
1106
|
+
applySortAndFilterDiff() {
|
|
1107
|
+
let groups = [...this.EntityGroups];
|
|
1108
|
+
// Filter by change type
|
|
1109
|
+
if (this.DiffFilterType !== 'all') {
|
|
1110
|
+
groups = groups.map(g => ({
|
|
1111
|
+
...g,
|
|
1112
|
+
Items: g.Items.filter(i => i.ChangeType.toLowerCase() === this.DiffFilterType)
|
|
1113
|
+
})).filter(g => g.Items.length > 0);
|
|
1114
|
+
}
|
|
1115
|
+
// Filter by search text
|
|
1116
|
+
if (this.DiffSearch) {
|
|
1117
|
+
const search = this.DiffSearch.toLowerCase();
|
|
1118
|
+
groups = groups
|
|
1119
|
+
.filter(g => g.EntityName.toLowerCase().includes(search) ||
|
|
1120
|
+
g.Items.some(i => i.RecordID.toLowerCase().includes(search) || i.DisplayName.toLowerCase().includes(search)))
|
|
1121
|
+
.map(g => ({
|
|
1122
|
+
...g,
|
|
1123
|
+
Items: g.Items.filter(i => i.RecordID.toLowerCase().includes(search) ||
|
|
1124
|
+
i.DisplayName.toLowerCase().includes(search) ||
|
|
1125
|
+
g.EntityName.toLowerCase().includes(search))
|
|
1126
|
+
}))
|
|
1127
|
+
.filter(g => g.Items.length > 0);
|
|
1128
|
+
}
|
|
1129
|
+
// Sort
|
|
1130
|
+
groups.sort((a, b) => {
|
|
1131
|
+
if (this.DiffSortBy === 'name') {
|
|
1132
|
+
const cmp = a.EntityName.localeCompare(b.EntityName);
|
|
1133
|
+
return this.DiffSortDir === 'asc' ? cmp : -cmp;
|
|
1134
|
+
}
|
|
1135
|
+
const cmp = a.Items.length - b.Items.length;
|
|
1136
|
+
return this.DiffSortDir === 'asc' ? cmp : -cmp;
|
|
1137
|
+
});
|
|
1138
|
+
this.FilteredEntityGroups = groups;
|
|
1139
|
+
}
|
|
1140
|
+
static ɵfac = function VersionHistoryDiffResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || VersionHistoryDiffResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.NavigationService)); };
|
|
1141
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: VersionHistoryDiffResourceComponent, selectors: [["mj-version-history-diff-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [[1, "diff-container"], ["text", "Loading diff viewer..."], [1, "page-header"], [1, "header-left"], [1, "page-title"], [1, "page-subtitle"], [1, "config-panel"], [1, "mode-selector"], [1, "mode-btn", 3, "click"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "fa-solid", "fa-code-compare"], [1, "label-selectors"], [1, "selector-group"], [1, "selector-label"], [1, "selector-input", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], [1, "selector-arrow"], [1, "btn-primary", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "empty-state"], ["title", "Swap direction", 1, "swap-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "fa-solid", "fa-arrow-right"], [1, "current-state-badge"], [1, "diff-summary"], [1, "diff-stat", "change-added"], [1, "fa-solid", "fa-plus"], [1, "diff-stat-value"], [1, "diff-stat-label"], [1, "diff-stat", "change-removed"], [1, "fa-solid", "fa-minus"], [1, "diff-stat", "change-modified"], [1, "fa-solid", "fa-pen"], [1, "diff-stat", "change-unchanged"], [1, "fa-solid", "fa-equals"], [1, "diff-toolbar"], [1, "entity-groups"], [1, "diff-search"], [1, "fa-solid", "fa-search", "diff-search-icon"], ["type", "text", "placeholder", "Search by entity or record...", 1, "diff-search-input", 3, "ngModelChange", "ngModel"], [1, "diff-filter-pills"], [1, "filter-pill", 3, "click"], [1, "filter-pill", "change-added", 3, "click"], [1, "filter-pill", "change-removed", 3, "click"], [1, "filter-pill", "change-modified", 3, "click"], [1, "diff-toolbar-right"], ["title", "Expand all", 1, "toolbar-action-btn", 3, "click"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "toolbar-action-btn", 3, "click"], [1, "fa-solid", "fa-angles-up"], [1, "diff-sort-toggle"], ["title", "Sort by name", 1, "toggle-btn-sm", 3, "click"], [1, "fa-solid", 3, "ngClass"], ["title", "Sort by count", 1, "toggle-btn-sm", 3, "click"], [1, "entity-group"], [1, "entity-group-header", 3, "click"], [1, "entity-group-left"], [1, "fa-solid", "fa-chevron-right", "entity-chevron"], [1, "entity-icon"], [1, "entity-group-name"], [1, "entity-group-badges"], [1, "badge", "change-added"], [1, "badge", "change-removed"], [1, "badge", "change-modified"], [1, "entity-group-items"], [1, "diff-item-wrapper"], [1, "diff-item", 3, "click", "ngClass"], [1, "diff-item-icon"], [1, "diff-item-record"], [1, "diff-item-display-name"], [1, "diff-item-type"], ["title", "Open record", 1, "diff-item-open-btn", 3, "click"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "fa-solid", "fa-chevron-right", "diff-item-chevron", 3, "expanded"], [1, "diff-fields"], [1, "fa-solid", "fa-chevron-right", "diff-item-chevron"], ["text", "Loading changes...", "size", "small"], [1, "diff-fields-empty"], [1, "diff-field", 3, "ngClass"], [1, "diff-field-name"], [1, "diff-field-values"], [1, "diff-field-old"], [1, "fa-solid", "fa-arrow-right", "diff-field-arrow"], [1, "diff-field-new"], [1, "fa-solid", "fa-check-circle", "empty-icon", 2, "color", "#10b981"], [1, "fa-solid", "fa-code-compare", "empty-icon"]], template: function VersionHistoryDiffResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1142
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
1143
|
+
i0.ɵɵconditionalCreate(1, VersionHistoryDiffResourceComponent_Conditional_1_Template, 1, 0, "mj-loading", 1);
|
|
1144
|
+
i0.ɵɵconditionalCreate(2, VersionHistoryDiffResourceComponent_Conditional_2_Template, 33, 15);
|
|
1145
|
+
i0.ɵɵelementEnd();
|
|
1146
|
+
} if (rf & 2) {
|
|
1147
|
+
i0.ɵɵadvance();
|
|
1148
|
+
i0.ɵɵconditional(ctx.IsLoading ? 1 : -1);
|
|
1149
|
+
i0.ɵɵadvance();
|
|
1150
|
+
i0.ɵɵconditional(!ctx.IsLoading ? 2 : -1);
|
|
1151
|
+
} }, dependencies: [i2.NgClass, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.DefaultValueAccessor, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.LoadingComponent, i2.SlicePipe], styles: [".diff-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.page-header[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.page-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.page-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n\n\n.config-panel[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n padding: 24px;\n margin-bottom: 24px;\n}\n\n.mode-selector[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 20px;\n}\n\n.mode-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 18px;\n background: var(--hover-background, #f3f4f6);\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n transition: all 0.2s ease;\n}\n\n.mode-btn[_ngcontent-%COMP%]:hover {\n background: #e5e7eb;\n}\n\n.mode-btn.active[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.08);\n border-color: #6366f1;\n color: #6366f1;\n font-weight: 600;\n}\n\n\n\n.label-selectors[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.selector-group[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.selector-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--text-secondary, #6b7280);\n margin-bottom: 6px;\n}\n\n.selector-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n box-sizing: border-box;\n}\n\n.selector-input[_ngcontent-%COMP%]:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.selector-arrow[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding-bottom: 8px;\n color: var(--text-secondary, #6b7280);\n font-size: 16px;\n}\n\n.current-state-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: #6366f1;\n background: rgba(99, 102, 241, 0.1);\n padding: 2px 8px;\n border-radius: 8px;\n white-space: nowrap;\n}\n\n\n\n.btn-primary[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 24px;\n background: #6366f1;\n border: none;\n border-radius: 8px;\n color: #ffffff;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #4f46e5;\n}\n\n.btn-primary[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.diff-summary[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 24px;\n}\n\n.diff-stat[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 20px;\n border-radius: 10px;\n border: 1px solid var(--border-color, #e5e7eb);\n}\n\n.diff-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n}\n\n.diff-stat-value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n}\n\n.diff-stat-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n\n\n.change-added[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.06);\n border-color: rgba(16, 185, 129, 0.2);\n color: #059669;\n}\n\n.change-removed[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.06);\n border-color: rgba(239, 68, 68, 0.2);\n color: #dc2626;\n}\n\n.change-modified[_ngcontent-%COMP%] {\n background: rgba(245, 158, 11, 0.06);\n border-color: rgba(245, 158, 11, 0.2);\n color: #d97706;\n}\n\n.change-unchanged[_ngcontent-%COMP%] {\n background: rgba(107, 114, 128, 0.06);\n border-color: rgba(107, 114, 128, 0.2);\n color: #6b7280;\n}\n\n\n\n.entity-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.entity-group[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.entity-group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.entity-group-header[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f9fafb);\n}\n\n.entity-group-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.entity-group-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n width: 16px;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n color: #6366f1;\n font-size: 14px;\n}\n\n.entity-group-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.entity-group-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n border: none;\n}\n\n\n\n.entity-chevron[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-tertiary, #9ca3af);\n width: 14px;\n text-align: center;\n transition: transform 0.2s ease;\n}\n\n.entity-chevron.expanded[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n\n\n.entity-group-items[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-color, #e5e7eb);\n padding: 8px 16px;\n}\n\n.diff-item-wrapper[_ngcontent-%COMP%] {\n margin-bottom: 2px;\n}\n\n.diff-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-radius: 6px;\n}\n\n.diff-item.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.diff-item.clickable[_ngcontent-%COMP%]:hover {\n filter: brightness(0.97);\n}\n\n.diff-item-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n width: 20px;\n text-align: center;\n}\n\n.diff-item-record[_ngcontent-%COMP%] {\n font-size: 13px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--text-primary, #1f2937);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.diff-item-display-name[_ngcontent-%COMP%] {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n color: var(--text-secondary, #6b7280);\n font-weight: 500;\n}\n\n.diff-item-open-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid transparent;\n border-radius: 4px;\n background: transparent;\n color: var(--text-tertiary, #9ca3af);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.diff-item-open-btn[_ngcontent-%COMP%]:hover {\n border-color: #6366f1;\n color: #6366f1;\n background: rgba(99, 102, 241, 0.06);\n}\n\n.diff-item-type[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.diff-item-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-tertiary, #9ca3af);\n transition: transform 0.2s ease;\n}\n\n.diff-item-chevron.expanded[_ngcontent-%COMP%] {\n transform: rotate(90deg);\n}\n\n\n\n.diff-fields[_ngcontent-%COMP%] {\n margin-left: 42px;\n margin-bottom: 8px;\n padding: 8px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.diff-field[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.diff-field.change-added[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.06);\n}\n\n.diff-field.change-modified[_ngcontent-%COMP%] {\n background: rgba(245, 158, 11, 0.06);\n}\n\n.diff-field.change-removed[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.06);\n}\n\n.diff-field-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n min-width: 120px;\n flex-shrink: 0;\n}\n\n.diff-field-values[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n\n.diff-field-old[_ngcontent-%COMP%] {\n color: #ef4444;\n text-decoration: line-through;\n opacity: 0.8;\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.diff-field-arrow[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #9ca3af);\n font-size: 10px;\n flex-shrink: 0;\n}\n\n.diff-field-new[_ngcontent-%COMP%] {\n color: #10b981;\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.diff-fields-empty[_ngcontent-%COMP%] {\n padding: 6px 10px;\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n font-style: italic;\n}\n\n\n\n.diff-toolbar-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.toolbar-action-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 6px;\n background: var(--card-background, #ffffff);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.toolbar-action-btn[_ngcontent-%COMP%]:hover {\n border-color: #6366f1;\n color: #6366f1;\n background: rgba(99, 102, 241, 0.06);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--text-tertiary, #9ca3af);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n max-width: 400px;\n}\n\n\n\n.swap-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 50%;\n background: var(--card-background, #ffffff);\n color: #6366f1;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.swap-btn[_ngcontent-%COMP%]:hover {\n background: rgba(99, 102, 241, 0.1);\n border-color: #6366f1;\n transform: rotate(180deg);\n}\n\n\n\n.diff-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.diff-search[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-width: 200px;\n}\n\n.diff-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n}\n\n.diff-search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 8px 12px 8px 36px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 13px;\n background: var(--card-background, #ffffff);\n color: var(--text-primary, #1f2937);\n box-sizing: border-box;\n}\n\n.diff-search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.diff-filter-pills[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.filter-pill[_ngcontent-%COMP%] {\n padding: 6px 14px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 16px;\n background: var(--card-background, #ffffff);\n font-size: 12px;\n font-weight: 500;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-pill[_ngcontent-%COMP%]:hover {\n border-color: #6366f1;\n color: #6366f1;\n}\n\n.filter-pill.active[_ngcontent-%COMP%] {\n background: #6366f1;\n border-color: #6366f1;\n color: #ffffff;\n}\n\n.filter-pill.change-added.active[_ngcontent-%COMP%] {\n background: #059669;\n border-color: #059669;\n}\n\n.filter-pill.change-removed.active[_ngcontent-%COMP%] {\n background: #dc2626;\n border-color: #dc2626;\n}\n\n.filter-pill.change-modified.active[_ngcontent-%COMP%] {\n background: #d97706;\n border-color: #d97706;\n}\n\n.diff-sort-toggle[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n}\n\n.toggle-btn-sm[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 6px;\n background: var(--card-background, #ffffff);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.toggle-btn-sm[_ngcontent-%COMP%]:hover {\n border-color: #6366f1;\n color: #6366f1;\n}\n\n.toggle-btn-sm.active[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.1);\n border-color: #6366f1;\n color: #6366f1;\n}\n\n@media (max-width: 768px) {\n .diff-summary[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .label-selectors[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n}"], changeDetection: 0 });
|
|
1152
|
+
};
|
|
1153
|
+
VersionHistoryDiffResourceComponent = VersionHistoryDiffResourceComponent_1 = __decorate([
|
|
1154
|
+
RegisterClass(BaseResourceComponent, 'VersionHistoryDiffResource')
|
|
1155
|
+
], VersionHistoryDiffResourceComponent);
|
|
1156
|
+
export { VersionHistoryDiffResourceComponent };
|
|
1157
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VersionHistoryDiffResourceComponent, [{
|
|
1158
|
+
type: Component,
|
|
1159
|
+
args: [{ standalone: false, selector: 'mj-version-history-diff-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"diff-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading diff viewer...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Diff Viewer</h2>\n <p class=\"page-subtitle\">Compare states between version labels or against current data</p>\n </div>\n </div>\n <!-- Diff Configuration Panel -->\n <div class=\"config-panel\">\n <!-- Mode Selector -->\n <div class=\"mode-selector\">\n <button class=\"mode-btn\"\n [class.active]=\"DiffMode === 'label-to-current'\"\n (click)=\"OnDiffModeChange('label-to-current')\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Label vs Current\n </button>\n <button class=\"mode-btn\"\n [class.active]=\"DiffMode === 'label-to-label'\"\n (click)=\"OnDiffModeChange('label-to-label')\">\n <i class=\"fa-solid fa-code-compare\"></i>\n Label vs Label\n </button>\n </div>\n <!-- Label Selectors -->\n <div class=\"label-selectors\">\n <div class=\"selector-group\">\n <label class=\"selector-label\">\n {{DiffMode === 'label-to-current' ? 'Compare label' : 'From label'}}\n </label>\n <select class=\"selector-input\"\n [(ngModel)]=\"FromLabelId\">\n <option value=\"\">Select a label...</option>\n @for (label of FilteredFromLabels; track label) {\n <option\n [value]=\"label.ID\">\n {{FormatLabelOption(label)}}\n </option>\n }\n </select>\n </div>\n @if (DiffMode === 'label-to-label') {\n <div class=\"selector-arrow\">\n <button class=\"swap-btn\" (click)=\"SwapLabels()\" title=\"Swap direction\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n }\n @if (DiffMode === 'label-to-current') {\n <div class=\"selector-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n <span class=\"current-state-badge\">Current State</span>\n </div>\n }\n @if (DiffMode === 'label-to-label') {\n <div class=\"selector-group\">\n <label class=\"selector-label\">To label</label>\n <select class=\"selector-input\"\n [(ngModel)]=\"ToLabelId\">\n <option value=\"\">Select a label...</option>\n @for (label of FilteredToLabels; track label) {\n <option\n [value]=\"label.ID\">\n {{FormatLabelOption(label)}}\n </option>\n }\n </select>\n </div>\n }\n </div>\n <!-- Run Button -->\n <button class=\"btn-primary\"\n [disabled]=\"!CanRunDiff || IsDiffLoading\"\n (click)=\"RunDiff()\">\n @if (!IsDiffLoading) {\n <i class=\"fa-solid fa-play\"></i>\n }\n @if (IsDiffLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n <span>{{IsDiffLoading ? 'Comparing...' : 'Compare'}}</span>\n </button>\n </div>\n <!-- Diff Results -->\n @if (HasDiffResult) {\n <!-- Summary Stats -->\n <div class=\"diff-summary\">\n <div class=\"diff-stat change-added\">\n <i class=\"fa-solid fa-plus\"></i>\n <span class=\"diff-stat-value\">{{TotalAdded}}</span>\n <span class=\"diff-stat-label\">Added</span>\n </div>\n <div class=\"diff-stat change-removed\">\n <i class=\"fa-solid fa-minus\"></i>\n <span class=\"diff-stat-value\">{{TotalRemoved}}</span>\n <span class=\"diff-stat-label\">Removed</span>\n </div>\n <div class=\"diff-stat change-modified\">\n <i class=\"fa-solid fa-pen\"></i>\n <span class=\"diff-stat-value\">{{TotalModified}}</span>\n <span class=\"diff-stat-label\">Modified</span>\n </div>\n <div class=\"diff-stat change-unchanged\">\n <i class=\"fa-solid fa-equals\"></i>\n <span class=\"diff-stat-value\">{{TotalUnchanged}}</span>\n <span class=\"diff-stat-label\">Unchanged</span>\n </div>\n </div>\n <!-- Results toolbar -->\n @if (EntityGroups.length > 0) {\n <div class=\"diff-toolbar\">\n <div class=\"diff-search\">\n <i class=\"fa-solid fa-search diff-search-icon\"></i>\n <input type=\"text\" class=\"diff-search-input\"\n placeholder=\"Search by entity or record...\"\n [ngModel]=\"DiffSearch\"\n (ngModelChange)=\"OnDiffSearchChange($event)\" />\n </div>\n <div class=\"diff-filter-pills\">\n <button class=\"filter-pill\" [class.active]=\"DiffFilterType === 'all'\"\n (click)=\"OnDiffFilterChange('all')\">All</button>\n <button class=\"filter-pill change-added\" [class.active]=\"DiffFilterType === 'added'\"\n (click)=\"OnDiffFilterChange('added')\">Added</button>\n <button class=\"filter-pill change-removed\" [class.active]=\"DiffFilterType === 'removed'\"\n (click)=\"OnDiffFilterChange('removed')\">Removed</button>\n <button class=\"filter-pill change-modified\" [class.active]=\"DiffFilterType === 'modified'\"\n (click)=\"OnDiffFilterChange('modified')\">Modified</button>\n </div>\n <div class=\"diff-toolbar-right\">\n <button class=\"toolbar-action-btn\" (click)=\"ExpandAllGroups()\" title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button class=\"toolbar-action-btn\" (click)=\"CollapseAllGroups()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <div class=\"diff-sort-toggle\">\n <button class=\"toggle-btn-sm\" [class.active]=\"DiffSortBy === 'name'\"\n (click)=\"OnDiffSortChange('name')\" title=\"Sort by name\">\n <i class=\"fa-solid\" [ngClass]=\"DiffSortBy === 'name' && DiffSortDir === 'desc' ? 'fa-arrow-up-z-a' : 'fa-arrow-down-a-z'\"></i>\n </button>\n <button class=\"toggle-btn-sm\" [class.active]=\"DiffSortBy === 'count'\"\n (click)=\"OnDiffSortChange('count')\" title=\"Sort by count\">\n <i class=\"fa-solid\" [ngClass]=\"DiffSortBy === 'count' && DiffSortDir === 'asc' ? 'fa-arrow-up-1-9' : 'fa-arrow-down-9-1'\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n <!-- Entity Groups -->\n @if (FilteredEntityGroups.length > 0) {\n <div class=\"entity-groups\">\n @for (group of FilteredEntityGroups; track group) {\n <div class=\"entity-group\">\n <div class=\"entity-group-header\" (click)=\"ToggleEntityGroup(group)\">\n <div class=\"entity-group-left\">\n <i class=\"fa-solid fa-chevron-right entity-chevron\"\n [class.expanded]=\"group.IsExpanded\">\n </i>\n <i [class]=\"group.EntityIcon\" class=\"entity-icon\"></i>\n <span class=\"entity-group-name\">{{group.EntityName}}</span>\n </div>\n <div class=\"entity-group-badges\">\n @if (group.AddedCount > 0) {\n <span class=\"badge change-added\">\n +{{group.AddedCount}}\n </span>\n }\n @if (group.RemovedCount > 0) {\n <span class=\"badge change-removed\">\n -{{group.RemovedCount}}\n </span>\n }\n @if (group.ModifiedCount > 0) {\n <span class=\"badge change-modified\">\n ~{{group.ModifiedCount}}\n </span>\n }\n </div>\n </div>\n @if (group.IsExpanded) {\n <div class=\"entity-group-items\">\n @for (item of group.Items; track item) {\n <div class=\"diff-item-wrapper\">\n <div class=\"diff-item\" [ngClass]=\"GetChangeTypeClass(item.ChangeType)\"\n [class.clickable]=\"item.ChangeType === 'Modified'\"\n (click)=\"ToggleItem(item)\">\n <i [class]=\"GetChangeTypeIcon(item.ChangeType)\" class=\"diff-item-icon\"></i>\n <span class=\"diff-item-record\">\n {{FormatRecordID(item.RecordID)}}\n @if (item.DisplayName) {\n <span class=\"diff-item-display-name\"> ({{item.DisplayName}})</span>\n }\n </span>\n <span class=\"diff-item-type\">{{item.ChangeType}}</span>\n <button class=\"diff-item-open-btn\" (click)=\"OnOpenRecord(item); $event.stopPropagation()\"\n title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n @if (item.ChangeType === 'Modified') {\n <i class=\"fa-solid fa-chevron-right diff-item-chevron\"\n [class.expanded]=\"item.IsExpanded\"\n ></i>\n }\n </div>\n <!-- Field-level changes -->\n @if (item.IsExpanded && item.ChangeType === 'Modified') {\n <div class=\"diff-fields\">\n @if (item.IsLoadingFields) {\n <mj-loading text=\"Loading changes...\" size=\"small\"></mj-loading>\n }\n @if (!item.IsLoadingFields && item.FieldChanges.length > 0) {\n @for (field of item.FieldChanges; track field) {\n <div class=\"diff-field\"\n [ngClass]=\"GetChangeTypeClass(field.ChangeType)\">\n <span class=\"diff-field-name\">{{field.FieldName}}</span>\n <span class=\"diff-field-values\">\n @if (field.OldValue) {\n <span class=\"diff-field-old\">{{field.OldValue | slice:0:60}}</span>\n }\n @if (field.OldValue && field.NewValue) {\n <i class=\"fa-solid fa-arrow-right diff-field-arrow\"></i>\n }\n @if (field.NewValue) {\n <span class=\"diff-field-new\">{{field.NewValue | slice:0:60}}</span>\n }\n </span>\n </div>\n }\n }\n @if (!item.IsLoadingFields && item.FieldsLoaded && item.FieldChanges.length === 0) {\n <div class=\"diff-fields-empty\">\n <span>No field-level changes available</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- No changes -->\n @if (FilteredEntityGroups.length === 0 && TotalChanges === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-check-circle empty-icon\" style=\"color: #10b981;\"></i>\n <h3>No differences found</h3>\n <p>The compared states are identical.</p>\n </div>\n }\n }\n <!-- No results yet -->\n @if (!HasDiffResult && !IsDiffLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-code-compare empty-icon\"></i>\n <h3>Select labels to compare</h3>\n <p>Choose a diff mode and select labels above, then click Compare.</p>\n </div>\n }\n }\n</div>\n", styles: [".diff-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n/* Header */\n.page-header {\n margin-bottom: 24px;\n}\n\n.page-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.page-subtitle {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n/* Config Panel */\n.config-panel {\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n padding: 24px;\n margin-bottom: 24px;\n}\n\n.mode-selector {\n display: flex;\n gap: 8px;\n margin-bottom: 20px;\n}\n\n.mode-btn {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 8px 18px;\n background: var(--hover-background, #f3f4f6);\n border: 2px solid transparent;\n border-radius: 8px;\n cursor: pointer;\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n transition: all 0.2s ease;\n}\n\n.mode-btn:hover {\n background: #e5e7eb;\n}\n\n.mode-btn.active {\n background: rgba(99, 102, 241, 0.08);\n border-color: #6366f1;\n color: #6366f1;\n font-weight: 600;\n}\n\n/* Label Selectors */\n.label-selectors {\n display: flex;\n align-items: flex-end;\n gap: 16px;\n margin-bottom: 20px;\n}\n\n.selector-group {\n flex: 1;\n}\n\n.selector-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--text-secondary, #6b7280);\n margin-bottom: 6px;\n}\n\n.selector-input {\n width: 100%;\n padding: 10px 12px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n box-sizing: border-box;\n}\n\n.selector-input:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.selector-arrow {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding-bottom: 8px;\n color: var(--text-secondary, #6b7280);\n font-size: 16px;\n}\n\n.current-state-badge {\n font-size: 11px;\n font-weight: 600;\n color: #6366f1;\n background: rgba(99, 102, 241, 0.1);\n padding: 2px 8px;\n border-radius: 8px;\n white-space: nowrap;\n}\n\n/* Run Button */\n.btn-primary {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 24px;\n background: #6366f1;\n border: none;\n border-radius: 8px;\n color: #ffffff;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary:hover:not(:disabled) {\n background: #4f46e5;\n}\n\n.btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Diff Summary */\n.diff-summary {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n margin-bottom: 24px;\n}\n\n.diff-stat {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 16px 20px;\n border-radius: 10px;\n border: 1px solid var(--border-color, #e5e7eb);\n}\n\n.diff-stat i {\n font-size: 16px;\n}\n\n.diff-stat-value {\n font-size: 22px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n}\n\n.diff-stat-label {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n/* Change type colors */\n.change-added {\n background: rgba(16, 185, 129, 0.06);\n border-color: rgba(16, 185, 129, 0.2);\n color: #059669;\n}\n\n.change-removed {\n background: rgba(239, 68, 68, 0.06);\n border-color: rgba(239, 68, 68, 0.2);\n color: #dc2626;\n}\n\n.change-modified {\n background: rgba(245, 158, 11, 0.06);\n border-color: rgba(245, 158, 11, 0.2);\n color: #d97706;\n}\n\n.change-unchanged {\n background: rgba(107, 114, 128, 0.06);\n border-color: rgba(107, 114, 128, 0.2);\n color: #6b7280;\n}\n\n/* Entity Groups */\n.entity-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.entity-group {\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n overflow: hidden;\n}\n\n.entity-group-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 14px 20px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.entity-group-header:hover {\n background: var(--hover-background, #f9fafb);\n}\n\n.entity-group-left {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.entity-group-left i:first-child {\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n width: 16px;\n}\n\n.entity-icon {\n color: #6366f1;\n font-size: 14px;\n}\n\n.entity-group-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.entity-group-badges {\n display: flex;\n gap: 6px;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n border: none;\n}\n\n/* Entity chevron animation */\n.entity-chevron {\n font-size: 11px;\n color: var(--text-tertiary, #9ca3af);\n width: 14px;\n text-align: center;\n transition: transform 0.2s ease;\n}\n\n.entity-chevron.expanded {\n transform: rotate(90deg);\n}\n\n/* Entity group items */\n.entity-group-items {\n border-top: 1px solid var(--border-color, #e5e7eb);\n padding: 8px 16px;\n}\n\n.diff-item-wrapper {\n margin-bottom: 2px;\n}\n\n.diff-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n border-radius: 6px;\n}\n\n.diff-item.clickable {\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.diff-item.clickable:hover {\n filter: brightness(0.97);\n}\n\n.diff-item-icon {\n font-size: 12px;\n width: 20px;\n text-align: center;\n}\n\n.diff-item-record {\n font-size: 13px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--text-primary, #1f2937);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.diff-item-display-name {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n color: var(--text-secondary, #6b7280);\n font-weight: 500;\n}\n\n.diff-item-open-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid transparent;\n border-radius: 4px;\n background: transparent;\n color: var(--text-tertiary, #9ca3af);\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.diff-item-open-btn:hover {\n border-color: #6366f1;\n color: #6366f1;\n background: rgba(99, 102, 241, 0.06);\n}\n\n.diff-item-type {\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.diff-item-chevron {\n font-size: 10px;\n color: var(--text-tertiary, #9ca3af);\n transition: transform 0.2s ease;\n}\n\n.diff-item-chevron.expanded {\n transform: rotate(90deg);\n}\n\n/* Field-level diff changes */\n.diff-fields {\n margin-left: 42px;\n margin-bottom: 8px;\n padding: 8px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.diff-field {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.diff-field.change-added {\n background: rgba(16, 185, 129, 0.06);\n}\n\n.diff-field.change-modified {\n background: rgba(245, 158, 11, 0.06);\n}\n\n.diff-field.change-removed {\n background: rgba(239, 68, 68, 0.06);\n}\n\n.diff-field-name {\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n min-width: 120px;\n flex-shrink: 0;\n}\n\n.diff-field-values {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n\n.diff-field-old {\n color: #ef4444;\n text-decoration: line-through;\n opacity: 0.8;\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.diff-field-arrow {\n color: var(--text-tertiary, #9ca3af);\n font-size: 10px;\n flex-shrink: 0;\n}\n\n.diff-field-new {\n color: #10b981;\n font-family: 'SF Mono', 'Fira Code', monospace;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.diff-fields-empty {\n padding: 6px 10px;\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n font-style: italic;\n}\n\n/* Toolbar actions */\n.diff-toolbar-right {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.toolbar-action-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 6px;\n background: var(--card-background, #ffffff);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.toolbar-action-btn:hover {\n border-color: #6366f1;\n color: #6366f1;\n background: rgba(99, 102, 241, 0.06);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--text-tertiary, #9ca3af);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n max-width: 400px;\n}\n\n/* Swap Button */\n.swap-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 50%;\n background: var(--card-background, #ffffff);\n color: #6366f1;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.swap-btn:hover {\n background: rgba(99, 102, 241, 0.1);\n border-color: #6366f1;\n transform: rotate(180deg);\n}\n\n/* Diff Results Toolbar */\n.diff-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.diff-search {\n position: relative;\n flex: 1;\n min-width: 200px;\n}\n\n.diff-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n}\n\n.diff-search-input {\n width: 100%;\n padding: 8px 12px 8px 36px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 13px;\n background: var(--card-background, #ffffff);\n color: var(--text-primary, #1f2937);\n box-sizing: border-box;\n}\n\n.diff-search-input:focus {\n outline: none;\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.diff-filter-pills {\n display: flex;\n gap: 4px;\n}\n\n.filter-pill {\n padding: 6px 14px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 16px;\n background: var(--card-background, #ffffff);\n font-size: 12px;\n font-weight: 500;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.filter-pill:hover {\n border-color: #6366f1;\n color: #6366f1;\n}\n\n.filter-pill.active {\n background: #6366f1;\n border-color: #6366f1;\n color: #ffffff;\n}\n\n.filter-pill.change-added.active {\n background: #059669;\n border-color: #059669;\n}\n\n.filter-pill.change-removed.active {\n background: #dc2626;\n border-color: #dc2626;\n}\n\n.filter-pill.change-modified.active {\n background: #d97706;\n border-color: #d97706;\n}\n\n.diff-sort-toggle {\n display: flex;\n gap: 2px;\n}\n\n.toggle-btn-sm {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 6px;\n background: var(--card-background, #ffffff);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.toggle-btn-sm:hover {\n border-color: #6366f1;\n color: #6366f1;\n}\n\n.toggle-btn-sm.active {\n background: rgba(99, 102, 241, 0.1);\n border-color: #6366f1;\n color: #6366f1;\n}\n\n@media (max-width: 768px) {\n .diff-summary {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .label-selectors {\n flex-direction: column;\n }\n}\n"] }]
|
|
1160
|
+
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.NavigationService }], null); })();
|
|
1161
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(VersionHistoryDiffResourceComponent, { className: "VersionHistoryDiffResourceComponent", filePath: "src/VersionHistory/components/diff-resource.component.ts", lineNumber: 59 }); })();
|
|
1162
|
+
//# sourceMappingURL=diff-resource.component.js.map
|