@memberjunction/ng-dashboards 5.30.1 → 5.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -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 +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -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 +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -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 +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -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 +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -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 +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labels-resource.component.js","sourceRoot":"","sources":["../../../src/VersionHistory/components/labels-resource.component.ts","../../../src/VersionHistory/components/labels-resource.component.html"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,SAAS,EAAwC,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAG,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAqB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAwE,cAAc,EAAE,MAAM,+BAA+B,CAAC;;;;;;;ICHjI,gCAA0D;;;;IAsEtD,kCAE4C;IAA1C,2OAAS,yCAA+B,KAAC;IACzC,oBAA2B;IAC3B,4BAAM;IAAA,YAAc;IAAA,iBAAO;IAC3B,gCAAyB;IAAA,YAAc;IACzC,AADyC,iBAAO,EACvC;;;;IALP,8DAA2C;IAExC,cAAmB;IAAnB,2BAAmB;IAChB,eAAc;IAAd,mCAAc;IACK,eAAc;IAAd,mCAAc;;;;IAIzC,kCAG8C;IAA5C,2OAAS,2CAAiC,KAAC;IAC3C,4BAAM;IAAA,YAAe;IAAA,iBAAO;IAC5B,gCAAyB;IAAA,YAAc;IACzC,AADyC,iBAAO,EACvC;;;;IALP,gEAA6C;IAC7C,+DAAuC;IAEjC,eAAe;IAAf,oCAAe;IACI,eAAc;IAAd,mCAAc;;;;IAazC,kCAAuD;IAA7B,yNAAS,sBAAe,EAAE,CAAC,KAAC;IACpD,wBAAiC;IACnC,iBAAS;;;IAeC,gCAA0B;IACxB,wBAAuC;IACvC,YACF;IAAA,iBAAO;;;;IADL,eACF;IADE,kFACF;;;IAWA,gCAAuC;IACrC,wBAAiC;IAAC,YACpC;IAAA,iBAAO;;;;IAD6B,eACpC;IADoC,+FACpC;;;IAGA,gCAA0C;IACxC,wBAAuC;IAAC,YAC1C;;IAAA,iBAAO;;;IADmC,eAC1C;IAD0C,kFAC1C;;;IAGA,gCAA+C;IAC7C,wBAAkC;IAAC,YACrC;IAAA,iBAAO;;;IAD8B,eACrC;IADqC,yDACrC;;;IAGA,gCAA+C;IAC7C,wBAAkC;IAAC,YACrC;IAAA,iBAAO;;;;IAD8B,eACrC;IADqC,uEACrC;;;IAGA,gCAA8C;IAC5C,wBAAqC;IAAC,YACxC;IAAA,iBAAO;;;;IADiC,eACxC;IADwC,mFACxC;;;IAGA,gCAA2C;IACzC,wBAAgC;IAAC,YACnC;IAAA,iBAAO;;;IAD4B,eACnC;IADmC,uDACnC;;;IAQJ,6BAA6B;IAAA,YAAqB;IAAA,iBAAI;;;IAAzB,cAAqB;IAArB,0CAAqB;;;IAU1C,gCAA2B;IAAA,YAAkC;;IAAA,iBAAO;;;IAAzC,cAAkC;IAAlC,iFAAkC;;;IAG7D,gCAA0B;IAAA,YAAyB;IAAA,iBAAO;;;IAAhC,cAAyB;IAAzB,wDAAyB;;;IAPvD,+BAAyB;IACvB,wBAA0C;IAC1C,gCAAyB;IAAA,YAAc;IAAA,iBAAO;IAC9C,iKAAsB;IAGtB,iKAAuB;IAGzB,iBAAM;;;IAPqB,eAAc;IAAd,oCAAc;IACvC,cAEC;IAFD,6CAEC;IACD,cAEC;IAFD,8CAEC;;;IAVP,+BAA0B;IACxB,6KAWC;IACH,iBAAM;;;;IAZJ,cAWC;IAXD,cAAA,kCAAwB,CAWvB;;;;IAzEP,+BAEgC;IAA9B,uPAAS,6BAAmB,KAAC;IAE3B,AADF,+BAA0B,cACK;IAC3B,wBAAoE;IACpE,8BAAuB;IAAA,YAAc;IAAA,iBAAK;IAC1C,4IAA4B;IAM5B,gCAAoE;IAClE,YACF;IACF,AADE,iBAAO,EACH;IAEJ,AADF,+BAAwB,gBACgB;IACpC,yBAAuC;IAAC,aAC1C;IAAA,iBAAO;IACP,8IAAsC;IAKtC,8IAAsB;IAKtB,8IAAuB;IAKvB,8IAAwB;IAKxB,8IAAgC;IAKhC,8IAA2B;IAK3B,iCAAwC;IACtC,yBAAmC;IAAC,aACtC;IAEJ,AADE,AADE,iBAAO,EACH,EACF;IACN,2IAAyB;IAIzB,6IAAmE;IAgBrE,iBAAM;;;;IA3EJ,8DAA2C;IAIpC,eAAmC;IAAnC,kDAAmC;IACf,eAAc;IAAd,mCAAc;IACrC,cAKC;IALD,yDAKC;IAC0B,cAAwC;IAAxC,gEAAwC;IACjE,cACF;IADE,gDACF;IAI0C,eAC1C;IAD0C,+CAC1C;IACA,cAIC;IAJD,gEAIC;IACD,cAIC;IAJD,6CAIC;IACD,cAIC;IAJD,8CAIC;IACD,cAIC;IAJD,+CAIC;IACD,cAIC;IAJD,uDAIC;IACD,cAIC;IAJD,kDAIC;IAEqC,eACtC;IADsC,2EACtC;IAGJ,cAEC;IAFD,gDAEC;IAED,cAeC;IAfD,2GAeC;;;IA7EP,+BAAyB;IACvB,0JA8EC;IACH,iBAAM;;;IA/EJ,cA8EC;IA9ED,oCA8EC;;;IAgCO,gCAA+B;IAC7B,wBAAuC;IAAC,YAC1C;IAAA,iBAAO;;;;IADmC,eAC1C;IAD0C,2EAC1C;;;;IAVN,+BACgC;IAA9B,0PAAS,8BAAmB,KAAC;IAC7B,gCAA4B;IAC1B,wBAAmE;IACrE,iBAAO;IAEL,AADF,gCAA4B,eACI;IAAA,YAAc;IAAA,iBAAO;IACnD,6IAA4B;IAK9B,iBAAO;IACP,gCAA8B;IAAA,YAAqD;IAAA,iBAAO;IAExF,AADF,gCAA8B,gBAC8C;IAAA,aAAgB;IAC5F,AAD4F,iBAAO,EAC5F;IACP,iCAA6B;IAAA,aAA6C;IAAA,iBAAO;IACjF,iCAA4B;IAAA,aAAoC;IAAA,iBAAO;IACvE,iCAA6B;IAC3B,yBAAoD;IAExD,AADE,iBAAO,EACH;;;;IAnBC,eAAmC;IAAnC,mDAAmC;IAGR,eAAc;IAAd,oCAAc;IAC5C,cAIC;IAJD,0DAIC;IAE2B,eAAqD;IAArD,sFAAqD;IAEhD,eAAwC;IAAxC,iEAAwC;IAAC,cAAgB;IAAhB,sCAAgB;IAE/D,eAA6C;IAA7C,8EAA6C;IAC9C,eAAoC;IAApC,iEAAoC;;;;IApCpE,AADF,+BAA0B,cACK;IAC3B,2BAAmC;IACnC,gCAA2E;IAA/B,wNAAS,oBAAa,MAAM,CAAC,KAAC;IACxE,sBAAK;IAAA,wBAAuD;IAC9D,iBAAO;IACP,gCAA8B;IAAA,sBAAM;IAAA,iBAAO;IAC3C,gCAA+E;IAAjC,wNAAS,oBAAa,QAAQ,CAAC,KAAC;IAC5E,wBAAO;IAAA,yBAAyD;IAClE,iBAAO;IACP,iCAA6E;IAAhC,yNAAS,oBAAa,OAAO,CAAC,KAAC;IAC1E,wBAAM;IAAA,yBAAwD;IAChE,iBAAO;IACP,iCAA2E;IAA/B,yNAAS,oBAAa,MAAM,CAAC,KAAC;IACxE,0BAAQ;IAAA,yBAAuD;IACjE,iBAAO;IACP,4BAAoC;IACtC,iBAAM;IACN,2JAwBC;IACH,iBAAM;;;IAvCQ,eAA6B;IAA7B,yCAA6B;IAI3B,eAA+B;IAA/B,2CAA+B;IAGhC,eAA8B;IAA9B,0CAA8B;IAG5B,eAA6B;IAA7B,yCAA6B;IAI5C,eAwBC;IAxBD,oCAwBC;;;IASC,yBAAG;IACD,gEACF;IAAA,iBAAI;;;IAGJ,yBAAG;IACD,0DACF;IAAA,iBAAI;;;;IAGJ,kCAC+B;IAA7B,wOAAS,yBAAkB,KAAC;IAC5B,wBAAgC;IAChC,4BAAM;IAAA,uCAAuB;IAC/B,AAD+B,iBAAO,EAC7B;;;IAlBb,+BAAyB;IACvB,wBAA2C;IAC3C,0BAAI;IAAA,+BAAe;IAAA,iBAAK;IACxB,+HAAiD;IAKjD,+HAAoD;IAKpD,wIAAoD;IAOtD,iBAAM;;;IAjBJ,eAIC;IAJD,yFAIC;IACD,cAIC;IAJD,4FAIC;IACD,cAMC;IAND,4FAMC;;;;IAvPD,AADF,AADF,8BAAyB,aACE,YACA;IAAA,8BAAc;IAAA,iBAAK;IAC1C,4BAAyB;IAAA,8DAA8C;IACzE,AADyE,iBAAI,EACvE;IAGF,AADF,AADF,8BAA4B,aACD,iBACyF;IAAhD,yMAAS,mBAAY,MAAM,CAAC,KAAC;IAC3F,wBAAgC;IAClC,iBAAS;IACT,mCAAgH;IAAhD,0MAAS,mBAAY,MAAM,CAAC,KAAC;IAC3F,yBAAgC;IAEpC,AADE,iBAAS,EACL;IACN,mCAAyD;IAA7B,0MAAS,yBAAkB,KAAC;IACtD,yBAAgC;IAChC,6BAAM;IAAA,6BAAY;IACpB,AADoB,iBAAO,EAClB;IACT,mCAA6D;IAApC,0MAAS,gBAAS,KAAC;IAC1C,yBAAmC;IAGzC,AADE,AADE,iBAAS,EACL,EACF;IAIF,AADF,AADF,gCAAqB,eACG,eACoH;IACtI,yBAAgC;IAClC,iBAAM;IAEJ,AADF,gCAAyB,eACA;IAAA,aAA6B;IAAA,iBAAM;IAC1D,gCAAuB;IAAA,6BAAY;IAEvC,AADE,AADqC,iBAAM,EACrC,EACF;IAEJ,AADF,gCAAsB,eACsH;IACxI,yBAAwC;IAC1C,iBAAM;IAEJ,AADF,gCAAyB,eACA;IAAA,aAA8B;IAAA,iBAAM;IAC3D,gCAAuB;IAAA,uBAAM;IAEjC,AADE,AAD+B,iBAAM,EAC/B,EACF;IAEJ,AADF,gCAAsB,eAC8G;IAChI,yBAAuC;IACzC,iBAAM;IAEJ,AADF,gCAAyB,eACA;IAAA,aAAgC;IAAA,iBAAM;IAC7D,gCAAuB;IAAA,yBAAQ;IAEnC,AADE,AADiC,iBAAM,EACjC,EACF;IAEJ,AADF,gCAAsB,eACsH;IACxI,yBAA6C;IAC/C,iBAAM;IAEJ,AADF,gCAAyB,eACA;IAAA,aAAgC;IAAA,iBAAM;IAC7D,gCAAuB;IAAA,yBAAQ;IAGrC,AADE,AADE,AADiC,iBAAM,EACjC,EACF,EACF;IAEN,gCAAyB;IACvB,8IAQC;IACD,8IAQC;IACH,iBAAM;IAEN,gCAAwB;IACtB,yBAA8C;IAC9C,kCAI6C;IAA3C,+NAAiB,6BAAsB,KAAC;IAJ1C,iBAI6C;IAC7C,2HAAkB;IAKpB,iBAAM;IAEN,wHAAwD;IAoFxD,yHAAwD;IA+CxD,wHAAiD;;;IA9NhB,eAAoC;IAApC,oDAAoC;IAGpC,eAAoC;IAApC,oDAAoC;IAoBxC,gBAA6B;IAA7B,6DAA6B;IAS7B,eAA8B;IAA9B,8DAA8B;IAS9B,eAAgC;IAAhC,gEAAgC;IAShC,eAAgC;IAAhC,gEAAgC;IAO3D,eAQC;IARD,gCAQC;IACD,eAQC;IARD,iCAQC;IAQC,eAAsB;IAAtB,2CAAsB;IAExB,cAIC;IAJD,6CAIC;IAGH,cAkFC;IAlFD,0FAkFC;IAED,cA6CC;IA7CD,0FA6CC;IAED,cAsBC;IAtBD,mFAsBC;;;;IAKD,+BAAoE;IAAjC,uMAAS,6BAAsB,KAAC;IACjE,gCAAwE;IAAnC,0KAAS,wBAAwB,KAAC;IAEnE,AADF,gCAAkC,cACA;IAC9B,yBAA+B;IAC/B,sCACF;IAAA,iBAAK;IACL,mCAAmF;IAA/C,0MAAS,6BAAsB,KAAC;IAClE,wBAAiC;IAErC,AADE,iBAAS,EACL;IAEJ,AADF,gCAAgC,2BAGM;IAAlC,AADA,6NAAW,6BAAsB,KAAC,wMACxB,6BAAsB,KAAC;IAIzC,AADE,AADE,AADE,iBAAkB,EACd,EACF,EACF;;;;IAKN,kDAMgD;IAA9C,AADA,AADA,yNAAS,2BAAoB,KAAC,0NACd,uBAAgB,KAAC,sOACd,gCAAyB,KAAC;IAC/C,iBAAwB;;;IAJtB,AADA,AADA,4CAAuB,4BACH,qCACS;;AD1P5B,IAAM,qCAAqC,GAA3C,MAAM,qCAAsC,SAAQ,qBAAqB;;IA2CxD;IA1CZ,MAAM,CAAU,SAAS,GAAG,uCAAuC,CAAC;IAErE,SAAS,GAAG,IAAI,CAAC;IAExB,YAAY;IACL,QAAQ,GAAoB,MAAM,CAAC;IAE1C,eAAe;IACR,aAAa,GAAoC,IAAI,CAAC;IACtD,eAAe,GAAG,KAAK,CAAC;IAE/B,QAAQ;IACD,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAG,CAAC,CAAC;IACjB,cAAc,GAAG,CAAC,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC;IAE1B,eAAe;IACR,UAAU,GAAgB,EAAE,CAAC;IAC7B,WAAW,GAAiB,EAAE,CAAC;IAC/B,MAAM,GAA+B,EAAE,CAAC;IACxC,cAAc,GAA+B,EAAE,CAAC;IAChD,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,UAAU;IACH,WAAW,GAAG,EAAE,CAAC;IACjB,YAAY,GAAG,EAAE,CAAC;IAClB,UAAU,GAAG,EAAE,CAAC;IAEvB,UAAU;IACH,SAAS,GAAc,MAAM,CAAC;IAC9B,aAAa,GAAmB,MAAM,CAAC;IAE9C,mBAAmB;IACX,iBAAiB,GAAG,KAAK,CAAC;IAElC,sBAAsB;IACf,gBAAgB,GAAG,KAAK,CAAC;IAExB,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IACf,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAElD,YAAoB,GAAsB;QACtC,KAAK,EAAE,CAAC;QADQ,QAAG,GAAH,GAAG,CAAmB;IAE1C,CAAC;IAED,QAAQ;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED,WAAW;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,0EAA0E;IAC1E,eAAe;IACf,0EAA0E;IAEnE,KAAK,CAAC,QAAQ;QACjB,IAAI,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAExB,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YAEzB,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;gBAClD;oBACI,UAAU,EAAE,oBAAoB;oBAChC,OAAO,EAAE,qBAAqB;oBAC9B,OAAO,EAAE,GAAG;oBACZ,UAAU,EAAE,QAAQ;iBACvB;gBACD;oBACI,UAAU,EAAE,yBAAyB;oBACrC,MAAM,EAAE,CAAC,gBAAgB,CAAC;oBAC1B,UAAU,EAAE,QAAQ;iBACvB;aACJ,CAAC,CAAC;YAEH,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,OAAqC,CAAC;gBACjE,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO;oBAC7B,CAAC,CAAC,WAAW,CAAC,OAAyC;oBACvD,CAAC,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAC,KAAqC;QAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,YAAY,CAAC,OAA2B;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAEM,iBAAiB,CAAC,QAA4B;QACjD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,0EAA0E;IAC1E,QAAQ;IACR,0EAA0E;IAElE,YAAY;QAChB,4DAA4D;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACzE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC7E,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAE7E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACjD,CAAC;IAEO,iBAAiB;QACrB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC;YACtC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,WAAW,GAAoD;YACjE,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;SAC3D,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,iBAAiB;YACnD,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,SAAS;SAChD,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,kBAAkB;QACtB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC;YACxC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,YAAY,GAA2B;YACzC,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;SACxB,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;SAC3C,CAAC,CAAC,CAAC;IACR,CAAC;IAED,0EAA0E;IAC1E,UAAU;IACV,0EAA0E;IAEnE,YAAY;QACf,wEAAwE;QACxE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAElD,qBAAqB;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,CAAC;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClF,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;QACP,CAAC;QAED,gBAAgB;QAChB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEO,UAAU,CAAC,MAAkC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,KAAK,MAAM;oBACP,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC5D,KAAK,OAAO;oBACR,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC9D,KAAK,QAAQ;oBACT,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAChE,KAAK,OAAO,CAAC,CAAC,CAAC;oBACX,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;gBACnC,CAAC;gBACD,KAAK,MAAM,CAAC;gBACZ,OAAO,CAAC,CAAC,CAAC;oBACN,MAAM,KAAK,GAAI,CAA6B,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;oBACrE,MAAM,KAAK,GAAI,CAA6B,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;oBACrE,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,YAAY,CAAC,KAAgB;QAChC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEM,WAAW,CAAC,KAAgB;QAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;YAAE,OAAO,kBAAkB,CAAC;QACxD,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAC1F,CAAC;IAEM,mBAAmB,CAAC,KAAa;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEM,oBAAoB,CAAC,MAAc;QACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/D,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAEM,cAAc,CAAC,IAAY;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED,0EAA0E;IAC1E,6BAA6B;IAC7B,0EAA0E;IAEnE,cAAc;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,WAAW,CAAC,IAAqB;QACpC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,YAAY,CAAC,KAA+B;QAC/C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,kBAAkB;QACrB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,cAAc;QACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,iBAAiB,CAAC,KAA2B;QAChD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAClF,CAAC;IAED,0EAA0E;IAC1E,mBAAmB;IACnB,0EAA0E;IAElE,mBAAmB;QACvB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,uCAAqC,CAAC,SAAS,CAAC,CAAC;YACjG,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;gBAC1D,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC;gBACzC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC;gBACjD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC;gBACnD,IAAI,KAAK,CAAC,SAAS;oBAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAsB,CAAC;gBACnE,IAAI,KAAK,CAAC,aAAa;oBAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YACtE,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClC,CAAC;IACL,CAAC;IAEO,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAEpC,MAAM,KAAK,GAA4B;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,iBAAiB,EAAE,IAAI,CAAC,WAAW;YACnC,kBAAkB,EAAE,IAAI,CAAC,YAAY;YACrC,gBAAgB,EAAE,UAAU;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC;QAEF,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CACvC,uCAAqC,CAAC,SAAS,EAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACxB,CAAC;IACN,CAAC;IAED,0EAA0E;IAC1E,sBAAsB;IACtB,0EAA0E;IAEnE,gBAAgB;QACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAEM,cAAc,CAAC,MAAiD;QACnE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,0EAA0E;IAC1E,kBAAkB;IAClB,0EAA0E;IAEnE,YAAY,CAAC,KAAyB;QACzC,MAAM,KAAK,GAA2B;YAClC,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,kBAAkB;SAC/B,CAAC;QACF,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,iBAAiB,CAAC;IACnD,CAAC;IAEM,cAAc,CAAC,MAA0B;QAC5C,MAAM,OAAO,GAA2B;YACpC,QAAQ,EAAE,eAAe;YACzB,UAAU,EAAE,iBAAiB;YAC7B,UAAU,EAAE,iBAAiB;SAChC,CAAC;QACF,OAAO,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAEM,UAAU,CAAC,IAA+B;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QACpC,IAAI,QAAQ,GAAG,EAAE;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC7C,IAAI,SAAS,GAAG,EAAE;YAAE,OAAO,GAAG,SAAS,OAAO,CAAC;QAC/C,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,GAAG,QAAQ,OAAO,CAAC;QAE5C,OAAO,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACjC,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;IACP,CAAC;IAEM,YAAY,CAAC,GAAW;QAC3B,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACtD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAEM,cAAc,CAAC,EAAsB;QACxC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACnB,IAAI,EAAE,GAAG,IAAI;YAAE,OAAO,GAAG,EAAE,IAAI,CAAC;QAChC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxC,CAAC;IAEM,aAAa,CAAC,KAA+B;QAChD,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClE,CAAC;IAEM,cAAc,CAAC,QAA4B;QAC9C,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;+HA3bQ,qCAAqC;6DAArC,qCAAqC;YCvClD,8BAA8B;YAC5B,8GAAiB;YAIjB,+FAAkB;YAiQlB,wGAAwB;YAuBxB,yHAAwC;YAU1C,iBAAM;;YAtSJ,cAEC;YAFD,wCAEC;YAED,cA8PC;YA9PD,yCA8PC;YAGD,cAoBC;YApBD,+CAoBC;YAGD,cASC;YATD,mEASC;;;AD/PU,qCAAqC;IARjD,aAAa,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;GAQxD,qCAAqC,CA4bjD;;iFA5bY,qCAAqC;cAPjD,SAAS;6BACI,KAAK,YACL,oCAAoC,mBAG7B,uBAAuB,CAAC,MAAM;;kFAEtC,qCAAqC","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { ResourceData, MJVersionLabelEntityType, MJVersionLabelItemEntityType, UserInfoEngine } from '@memberjunction/core-entities';\nimport { EntityLinkClickEvent } from '@memberjunction/ng-versions';\ninterface ScopeStat {\n Scope: string;\n Count: number;\n Icon: string;\n Color: string;\n}\n\ninterface StatusStat {\n Status: string;\n Count: number;\n Color: string;\n}\n\ninterface VersionLabelPreferences {\n ViewMode: 'card' | 'list';\n ActiveScopeFilter: string;\n ActiveStatusFilter: string;\n DefaultDetailTab: string;\n SortField: string;\n SortDirection: 'asc' | 'desc';\n}\n\ntype SortField = 'Name' | 'Scope' | 'Status' | 'Items' | 'Date';\n\n@RegisterClass(BaseResourceComponent, 'VersionHistoryLabelsResource')\n@Component({\n standalone: false,\n selector: 'mj-version-history-labels-resource',\n templateUrl: './labels-resource.component.html',\n styleUrls: ['./labels-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VersionHistoryLabelsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private static readonly PREFS_KEY = 'VersionHistory.Labels.UserPreferences';\n\n public IsLoading = true;\n\n // View mode\n public ViewMode: 'card' | 'list' = 'card';\n\n // Detail panel\n public SelectedLabel: MJVersionLabelEntityType | null = null;\n public ShowDetailPanel = false;\n\n // Stats\n public TotalLabels = 0;\n public ActiveLabels = 0;\n public ArchivedLabels = 0;\n public RestoredLabels = 0;\n\n // Grouped data\n public ScopeStats: ScopeStat[] = [];\n public StatusStats: StatusStat[] = [];\n public Labels: MJVersionLabelEntityType[] = [];\n public FilteredLabels: MJVersionLabelEntityType[] = [];\n public ItemCountMap = new Map<string, number>();\n\n // Filters\n public ScopeFilter = '';\n public StatusFilter = '';\n public SearchText = '';\n\n // Sorting\n public SortField: SortField = 'Date';\n public SortDirection: 'asc' | 'desc' = 'desc';\n\n // User preferences\n private preferencesLoaded = false;\n\n // Create Label Wizard\n public ShowCreateWizard = false;\n\n private metadata = new Metadata();\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadUserPreferences();\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Labels';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-tags';\n }\n\n // =======================================================================\n // Data loading\n // =======================================================================\n\n public async LoadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n const [labelsResult, itemsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Version Labels',\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 500,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Version Label Items',\n Fields: ['VersionLabelID'],\n ResultType: 'simple'\n }\n ]);\n\n if (labelsResult.Success) {\n this.Labels = labelsResult.Results as MJVersionLabelEntityType[];\n const items = itemsResult.Success\n ? itemsResult.Results as MJVersionLabelItemEntityType[]\n : [];\n this.ItemCountMap = this.buildItemCountMap(items);\n this.computeStats();\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error loading version labels:', error);\n } finally {\n this.IsLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private buildItemCountMap(items: MJVersionLabelItemEntityType[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const item of items) {\n const labelId = item.VersionLabelID ?? '';\n counts.set(labelId, (counts.get(labelId) ?? 0) + 1);\n }\n return counts;\n }\n\n public GetItemCount(labelId: string | undefined): number {\n return this.ItemCountMap.get(labelId ?? '') ?? 0;\n }\n\n public ResolveEntityName(entityId: string | undefined): string {\n if (!entityId) return '';\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, entityId));\n return entity ? entity.Name : '';\n }\n\n // =======================================================================\n // Stats\n // =======================================================================\n\n private computeStats(): void {\n // Only count root-level labels (exclude children) for stats\n const rootLabels = this.Labels.filter(l => !l.ParentID);\n this.TotalLabels = rootLabels.length;\n this.ActiveLabels = rootLabels.filter(l => l.Status === 'Active').length;\n this.ArchivedLabels = rootLabels.filter(l => l.Status === 'Archived').length;\n this.RestoredLabels = rootLabels.filter(l => l.Status === 'Restored').length;\n\n this.ScopeStats = this.computeScopeStats();\n this.StatusStats = this.computeStatusStats();\n }\n\n private computeScopeStats(): ScopeStat[] {\n const scopeMap = new Map<string, number>();\n for (const label of this.Labels) {\n const scope = label.Scope ?? 'Record';\n scopeMap.set(scope, (scopeMap.get(scope) ?? 0) + 1);\n }\n\n const scopeConfig: Record<string, { Icon: string; Color: string }> = {\n 'System': { Icon: 'fa-solid fa-globe', Color: '#6366f1' },\n 'Entity': { Icon: 'fa-solid fa-table', Color: '#3b82f6' },\n 'Record': { Icon: 'fa-solid fa-file', Color: '#10b981' }\n };\n\n return Array.from(scopeMap.entries()).map(([scope, count]) => ({\n Scope: scope,\n Count: count,\n Icon: scopeConfig[scope]?.Icon ?? 'fa-solid fa-tag',\n Color: scopeConfig[scope]?.Color ?? '#64748b'\n }));\n }\n\n private computeStatusStats(): StatusStat[] {\n const statusMap = new Map<string, number>();\n for (const label of this.Labels) {\n const status = label.Status ?? 'Active';\n statusMap.set(status, (statusMap.get(status) ?? 0) + 1);\n }\n\n const statusColors: Record<string, string> = {\n 'Active': '#10b981',\n 'Archived': '#6b7280',\n 'Restored': '#f59e0b'\n };\n\n return Array.from(statusMap.entries()).map(([status, count]) => ({\n Status: status,\n Count: count,\n Color: statusColors[status] ?? '#64748b'\n }));\n }\n\n // =======================================================================\n // Filters\n // =======================================================================\n\n public applyFilters(): void {\n // First: exclude child labels (those with ParentID) from top-level list\n let result = this.Labels.filter(l => !l.ParentID);\n\n // Apply scope filter\n if (this.ScopeFilter) {\n result = result.filter(l => l.Scope === this.ScopeFilter);\n }\n\n // Apply status filter\n if (this.StatusFilter) {\n result = result.filter(l => l.Status === this.StatusFilter);\n }\n\n // Apply search\n if (this.SearchText) {\n const search = this.SearchText.toLowerCase();\n result = result.filter(l => {\n const name = (l.Name ?? '').toLowerCase();\n const desc = (l.Description ?? '').toLowerCase();\n const entityName = (l.Entity ?? this.ResolveEntityName(l.EntityID)).toLowerCase();\n return name.includes(search) || desc.includes(search) || entityName.includes(search);\n });\n }\n\n // Apply sorting\n result = this.sortLabels(result);\n\n this.FilteredLabels = result;\n this.cdr.markForCheck();\n }\n\n private sortLabels(labels: MJVersionLabelEntityType[]): MJVersionLabelEntityType[] {\n const dir = this.SortDirection === 'asc' ? 1 : -1;\n return [...labels].sort((a, b) => {\n switch (this.SortField) {\n case 'Name':\n return dir * (a.Name ?? '').localeCompare(b.Name ?? '');\n case 'Scope':\n return dir * (a.Scope ?? '').localeCompare(b.Scope ?? '');\n case 'Status':\n return dir * (a.Status ?? '').localeCompare(b.Status ?? '');\n case 'Items': {\n const aCount = this.GetItemCount(a.ID);\n const bCount = this.GetItemCount(b.ID);\n return dir * (aCount - bCount);\n }\n case 'Date':\n default: {\n const aDate = (a as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n const bDate = (b as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n return dir * String(aDate).localeCompare(String(bDate));\n }\n }\n });\n }\n\n public OnSortChange(field: SortField): void {\n if (this.SortField === field) {\n this.SortDirection = this.SortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDirection = field === 'Date' ? 'desc' : 'asc';\n }\n this.applyFilters();\n this.persistPreferences();\n }\n\n public GetSortIcon(field: SortField): string {\n if (this.SortField !== field) return 'fa-solid fa-sort';\n return this.SortDirection === 'asc' ? 'fa-solid fa-sort-up' : 'fa-solid fa-sort-down';\n }\n\n public OnScopeFilterChange(scope: string): void {\n this.ScopeFilter = this.ScopeFilter === scope ? '' : scope;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnStatusFilterChange(status: string): void {\n this.StatusFilter = this.StatusFilter === status ? '' : status;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnSearchChange(text: string): void {\n this.SearchText = text;\n this.applyFilters();\n }\n\n public Refresh(): void {\n this.LoadData();\n }\n\n // =======================================================================\n // View mode and detail panel\n // =======================================================================\n\n public ToggleViewMode(): void {\n this.ViewMode = this.ViewMode === 'card' ? 'list' : 'card';\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n\n public SetViewMode(mode: 'card' | 'list'): void {\n if (this.ViewMode !== mode) {\n this.ViewMode = mode;\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n }\n\n public OnLabelClick(label: MJVersionLabelEntityType): void {\n this.SelectedLabel = label;\n this.ShowDetailPanel = true;\n this.cdr.markForCheck();\n }\n\n public OnDetailPanelClose(): void {\n this.ShowDetailPanel = false;\n this.SelectedLabel = null;\n this.cdr.markForCheck();\n }\n\n public OnLabelUpdated(): void {\n this.LoadData();\n }\n\n public OnEntityLinkClick(event: EntityLinkClickEvent): void {\n this.navigationService.OpenEntityRecord(event.EntityName, event.CompositeKey);\n }\n\n // =======================================================================\n // User preferences\n // =======================================================================\n\n private loadUserPreferences(): void {\n try {\n const json = UserInfoEngine.Instance.GetSetting(VersionHistoryLabelsResourceComponent.PREFS_KEY);\n if (json) {\n const prefs = JSON.parse(json) as VersionLabelPreferences;\n this.ViewMode = prefs.ViewMode ?? 'card';\n this.ScopeFilter = prefs.ActiveScopeFilter ?? '';\n this.StatusFilter = prefs.ActiveStatusFilter ?? '';\n if (prefs.SortField) this.SortField = prefs.SortField as SortField;\n if (prefs.SortDirection) this.SortDirection = prefs.SortDirection;\n }\n } catch (e) {\n console.warn('[VersionLabels] Failed to load user preferences:', e);\n } finally {\n this.preferencesLoaded = true;\n }\n }\n\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n\n const prefs: VersionLabelPreferences = {\n ViewMode: this.ViewMode,\n ActiveScopeFilter: this.ScopeFilter,\n ActiveStatusFilter: this.StatusFilter,\n DefaultDetailTab: 'overview',\n SortField: this.SortField,\n SortDirection: this.SortDirection,\n };\n\n UserInfoEngine.Instance.SetSettingDebounced(\n VersionHistoryLabelsResourceComponent.PREFS_KEY,\n JSON.stringify(prefs)\n );\n }\n\n // =======================================================================\n // Create Label Wizard\n // =======================================================================\n\n public OpenCreateDialog(): void {\n this.ShowCreateWizard = true;\n this.cdr.markForCheck();\n }\n\n public OnLabelCreated(_event: { LabelCount: number; ItemCount: number }): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n this.LoadData();\n }\n\n public OnCreateWizardCancel(): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n }\n\n // =======================================================================\n // Display helpers\n // =======================================================================\n\n public GetScopeIcon(scope: string | undefined): string {\n const icons: Record<string, string> = {\n 'System': 'fa-solid fa-globe',\n 'Entity': 'fa-solid fa-table',\n 'Record': 'fa-solid fa-file'\n };\n return icons[scope ?? ''] ?? 'fa-solid fa-tag';\n }\n\n public GetStatusClass(status: string | undefined): string {\n const classes: Record<string, string> = {\n 'Active': 'status-active',\n 'Archived': 'status-archived',\n 'Restored': 'status-restored'\n };\n return classes[status ?? ''] ?? '';\n }\n\n public FormatDate(date: Date | string | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public FormatNumber(num: number): string {\n if (num >= 1000) return (num / 1000).toFixed(1) + 'k';\n return num.toString();\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (!ms) return '';\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n }\n\n public IsGroupParent(label: MJVersionLabelEntityType): boolean {\n return !label.RecordID && !label.ParentID && !!label.EntityID;\n }\n\n public GetChildLabels(parentId: string | undefined): MJVersionLabelEntityType[] {\n if (!parentId) return [];\n return this.Labels.filter(l => UUIDsEqual(l.ParentID, parentId));\n }\n}\n","<div class=\"labels-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading version labels...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Version Labels</h2>\n <p class=\"page-subtitle\">Manage versioning snapshots across your system</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'card'\" (click)=\"SetViewMode('card')\" title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'list'\" (click)=\"SetViewMode('list')\" title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-primary\" (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Label</span>\n </button>\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); color: var(--mj-brand-primary);\">\n <i class=\"fa-solid fa-tags\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(TotalLabels)}}</div>\n <div class=\"kpi-label\">Total Labels</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-success) 10%, transparent); color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ActiveLabels)}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-text-muted) 10%, transparent); color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-box-archive\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ArchivedLabels)}}</div>\n <div class=\"kpi-label\">Archived</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); color: var(--mj-status-warning);\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(RestoredLabels)}}</div>\n <div class=\"kpi-label\">Restored</div>\n </div>\n </div>\n </div>\n <!-- Scope breakdown -->\n <div class=\"scope-chips\">\n @for (stat of ScopeStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"ScopeFilter === stat.Scope\"\n (click)=\"OnScopeFilterChange(stat.Scope)\">\n <i [class]=\"stat.Icon\"></i>\n <span>{{stat.Scope}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n @for (stat of StatusStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"StatusFilter === stat.Status\"\n [ngClass]=\"GetStatusClass(stat.Status)\"\n (click)=\"OnStatusFilterChange(stat.Status)\">\n <span>{{stat.Status}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n </div>\n <!-- Search -->\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search labels by name, description, or entity...\"\n [ngModel]=\"SearchText\"\n (ngModelChange)=\"OnSearchChange($event)\" />\n @if (SearchText) {\n <button class=\"btn-clear\" (click)=\"OnSearchChange('')\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <!-- Labels Card View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'card') {\n <div class=\"labels-list\">\n @for (label of FilteredLabels; track label) {\n <div class=\"label-card clickable\"\n [class.group-parent]=\"IsGroupParent(label)\"\n (click)=\"OnLabelClick(label)\">\n <div class=\"label-header\">\n <div class=\"label-title-row\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"label-scope-icon\"></i>\n <h3 class=\"label-name\">{{label.Name}}</h3>\n @if (IsGroupParent(label)) {\n <span class=\"group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{GetChildLabels(label.ID).length}} records\n </span>\n }\n <span class=\"label-status\" [ngClass]=\"GetStatusClass(label.Status)\">\n {{label.Status}}\n </span>\n </div>\n <div class=\"label-meta\">\n <span class=\"meta-item\" title=\"Scope\">\n <i class=\"fa-solid fa-layer-group\"></i> {{label.Scope}}\n </span>\n @if (label.Entity || label.EntityID) {\n <span class=\"meta-item\" title=\"Entity\">\n <i class=\"fa-solid fa-table\"></i> {{label.Entity ?? ResolveEntityName(label.EntityID)}}\n </span>\n }\n @if (label.RecordID) {\n <span class=\"meta-item\" title=\"Record ID\">\n <i class=\"fa-solid fa-fingerprint\"></i> {{label.RecordID | slice:0:12}}...\n </span>\n }\n @if (label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{label.ItemCount}} items\n </span>\n }\n @if (!label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{GetItemCount(label.ID)}} items\n </span>\n }\n @if (label.CreationDurationMS) {\n <span class=\"meta-item\" title=\"Creation time\">\n <i class=\"fa-solid fa-stopwatch\"></i> {{FormatDuration(label.CreationDurationMS)}}\n </span>\n }\n @if (label.CreatedByUser) {\n <span class=\"meta-item\" title=\"Created by\">\n <i class=\"fa-solid fa-user\"></i> {{label.CreatedByUser}}\n </span>\n }\n <span class=\"meta-item\" title=\"Created\">\n <i class=\"fa-regular fa-clock\"></i> {{FormatDate(label.__mj_CreatedAt)}}\n </span>\n </div>\n </div>\n @if (label.Description) {\n <p class=\"label-description\">{{label.Description}}</p>\n }\n <!-- Child labels for group parents -->\n @if (IsGroupParent(label) && GetChildLabels(label.ID).length > 0) {\n <div class=\"child-labels\">\n @for (child of GetChildLabels(label.ID); track child) {\n <div class=\"child-label\">\n <i class=\"fa-solid fa-tag child-icon\"></i>\n <span class=\"child-name\">{{child.Name}}</span>\n @if (child.RecordID) {\n <span class=\"child-record\">{{child.RecordID | slice:0:12}}...</span>\n }\n @if (child.ItemCount) {\n <span class=\"child-items\">{{child.ItemCount}} items</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Labels List View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'list') {\n <div class=\"labels-table\">\n <div class=\"list-header-row\">\n <span class=\"list-col-icon\"></span>\n <span class=\"list-col-name sortable-header\" (click)=\"OnSortChange('Name')\">\n Name <i [class]=\"GetSortIcon('Name')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-entity\">Entity</span>\n <span class=\"list-col-status sortable-header\" (click)=\"OnSortChange('Status')\">\n Status <i [class]=\"GetSortIcon('Status')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-items sortable-header\" (click)=\"OnSortChange('Items')\">\n Items <i [class]=\"GetSortIcon('Items')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-date sortable-header\" (click)=\"OnSortChange('Date')\">\n Created <i [class]=\"GetSortIcon('Date')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-arrow\"></span>\n </div>\n @for (label of FilteredLabels; track label) {\n <div class=\"list-row clickable\"\n (click)=\"OnLabelClick(label)\">\n <span class=\"list-col-icon\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"list-scope-icon\"></i>\n </span>\n <span class=\"list-col-name\">\n <span class=\"list-label-name\">{{label.Name}}</span>\n @if (IsGroupParent(label)) {\n <span class=\"list-group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i> {{GetChildLabels(label.ID).length}}\n </span>\n }\n </span>\n <span class=\"list-col-entity\">{{label.Entity ?? ResolveEntityName(label.EntityID)}}</span>\n <span class=\"list-col-status\">\n <span class=\"label-status small\" [ngClass]=\"GetStatusClass(label.Status)\">{{label.Status}}</span>\n </span>\n <span class=\"list-col-items\">{{label.ItemCount || GetItemCount(label.ID)}}</span>\n <span class=\"list-col-date\">{{FormatDate(label.__mj_CreatedAt)}}</span>\n <span class=\"list-col-arrow\">\n <i class=\"fa-solid fa-chevron-right list-arrow\"></i>\n </span>\n </div>\n }\n </div>\n }\n <!-- Empty state -->\n @if (FilteredLabels.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags empty-icon\"></i>\n <h3>No labels found</h3>\n @if (SearchText || ScopeFilter || StatusFilter) {\n <p>\n Try adjusting your filters or search criteria.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <p>\n No version labels have been created yet.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <button class=\"btn-primary empty-cta\"\n (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Your First Label</span>\n </button>\n }\n </div>\n }\n }\n\n <!-- Create Label Wizard -->\n @if (ShowCreateWizard) {\n <div class=\"create-wizard-overlay\" (click)=\"OnCreateWizardCancel()\">\n <div class=\"create-wizard-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"create-wizard-header\">\n <h3 class=\"create-wizard-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Create Version Label\n </h3>\n <button class=\"create-wizard-close\" (click)=\"OnCreateWizardCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"create-wizard-body\">\n <mj-label-create\n (Created)=\"OnLabelCreated($event)\"\n (Cancel)=\"OnCreateWizardCancel()\">\n </mj-label-create>\n </div>\n </div>\n </div>\n }\n\n <!-- Detail panel -->\n @if (ShowDetailPanel && SelectedLabel) {\n <mj-label-detail-panel\n [Label]=\"SelectedLabel\"\n [AllLabels]=\"Labels\"\n [ItemCountMap]=\"ItemCountMap\"\n (Close)=\"OnDetailPanelClose()\"\n (LabelUpdated)=\"OnLabelUpdated()\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\">\n </mj-label-detail-panel>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"labels-resource.component.js","sourceRoot":"","sources":["../../../src/VersionHistory/components/labels-resource.component.ts","../../../src/VersionHistory/components/labels-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { ResourceData, MJVersionLabelEntityType, MJVersionLabelItemEntityType, UserInfoEngine } from '@memberjunction/core-entities';\nimport { EntityLinkClickEvent } from '@memberjunction/ng-versions';\ninterface ScopeStat {\n Scope: string;\n Count: number;\n Icon: string;\n Color: string;\n}\n\ninterface StatusStat {\n Status: string;\n Count: number;\n Color: string;\n}\n\ninterface VersionLabelPreferences {\n ViewMode: 'card' | 'list';\n ActiveScopeFilter: string;\n ActiveStatusFilter: string;\n DefaultDetailTab: string;\n SortField: string;\n SortDirection: 'asc' | 'desc';\n}\n\ntype SortField = 'Name' | 'Scope' | 'Status' | 'Items' | 'Date';\n\n@RegisterClass(BaseResourceComponent, 'VersionHistoryLabelsResource')\n@Component({\n standalone: false,\n selector: 'mj-version-history-labels-resource',\n templateUrl: './labels-resource.component.html',\n styleUrls: ['./labels-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VersionHistoryLabelsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n private static readonly PREFS_KEY = 'VersionHistory.Labels.UserPreferences';\n\n public IsLoading = true;\n\n // View mode\n public ViewMode: 'card' | 'list' = 'card';\n\n // Detail panel\n public SelectedLabel: MJVersionLabelEntityType | null = null;\n public ShowDetailPanel = false;\n\n // Stats\n public TotalLabels = 0;\n public ActiveLabels = 0;\n public ArchivedLabels = 0;\n public RestoredLabels = 0;\n\n // Grouped data\n public ScopeStats: ScopeStat[] = [];\n public StatusStats: StatusStat[] = [];\n public Labels: MJVersionLabelEntityType[] = [];\n public FilteredLabels: MJVersionLabelEntityType[] = [];\n public ItemCountMap = new Map<string, number>();\n\n // Filters\n public ScopeFilter = '';\n public StatusFilter = '';\n public SearchText = '';\n\n // Sorting\n public SortField: SortField = 'Date';\n public SortDirection: 'asc' | 'desc' = 'desc';\n\n // User preferences\n private preferencesLoaded = false;\n\n // Create Label Wizard\n public ShowCreateWizard = false;\n\n private metadata = this.ProviderToUse;\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadUserPreferences();\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Labels';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-tags';\n }\n\n // =======================================================================\n // Data loading\n // =======================================================================\n\n public async LoadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n const [labelsResult, itemsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Version Labels',\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 500,\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Version Label Items',\n Fields: ['VersionLabelID'],\n ResultType: 'simple'\n }\n ]);\n\n if (labelsResult.Success) {\n this.Labels = labelsResult.Results as MJVersionLabelEntityType[];\n const items = itemsResult.Success\n ? itemsResult.Results as MJVersionLabelItemEntityType[]\n : [];\n this.ItemCountMap = this.buildItemCountMap(items);\n this.computeStats();\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error loading version labels:', error);\n } finally {\n this.IsLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private buildItemCountMap(items: MJVersionLabelItemEntityType[]): Map<string, number> {\n const counts = new Map<string, number>();\n for (const item of items) {\n const labelId = item.VersionLabelID ?? '';\n counts.set(labelId, (counts.get(labelId) ?? 0) + 1);\n }\n return counts;\n }\n\n public GetItemCount(labelId: string | undefined): number {\n return this.ItemCountMap.get(labelId ?? '') ?? 0;\n }\n\n public ResolveEntityName(entityId: string | undefined): string {\n if (!entityId) return '';\n const entity = this.metadata.Entities.find(e => UUIDsEqual(e.ID, entityId));\n return entity ? entity.Name : '';\n }\n\n // =======================================================================\n // Stats\n // =======================================================================\n\n private computeStats(): void {\n // Only count root-level labels (exclude children) for stats\n const rootLabels = this.Labels.filter(l => !l.ParentID);\n this.TotalLabels = rootLabels.length;\n this.ActiveLabels = rootLabels.filter(l => l.Status === 'Active').length;\n this.ArchivedLabels = rootLabels.filter(l => l.Status === 'Archived').length;\n this.RestoredLabels = rootLabels.filter(l => l.Status === 'Restored').length;\n\n this.ScopeStats = this.computeScopeStats();\n this.StatusStats = this.computeStatusStats();\n }\n\n private computeScopeStats(): ScopeStat[] {\n const scopeMap = new Map<string, number>();\n for (const label of this.Labels) {\n const scope = label.Scope ?? 'Record';\n scopeMap.set(scope, (scopeMap.get(scope) ?? 0) + 1);\n }\n\n const scopeConfig: Record<string, { Icon: string; Color: string }> = {\n 'System': { Icon: 'fa-solid fa-globe', Color: '#6366f1' },\n 'Entity': { Icon: 'fa-solid fa-table', Color: '#3b82f6' },\n 'Record': { Icon: 'fa-solid fa-file', Color: '#10b981' }\n };\n\n return Array.from(scopeMap.entries()).map(([scope, count]) => ({\n Scope: scope,\n Count: count,\n Icon: scopeConfig[scope]?.Icon ?? 'fa-solid fa-tag',\n Color: scopeConfig[scope]?.Color ?? '#64748b'\n }));\n }\n\n private computeStatusStats(): StatusStat[] {\n const statusMap = new Map<string, number>();\n for (const label of this.Labels) {\n const status = label.Status ?? 'Active';\n statusMap.set(status, (statusMap.get(status) ?? 0) + 1);\n }\n\n const statusColors: Record<string, string> = {\n 'Active': '#10b981',\n 'Archived': '#6b7280',\n 'Restored': '#f59e0b'\n };\n\n return Array.from(statusMap.entries()).map(([status, count]) => ({\n Status: status,\n Count: count,\n Color: statusColors[status] ?? '#64748b'\n }));\n }\n\n // =======================================================================\n // Filters\n // =======================================================================\n\n public applyFilters(): void {\n // First: exclude child labels (those with ParentID) from top-level list\n let result = this.Labels.filter(l => !l.ParentID);\n\n // Apply scope filter\n if (this.ScopeFilter) {\n result = result.filter(l => l.Scope === this.ScopeFilter);\n }\n\n // Apply status filter\n if (this.StatusFilter) {\n result = result.filter(l => l.Status === this.StatusFilter);\n }\n\n // Apply search\n if (this.SearchText) {\n const search = this.SearchText.toLowerCase();\n result = result.filter(l => {\n const name = (l.Name ?? '').toLowerCase();\n const desc = (l.Description ?? '').toLowerCase();\n const entityName = (l.Entity ?? this.ResolveEntityName(l.EntityID)).toLowerCase();\n return name.includes(search) || desc.includes(search) || entityName.includes(search);\n });\n }\n\n // Apply sorting\n result = this.sortLabels(result);\n\n this.FilteredLabels = result;\n this.cdr.markForCheck();\n }\n\n private sortLabels(labels: MJVersionLabelEntityType[]): MJVersionLabelEntityType[] {\n const dir = this.SortDirection === 'asc' ? 1 : -1;\n return [...labels].sort((a, b) => {\n switch (this.SortField) {\n case 'Name':\n return dir * (a.Name ?? '').localeCompare(b.Name ?? '');\n case 'Scope':\n return dir * (a.Scope ?? '').localeCompare(b.Scope ?? '');\n case 'Status':\n return dir * (a.Status ?? '').localeCompare(b.Status ?? '');\n case 'Items': {\n const aCount = this.GetItemCount(a.ID);\n const bCount = this.GetItemCount(b.ID);\n return dir * (aCount - bCount);\n }\n case 'Date':\n default: {\n const aDate = (a as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n const bDate = (b as Record<string, unknown>)['__mj_CreatedAt'] ?? '';\n return dir * String(aDate).localeCompare(String(bDate));\n }\n }\n });\n }\n\n public OnSortChange(field: SortField): void {\n if (this.SortField === field) {\n this.SortDirection = this.SortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.SortField = field;\n this.SortDirection = field === 'Date' ? 'desc' : 'asc';\n }\n this.applyFilters();\n this.persistPreferences();\n }\n\n public GetSortIcon(field: SortField): string {\n if (this.SortField !== field) return 'fa-solid fa-sort';\n return this.SortDirection === 'asc' ? 'fa-solid fa-sort-up' : 'fa-solid fa-sort-down';\n }\n\n public OnScopeFilterChange(scope: string): void {\n this.ScopeFilter = this.ScopeFilter === scope ? '' : scope;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnStatusFilterChange(status: string): void {\n this.StatusFilter = this.StatusFilter === status ? '' : status;\n this.applyFilters();\n this.persistPreferences();\n }\n\n public OnSearchChange(text: string): void {\n this.SearchText = text;\n this.applyFilters();\n }\n\n public Refresh(): void {\n this.LoadData();\n }\n\n // =======================================================================\n // View mode and detail panel\n // =======================================================================\n\n public ToggleViewMode(): void {\n this.ViewMode = this.ViewMode === 'card' ? 'list' : 'card';\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n\n public SetViewMode(mode: 'card' | 'list'): void {\n if (this.ViewMode !== mode) {\n this.ViewMode = mode;\n this.persistPreferences();\n this.cdr.markForCheck();\n }\n }\n\n public OnLabelClick(label: MJVersionLabelEntityType): void {\n this.SelectedLabel = label;\n this.ShowDetailPanel = true;\n this.cdr.markForCheck();\n }\n\n public OnDetailPanelClose(): void {\n this.ShowDetailPanel = false;\n this.SelectedLabel = null;\n this.cdr.markForCheck();\n }\n\n public OnLabelUpdated(): void {\n this.LoadData();\n }\n\n public OnEntityLinkClick(event: EntityLinkClickEvent): void {\n this.navigationService.OpenEntityRecord(event.EntityName, event.CompositeKey);\n }\n\n // =======================================================================\n // User preferences\n // =======================================================================\n\n private loadUserPreferences(): void {\n try {\n const json = UserInfoEngine.Instance.GetSetting(VersionHistoryLabelsResourceComponent.PREFS_KEY);\n if (json) {\n const prefs = JSON.parse(json) as VersionLabelPreferences;\n this.ViewMode = prefs.ViewMode ?? 'card';\n this.ScopeFilter = prefs.ActiveScopeFilter ?? '';\n this.StatusFilter = prefs.ActiveStatusFilter ?? '';\n if (prefs.SortField) this.SortField = prefs.SortField as SortField;\n if (prefs.SortDirection) this.SortDirection = prefs.SortDirection;\n }\n } catch (e) {\n console.warn('[VersionLabels] Failed to load user preferences:', e);\n } finally {\n this.preferencesLoaded = true;\n }\n }\n\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n\n const prefs: VersionLabelPreferences = {\n ViewMode: this.ViewMode,\n ActiveScopeFilter: this.ScopeFilter,\n ActiveStatusFilter: this.StatusFilter,\n DefaultDetailTab: 'overview',\n SortField: this.SortField,\n SortDirection: this.SortDirection,\n };\n\n UserInfoEngine.Instance.SetSettingDebounced(\n VersionHistoryLabelsResourceComponent.PREFS_KEY,\n JSON.stringify(prefs)\n );\n }\n\n // =======================================================================\n // Create Label Wizard\n // =======================================================================\n\n public OpenCreateDialog(): void {\n this.ShowCreateWizard = true;\n this.cdr.markForCheck();\n }\n\n public OnLabelCreated(_event: { LabelCount: number; ItemCount: number }): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n this.LoadData();\n }\n\n public OnCreateWizardCancel(): void {\n this.ShowCreateWizard = false;\n this.cdr.markForCheck();\n }\n\n // =======================================================================\n // Display helpers\n // =======================================================================\n\n public GetScopeIcon(scope: string | undefined): string {\n const icons: Record<string, string> = {\n 'System': 'fa-solid fa-globe',\n 'Entity': 'fa-solid fa-table',\n 'Record': 'fa-solid fa-file'\n };\n return icons[scope ?? ''] ?? 'fa-solid fa-tag';\n }\n\n public GetStatusClass(status: string | undefined): string {\n const classes: Record<string, string> = {\n 'Active': 'status-active',\n 'Archived': 'status-archived',\n 'Restored': 'status-restored'\n };\n return classes[status ?? ''] ?? '';\n }\n\n public FormatDate(date: Date | string | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\n\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public FormatNumber(num: number): string {\n if (num >= 1000) return (num / 1000).toFixed(1) + 'k';\n return num.toString();\n }\n\n public FormatDuration(ms: number | undefined): string {\n if (!ms) return '';\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n }\n\n public IsGroupParent(label: MJVersionLabelEntityType): boolean {\n return !label.RecordID && !label.ParentID && !!label.EntityID;\n }\n\n public GetChildLabels(parentId: string | undefined): MJVersionLabelEntityType[] {\n if (!parentId) return [];\n return this.Labels.filter(l => UUIDsEqual(l.ParentID, parentId));\n }\n}\n","<div class=\"labels-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading version labels...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Version Labels</h2>\n <p class=\"page-subtitle\">Manage versioning snapshots across your system</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'card'\" (click)=\"SetViewMode('card')\" title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'list'\" (click)=\"SetViewMode('list')\" title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-primary\" (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Label</span>\n </button>\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); color: var(--mj-brand-primary);\">\n <i class=\"fa-solid fa-tags\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(TotalLabels)}}</div>\n <div class=\"kpi-label\">Total Labels</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-success) 10%, transparent); color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ActiveLabels)}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-text-muted) 10%, transparent); color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-box-archive\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ArchivedLabels)}}</div>\n <div class=\"kpi-label\">Archived</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); color: var(--mj-status-warning);\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(RestoredLabels)}}</div>\n <div class=\"kpi-label\">Restored</div>\n </div>\n </div>\n </div>\n <!-- Scope breakdown -->\n <div class=\"scope-chips\">\n @for (stat of ScopeStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"ScopeFilter === stat.Scope\"\n (click)=\"OnScopeFilterChange(stat.Scope)\">\n <i [class]=\"stat.Icon\"></i>\n <span>{{stat.Scope}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n @for (stat of StatusStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"StatusFilter === stat.Status\"\n [ngClass]=\"GetStatusClass(stat.Status)\"\n (click)=\"OnStatusFilterChange(stat.Status)\">\n <span>{{stat.Status}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n </div>\n <!-- Search -->\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search labels by name, description, or entity...\"\n [ngModel]=\"SearchText\"\n (ngModelChange)=\"OnSearchChange($event)\" />\n @if (SearchText) {\n <button class=\"btn-clear\" (click)=\"OnSearchChange('')\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <!-- Labels Card View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'card') {\n <div class=\"labels-list\">\n @for (label of FilteredLabels; track label) {\n <div class=\"label-card clickable\"\n [class.group-parent]=\"IsGroupParent(label)\"\n (click)=\"OnLabelClick(label)\">\n <div class=\"label-header\">\n <div class=\"label-title-row\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"label-scope-icon\"></i>\n <h3 class=\"label-name\">{{label.Name}}</h3>\n @if (IsGroupParent(label)) {\n <span class=\"group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{GetChildLabels(label.ID).length}} records\n </span>\n }\n <span class=\"label-status\" [ngClass]=\"GetStatusClass(label.Status)\">\n {{label.Status}}\n </span>\n </div>\n <div class=\"label-meta\">\n <span class=\"meta-item\" title=\"Scope\">\n <i class=\"fa-solid fa-layer-group\"></i> {{label.Scope}}\n </span>\n @if (label.Entity || label.EntityID) {\n <span class=\"meta-item\" title=\"Entity\">\n <i class=\"fa-solid fa-table\"></i> {{label.Entity ?? ResolveEntityName(label.EntityID)}}\n </span>\n }\n @if (label.RecordID) {\n <span class=\"meta-item\" title=\"Record ID\">\n <i class=\"fa-solid fa-fingerprint\"></i> {{label.RecordID | slice:0:12}}...\n </span>\n }\n @if (label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{label.ItemCount}} items\n </span>\n }\n @if (!label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{GetItemCount(label.ID)}} items\n </span>\n }\n @if (label.CreationDurationMS) {\n <span class=\"meta-item\" title=\"Creation time\">\n <i class=\"fa-solid fa-stopwatch\"></i> {{FormatDuration(label.CreationDurationMS)}}\n </span>\n }\n @if (label.CreatedByUser) {\n <span class=\"meta-item\" title=\"Created by\">\n <i class=\"fa-solid fa-user\"></i> {{label.CreatedByUser}}\n </span>\n }\n <span class=\"meta-item\" title=\"Created\">\n <i class=\"fa-regular fa-clock\"></i> {{FormatDate(label.__mj_CreatedAt)}}\n </span>\n </div>\n </div>\n @if (label.Description) {\n <p class=\"label-description\">{{label.Description}}</p>\n }\n <!-- Child labels for group parents -->\n @if (IsGroupParent(label) && GetChildLabels(label.ID).length > 0) {\n <div class=\"child-labels\">\n @for (child of GetChildLabels(label.ID); track child) {\n <div class=\"child-label\">\n <i class=\"fa-solid fa-tag child-icon\"></i>\n <span class=\"child-name\">{{child.Name}}</span>\n @if (child.RecordID) {\n <span class=\"child-record\">{{child.RecordID | slice:0:12}}...</span>\n }\n @if (child.ItemCount) {\n <span class=\"child-items\">{{child.ItemCount}} items</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Labels List View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'list') {\n <div class=\"labels-table\">\n <div class=\"list-header-row\">\n <span class=\"list-col-icon\"></span>\n <span class=\"list-col-name sortable-header\" (click)=\"OnSortChange('Name')\">\n Name <i [class]=\"GetSortIcon('Name')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-entity\">Entity</span>\n <span class=\"list-col-status sortable-header\" (click)=\"OnSortChange('Status')\">\n Status <i [class]=\"GetSortIcon('Status')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-items sortable-header\" (click)=\"OnSortChange('Items')\">\n Items <i [class]=\"GetSortIcon('Items')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-date sortable-header\" (click)=\"OnSortChange('Date')\">\n Created <i [class]=\"GetSortIcon('Date')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-arrow\"></span>\n </div>\n @for (label of FilteredLabels; track label) {\n <div class=\"list-row clickable\"\n (click)=\"OnLabelClick(label)\">\n <span class=\"list-col-icon\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"list-scope-icon\"></i>\n </span>\n <span class=\"list-col-name\">\n <span class=\"list-label-name\">{{label.Name}}</span>\n @if (IsGroupParent(label)) {\n <span class=\"list-group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i> {{GetChildLabels(label.ID).length}}\n </span>\n }\n </span>\n <span class=\"list-col-entity\">{{label.Entity ?? ResolveEntityName(label.EntityID)}}</span>\n <span class=\"list-col-status\">\n <span class=\"label-status small\" [ngClass]=\"GetStatusClass(label.Status)\">{{label.Status}}</span>\n </span>\n <span class=\"list-col-items\">{{label.ItemCount || GetItemCount(label.ID)}}</span>\n <span class=\"list-col-date\">{{FormatDate(label.__mj_CreatedAt)}}</span>\n <span class=\"list-col-arrow\">\n <i class=\"fa-solid fa-chevron-right list-arrow\"></i>\n </span>\n </div>\n }\n </div>\n }\n <!-- Empty state -->\n @if (FilteredLabels.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags empty-icon\"></i>\n <h3>No labels found</h3>\n @if (SearchText || ScopeFilter || StatusFilter) {\n <p>\n Try adjusting your filters or search criteria.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <p>\n No version labels have been created yet.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <button class=\"btn-primary empty-cta\"\n (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Your First Label</span>\n </button>\n }\n </div>\n }\n }\n\n <!-- Create Label Wizard -->\n @if (ShowCreateWizard) {\n <div class=\"create-wizard-overlay\" (click)=\"OnCreateWizardCancel()\">\n <div class=\"create-wizard-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"create-wizard-header\">\n <h3 class=\"create-wizard-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Create Version Label\n </h3>\n <button class=\"create-wizard-close\" (click)=\"OnCreateWizardCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"create-wizard-body\">\n <mj-label-create\n (Created)=\"OnLabelCreated($event)\"\n (Cancel)=\"OnCreateWizardCancel()\">\n </mj-label-create>\n </div>\n </div>\n </div>\n }\n\n <!-- Detail panel -->\n @if (ShowDetailPanel && SelectedLabel) {\n <mj-label-detail-panel\n [Label]=\"SelectedLabel\"\n [AllLabels]=\"Labels\"\n [ItemCountMap]=\"ItemCountMap\"\n (Close)=\"OnDetailPanelClose()\"\n (LabelUpdated)=\"OnLabelUpdated()\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\">\n </mj-label-detail-panel>\n }\n</div>\n"]}
|
|
@@ -336,7 +336,7 @@ let VersionHistoryRestoreResourceComponent = class VersionHistoryRestoreResource
|
|
|
336
336
|
try {
|
|
337
337
|
this.IsLoading = true;
|
|
338
338
|
this.cdr.markForCheck();
|
|
339
|
-
const rv =
|
|
339
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
340
340
|
const result = await rv.RunView({
|
|
341
341
|
EntityName: 'MJ: Version Label Restores',
|
|
342
342
|
OrderBy: '__mj_CreatedAt DESC',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restore-resource.component.js","sourceRoot":"","sources":["../../../src/VersionHistory/components/restore-resource.component.ts","../../../src/VersionHistory/components/restore-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { ResourceData, UserInfoEngine, MJVersionLabelRestoreEntityType } from '@memberjunction/core-entities';\n\ninterface VersionRestorePreferences {\n StatusFilter: string;\n}\n@RegisterClass(BaseResourceComponent, 'VersionHistoryRestoreResource')\n@Component({\n standalone: false,\n selector: 'mj-version-history-restore-resource',\n templateUrl: './restore-resource.component.html',\n styleUrls: ['./restore-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VersionHistoryRestoreResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public IsLoading = true;\n\n // Stats\n public TotalRestores = 0;\n public SuccessfulRestores = 0;\n public FailedRestores = 0;\n public PartialRestores = 0;\n\n // Data\n public Restores: MJVersionLabelRestoreEntityType[] = [];\n public FilteredRestores: MJVersionLabelRestoreEntityType[] = [];\n\n // Filters\n public StatusFilter = '';\n\n // Expanded detail\n public ExpandedRestoreId = '';\n\n private static readonly PREFS_KEY = 'VersionHistory.Restore.UserPreferences';\n private preferencesLoaded = false;\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadUserPreferences();\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Restore History';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n\n public async LoadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n const result = await rv.RunView<MJVersionLabelRestoreEntityType>({\n EntityName: 'MJ: Version Label Restores',\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 200,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.Restores = result.Results;\n this.computeStats();\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error loading restore history:', error);\n } finally {\n this.IsLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private computeStats(): void {\n this.TotalRestores = this.Restores.length;\n this.SuccessfulRestores = this.Restores.filter(r => r.Status === 'Complete').length;\n this.FailedRestores = this.Restores.filter(r => r.Status === 'Error').length;\n this.PartialRestores = this.Restores.filter(r => r.Status === 'Partial').length;\n }\n\n public applyFilters(): void {\n this.FilteredRestores = this.Restores.filter(r => {\n if (this.StatusFilter && r.Status !== this.StatusFilter) return false;\n return true;\n });\n this.cdr.markForCheck();\n }\n\n public OnStatusFilterChange(status: string): void {\n this.StatusFilter = this.StatusFilter === status ? '' : status;\n this.applyFilters();\n this.persistPreferences();\n }\n\n private loadUserPreferences(): void {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(VersionHistoryRestoreResourceComponent.PREFS_KEY);\n if (raw) {\n const prefs: VersionRestorePreferences = JSON.parse(raw);\n if (prefs.StatusFilter != null) {\n this.StatusFilter = prefs.StatusFilter;\n }\n }\n } catch (error) {\n console.error('Error loading restore preferences:', error);\n this.StatusFilter = '';\n }\n this.preferencesLoaded = true;\n }\n\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n const prefs: VersionRestorePreferences = {\n StatusFilter: this.StatusFilter\n };\n UserInfoEngine.Instance.SetSettingDebounced(VersionHistoryRestoreResourceComponent.PREFS_KEY, JSON.stringify(prefs));\n }\n\n public ToggleExpand(restoreId: string | undefined): void {\n const id = restoreId ?? '';\n this.ExpandedRestoreId = this.ExpandedRestoreId === id ? '' : id;\n this.cdr.markForCheck();\n }\n\n public IsExpanded(restoreId: string | undefined): boolean {\n return this.ExpandedRestoreId === (restoreId ?? '');\n }\n\n public GetStatusClass(status: string | undefined): string {\n const classes: Record<string, string> = {\n 'Complete': 'status-success',\n 'Error': 'status-failed',\n 'In Progress': 'status-progress',\n 'Pending': 'status-pending',\n 'Partial': 'status-partial'\n };\n return classes[status ?? ''] ?? '';\n }\n\n public GetStatusIcon(status: string | undefined): string {\n const icons: Record<string, string> = {\n 'Complete': 'fa-solid fa-circle-check',\n 'Error': 'fa-solid fa-circle-xmark',\n 'In Progress': 'fa-solid fa-spinner fa-spin',\n 'Pending': 'fa-solid fa-clock',\n 'Partial': 'fa-solid fa-circle-half-stroke'\n };\n return icons[status ?? ''] ?? 'fa-solid fa-circle';\n }\n\n public GetProgressPercent(restore: MJVersionLabelRestoreEntityType): number {\n if (!restore.TotalItems) return 0;\n return Math.round(((restore.CompletedItems ?? 0) / restore.TotalItems) * 100);\n }\n\n public FormatDate(date: Date | string | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public Refresh(): void {\n this.LoadData();\n }\n}\n","<div class=\"restore-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading restore history...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Restore History</h2>\n <p class=\"page-subtitle\">Track all restore operations and their outcomes</p>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); color: var(--mj-brand-primary);\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{TotalRestores}}</div>\n <div class=\"kpi-label\">Total Restores</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-success) 10%, transparent); color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{SuccessfulRestores}}</div>\n <div class=\"kpi-label\">Successful</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-error) 10%, transparent); color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-circle-xmark\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FailedRestores}}</div>\n <div class=\"kpi-label\">Failed</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); color: var(--mj-status-warning);\">\n <i class=\"fa-solid fa-circle-half-stroke\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{PartialRestores}}</div>\n <div class=\"kpi-label\">Partial</div>\n </div>\n </div>\n </div>\n <!-- Filters -->\n <div class=\"filter-row\">\n <button class=\"filter-chip\"\n [class.active]=\"StatusFilter === 'Complete'\"\n (click)=\"OnStatusFilterChange('Complete')\">\n <i class=\"fa-solid fa-circle-check\"></i> Complete\n </button>\n <button class=\"filter-chip\"\n [class.active]=\"StatusFilter === 'Error'\"\n (click)=\"OnStatusFilterChange('Error')\">\n <i class=\"fa-solid fa-circle-xmark\"></i> Error\n </button>\n <button class=\"filter-chip\"\n [class.active]=\"StatusFilter === 'Partial'\"\n (click)=\"OnStatusFilterChange('Partial')\">\n <i class=\"fa-solid fa-circle-half-stroke\"></i> Partial\n </button>\n </div>\n <!-- Restore List -->\n @if (FilteredRestores.length > 0) {\n <div class=\"restore-list\">\n @for (restore of FilteredRestores; track restore) {\n <div class=\"restore-card\"\n [ngClass]=\"{'expanded': IsExpanded(restore.ID)}\">\n <div class=\"restore-header\" (click)=\"ToggleExpand(restore.ID)\">\n <div class=\"restore-header-left\">\n <i [class]=\"GetStatusIcon(restore.Status)\"\n [ngClass]=\"GetStatusClass(restore.Status)\"\n class=\"status-icon\"></i>\n <div class=\"restore-info\">\n <div class=\"restore-label-name\">\n {{restore.VersionLabel}}\n </div>\n @if (restore.StartedAt) {\n <div class=\"restore-date\">{{FormatDate(restore.StartedAt)}}</div>\n }\n </div>\n </div>\n <div class=\"restore-header-right\">\n <div class=\"restore-progress-bar\">\n <div class=\"progress-fill\"\n [ngClass]=\"GetStatusClass(restore.Status)\"\n [style.width.%]=\"GetProgressPercent(restore)\">\n </div>\n </div>\n <span class=\"restore-count\">\n {{restore.CompletedItems ?? 0}} / {{restore.TotalItems ?? 0}} items\n </span>\n <i class=\"fa-solid\"\n [ngClass]=\"IsExpanded(restore.ID) ? 'fa-chevron-up' : 'fa-chevron-down'\"\n class=\"expand-icon\">\n </i>\n </div>\n </div>\n <!-- Expanded Details -->\n @if (IsExpanded(restore.ID)) {\n <div class=\"restore-details\">\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\" [ngClass]=\"GetStatusClass(restore.Status)\">\n {{restore.Status}}\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Items Completed</span>\n <span class=\"detail-value\">{{restore.CompletedItems ?? 0}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Items Failed</span>\n <span class=\"detail-value\" [class.text-error]=\"(restore.FailedItems ?? 0) > 0\">\n {{restore.FailedItems ?? 0}}\n </span>\n </div>\n @if (restore.User) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Restored By</span>\n <span class=\"detail-value\">{{restore.User}}</span>\n </div>\n }\n @if (restore.PreRestoreLabelID) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Pre-Restore Label</span>\n @if (restore.PreRestoreLabel) {\n <span class=\"detail-value detail-mono\">\n {{restore.PreRestoreLabel}}\n </span>\n }\n @if (!restore.PreRestoreLabel) {\n <span class=\"detail-value detail-mono\">\n {{restore.PreRestoreLabelID | slice:0:20}}...\n </span>\n }\n </div>\n }\n </div>\n @if (restore.ErrorLog) {\n <div class=\"error-log\">\n <div class=\"error-log-header\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n Error Log\n </div>\n <pre class=\"error-log-content\">{{restore.ErrorLog}}</pre>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (FilteredRestores.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-clock-rotate-left empty-icon\"></i>\n <h3>No restore operations found</h3>\n @if (StatusFilter) {\n <p>\n Try adjusting your filters.\n </p>\n }\n @if (!StatusFilter) {\n <p>\n No restores have been performed yet. Use the VersionHistoryEngine to restore records to a labeled state.\n </p>\n }\n </div>\n }\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"restore-resource.component.js","sourceRoot":"","sources":["../../../src/VersionHistory/components/restore-resource.component.ts","../../../src/VersionHistory/components/restore-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView } from '@memberjunction/core';\nimport { ResourceData, UserInfoEngine, MJVersionLabelRestoreEntityType } from '@memberjunction/core-entities';\n\ninterface VersionRestorePreferences {\n StatusFilter: string;\n}\n@RegisterClass(BaseResourceComponent, 'VersionHistoryRestoreResource')\n@Component({\n standalone: false,\n selector: 'mj-version-history-restore-resource',\n templateUrl: './restore-resource.component.html',\n styleUrls: ['./restore-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VersionHistoryRestoreResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public IsLoading = true;\n\n // Stats\n public TotalRestores = 0;\n public SuccessfulRestores = 0;\n public FailedRestores = 0;\n public PartialRestores = 0;\n\n // Data\n public Restores: MJVersionLabelRestoreEntityType[] = [];\n public FilteredRestores: MJVersionLabelRestoreEntityType[] = [];\n\n // Filters\n public StatusFilter = '';\n\n // Expanded detail\n public ExpandedRestoreId = '';\n\n private static readonly PREFS_KEY = 'VersionHistory.Restore.UserPreferences';\n private preferencesLoaded = false;\n protected override destroy$ = new Subject<void>();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.loadUserPreferences();\n this.LoadData();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Restore History';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-clock-rotate-left';\n }\n\n public async LoadData(): Promise<void> {\n try {\n this.IsLoading = true;\n this.cdr.markForCheck();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJVersionLabelRestoreEntityType>({\n EntityName: 'MJ: Version Label Restores',\n OrderBy: '__mj_CreatedAt DESC',\n MaxRows: 200,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.Restores = result.Results;\n this.computeStats();\n this.applyFilters();\n }\n } catch (error) {\n console.error('Error loading restore history:', error);\n } finally {\n this.IsLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n }\n }\n\n private computeStats(): void {\n this.TotalRestores = this.Restores.length;\n this.SuccessfulRestores = this.Restores.filter(r => r.Status === 'Complete').length;\n this.FailedRestores = this.Restores.filter(r => r.Status === 'Error').length;\n this.PartialRestores = this.Restores.filter(r => r.Status === 'Partial').length;\n }\n\n public applyFilters(): void {\n this.FilteredRestores = this.Restores.filter(r => {\n if (this.StatusFilter && r.Status !== this.StatusFilter) return false;\n return true;\n });\n this.cdr.markForCheck();\n }\n\n public OnStatusFilterChange(status: string): void {\n this.StatusFilter = this.StatusFilter === status ? '' : status;\n this.applyFilters();\n this.persistPreferences();\n }\n\n private loadUserPreferences(): void {\n try {\n const raw = UserInfoEngine.Instance.GetSetting(VersionHistoryRestoreResourceComponent.PREFS_KEY);\n if (raw) {\n const prefs: VersionRestorePreferences = JSON.parse(raw);\n if (prefs.StatusFilter != null) {\n this.StatusFilter = prefs.StatusFilter;\n }\n }\n } catch (error) {\n console.error('Error loading restore preferences:', error);\n this.StatusFilter = '';\n }\n this.preferencesLoaded = true;\n }\n\n private persistPreferences(): void {\n if (!this.preferencesLoaded) return;\n const prefs: VersionRestorePreferences = {\n StatusFilter: this.StatusFilter\n };\n UserInfoEngine.Instance.SetSettingDebounced(VersionHistoryRestoreResourceComponent.PREFS_KEY, JSON.stringify(prefs));\n }\n\n public ToggleExpand(restoreId: string | undefined): void {\n const id = restoreId ?? '';\n this.ExpandedRestoreId = this.ExpandedRestoreId === id ? '' : id;\n this.cdr.markForCheck();\n }\n\n public IsExpanded(restoreId: string | undefined): boolean {\n return this.ExpandedRestoreId === (restoreId ?? '');\n }\n\n public GetStatusClass(status: string | undefined): string {\n const classes: Record<string, string> = {\n 'Complete': 'status-success',\n 'Error': 'status-failed',\n 'In Progress': 'status-progress',\n 'Pending': 'status-pending',\n 'Partial': 'status-partial'\n };\n return classes[status ?? ''] ?? '';\n }\n\n public GetStatusIcon(status: string | undefined): string {\n const icons: Record<string, string> = {\n 'Complete': 'fa-solid fa-circle-check',\n 'Error': 'fa-solid fa-circle-xmark',\n 'In Progress': 'fa-solid fa-spinner fa-spin',\n 'Pending': 'fa-solid fa-clock',\n 'Partial': 'fa-solid fa-circle-half-stroke'\n };\n return icons[status ?? ''] ?? 'fa-solid fa-circle';\n }\n\n public GetProgressPercent(restore: MJVersionLabelRestoreEntityType): number {\n if (!restore.TotalItems) return 0;\n return Math.round(((restore.CompletedItems ?? 0) / restore.TotalItems) * 100);\n }\n\n public FormatDate(date: Date | string | undefined): string {\n if (!date) return '';\n const d = date instanceof Date ? date : new Date(date);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public Refresh(): void {\n this.LoadData();\n }\n}\n","<div class=\"restore-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading restore history...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Restore History</h2>\n <p class=\"page-subtitle\">Track all restore operations and their outcomes</p>\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); color: var(--mj-brand-primary);\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{TotalRestores}}</div>\n <div class=\"kpi-label\">Total Restores</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-success) 10%, transparent); color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{SuccessfulRestores}}</div>\n <div class=\"kpi-label\">Successful</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-error) 10%, transparent); color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-circle-xmark\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FailedRestores}}</div>\n <div class=\"kpi-label\">Failed</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); color: var(--mj-status-warning);\">\n <i class=\"fa-solid fa-circle-half-stroke\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{PartialRestores}}</div>\n <div class=\"kpi-label\">Partial</div>\n </div>\n </div>\n </div>\n <!-- Filters -->\n <div class=\"filter-row\">\n <button class=\"filter-chip\"\n [class.active]=\"StatusFilter === 'Complete'\"\n (click)=\"OnStatusFilterChange('Complete')\">\n <i class=\"fa-solid fa-circle-check\"></i> Complete\n </button>\n <button class=\"filter-chip\"\n [class.active]=\"StatusFilter === 'Error'\"\n (click)=\"OnStatusFilterChange('Error')\">\n <i class=\"fa-solid fa-circle-xmark\"></i> Error\n </button>\n <button class=\"filter-chip\"\n [class.active]=\"StatusFilter === 'Partial'\"\n (click)=\"OnStatusFilterChange('Partial')\">\n <i class=\"fa-solid fa-circle-half-stroke\"></i> Partial\n </button>\n </div>\n <!-- Restore List -->\n @if (FilteredRestores.length > 0) {\n <div class=\"restore-list\">\n @for (restore of FilteredRestores; track restore) {\n <div class=\"restore-card\"\n [ngClass]=\"{'expanded': IsExpanded(restore.ID)}\">\n <div class=\"restore-header\" (click)=\"ToggleExpand(restore.ID)\">\n <div class=\"restore-header-left\">\n <i [class]=\"GetStatusIcon(restore.Status)\"\n [ngClass]=\"GetStatusClass(restore.Status)\"\n class=\"status-icon\"></i>\n <div class=\"restore-info\">\n <div class=\"restore-label-name\">\n {{restore.VersionLabel}}\n </div>\n @if (restore.StartedAt) {\n <div class=\"restore-date\">{{FormatDate(restore.StartedAt)}}</div>\n }\n </div>\n </div>\n <div class=\"restore-header-right\">\n <div class=\"restore-progress-bar\">\n <div class=\"progress-fill\"\n [ngClass]=\"GetStatusClass(restore.Status)\"\n [style.width.%]=\"GetProgressPercent(restore)\">\n </div>\n </div>\n <span class=\"restore-count\">\n {{restore.CompletedItems ?? 0}} / {{restore.TotalItems ?? 0}} items\n </span>\n <i class=\"fa-solid\"\n [ngClass]=\"IsExpanded(restore.ID) ? 'fa-chevron-up' : 'fa-chevron-down'\"\n class=\"expand-icon\">\n </i>\n </div>\n </div>\n <!-- Expanded Details -->\n @if (IsExpanded(restore.ID)) {\n <div class=\"restore-details\">\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"detail-label\">Status</span>\n <span class=\"detail-value\" [ngClass]=\"GetStatusClass(restore.Status)\">\n {{restore.Status}}\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Items Completed</span>\n <span class=\"detail-value\">{{restore.CompletedItems ?? 0}}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"detail-label\">Items Failed</span>\n <span class=\"detail-value\" [class.text-error]=\"(restore.FailedItems ?? 0) > 0\">\n {{restore.FailedItems ?? 0}}\n </span>\n </div>\n @if (restore.User) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Restored By</span>\n <span class=\"detail-value\">{{restore.User}}</span>\n </div>\n }\n @if (restore.PreRestoreLabelID) {\n <div class=\"detail-item\">\n <span class=\"detail-label\">Pre-Restore Label</span>\n @if (restore.PreRestoreLabel) {\n <span class=\"detail-value detail-mono\">\n {{restore.PreRestoreLabel}}\n </span>\n }\n @if (!restore.PreRestoreLabel) {\n <span class=\"detail-value detail-mono\">\n {{restore.PreRestoreLabelID | slice:0:20}}...\n </span>\n }\n </div>\n }\n </div>\n @if (restore.ErrorLog) {\n <div class=\"error-log\">\n <div class=\"error-log-header\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n Error Log\n </div>\n <pre class=\"error-log-content\">{{restore.ErrorLog}}</pre>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (FilteredRestores.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-clock-rotate-left empty-icon\"></i>\n <h3>No restore operations found</h3>\n @if (StatusFilter) {\n <p>\n Try adjusting your filters.\n </p>\n }\n @if (!StatusFilter) {\n <p>\n No restores have been performed yet. Use the VersionHistoryEngine to restore records to a labeled state.\n </p>\n }\n </div>\n }\n }\n</div>\n"]}
|
|
@@ -14,39 +14,40 @@ import * as i12 from "./AI/components/widgets/live-execution-widget.component";
|
|
|
14
14
|
import * as i13 from "./AI/components/charts/performance-heatmap.component";
|
|
15
15
|
import * as i14 from "./AI/components/requests/agent-requests-resource.component";
|
|
16
16
|
import * as i15 from "./AI/components/autotagging/autotagging-pipeline-resource.component";
|
|
17
|
-
import * as i16 from "./AI/components/
|
|
18
|
-
import * as i17 from "./AI/components/
|
|
19
|
-
import * as i18 from "./
|
|
20
|
-
import * as i19 from "./KnowledgeHub/components/
|
|
21
|
-
import * as i20 from "./KnowledgeHub/components/
|
|
22
|
-
import * as i21 from "./KnowledgeHub/components/
|
|
23
|
-
import * as i22 from "./KnowledgeHub/components/
|
|
24
|
-
import * as i23 from "./
|
|
25
|
-
import * as i24 from "./AI/components/analytics/analytics-
|
|
26
|
-
import * as i25 from "./AI/components/analytics/
|
|
27
|
-
import * as i26 from "./AI/components/analytics/
|
|
28
|
-
import * as i27 from "./AI/components/analytics/
|
|
29
|
-
import * as i28 from "./AI/components/analytics/
|
|
30
|
-
import * as i29 from "./AI/components/analytics/
|
|
31
|
-
import * as i30 from "./AI/components/analytics/
|
|
32
|
-
import * as i31 from "./AI/components/analytics/
|
|
33
|
-
import * as i32 from "./AI/components/
|
|
34
|
-
import * as i33 from "
|
|
35
|
-
import * as i34 from "@angular/
|
|
36
|
-
import * as i35 from "angular
|
|
37
|
-
import * as i36 from "
|
|
38
|
-
import * as i37 from "@memberjunction/ng-
|
|
39
|
-
import * as i38 from "@memberjunction/ng-
|
|
40
|
-
import * as i39 from "@memberjunction/ng-
|
|
41
|
-
import * as i40 from "@memberjunction/ng-
|
|
42
|
-
import * as i41 from "@memberjunction/ng-
|
|
43
|
-
import * as i42 from "
|
|
44
|
-
import * as i43 from "./shared/shared-
|
|
45
|
-
import * as i44 from "
|
|
46
|
-
import * as i45 from "@memberjunction/ng-
|
|
47
|
-
import * as i46 from "@memberjunction/ng-
|
|
48
|
-
import * as i47 from "@memberjunction/ng-
|
|
49
|
-
import * as i48 from "@memberjunction/ng-
|
|
17
|
+
import * as i16 from "./AI/components/tags/tags-resource.component";
|
|
18
|
+
import * as i17 from "./AI/components/duplicates/duplicate-detection-resource.component";
|
|
19
|
+
import * as i18 from "./AI/components/vectors/vector-management-resource.component";
|
|
20
|
+
import * as i19 from "./KnowledgeHub/components/config/knowledge-config-resource.component";
|
|
21
|
+
import * as i20 from "./KnowledgeHub/components/results-detail/search-result-detail.component";
|
|
22
|
+
import * as i21 from "./KnowledgeHub/components/clusters/cluster-visualization-resource.component";
|
|
23
|
+
import * as i22 from "./KnowledgeHub/components/scheduling/scheduling-resource.component";
|
|
24
|
+
import * as i23 from "./KnowledgeHub/components/analytics/analytics-resource.component";
|
|
25
|
+
import * as i24 from "./AI/components/analytics/ai-analytics-resource.component";
|
|
26
|
+
import * as i25 from "./AI/components/analytics/analytics-filter-bar.component";
|
|
27
|
+
import * as i26 from "./AI/components/analytics/executive-summary/executive-summary.component";
|
|
28
|
+
import * as i27 from "./AI/components/analytics/prompt-runs/prompt-run-analysis.component";
|
|
29
|
+
import * as i28 from "./AI/components/analytics/agent-runs/agent-run-analysis.component";
|
|
30
|
+
import * as i29 from "./AI/components/analytics/model-performance/model-performance.component";
|
|
31
|
+
import * as i30 from "./AI/components/analytics/cost-budget/cost-budget.component";
|
|
32
|
+
import * as i31 from "./AI/components/analytics/error-analysis/error-analysis.component";
|
|
33
|
+
import * as i32 from "./AI/components/analytics/usage-patterns/usage-patterns.component";
|
|
34
|
+
import * as i33 from "./AI/components/overview/ai-overview-hub.component";
|
|
35
|
+
import * as i34 from "@angular/common";
|
|
36
|
+
import * as i35 from "@angular/forms";
|
|
37
|
+
import * as i36 from "angular-split";
|
|
38
|
+
import * as i37 from "@memberjunction/ng-container-directives";
|
|
39
|
+
import * as i38 from "@memberjunction/ng-code-editor";
|
|
40
|
+
import * as i39 from "@memberjunction/ng-shared-generic";
|
|
41
|
+
import * as i40 from "@memberjunction/ng-agents";
|
|
42
|
+
import * as i41 from "@memberjunction/ng-agent-requests";
|
|
43
|
+
import * as i42 from "@memberjunction/ng-trees";
|
|
44
|
+
import * as i43 from "./shared/shared-dashboard-widgets.module";
|
|
45
|
+
import * as i44 from "./shared/shared-pipes.module";
|
|
46
|
+
import * as i45 from "@memberjunction/ng-search";
|
|
47
|
+
import * as i46 from "@memberjunction/ng-ui-components";
|
|
48
|
+
import * as i47 from "@memberjunction/ng-clustering";
|
|
49
|
+
import * as i48 from "@memberjunction/ng-scheduling";
|
|
50
|
+
import * as i49 from "@memberjunction/ng-word-cloud";
|
|
50
51
|
/**
|
|
51
52
|
* AIDashboardsModule — AI feature area: models, prompts, agents,
|
|
52
53
|
* execution monitoring, system configuration, and instrumentation widgets.
|
|
@@ -54,7 +55,7 @@ import * as i48 from "@memberjunction/ng-word-cloud";
|
|
|
54
55
|
export declare class AIDashboardsModule {
|
|
55
56
|
constructor();
|
|
56
57
|
static ɵfac: i0.ɵɵFactoryDeclaration<AIDashboardsModule, never>;
|
|
57
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<AIDashboardsModule, [typeof i1.ModelManagementComponent, typeof i2.PromptManagementComponent, typeof i3.PromptFilterPanelComponent, typeof i4.AgentConfigurationComponent, typeof i5.AgentFilterPanelComponent, typeof i6.AgentEditorComponent, typeof i7.ExecutionMonitoringComponent, typeof i8.SystemConfigurationComponent, typeof i9.SystemConfigFilterPanelComponent, typeof i10.ModelPromptPriorityMatrixComponent, typeof i11.PromptVersionControlComponent, typeof i12.LiveExecutionWidgetComponent, typeof i13.PerformanceHeatmapComponent, typeof i14.AgentRequestsResourceComponent, typeof i15.AutotaggingPipelineResourceComponent, typeof i16.
|
|
58
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<AIDashboardsModule, [typeof i1.ModelManagementComponent, typeof i2.PromptManagementComponent, typeof i3.PromptFilterPanelComponent, typeof i4.AgentConfigurationComponent, typeof i5.AgentFilterPanelComponent, typeof i6.AgentEditorComponent, typeof i7.ExecutionMonitoringComponent, typeof i8.SystemConfigurationComponent, typeof i9.SystemConfigFilterPanelComponent, typeof i10.ModelPromptPriorityMatrixComponent, typeof i11.PromptVersionControlComponent, typeof i12.LiveExecutionWidgetComponent, typeof i13.PerformanceHeatmapComponent, typeof i14.AgentRequestsResourceComponent, typeof i15.AutotaggingPipelineResourceComponent, typeof i16.TagsResourceComponent, typeof i17.DuplicateDetectionResourceComponent, typeof i18.VectorManagementResourceComponent, typeof i19.KnowledgeConfigResourceComponent, typeof i20.SearchResultDetailComponent, typeof i21.ClusterVisualizationResourceComponent, typeof i22.SchedulingResourceComponent, typeof i23.AnalyticsResourceComponent, typeof i24.AIAnalyticsResourceComponent, typeof i25.AnalyticsFilterBarComponent, typeof i26.AnalyticsExecutiveSummaryComponent, typeof i27.AnalyticsPromptRunsComponent, typeof i28.AnalyticsAgentRunsComponent, typeof i29.AnalyticsModelPerformanceComponent, typeof i30.AnalyticsCostBudgetComponent, typeof i31.AnalyticsErrorAnalysisComponent, typeof i32.AnalyticsUsagePatternsComponent, typeof i33.AIOverviewHubComponent], [typeof i34.CommonModule, typeof i35.FormsModule, typeof i35.ReactiveFormsModule, typeof i36.AngularSplitModule, typeof i37.ContainerDirectivesModule, typeof i38.CodeEditorModule, typeof i39.SharedGenericModule, typeof i40.AgentsModule, typeof i41.AgentRequestsModule, typeof i42.NgTreesModule, typeof i43.SharedDashboardWidgetsModule, typeof i44.SharedPipesModule, typeof i45.SearchModule, typeof i46.MJComboboxComponent, typeof i46.MJDropdownComponent, typeof i47.ClusteringModule, typeof i48.SchedulingModule, typeof i49.MJWordCloudComponent], [typeof i1.ModelManagementComponent, typeof i2.PromptManagementComponent, typeof i4.AgentConfigurationComponent, typeof i7.ExecutionMonitoringComponent, typeof i8.SystemConfigurationComponent, typeof i12.LiveExecutionWidgetComponent, typeof i13.PerformanceHeatmapComponent, typeof i14.AgentRequestsResourceComponent, typeof i15.AutotaggingPipelineResourceComponent, typeof i16.TagsResourceComponent, typeof i17.DuplicateDetectionResourceComponent, typeof i18.VectorManagementResourceComponent, typeof i19.KnowledgeConfigResourceComponent, typeof i20.SearchResultDetailComponent, typeof i21.ClusterVisualizationResourceComponent, typeof i22.SchedulingResourceComponent, typeof i23.AnalyticsResourceComponent, typeof i24.AIAnalyticsResourceComponent, typeof i25.AnalyticsFilterBarComponent, typeof i26.AnalyticsExecutiveSummaryComponent, typeof i27.AnalyticsPromptRunsComponent, typeof i28.AnalyticsAgentRunsComponent, typeof i29.AnalyticsModelPerformanceComponent, typeof i30.AnalyticsCostBudgetComponent, typeof i31.AnalyticsErrorAnalysisComponent, typeof i32.AnalyticsUsagePatternsComponent, typeof i33.AIOverviewHubComponent, typeof i43.SharedDashboardWidgetsModule]>;
|
|
58
59
|
static ɵinj: i0.ɵɵInjectorDeclaration<AIDashboardsModule>;
|
|
59
60
|
}
|
|
60
61
|
//# sourceMappingURL=ai-dashboards.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-dashboards.module.d.ts","sourceRoot":"","sources":["../src/ai-dashboards.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ai-dashboards.module.d.ts","sourceRoot":"","sources":["../src/ai-dashboards.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEA;;;GAGG;AACH,qBA0Fa,kBAAkB;;yCAAlB,kBAAkB;0CAAlB,kBAAkB;0CAAlB,kBAAkB;CAiB9B"}
|
|
@@ -29,6 +29,7 @@ import { LiveExecutionWidgetComponent } from './AI/components/widgets/live-execu
|
|
|
29
29
|
import { PerformanceHeatmapComponent } from './AI/components/charts/performance-heatmap.component';
|
|
30
30
|
import { AgentRequestsResourceComponent } from './AI/components/requests/agent-requests-resource.component';
|
|
31
31
|
import { AutotaggingPipelineResourceComponent } from './AI/components/autotagging/autotagging-pipeline-resource.component';
|
|
32
|
+
import { TagsResourceComponent, LoadTagsResource } from './AI/components/tags/tags-resource.component';
|
|
32
33
|
import { DuplicateDetectionResourceComponent } from './AI/components/duplicates/duplicate-detection-resource.component';
|
|
33
34
|
import { VectorManagementResourceComponent } from './AI/components/vectors/vector-management-resource.component';
|
|
34
35
|
import { AIInstrumentationService } from './AI/services/ai-instrumentation.service';
|
|
@@ -60,6 +61,7 @@ import * as i0 from "@angular/core";
|
|
|
60
61
|
export class AIDashboardsModule {
|
|
61
62
|
constructor() {
|
|
62
63
|
// Ensure tree-shaking prevention loaders are called
|
|
64
|
+
LoadTagsResource();
|
|
63
65
|
LoadClusterVisualizationResource();
|
|
64
66
|
LoadSchedulingResource();
|
|
65
67
|
LoadAnalyticsResource();
|
|
@@ -115,6 +117,7 @@ export class AIDashboardsModule {
|
|
|
115
117
|
PerformanceHeatmapComponent,
|
|
116
118
|
AgentRequestsResourceComponent,
|
|
117
119
|
AutotaggingPipelineResourceComponent,
|
|
120
|
+
TagsResourceComponent,
|
|
118
121
|
DuplicateDetectionResourceComponent,
|
|
119
122
|
VectorManagementResourceComponent,
|
|
120
123
|
KnowledgeConfigResourceComponent,
|
|
@@ -166,6 +169,7 @@ export class AIDashboardsModule {
|
|
|
166
169
|
PerformanceHeatmapComponent,
|
|
167
170
|
AgentRequestsResourceComponent,
|
|
168
171
|
AutotaggingPipelineResourceComponent,
|
|
172
|
+
TagsResourceComponent,
|
|
169
173
|
DuplicateDetectionResourceComponent,
|
|
170
174
|
VectorManagementResourceComponent,
|
|
171
175
|
KnowledgeConfigResourceComponent,
|
|
@@ -202,6 +206,7 @@ export class AIDashboardsModule {
|
|
|
202
206
|
PerformanceHeatmapComponent,
|
|
203
207
|
AgentRequestsResourceComponent,
|
|
204
208
|
AutotaggingPipelineResourceComponent,
|
|
209
|
+
TagsResourceComponent,
|
|
205
210
|
DuplicateDetectionResourceComponent,
|
|
206
211
|
VectorManagementResourceComponent,
|
|
207
212
|
KnowledgeConfigResourceComponent,
|
|
@@ -244,6 +249,7 @@ export class AIDashboardsModule {
|
|
|
244
249
|
PerformanceHeatmapComponent,
|
|
245
250
|
AgentRequestsResourceComponent,
|
|
246
251
|
AutotaggingPipelineResourceComponent,
|
|
252
|
+
TagsResourceComponent,
|
|
247
253
|
DuplicateDetectionResourceComponent,
|
|
248
254
|
VectorManagementResourceComponent,
|
|
249
255
|
KnowledgeConfigResourceComponent,
|