@memberjunction/ng-dashboards 5.34.1 → 5.36.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 +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +399 -292
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +8 -2
- 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 +87 -85
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +96 -0
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +453 -122
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts +5 -0
- package/dist/AI/components/analytics/analytics-filter-bar.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/analytics-filter-bar.component.js +184 -135
- package/dist/AI/components/analytics/analytics-filter-bar.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +8 -2
- 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 +104 -103
- 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 +8 -2
- 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 +76 -74
- 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.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +67 -87
- 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 +12 -19
- 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 +96 -203
- 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.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +110 -126
- 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.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +61 -77
- 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 +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2084 -2079
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +6 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +493 -490
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.d.ts +17 -0
- package/dist/AI/components/models/model-management.component.d.ts.map +1 -1
- package/dist/AI/components/models/model-management.component.js +370 -425
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts +17 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +317 -357
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts +11 -0
- package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +170 -175
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.d.ts +19 -0
- package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +403 -362
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1423 -1438
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +8 -3
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +547 -521
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.d.ts +6 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +202 -158
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +9 -3
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +191 -142
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts +41 -1
- package/dist/Actions/components/explorer/action-explorer.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +388 -94
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/index.d.ts +0 -1
- package/dist/Actions/components/explorer/index.d.ts.map +1 -1
- package/dist/Actions/components/explorer/index.js +0 -1
- package/dist/Actions/components/explorer/index.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +19 -79
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +19 -79
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +19 -79
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +19 -79
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +92 -91
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-config-resource.component.js +24 -5
- package/dist/Archiving/components/archive-config-resource.component.js.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.d.ts.map +1 -1
- package/dist/Archiving/components/archive-runs-resource.component.js +24 -5
- package/dist/Archiving/components/archive-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts +1 -1
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +80 -99
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +127 -106
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +44 -45
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +60 -58
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts +1 -1
- package/dist/Communication/communication-templates-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +139 -162
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-audit-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +310 -297
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +238 -266
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts +7 -0
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +381 -399
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +222 -228
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts +6 -0
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +290 -305
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +8 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +41 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +148 -155
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +25 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +24 -16
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts +6 -0
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +521 -485
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts +8 -0
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +307 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +654 -648
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +234 -233
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +182 -163
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts +2 -0
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +595 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +230 -241
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +1 -1
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +28 -1
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1138 -1147
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +54 -51
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +684 -697
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +12 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +191 -120
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +120 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1239 -610
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +152 -160
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +302 -319
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1460 -272
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +20 -0
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +1248 -1338
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +1 -1
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +34 -1
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Permissions/audit-log-resource.component.js +76 -85
- package/dist/Permissions/audit-log-resource.component.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +64 -69
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +63 -74
- package/dist/Permissions/user-access-resource.component.js.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/components/scheduling-activity-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-activity-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-activity.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +250 -197
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +9 -1
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +203 -147
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts +2 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview-resource.component.js +11 -12
- package/dist/Scheduling/components/scheduling-overview-resource.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts +3 -1
- package/dist/Scheduling/components/scheduling-overview.component.d.ts.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +224 -190
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +19 -6
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +259 -103
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1009 -1264
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics-resource.component.js +7 -14
- package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-analytics.component.d.ts +3 -1
- package/dist/Testing/components/testing-analytics.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-analytics.component.js +420 -393
- package/dist/Testing/components/testing-analytics.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js +16 -19
- package/dist/Testing/components/testing-dashboard-tab-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts +3 -1
- package/dist/Testing/components/testing-dashboard-tab.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-dashboard-tab.component.js +157 -122
- package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer-resource.component.js +7 -12
- package/dist/Testing/components/testing-explorer-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +38 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +679 -786
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts +4 -1
- package/dist/Testing/components/testing-review-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review-resource.component.js +9 -12
- package/dist/Testing/components/testing-review-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-review.component.d.ts +3 -1
- package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-review.component.js +310 -274
- package/dist/Testing/components/testing-review.component.js.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts +2 -1
- package/dist/Testing/components/testing-runs-resource.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs-resource.component.js +16 -19
- package/dist/Testing/components/testing-runs-resource.component.js.map +1 -1
- package/dist/Testing/components/testing-runs.component.d.ts +3 -1
- package/dist/Testing/components/testing-runs.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-runs.component.js +307 -273
- package/dist/Testing/components/testing-runs.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +2 -0
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +114 -99
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +185 -188
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +154 -184
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts +7 -0
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +350 -354
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +163 -169
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +15 -16
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +34 -11
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +45 -48
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +51 -10
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/archiving-dashboards.module.d.ts +2 -1
- package/dist/archiving-dashboards.module.d.ts.map +1 -1
- package/dist/archiving-dashboards.module.js +12 -2
- package/dist/archiving-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -6
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +37 -7
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +46 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +1 -1
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +28 -1
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +40 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -3
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +1 -1
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +31 -1
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +8 -7
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +42 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts +0 -56
- package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/agents/agent-filter-panel.component.js +0 -285
- package/dist/AI/components/agents/agent-filter-panel.component.js.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts +0 -49
- package/dist/AI/components/prompts/prompt-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/prompts/prompt-filter-panel.component.js +0 -184
- package/dist/AI/components/prompts/prompt-filter-panel.component.js.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts +0 -33
- package/dist/AI/components/system/system-config-filter-panel.component.d.ts.map +0 -1
- package/dist/AI/components/system/system-config-filter-panel.component.js +0 -144
- package/dist/AI/components/system/system-config-filter-panel.component.js.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts +0 -63
- package/dist/Actions/components/explorer/action-toolbar.component.d.ts.map +0 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +0 -463
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +0 -1
|
@@ -11,15 +11,16 @@ import { UserInfoEngine, InstanceConfigEngine } from '@memberjunction/core-entit
|
|
|
11
11
|
import { DevToolsPrefs } from './dev-tools-prefs';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@angular/forms";
|
|
14
|
-
|
|
14
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
15
|
+
function SettingsExplorerComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
15
16
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
16
|
-
i0.ɵɵelementStart(0, "button",
|
|
17
|
-
i0.ɵɵlistener("click", function
|
|
18
|
-
i0.ɵɵelement(1, "i",
|
|
17
|
+
i0.ɵɵelementStart(0, "button", 20);
|
|
18
|
+
i0.ɵɵlistener("click", function SettingsExplorerComponent_Conditional_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SearchQuery = ""); });
|
|
19
|
+
i0.ɵɵelement(1, "i", 21);
|
|
19
20
|
i0.ɵɵelementEnd();
|
|
20
21
|
} }
|
|
21
|
-
function
|
|
22
|
-
i0.ɵɵelement(0, "i",
|
|
22
|
+
function SettingsExplorerComponent_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelement(0, "i", 22);
|
|
23
24
|
i0.ɵɵelementStart(1, "span");
|
|
24
25
|
i0.ɵɵtext(2);
|
|
25
26
|
i0.ɵɵelementEnd();
|
|
@@ -28,8 +29,8 @@ function SettingsExplorerComponent_Conditional_32_Conditional_1_Template(rf, ctx
|
|
|
28
29
|
i0.ɵɵadvance(2);
|
|
29
30
|
i0.ɵɵtextInterpolate1("No matches for \"", ctx_r1.SearchQuery, "\"");
|
|
30
31
|
} }
|
|
31
|
-
function
|
|
32
|
-
i0.ɵɵelement(0, "i",
|
|
32
|
+
function SettingsExplorerComponent_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelement(0, "i", 23);
|
|
33
34
|
i0.ɵɵelementStart(1, "span");
|
|
34
35
|
i0.ɵɵtext(2);
|
|
35
36
|
i0.ɵɵelementEnd();
|
|
@@ -38,17 +39,17 @@ function SettingsExplorerComponent_Conditional_32_Conditional_2_Template(rf, ctx
|
|
|
38
39
|
i0.ɵɵadvance(2);
|
|
39
40
|
i0.ɵɵtextInterpolate1("No ", ctx_r1.Scope === "user" ? "user settings" : "instance configurations", " are defined.");
|
|
40
41
|
} }
|
|
41
|
-
function
|
|
42
|
-
i0.ɵɵelementStart(0, "div",
|
|
43
|
-
i0.ɵɵconditionalCreate(1,
|
|
42
|
+
function SettingsExplorerComponent_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
44
|
+
i0.ɵɵconditionalCreate(1, SettingsExplorerComponent_Conditional_22_Conditional_1_Template, 3, 1)(2, SettingsExplorerComponent_Conditional_22_Conditional_2_Template, 3, 1);
|
|
44
45
|
i0.ɵɵelementEnd();
|
|
45
46
|
} if (rf & 2) {
|
|
46
47
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
47
48
|
i0.ɵɵadvance();
|
|
48
49
|
i0.ɵɵconditional(ctx_r1.SearchQuery ? 1 : 2);
|
|
49
50
|
} }
|
|
50
|
-
function
|
|
51
|
-
i0.ɵɵelementStart(0, "div",
|
|
51
|
+
function SettingsExplorerComponent_Conditional_23_For_11_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵelementStart(0, "div", 30);
|
|
52
53
|
i0.ɵɵtext(1);
|
|
53
54
|
i0.ɵɵelementEnd();
|
|
54
55
|
} if (rf & 2) {
|
|
@@ -56,19 +57,19 @@ function SettingsExplorerComponent_Conditional_33_For_11_Conditional_4_Template(
|
|
|
56
57
|
i0.ɵɵadvance();
|
|
57
58
|
i0.ɵɵtextInterpolate(row_r4.meta);
|
|
58
59
|
} }
|
|
59
|
-
function
|
|
60
|
+
function SettingsExplorerComponent_Conditional_23_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
60
61
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
61
|
-
i0.ɵɵelementStart(0, "tr",
|
|
62
|
-
i0.ɵɵlistener("click", function
|
|
63
|
-
i0.ɵɵelementStart(1, "td",
|
|
62
|
+
i0.ɵɵelementStart(0, "tr", 28);
|
|
63
|
+
i0.ɵɵlistener("click", function SettingsExplorerComponent_Conditional_23_For_11_Template_tr_click_0_listener() { const row_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnRowClick(row_r4)); });
|
|
64
|
+
i0.ɵɵelementStart(1, "td", 29)(2, "code");
|
|
64
65
|
i0.ɵɵtext(3);
|
|
65
66
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵconditionalCreate(4,
|
|
67
|
+
i0.ɵɵconditionalCreate(4, SettingsExplorerComponent_Conditional_23_For_11_Conditional_4_Template, 2, 1, "div", 30);
|
|
67
68
|
i0.ɵɵelementEnd();
|
|
68
|
-
i0.ɵɵelementStart(5, "td",
|
|
69
|
+
i0.ɵɵelementStart(5, "td", 31)(6, "span", 32);
|
|
69
70
|
i0.ɵɵtext(7);
|
|
70
71
|
i0.ɵɵelementEnd()();
|
|
71
|
-
i0.ɵɵelementStart(8, "td",
|
|
72
|
+
i0.ɵɵelementStart(8, "td", 33);
|
|
72
73
|
i0.ɵɵtext(9);
|
|
73
74
|
i0.ɵɵelementEnd()();
|
|
74
75
|
} if (rf & 2) {
|
|
@@ -86,26 +87,26 @@ function SettingsExplorerComponent_Conditional_33_For_11_Template(rf, ctx) { if
|
|
|
86
87
|
i0.ɵɵadvance(2);
|
|
87
88
|
i0.ɵɵtextInterpolate(row_r4.preview);
|
|
88
89
|
} }
|
|
89
|
-
function
|
|
90
|
-
i0.ɵɵelementStart(0, "table",
|
|
90
|
+
function SettingsExplorerComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
91
|
+
i0.ɵɵelementStart(0, "table", 17)(1, "thead")(2, "tr")(3, "th", 24);
|
|
91
92
|
i0.ɵɵtext(4, "Key");
|
|
92
93
|
i0.ɵɵelementEnd();
|
|
93
|
-
i0.ɵɵelementStart(5, "th",
|
|
94
|
+
i0.ɵɵelementStart(5, "th", 25);
|
|
94
95
|
i0.ɵɵtext(6, "Type");
|
|
95
96
|
i0.ɵɵelementEnd();
|
|
96
|
-
i0.ɵɵelementStart(7, "th",
|
|
97
|
+
i0.ɵɵelementStart(7, "th", 26);
|
|
97
98
|
i0.ɵɵtext(8, "Value");
|
|
98
99
|
i0.ɵɵelementEnd()()();
|
|
99
100
|
i0.ɵɵelementStart(9, "tbody");
|
|
100
|
-
i0.ɵɵrepeaterCreate(10,
|
|
101
|
+
i0.ɵɵrepeaterCreate(10, SettingsExplorerComponent_Conditional_23_For_11_Template, 10, 8, "tr", 27, i0.ɵɵcomponentInstance().TrackByKey, true);
|
|
101
102
|
i0.ɵɵelementEnd()();
|
|
102
103
|
} if (rf & 2) {
|
|
103
104
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
104
105
|
i0.ɵɵadvance(10);
|
|
105
106
|
i0.ɵɵrepeater(ctx_r1.FilteredRows);
|
|
106
107
|
} }
|
|
107
|
-
function
|
|
108
|
-
i0.ɵɵelementStart(0, "div",
|
|
108
|
+
function SettingsExplorerComponent_Conditional_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 36);
|
|
109
110
|
i0.ɵɵtext(1);
|
|
110
111
|
i0.ɵɵelementEnd();
|
|
111
112
|
} if (rf & 2) {
|
|
@@ -113,8 +114,8 @@ function SettingsExplorerComponent_Conditional_34_Conditional_5_Template(rf, ctx
|
|
|
113
114
|
i0.ɵɵadvance();
|
|
114
115
|
i0.ɵɵtextInterpolate(ctx_r1.Selected.meta);
|
|
115
116
|
} }
|
|
116
|
-
function
|
|
117
|
-
i0.ɵɵelementStart(0, "span",
|
|
117
|
+
function SettingsExplorerComponent_Conditional_24_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
118
|
+
i0.ɵɵelementStart(0, "span", 44);
|
|
118
119
|
i0.ɵɵtext(1);
|
|
119
120
|
i0.ɵɵelementEnd();
|
|
120
121
|
} if (rf & 2) {
|
|
@@ -122,28 +123,28 @@ function SettingsExplorerComponent_Conditional_34_Conditional_16_Template(rf, ct
|
|
|
122
123
|
i0.ɵɵadvance();
|
|
123
124
|
i0.ɵɵtextInterpolate1("Updated ", ctx_r1.Selected.updated.toLocaleString());
|
|
124
125
|
} }
|
|
125
|
-
function
|
|
126
|
+
function SettingsExplorerComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
126
127
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
127
|
-
i0.ɵɵelementStart(0, "aside",
|
|
128
|
+
i0.ɵɵelementStart(0, "aside", 18)(1, "div", 34)(2, "div")(3, "div", 35);
|
|
128
129
|
i0.ɵɵtext(4);
|
|
129
130
|
i0.ɵɵelementEnd();
|
|
130
|
-
i0.ɵɵconditionalCreate(5,
|
|
131
|
+
i0.ɵɵconditionalCreate(5, SettingsExplorerComponent_Conditional_24_Conditional_5_Template, 2, 1, "div", 36);
|
|
131
132
|
i0.ɵɵelementEnd();
|
|
132
|
-
i0.ɵɵelementStart(6, "div",
|
|
133
|
-
i0.ɵɵlistener("click", function
|
|
134
|
-
i0.ɵɵelement(8, "i",
|
|
133
|
+
i0.ɵɵelementStart(6, "div", 37)(7, "button", 38);
|
|
134
|
+
i0.ɵɵlistener("click", function SettingsExplorerComponent_Conditional_24_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnCopySelected()); });
|
|
135
|
+
i0.ɵɵelement(8, "i", 39);
|
|
135
136
|
i0.ɵɵtext(9, " Copy ");
|
|
136
137
|
i0.ɵɵelementEnd();
|
|
137
|
-
i0.ɵɵelementStart(10, "button",
|
|
138
|
-
i0.ɵɵlistener("click", function
|
|
139
|
-
i0.ɵɵelement(11, "i",
|
|
138
|
+
i0.ɵɵelementStart(10, "button", 40);
|
|
139
|
+
i0.ɵɵlistener("click", function SettingsExplorerComponent_Conditional_24_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Selected = null); });
|
|
140
|
+
i0.ɵɵelement(11, "i", 41);
|
|
140
141
|
i0.ɵɵelementEnd()()();
|
|
141
|
-
i0.ɵɵelementStart(12, "div",
|
|
142
|
+
i0.ɵɵelementStart(12, "div", 42)(13, "div", 43)(14, "span", 32);
|
|
142
143
|
i0.ɵɵtext(15);
|
|
143
144
|
i0.ɵɵelementEnd();
|
|
144
|
-
i0.ɵɵconditionalCreate(16,
|
|
145
|
+
i0.ɵɵconditionalCreate(16, SettingsExplorerComponent_Conditional_24_Conditional_16_Template, 2, 1, "span", 44);
|
|
145
146
|
i0.ɵɵelementEnd();
|
|
146
|
-
i0.ɵɵelementStart(17, "pre",
|
|
147
|
+
i0.ɵɵelementStart(17, "pre", 45)(18, "code");
|
|
147
148
|
i0.ɵɵtext(19);
|
|
148
149
|
i0.ɵɵelementEnd()()()();
|
|
149
150
|
} if (rf & 2) {
|
|
@@ -315,54 +316,44 @@ let SettingsExplorerComponent = class SettingsExplorerComponent extends BaseReso
|
|
|
315
316
|
return String(value);
|
|
316
317
|
}
|
|
317
318
|
static ɵfac = function SettingsExplorerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SettingsExplorerComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
318
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SettingsExplorerComponent, selectors: [["mj-settings-explorer"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
319
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "
|
|
320
|
-
i0.ɵɵ
|
|
321
|
-
i0.ɵɵelementEnd();
|
|
322
|
-
i0.ɵɵelementStart(4, "div")(5, "h3", 4);
|
|
323
|
-
i0.ɵɵtext(6, "Settings Explorer");
|
|
324
|
-
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵelementStart(7, "div", 5);
|
|
326
|
-
i0.ɵɵtext(8, "User settings and instance-level configuration");
|
|
327
|
-
i0.ɵɵelementEnd()();
|
|
328
|
-
i0.ɵɵelement(9, "span", 6);
|
|
329
|
-
i0.ɵɵelementStart(10, "div", 7)(11, "button", 8);
|
|
330
|
-
i0.ɵɵlistener("click", function SettingsExplorerComponent_Template_button_click_11_listener() { return ctx.refresh(); });
|
|
331
|
-
i0.ɵɵelement(12, "i", 9);
|
|
332
|
-
i0.ɵɵtext(13, " Refresh ");
|
|
319
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SettingsExplorerComponent, selectors: [["mj-settings-explorer"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 27, vars: 12, consts: [[1, "mj-inspector", "mj-inspector--solo"], ["Role", "region", "AriaLabel", "Settings explorer", "Title", "Settings Explorer", "Subtitle", "User settings and instance-level configuration"], ["actions", ""], [3, "Clicked", "Loading"], [1, "se-toolbar"], [1, "se-tabs"], ["type", "button", 1, "se-tab", 3, "click"], [1, "fa-solid", "fa-user"], [1, "se-count"], [1, "fa-solid", "fa-server"], [1, "se-search-wrap"], [1, "fa-solid", "fa-search", "se-search-icon"], ["type", "search", "placeholder", "Search keys or values\u2026", 1, "se-search", 3, "ngModelChange", "ngModel"], ["title", "Clear", 1, "se-search-clear"], [1, "se-body"], [1, "se-list"], [1, "se-empty"], [1, "se-table"], [1, "se-detail"], [1, "mj-inspector__footer-meta"], ["title", "Clear", 1, "se-search-clear", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fa-regular", "fa-folder-open"], [1, "se-th-key"], [1, "se-th-type"], [1, "se-th-value"], [3, "se-row--selected"], [3, "click"], [1, "se-td-key"], [1, "se-td-meta"], [1, "se-td-type"], [1, "se-type-pill"], [1, "se-td-value"], [1, "se-detail-head"], [1, "se-detail-key"], [1, "se-detail-meta"], [1, "se-detail-actions"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Copy value", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-clipboard"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Close", "aria-label", "Close detail", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], [1, "se-detail-body"], [1, "se-detail-meta-row"], [1, "se-detail-updated"], [1, "se-detail-value"]], template: function SettingsExplorerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "mj-page-header-interior", 1)(2, "div", 2)(3, "mj-refresh-button", 3);
|
|
321
|
+
i0.ɵɵlistener("Clicked", function SettingsExplorerComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.refresh(); });
|
|
333
322
|
i0.ɵɵelementEnd()()();
|
|
334
|
-
i0.ɵɵelementStart(
|
|
335
|
-
i0.ɵɵlistener("click", function
|
|
336
|
-
i0.ɵɵelement(
|
|
337
|
-
i0.ɵɵtext(
|
|
338
|
-
i0.ɵɵelementStart(
|
|
339
|
-
i0.ɵɵtext(
|
|
323
|
+
i0.ɵɵelementStart(4, "div", 4)(5, "div", 5)(6, "button", 6);
|
|
324
|
+
i0.ɵɵlistener("click", function SettingsExplorerComponent_Template_button_click_6_listener() { return ctx.OnScopeChange("user"); });
|
|
325
|
+
i0.ɵɵelement(7, "i", 7);
|
|
326
|
+
i0.ɵɵtext(8, " User Settings ");
|
|
327
|
+
i0.ɵɵelementStart(9, "span", 8);
|
|
328
|
+
i0.ɵɵtext(10);
|
|
340
329
|
i0.ɵɵelementEnd()();
|
|
341
|
-
i0.ɵɵelementStart(
|
|
342
|
-
i0.ɵɵlistener("click", function
|
|
343
|
-
i0.ɵɵelement(
|
|
344
|
-
i0.ɵɵtext(
|
|
345
|
-
i0.ɵɵelementStart(
|
|
346
|
-
i0.ɵɵtext(
|
|
330
|
+
i0.ɵɵelementStart(11, "button", 6);
|
|
331
|
+
i0.ɵɵlistener("click", function SettingsExplorerComponent_Template_button_click_11_listener() { return ctx.OnScopeChange("instance"); });
|
|
332
|
+
i0.ɵɵelement(12, "i", 9);
|
|
333
|
+
i0.ɵɵtext(13, " Instance Configurations ");
|
|
334
|
+
i0.ɵɵelementStart(14, "span", 8);
|
|
335
|
+
i0.ɵɵtext(15);
|
|
347
336
|
i0.ɵɵelementEnd()()();
|
|
348
|
-
i0.ɵɵelementStart(
|
|
349
|
-
i0.ɵɵelement(
|
|
350
|
-
i0.ɵɵelementStart(
|
|
351
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
352
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
337
|
+
i0.ɵɵelementStart(16, "div", 10);
|
|
338
|
+
i0.ɵɵelement(17, "i", 11);
|
|
339
|
+
i0.ɵɵelementStart(18, "input", 12);
|
|
340
|
+
i0.ɵɵtwoWayListener("ngModelChange", function SettingsExplorerComponent_Template_input_ngModelChange_18_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.SearchQuery, $event) || (ctx.SearchQuery = $event); return $event; });
|
|
341
|
+
i0.ɵɵlistener("ngModelChange", function SettingsExplorerComponent_Template_input_ngModelChange_18_listener() { return ctx.PersistPrefs(); });
|
|
353
342
|
i0.ɵɵelementEnd();
|
|
354
|
-
i0.ɵɵconditionalCreate(
|
|
343
|
+
i0.ɵɵconditionalCreate(19, SettingsExplorerComponent_Conditional_19_Template, 2, 0, "button", 13);
|
|
355
344
|
i0.ɵɵelementEnd()();
|
|
356
|
-
i0.ɵɵelementStart(
|
|
357
|
-
i0.ɵɵconditionalCreate(
|
|
345
|
+
i0.ɵɵelementStart(20, "div", 14)(21, "div", 15);
|
|
346
|
+
i0.ɵɵconditionalCreate(22, SettingsExplorerComponent_Conditional_22_Template, 3, 1, "div", 16)(23, SettingsExplorerComponent_Conditional_23_Template, 12, 0, "table", 17);
|
|
358
347
|
i0.ɵɵelementEnd();
|
|
359
|
-
i0.ɵɵconditionalCreate(
|
|
348
|
+
i0.ɵɵconditionalCreate(24, SettingsExplorerComponent_Conditional_24_Template, 20, 7, "aside", 18);
|
|
360
349
|
i0.ɵɵelementEnd();
|
|
361
|
-
i0.ɵɵelementStart(
|
|
362
|
-
i0.ɵɵtext(
|
|
350
|
+
i0.ɵɵelementStart(25, "div", 19);
|
|
351
|
+
i0.ɵɵtext(26);
|
|
363
352
|
i0.ɵɵelementEnd()();
|
|
364
353
|
} if (rf & 2) {
|
|
365
|
-
i0.ɵɵadvance(
|
|
354
|
+
i0.ɵɵadvance(3);
|
|
355
|
+
i0.ɵɵproperty("Loading", false);
|
|
356
|
+
i0.ɵɵadvance(3);
|
|
366
357
|
i0.ɵɵclassProp("se-tab--active", ctx.Scope === "user");
|
|
367
358
|
i0.ɵɵadvance(4);
|
|
368
359
|
i0.ɵɵtextInterpolate(ctx.Counts.user);
|
|
@@ -373,14 +364,14 @@ let SettingsExplorerComponent = class SettingsExplorerComponent extends BaseReso
|
|
|
373
364
|
i0.ɵɵadvance(3);
|
|
374
365
|
i0.ɵɵtwoWayProperty("ngModel", ctx.SearchQuery);
|
|
375
366
|
i0.ɵɵadvance();
|
|
376
|
-
i0.ɵɵconditional(ctx.SearchQuery ?
|
|
367
|
+
i0.ɵɵconditional(ctx.SearchQuery ? 19 : -1);
|
|
377
368
|
i0.ɵɵadvance(3);
|
|
378
|
-
i0.ɵɵconditional(ctx.FilteredRows.length === 0 ?
|
|
369
|
+
i0.ɵɵconditional(ctx.FilteredRows.length === 0 ? 22 : 23);
|
|
379
370
|
i0.ɵɵadvance(2);
|
|
380
|
-
i0.ɵɵconditional(ctx.Selected ?
|
|
371
|
+
i0.ɵɵconditional(ctx.Selected ? 24 : -1);
|
|
381
372
|
i0.ɵɵadvance(2);
|
|
382
373
|
i0.ɵɵtextInterpolate1("Refreshed ", ctx.LastRefreshedLabel);
|
|
383
|
-
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.mj-inspector[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.mj-inspector__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.mj-inspector__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.mj-inspector__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.mj-inspector__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-inspector__header-spacer[_ngcontent-%COMP%] { flex: 1; }\n.mj-inspector__header-actions[_ngcontent-%COMP%] {\n display: flex; gap: 6px;\n}\n.mj-inspector__btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.mj-inspector__btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__btn--success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 30%, var(--mj-border-default));\n}\n\n\n\n.mj-inspector__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.mj-inspector__sidebar[_ngcontent-%COMP%] {\n width: 220px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.mj-inspector__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.mj-inspector__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.mj-inspector__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.mj-inspector__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.mj-inspector__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.mj-inspector__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.mj-inspector__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.mj-inspector__nav-item--active[_ngcontent-%COMP%] .mj-inspector__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.mj-inspector__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n@media (max-width: 700px) {\n .mj-inspector__body[_ngcontent-%COMP%] { flex-direction: column; }\n .mj-inspector__sidebar[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 200px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .mj-inspector__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .mj-inspector__nav-desc[_ngcontent-%COMP%] { display: none; }\n .mj-inspector__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n\n\n\n.se-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.se-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n background: var(--mj-bg-surface-sunken);\n padding: 3px;\n border-radius: 8px;\n}\n.se-tab[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 6px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 12.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.se-tab[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); }\n.se-tab--active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n}\n.se-count[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.se-tab--active[_ngcontent-%COMP%] .se-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.se-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n max-width: 360px;\n margin-left: auto;\n}\n.se-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.se-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 7px 32px 7px 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12.5px;\n font-family: inherit;\n}\n.se-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.se-search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.se-search-clear[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n\n\n.se-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.se-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n background: var(--mj-bg-page);\n}\n\n.se-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n.se-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 0 var(--mj-border-subtle);\n}\n.se-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 18px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.se-th-type[_ngcontent-%COMP%] { width: 100px; }\n.se-th-value[_ngcontent-%COMP%] { }\n.se-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 8px 18px;\n border-top: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: top;\n cursor: pointer;\n}\n.se-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.se-row--selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent) !important;\n}\n.se-row--selected[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child {\n box-shadow: inset 3px 0 0 var(--mj-brand-primary);\n}\n\n.se-td-key[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n padding: 2px 7px;\n border-radius: 5px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-primary);\n}\n.se-td-meta[_ngcontent-%COMP%] {\n margin-top: 3px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-td-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 0;\n}\n\n.se-type-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 100px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n.se-type-pill--string[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); }\n.se-type-pill--number[_ngcontent-%COMP%] { background: color-mix(in srgb, #7c3aed 14%, transparent); color: #5b21b6; }\n.se-type-pill--boolean[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 14%, transparent); color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary)); }\n.se-type-pill--json[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary)); }\n.se-type-pill--empty[_ngcontent-%COMP%] { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n\n\n.se-detail[_ngcontent-%COMP%] {\n width: 420px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-detail-head[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.se-detail-key[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.se-detail-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n.se-detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n.mj-inspector__btn--ghost[_ngcontent-%COMP%] {\n background: transparent !important;\n border: 1px solid transparent !important;\n}\n.mj-inspector__btn--ghost[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n.se-detail-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 14px 16px;\n}\n.se-detail-meta-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.se-detail-updated[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-detail-value[_ngcontent-%COMP%] {\n margin: 0;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 12px 14px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 100%;\n overflow: auto;\n}\n\n.se-empty[_ngcontent-%COMP%] {\n padding: 60px 40px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n.se-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 28px; opacity: 0.7; }\n\n@media (max-width: 900px) {\n .se-body[_ngcontent-%COMP%] { flex-direction: column; }\n .se-detail[_ngcontent-%COMP%] { width: 100%; max-height: 50%; border-left: none; border-top: 1px solid var(--mj-border-default); }\n .se-toolbar[_ngcontent-%COMP%] { flex-direction: column; align-items: stretch; gap: 10px; }\n .se-search-wrap[_ngcontent-%COMP%] { max-width: 100%; }\n}"] });
|
|
374
|
+
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageHeaderInteriorComponent, i2.MJRefreshButtonComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.mj-inspector[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.mj-inspector__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}", ".mj-inspector--solo[_ngcontent-%COMP%] { background: var(--mj-bg-page); }\n\n\n\n.se-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.se-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n background: var(--mj-bg-surface-sunken);\n padding: 3px;\n border-radius: 8px;\n}\n.se-tab[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 6px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 12.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.se-tab[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); }\n.se-tab--active[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n}\n.se-count[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.se-tab--active[_ngcontent-%COMP%] .se-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.se-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n max-width: 360px;\n margin-left: auto;\n}\n.se-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.se-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 7px 32px 7px 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12.5px;\n font-family: inherit;\n}\n.se-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.se-search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.se-search-clear[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n\n\n.se-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.se-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n background: var(--mj-bg-page);\n}\n\n.se-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n.se-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 0 var(--mj-border-subtle);\n}\n.se-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 18px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.se-th-type[_ngcontent-%COMP%] { width: 100px; }\n.se-th-value[_ngcontent-%COMP%] { }\n.se-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 8px 18px;\n border-top: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: top;\n cursor: pointer;\n}\n.se-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.se-row--selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent) !important;\n}\n.se-row--selected[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child {\n box-shadow: inset 3px 0 0 var(--mj-brand-primary);\n}\n\n.se-td-key[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n padding: 2px 7px;\n border-radius: 5px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-primary);\n}\n.se-td-meta[_ngcontent-%COMP%] {\n margin-top: 3px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-td-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 0;\n}\n\n.se-type-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 100px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n.se-type-pill--string[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); }\n.se-type-pill--number[_ngcontent-%COMP%] { background: color-mix(in srgb, #7c3aed 14%, transparent); color: #5b21b6; }\n.se-type-pill--boolean[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 14%, transparent); color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary)); }\n.se-type-pill--json[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary)); }\n.se-type-pill--empty[_ngcontent-%COMP%] { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n\n\n.se-detail[_ngcontent-%COMP%] {\n width: 420px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-detail-head[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.se-detail-key[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.se-detail-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n.se-detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.se-detail-body[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 14px 16px;\n}\n.se-detail-meta-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.se-detail-updated[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-detail-value[_ngcontent-%COMP%] {\n margin: 0;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 12px 14px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 100%;\n overflow: auto;\n}\n\n.se-empty[_ngcontent-%COMP%] {\n padding: 60px 40px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n.se-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 28px; opacity: 0.7; }\n\n@media (max-width: 900px) {\n .se-body[_ngcontent-%COMP%] { flex-direction: column; }\n .se-detail[_ngcontent-%COMP%] { width: 100%; max-height: 50%; border-left: none; border-top: 1px solid var(--mj-border-default); }\n .se-toolbar[_ngcontent-%COMP%] { flex-direction: column; align-items: stretch; gap: 10px; }\n .se-search-wrap[_ngcontent-%COMP%] { max-width: 100%; }\n}"] });
|
|
384
375
|
};
|
|
385
376
|
SettingsExplorerComponent = __decorate([
|
|
386
377
|
RegisterClass(BaseResourceComponent, 'SettingsExplorerInspector')
|
|
@@ -388,7 +379,7 @@ SettingsExplorerComponent = __decorate([
|
|
|
388
379
|
export { SettingsExplorerComponent };
|
|
389
380
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SettingsExplorerComponent, [{
|
|
390
381
|
type: Component,
|
|
391
|
-
args: [{ standalone: false, selector: 'mj-settings-explorer', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-sliders\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">Settings Explorer</h3>\n <div class=\"mj-inspector__header-sub\">User settings and instance-level configuration</div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh\n </button>\n </div>\n </div>\n\n <div class=\"se-toolbar\">\n <div class=\"se-tabs\">\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'user'\"\n (click)=\"OnScopeChange('user')\">\n <i class=\"fa-solid fa-user\"></i>\n User Settings\n <span class=\"se-count\">{{ Counts.user }}</span>\n </button>\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'instance'\"\n (click)=\"OnScopeChange('instance')\">\n <i class=\"fa-solid fa-server\"></i>\n Instance Configurations\n <span class=\"se-count\">{{ Counts.instance }}</span>\n </button>\n </div>\n <div class=\"se-search-wrap\">\n <i class=\"fa-solid fa-search se-search-icon\"></i>\n <input type=\"search\"\n class=\"se-search\"\n placeholder=\"Search keys or values\u2026\"\n [(ngModel)]=\"SearchQuery\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (SearchQuery) {\n <button class=\"se-search-clear\" (click)=\"SearchQuery = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"se-body\">\n <div class=\"se-list\">\n @if (FilteredRows.length === 0) {\n <div class=\"se-empty\">\n @if (SearchQuery) {\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>No matches for \"{{ SearchQuery }}\"</span>\n } @else {\n <i class=\"fa-regular fa-folder-open\"></i>\n <span>No {{ Scope === 'user' ? 'user settings' : 'instance configurations' }} are defined.</span>\n }\n </div>\n } @else {\n <table class=\"se-table\">\n <thead>\n <tr>\n <th class=\"se-th-key\">Key</th>\n <th class=\"se-th-type\">Type</th>\n <th class=\"se-th-value\">Value</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredRows; track TrackByKey($index, row)) {\n <tr [class.se-row--selected]=\"Selected?.key === row.key\"\n (click)=\"OnRowClick(row)\">\n <td class=\"se-td-key\">\n <code>{{ row.key }}</code>\n @if (row.meta) {\n <div class=\"se-td-meta\">{{ row.meta }}</div>\n }\n </td>\n <td class=\"se-td-type\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + row.valueType\">\n {{ row.valueType }}\n </span>\n </td>\n <td class=\"se-td-value\">{{ row.preview }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n @if (Selected) {\n <aside class=\"se-detail\">\n <div class=\"se-detail-head\">\n <div>\n <div class=\"se-detail-key\">{{ Selected.key }}</div>\n @if (Selected.meta) {\n <div class=\"se-detail-meta\">{{ Selected.meta }}</div>\n }\n </div>\n <div class=\"se-detail-actions\">\n <button class=\"mj-inspector__btn\" (click)=\"OnCopySelected()\" title=\"Copy value\">\n <i class=\"fa-solid fa-clipboard\"></i> Copy\n </button>\n <button class=\"mj-inspector__btn mj-inspector__btn--ghost\" (click)=\"Selected = null\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n <div class=\"se-detail-body\">\n <div class=\"se-detail-meta-row\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + Selected.valueType\">{{ Selected.valueType }}</span>\n @if (Selected.updated) {\n <span class=\"se-detail-updated\">Updated {{ Selected.updated.toLocaleString() }}</span>\n }\n </div>\n <pre class=\"se-detail-value\"><code>{{ FormattedSelected || '(empty)' }}</code></pre>\n </div>\n </aside>\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.mj-inspector {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.mj-inspector__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.mj-inspector__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.mj-inspector__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.mj-inspector__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-inspector__header-spacer { flex: 1; }\n.mj-inspector__header-actions {\n display: flex; gap: 6px;\n}\n.mj-inspector__btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.mj-inspector__btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__btn--success {\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 30%, var(--mj-border-default));\n}\n\n/* Layout: sidebar + content */\n.mj-inspector__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.mj-inspector__sidebar {\n width: 220px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.mj-inspector__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.mj-inspector__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.mj-inspector__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.mj-inspector__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.mj-inspector__nav-text { flex: 1; min-width: 0; }\n.mj-inspector__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.mj-inspector__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.mj-inspector__nav-item--active .mj-inspector__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n@media (max-width: 700px) {\n .mj-inspector__body { flex-direction: column; }\n .mj-inspector__sidebar {\n width: 100%;\n height: auto;\n max-height: 200px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .mj-inspector__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .mj-inspector__nav-desc { display: none; }\n .mj-inspector__header { padding: 12px 14px; gap: 10px; }\n}\n", ".mj-inspector--solo { background: var(--mj-bg-page); }\n\n/* Toolbar */\n.se-toolbar {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.se-tabs {\n display: flex;\n gap: 2px;\n background: var(--mj-bg-surface-sunken);\n padding: 3px;\n border-radius: 8px;\n}\n.se-tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 6px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 12.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.se-tab:hover { color: var(--mj-text-primary); }\n.se-tab--active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n}\n.se-count {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.se-tab--active .se-count {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.se-search-wrap {\n position: relative;\n flex: 1;\n max-width: 360px;\n margin-left: auto;\n}\n.se-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.se-search {\n width: 100%;\n padding: 7px 32px 7px 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12.5px;\n font-family: inherit;\n}\n.se-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.se-search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.se-search-clear:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n/* Body */\n.se-body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.se-list {\n flex: 1;\n overflow: auto;\n background: var(--mj-bg-page);\n}\n\n.se-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n.se-table thead {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 0 var(--mj-border-subtle);\n}\n.se-table th {\n text-align: left;\n padding: 10px 18px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.se-th-type { width: 100px; }\n.se-th-value { }\n.se-table td {\n padding: 8px 18px;\n border-top: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: top;\n cursor: pointer;\n}\n.se-table tbody tr:hover { background: var(--mj-bg-surface-hover); }\n.se-row--selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent) !important;\n}\n.se-row--selected td:first-child {\n box-shadow: inset 3px 0 0 var(--mj-brand-primary);\n}\n\n.se-td-key code {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n padding: 2px 7px;\n border-radius: 5px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-primary);\n}\n.se-td-meta {\n margin-top: 3px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-td-value {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 0;\n}\n\n.se-type-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 100px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n.se-type-pill--string { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); }\n.se-type-pill--number { background: color-mix(in srgb, #7c3aed 14%, transparent); color: #5b21b6; }\n.se-type-pill--boolean { background: color-mix(in srgb, var(--mj-status-success) 14%, transparent); color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary)); }\n.se-type-pill--json { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary)); }\n.se-type-pill--empty { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n/* Detail panel */\n.se-detail {\n width: 420px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-detail-head {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.se-detail-key {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.se-detail-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n.se-detail-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n.mj-inspector__btn--ghost {\n background: transparent !important;\n border: 1px solid transparent !important;\n}\n.mj-inspector__btn--ghost:hover {\n background: var(--mj-bg-surface-hover) !important;\n border-color: var(--mj-border-default) !important;\n}\n\n.se-detail-body {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 14px 16px;\n}\n.se-detail-meta-row {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.se-detail-updated {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-detail-value {\n margin: 0;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 12px 14px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 100%;\n overflow: auto;\n}\n\n.se-empty {\n padding: 60px 40px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n.se-empty i { font-size: 28px; opacity: 0.7; }\n\n@media (max-width: 900px) {\n .se-body { flex-direction: column; }\n .se-detail { width: 100%; max-height: 50%; border-left: none; border-top: 1px solid var(--mj-border-default); }\n .se-toolbar { flex-direction: column; align-items: stretch; gap: 10px; }\n .se-search-wrap { max-width: 100%; }\n}\n"] }]
|
|
382
|
+
args: [{ standalone: false, selector: 'mj-settings-explorer', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Settings explorer\"\n Title=\"Settings Explorer\"\n Subtitle=\"User settings and instance-level configuration\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"se-toolbar\">\n <div class=\"se-tabs\">\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'user'\"\n (click)=\"OnScopeChange('user')\">\n <i class=\"fa-solid fa-user\"></i>\n User Settings\n <span class=\"se-count\">{{ Counts.user }}</span>\n </button>\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'instance'\"\n (click)=\"OnScopeChange('instance')\">\n <i class=\"fa-solid fa-server\"></i>\n Instance Configurations\n <span class=\"se-count\">{{ Counts.instance }}</span>\n </button>\n </div>\n <div class=\"se-search-wrap\">\n <i class=\"fa-solid fa-search se-search-icon\"></i>\n <input type=\"search\"\n class=\"se-search\"\n placeholder=\"Search keys or values\u2026\"\n [(ngModel)]=\"SearchQuery\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (SearchQuery) {\n <button class=\"se-search-clear\" (click)=\"SearchQuery = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"se-body\">\n <div class=\"se-list\">\n @if (FilteredRows.length === 0) {\n <div class=\"se-empty\">\n @if (SearchQuery) {\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>No matches for \"{{ SearchQuery }}\"</span>\n } @else {\n <i class=\"fa-regular fa-folder-open\"></i>\n <span>No {{ Scope === 'user' ? 'user settings' : 'instance configurations' }} are defined.</span>\n }\n </div>\n } @else {\n <table class=\"se-table\">\n <thead>\n <tr>\n <th class=\"se-th-key\">Key</th>\n <th class=\"se-th-type\">Type</th>\n <th class=\"se-th-value\">Value</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredRows; track TrackByKey($index, row)) {\n <tr [class.se-row--selected]=\"Selected?.key === row.key\"\n (click)=\"OnRowClick(row)\">\n <td class=\"se-td-key\">\n <code>{{ row.key }}</code>\n @if (row.meta) {\n <div class=\"se-td-meta\">{{ row.meta }}</div>\n }\n </td>\n <td class=\"se-td-type\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + row.valueType\">\n {{ row.valueType }}\n </span>\n </td>\n <td class=\"se-td-value\">{{ row.preview }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n @if (Selected) {\n <aside class=\"se-detail\">\n <div class=\"se-detail-head\">\n <div>\n <div class=\"se-detail-key\">{{ Selected.key }}</div>\n @if (Selected.meta) {\n <div class=\"se-detail-meta\">{{ Selected.meta }}</div>\n }\n </div>\n <div class=\"se-detail-actions\">\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnCopySelected()\" title=\"Copy value\">\n <i class=\"fa-solid fa-clipboard\" aria-hidden=\"true\"></i> Copy\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"Selected = null\" title=\"Close\" aria-label=\"Close detail\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <div class=\"se-detail-body\">\n <div class=\"se-detail-meta-row\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + Selected.valueType\">{{ Selected.valueType }}</span>\n @if (Selected.updated) {\n <span class=\"se-detail-updated\">Updated {{ Selected.updated.toLocaleString() }}</span>\n }\n </div>\n <pre class=\"se-detail-value\"><code>{{ FormattedSelected || '(empty)' }}</code></pre>\n </div>\n </aside>\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n/*\n Inspector shell \u2014 each Dev Tools sub-page wraps its body in .mj-inspector. The\n chrome (title icon, title, subtitle, action buttons) was previously rendered\n via .mj-inspector__header*, but that's been replaced by <mj-page-header-interior>\n in every inspector template. Action buttons now use the mjButton directive\n (variant=\"secondary\" / \"success\") so they inherit global button styling. App\n State + Layout inspectors used to carry an inner left rail (.mj-inspector__body\n + __sidebar + __nav-item) for L2 sections; that rail was retired 2026-05-19 in\n favor of <mj-tab-nav> projected into the chrome's [toolbar] slot, matching\n SystemDiagnostics and the API Keys tab strip. All inspectors are now \"solo\"\n mode (no sidebar).\n*/\n.mj-inspector {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n", ".mj-inspector--solo { background: var(--mj-bg-page); }\n\n/* Toolbar */\n.se-toolbar {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 10px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n}\n.se-tabs {\n display: flex;\n gap: 2px;\n background: var(--mj-bg-surface-sunken);\n padding: 3px;\n border-radius: 8px;\n}\n.se-tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 6px;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n font-size: 12.5px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.se-tab:hover { color: var(--mj-text-primary); }\n.se-tab--active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n}\n.se-count {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n font-size: 10.5px;\n padding: 1px 7px;\n border-radius: 100px;\n font-weight: 600;\n}\n.se-tab--active .se-count {\n background: color-mix(in srgb, var(--mj-brand-primary) 16%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.se-search-wrap {\n position: relative;\n flex: 1;\n max-width: 360px;\n margin-left: auto;\n}\n.se-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.se-search {\n width: 100%;\n padding: 7px 32px 7px 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 12.5px;\n font-family: inherit;\n}\n.se-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.se-search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.se-search-clear:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n/* Body */\n.se-body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.se-list {\n flex: 1;\n overflow: auto;\n background: var(--mj-bg-page);\n}\n\n.se-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n}\n.se-table thead {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--mj-bg-surface);\n box-shadow: 0 1px 0 var(--mj-border-subtle);\n}\n.se-table th {\n text-align: left;\n padding: 10px 18px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.se-th-type { width: 100px; }\n.se-th-value { }\n.se-table td {\n padding: 8px 18px;\n border-top: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: top;\n cursor: pointer;\n}\n.se-table tbody tr:hover { background: var(--mj-bg-surface-hover); }\n.se-row--selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent) !important;\n}\n.se-row--selected td:first-child {\n box-shadow: inset 3px 0 0 var(--mj-brand-primary);\n}\n\n.se-td-key code {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n padding: 2px 7px;\n border-radius: 5px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-primary);\n}\n.se-td-meta {\n margin-top: 3px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-td-value {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 0;\n}\n\n.se-type-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 100px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n}\n.se-type-pill--string { background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent); color: var(--mj-brand-primary); }\n.se-type-pill--number { background: color-mix(in srgb, #7c3aed 14%, transparent); color: #5b21b6; }\n.se-type-pill--boolean { background: color-mix(in srgb, var(--mj-status-success) 14%, transparent); color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary)); }\n.se-type-pill--json { background: color-mix(in srgb, var(--mj-status-warning) 14%, transparent); color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary)); }\n.se-type-pill--empty { background: var(--mj-bg-surface-sunken); color: var(--mj-text-muted); }\n\n/* Detail panel */\n.se-detail {\n width: 420px;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.se-detail-head {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n padding: 14px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.se-detail-key {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n word-break: break-all;\n}\n.se-detail-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 4px;\n}\n.se-detail-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.se-detail-body {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 14px 16px;\n}\n.se-detail-meta-row {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 10px;\n}\n.se-detail-updated {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.se-detail-value {\n margin: 0;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 12px 14px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-word;\n max-height: 100%;\n overflow: auto;\n}\n\n.se-empty {\n padding: 60px 40px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n.se-empty i { font-size: 28px; opacity: 0.7; }\n\n@media (max-width: 900px) {\n .se-body { flex-direction: column; }\n .se-detail { width: 100%; max-height: 50%; border-left: none; border-top: 1px solid var(--mj-border-default); }\n .se-toolbar { flex-direction: column; align-items: stretch; gap: 10px; }\n .se-search-wrap { max-width: 100%; }\n}\n"] }]
|
|
392
383
|
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
393
384
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SettingsExplorerComponent, { className: "SettingsExplorerComponent", filePath: "src/DevTools/settings-explorer.component.ts", lineNumber: 39 }); })();
|
|
394
385
|
//# sourceMappingURL=settings-explorer.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-explorer.component.js","sourceRoot":"","sources":["../../src/DevTools/settings-explorer.component.ts","../../src/DevTools/settings-explorer.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport {\n UserInfoEngine,\n InstanceConfigEngine,\n MJUserSettingEntity,\n MJInstanceConfigurationEntity\n} from '@memberjunction/core-entities';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface SettingRow {\n key: string;\n rawValue: string;\n parsedValue: unknown;\n valueType: 'string' | 'number' | 'boolean' | 'json' | 'empty';\n /** Pretty preview shown in the table cell. */\n preview: string;\n /** Optional secondary metadata shown next to the key. */\n meta?: string;\n updated?: Date | null;\n}\n\ntype SettingsScope = 'user' | 'instance';\n\n/**\n * Settings Explorer — read-only browser for both `MJ: User Settings` (the\n * current user's per-app key/value bag) and `MJ: Instance Configurations`\n * (instance-level feature flags). Auto-detects JSON values, formats them\n * nicely, supports search + copy.\n */\n@RegisterClass(BaseResourceComponent, 'SettingsExplorerInspector')\n@Component({\n standalone: false,\n selector: 'mj-settings-explorer',\n templateUrl: './settings-explorer.component.html',\n styleUrls: ['./inspector-shared.css', './settings-explorer.component.css']\n})\nexport class SettingsExplorerComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public Scope: SettingsScope = 'user';\n public UserRows: SettingRow[] = [];\n public InstanceRows: SettingRow[] = [];\n public SearchQuery = '';\n public Selected: SettingRow | null = null;\n public LastRefreshed = new Date();\n\n public Counts = { user: 0, instance: 0 };\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const p = DevToolsPrefs.Get<{ scope?: SettingsScope; search?: string }>('settingsExplorer');\n if (p?.scope) this.Scope = p.scope;\n if (p?.search) this.SearchQuery = p.search;\n this.refresh();\n this.NotifyLoadComplete();\n }\n\n public override ngOnDestroy(): void {\n DevToolsPrefs.Save('settingsExplorer', { scope: this.Scope, search: this.SearchQuery });\n super.ngOnDestroy();\n }\n\n public PersistPrefs(): void {\n DevToolsPrefs.Save('settingsExplorer', { scope: this.Scope, search: this.SearchQuery });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Settings Explorer'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-sliders'; }\n\n public refresh(): void {\n const userSettings = UserInfoEngine.Instance.UserSettings ?? [];\n this.UserRows = userSettings.map(s => this.toRow(s.Setting ?? '(no key)', s.Value ?? '', s.User ? `User: ${s.User}` : undefined, s.__mj_UpdatedAt));\n\n const instanceConfigs = InstanceConfigEngine.Instance.InstanceConfigs ?? [];\n this.InstanceRows = instanceConfigs.map(c => this.toRow(\n c.FeatureKey ?? '(no key)',\n c.Value ?? '',\n this.buildInstanceMeta(c),\n c.__mj_UpdatedAt\n ));\n\n this.Counts = { user: this.UserRows.length, instance: this.InstanceRows.length };\n\n // Sort each list by key\n this.UserRows.sort((a, b) => a.key.localeCompare(b.key));\n this.InstanceRows.sort((a, b) => a.key.localeCompare(b.key));\n\n // Re-resolve selection if it still exists\n if (this.Selected) {\n const list = this.Scope === 'user' ? this.UserRows : this.InstanceRows;\n this.Selected = list.find(r => r.key === this.Selected!.key) ?? null;\n }\n\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n public OnScopeChange(scope: SettingsScope): void {\n this.Scope = scope;\n this.Selected = null;\n this.PersistPrefs();\n }\n\n public get FilteredRows(): SettingRow[] {\n const list = this.Scope === 'user' ? this.UserRows : this.InstanceRows;\n const q = this.SearchQuery.trim().toLowerCase();\n if (!q) return list;\n return list.filter(r => r.key.toLowerCase().includes(q) || r.rawValue.toLowerCase().includes(q));\n }\n\n public OnRowClick(row: SettingRow): void {\n this.Selected = this.Selected?.key === row.key ? null : row;\n }\n\n public async OnCopySelected(): Promise<void> {\n if (!this.Selected) return;\n const text = this.Selected.valueType === 'json'\n ? JSON.stringify(this.Selected.parsedValue, null, 2)\n : this.Selected.rawValue;\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n // unavailable\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public get FormattedSelected(): string {\n if (!this.Selected) return '';\n if (this.Selected.valueType === 'json') {\n return JSON.stringify(this.Selected.parsedValue, null, 2);\n }\n return this.Selected.rawValue;\n }\n\n public TrackByKey = (_i: number, r: SettingRow) => r.key;\n\n // ---------- private ----------\n\n private buildInstanceMeta(c: MJInstanceConfigurationEntity): string | undefined {\n const parts: string[] = [];\n if (c.Category) parts.push(c.Category);\n if (c.DisplayName && c.DisplayName !== c.FeatureKey) parts.push(c.DisplayName);\n return parts.length ? parts.join(' · ') : undefined;\n }\n\n private toRow(key: string, rawValue: string, meta: string | undefined, updated: Date | string | null | undefined): SettingRow {\n const raw = rawValue ?? '';\n let valueType: SettingRow['valueType'] = 'string';\n let parsedValue: unknown = raw;\n let preview = raw;\n\n if (raw === '') {\n valueType = 'empty';\n preview = '(empty)';\n } else if (raw === 'true' || raw === 'false') {\n valueType = 'boolean';\n parsedValue = raw === 'true';\n } else if (/^-?\\d+(\\.\\d+)?$/.test(raw) && raw.length < 20) {\n valueType = 'number';\n parsedValue = Number(raw);\n } else if ((raw.startsWith('{') && raw.endsWith('}')) || (raw.startsWith('[') && raw.endsWith(']'))) {\n try {\n parsedValue = JSON.parse(raw);\n valueType = 'json';\n preview = this.summarizeJson(parsedValue);\n } catch {\n // not actually JSON — leave as string\n }\n }\n\n if (preview.length > 80) preview = preview.slice(0, 77) + '…';\n\n return {\n key,\n rawValue: raw,\n parsedValue,\n valueType,\n preview,\n meta,\n updated: updated ? (updated instanceof Date ? updated : new Date(updated)) : null\n };\n }\n\n private summarizeJson(value: unknown): string {\n if (Array.isArray(value)) return `[ ${value.length} item${value.length === 1 ? '' : 's'} ]`;\n if (value && typeof value === 'object') {\n const keys = Object.keys(value as Record<string, unknown>);\n if (keys.length === 0) return '{ }';\n return `{ ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', …' : ''} }`;\n }\n return String(value);\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-sliders\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">Settings Explorer</h3>\n <div class=\"mj-inspector__header-sub\">User settings and instance-level configuration</div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh\n </button>\n </div>\n </div>\n\n <div class=\"se-toolbar\">\n <div class=\"se-tabs\">\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'user'\"\n (click)=\"OnScopeChange('user')\">\n <i class=\"fa-solid fa-user\"></i>\n User Settings\n <span class=\"se-count\">{{ Counts.user }}</span>\n </button>\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'instance'\"\n (click)=\"OnScopeChange('instance')\">\n <i class=\"fa-solid fa-server\"></i>\n Instance Configurations\n <span class=\"se-count\">{{ Counts.instance }}</span>\n </button>\n </div>\n <div class=\"se-search-wrap\">\n <i class=\"fa-solid fa-search se-search-icon\"></i>\n <input type=\"search\"\n class=\"se-search\"\n placeholder=\"Search keys or values…\"\n [(ngModel)]=\"SearchQuery\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (SearchQuery) {\n <button class=\"se-search-clear\" (click)=\"SearchQuery = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"se-body\">\n <div class=\"se-list\">\n @if (FilteredRows.length === 0) {\n <div class=\"se-empty\">\n @if (SearchQuery) {\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>No matches for \"{{ SearchQuery }}\"</span>\n } @else {\n <i class=\"fa-regular fa-folder-open\"></i>\n <span>No {{ Scope === 'user' ? 'user settings' : 'instance configurations' }} are defined.</span>\n }\n </div>\n } @else {\n <table class=\"se-table\">\n <thead>\n <tr>\n <th class=\"se-th-key\">Key</th>\n <th class=\"se-th-type\">Type</th>\n <th class=\"se-th-value\">Value</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredRows; track TrackByKey($index, row)) {\n <tr [class.se-row--selected]=\"Selected?.key === row.key\"\n (click)=\"OnRowClick(row)\">\n <td class=\"se-td-key\">\n <code>{{ row.key }}</code>\n @if (row.meta) {\n <div class=\"se-td-meta\">{{ row.meta }}</div>\n }\n </td>\n <td class=\"se-td-type\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + row.valueType\">\n {{ row.valueType }}\n </span>\n </td>\n <td class=\"se-td-value\">{{ row.preview }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n @if (Selected) {\n <aside class=\"se-detail\">\n <div class=\"se-detail-head\">\n <div>\n <div class=\"se-detail-key\">{{ Selected.key }}</div>\n @if (Selected.meta) {\n <div class=\"se-detail-meta\">{{ Selected.meta }}</div>\n }\n </div>\n <div class=\"se-detail-actions\">\n <button class=\"mj-inspector__btn\" (click)=\"OnCopySelected()\" title=\"Copy value\">\n <i class=\"fa-solid fa-clipboard\"></i> Copy\n </button>\n <button class=\"mj-inspector__btn mj-inspector__btn--ghost\" (click)=\"Selected = null\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n <div class=\"se-detail-body\">\n <div class=\"se-detail-meta-row\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + Selected.valueType\">{{ Selected.valueType }}</span>\n @if (Selected.updated) {\n <span class=\"se-detail-updated\">Updated {{ Selected.updated.toLocaleString() }}</span>\n }\n </div>\n <pre class=\"se-detail-value\"><code>{{ FormattedSelected || '(empty)' }}</code></pre>\n </div>\n </aside>\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"settings-explorer.component.js","sourceRoot":"","sources":["../../src/DevTools/settings-explorer.component.ts","../../src/DevTools/settings-explorer.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport {\n UserInfoEngine,\n InstanceConfigEngine,\n MJUserSettingEntity,\n MJInstanceConfigurationEntity\n} from '@memberjunction/core-entities';\nimport { DevToolsPrefs } from './dev-tools-prefs';\n\ninterface SettingRow {\n key: string;\n rawValue: string;\n parsedValue: unknown;\n valueType: 'string' | 'number' | 'boolean' | 'json' | 'empty';\n /** Pretty preview shown in the table cell. */\n preview: string;\n /** Optional secondary metadata shown next to the key. */\n meta?: string;\n updated?: Date | null;\n}\n\ntype SettingsScope = 'user' | 'instance';\n\n/**\n * Settings Explorer — read-only browser for both `MJ: User Settings` (the\n * current user's per-app key/value bag) and `MJ: Instance Configurations`\n * (instance-level feature flags). Auto-detects JSON values, formats them\n * nicely, supports search + copy.\n */\n@RegisterClass(BaseResourceComponent, 'SettingsExplorerInspector')\n@Component({\n standalone: false,\n selector: 'mj-settings-explorer',\n templateUrl: './settings-explorer.component.html',\n styleUrls: ['./inspector-shared.css', './settings-explorer.component.css']\n})\nexport class SettingsExplorerComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public Scope: SettingsScope = 'user';\n public UserRows: SettingRow[] = [];\n public InstanceRows: SettingRow[] = [];\n public SearchQuery = '';\n public Selected: SettingRow | null = null;\n public LastRefreshed = new Date();\n\n public Counts = { user: 0, instance: 0 };\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const p = DevToolsPrefs.Get<{ scope?: SettingsScope; search?: string }>('settingsExplorer');\n if (p?.scope) this.Scope = p.scope;\n if (p?.search) this.SearchQuery = p.search;\n this.refresh();\n this.NotifyLoadComplete();\n }\n\n public override ngOnDestroy(): void {\n DevToolsPrefs.Save('settingsExplorer', { scope: this.Scope, search: this.SearchQuery });\n super.ngOnDestroy();\n }\n\n public PersistPrefs(): void {\n DevToolsPrefs.Save('settingsExplorer', { scope: this.Scope, search: this.SearchQuery });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Settings Explorer'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-sliders'; }\n\n public refresh(): void {\n const userSettings = UserInfoEngine.Instance.UserSettings ?? [];\n this.UserRows = userSettings.map(s => this.toRow(s.Setting ?? '(no key)', s.Value ?? '', s.User ? `User: ${s.User}` : undefined, s.__mj_UpdatedAt));\n\n const instanceConfigs = InstanceConfigEngine.Instance.InstanceConfigs ?? [];\n this.InstanceRows = instanceConfigs.map(c => this.toRow(\n c.FeatureKey ?? '(no key)',\n c.Value ?? '',\n this.buildInstanceMeta(c),\n c.__mj_UpdatedAt\n ));\n\n this.Counts = { user: this.UserRows.length, instance: this.InstanceRows.length };\n\n // Sort each list by key\n this.UserRows.sort((a, b) => a.key.localeCompare(b.key));\n this.InstanceRows.sort((a, b) => a.key.localeCompare(b.key));\n\n // Re-resolve selection if it still exists\n if (this.Selected) {\n const list = this.Scope === 'user' ? this.UserRows : this.InstanceRows;\n this.Selected = list.find(r => r.key === this.Selected!.key) ?? null;\n }\n\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n public OnScopeChange(scope: SettingsScope): void {\n this.Scope = scope;\n this.Selected = null;\n this.PersistPrefs();\n }\n\n public get FilteredRows(): SettingRow[] {\n const list = this.Scope === 'user' ? this.UserRows : this.InstanceRows;\n const q = this.SearchQuery.trim().toLowerCase();\n if (!q) return list;\n return list.filter(r => r.key.toLowerCase().includes(q) || r.rawValue.toLowerCase().includes(q));\n }\n\n public OnRowClick(row: SettingRow): void {\n this.Selected = this.Selected?.key === row.key ? null : row;\n }\n\n public async OnCopySelected(): Promise<void> {\n if (!this.Selected) return;\n const text = this.Selected.valueType === 'json'\n ? JSON.stringify(this.Selected.parsedValue, null, 2)\n : this.Selected.rawValue;\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n // unavailable\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public get FormattedSelected(): string {\n if (!this.Selected) return '';\n if (this.Selected.valueType === 'json') {\n return JSON.stringify(this.Selected.parsedValue, null, 2);\n }\n return this.Selected.rawValue;\n }\n\n public TrackByKey = (_i: number, r: SettingRow) => r.key;\n\n // ---------- private ----------\n\n private buildInstanceMeta(c: MJInstanceConfigurationEntity): string | undefined {\n const parts: string[] = [];\n if (c.Category) parts.push(c.Category);\n if (c.DisplayName && c.DisplayName !== c.FeatureKey) parts.push(c.DisplayName);\n return parts.length ? parts.join(' · ') : undefined;\n }\n\n private toRow(key: string, rawValue: string, meta: string | undefined, updated: Date | string | null | undefined): SettingRow {\n const raw = rawValue ?? '';\n let valueType: SettingRow['valueType'] = 'string';\n let parsedValue: unknown = raw;\n let preview = raw;\n\n if (raw === '') {\n valueType = 'empty';\n preview = '(empty)';\n } else if (raw === 'true' || raw === 'false') {\n valueType = 'boolean';\n parsedValue = raw === 'true';\n } else if (/^-?\\d+(\\.\\d+)?$/.test(raw) && raw.length < 20) {\n valueType = 'number';\n parsedValue = Number(raw);\n } else if ((raw.startsWith('{') && raw.endsWith('}')) || (raw.startsWith('[') && raw.endsWith(']'))) {\n try {\n parsedValue = JSON.parse(raw);\n valueType = 'json';\n preview = this.summarizeJson(parsedValue);\n } catch {\n // not actually JSON — leave as string\n }\n }\n\n if (preview.length > 80) preview = preview.slice(0, 77) + '…';\n\n return {\n key,\n rawValue: raw,\n parsedValue,\n valueType,\n preview,\n meta,\n updated: updated ? (updated instanceof Date ? updated : new Date(updated)) : null\n };\n }\n\n private summarizeJson(value: unknown): string {\n if (Array.isArray(value)) return `[ ${value.length} item${value.length === 1 ? '' : 's'} ]`;\n if (value && typeof value === 'object') {\n const keys = Object.keys(value as Record<string, unknown>);\n if (keys.length === 0) return '{ }';\n return `{ ${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', …' : ''} }`;\n }\n return String(value);\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Settings explorer\"\n Title=\"Settings Explorer\"\n Subtitle=\"User settings and instance-level configuration\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n </div>\n </mj-page-header-interior>\n\n <div class=\"se-toolbar\">\n <div class=\"se-tabs\">\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'user'\"\n (click)=\"OnScopeChange('user')\">\n <i class=\"fa-solid fa-user\"></i>\n User Settings\n <span class=\"se-count\">{{ Counts.user }}</span>\n </button>\n <button type=\"button\"\n class=\"se-tab\"\n [class.se-tab--active]=\"Scope === 'instance'\"\n (click)=\"OnScopeChange('instance')\">\n <i class=\"fa-solid fa-server\"></i>\n Instance Configurations\n <span class=\"se-count\">{{ Counts.instance }}</span>\n </button>\n </div>\n <div class=\"se-search-wrap\">\n <i class=\"fa-solid fa-search se-search-icon\"></i>\n <input type=\"search\"\n class=\"se-search\"\n placeholder=\"Search keys or values…\"\n [(ngModel)]=\"SearchQuery\"\n (ngModelChange)=\"PersistPrefs()\" />\n @if (SearchQuery) {\n <button class=\"se-search-clear\" (click)=\"SearchQuery = ''\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"se-body\">\n <div class=\"se-list\">\n @if (FilteredRows.length === 0) {\n <div class=\"se-empty\">\n @if (SearchQuery) {\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>No matches for \"{{ SearchQuery }}\"</span>\n } @else {\n <i class=\"fa-regular fa-folder-open\"></i>\n <span>No {{ Scope === 'user' ? 'user settings' : 'instance configurations' }} are defined.</span>\n }\n </div>\n } @else {\n <table class=\"se-table\">\n <thead>\n <tr>\n <th class=\"se-th-key\">Key</th>\n <th class=\"se-th-type\">Type</th>\n <th class=\"se-th-value\">Value</th>\n </tr>\n </thead>\n <tbody>\n @for (row of FilteredRows; track TrackByKey($index, row)) {\n <tr [class.se-row--selected]=\"Selected?.key === row.key\"\n (click)=\"OnRowClick(row)\">\n <td class=\"se-td-key\">\n <code>{{ row.key }}</code>\n @if (row.meta) {\n <div class=\"se-td-meta\">{{ row.meta }}</div>\n }\n </td>\n <td class=\"se-td-type\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + row.valueType\">\n {{ row.valueType }}\n </span>\n </td>\n <td class=\"se-td-value\">{{ row.preview }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n @if (Selected) {\n <aside class=\"se-detail\">\n <div class=\"se-detail-head\">\n <div>\n <div class=\"se-detail-key\">{{ Selected.key }}</div>\n @if (Selected.meta) {\n <div class=\"se-detail-meta\">{{ Selected.meta }}</div>\n }\n </div>\n <div class=\"se-detail-actions\">\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnCopySelected()\" title=\"Copy value\">\n <i class=\"fa-solid fa-clipboard\" aria-hidden=\"true\"></i> Copy\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"Selected = null\" title=\"Close\" aria-label=\"Close detail\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <div class=\"se-detail-body\">\n <div class=\"se-detail-meta-row\">\n <span class=\"se-type-pill\" [class]=\"'se-type-pill--' + Selected.valueType\">{{ Selected.valueType }}</span>\n @if (Selected.updated) {\n <span class=\"se-detail-updated\">Updated {{ Selected.updated.toLocaleString() }}</span>\n }\n </div>\n <pre class=\"se-detail-value\"><code>{{ FormattedSelected || '(empty)' }}</code></pre>\n </div>\n </aside>\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n"]}
|
|
@@ -13,6 +13,8 @@ export declare class EntityAdminDashboardComponent extends BaseDashboard impleme
|
|
|
13
13
|
filterPanelVisible: boolean;
|
|
14
14
|
selectedEntity: EntityInfo | null;
|
|
15
15
|
filteredEntities: EntityInfo[];
|
|
16
|
+
/** Total unfiltered entity count — feeds the chrome's X-of-Y badge. */
|
|
17
|
+
get TotalEntityCount(): number;
|
|
16
18
|
private userStateChangeSubject;
|
|
17
19
|
private hasLoadedUserState;
|
|
18
20
|
private metadata;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-admin-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAuC,MAAM,+BAA+B,CAAC;;AAKlG,qBAOa,6BAA8B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IACpD,YAAY,EAAG,qBAAqB,CAAC;IAE5E,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,SAAM;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,kBAAkB,UAAQ;IAC1B,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,UAAU,EAAE,CAAM;
|
|
1
|
+
{"version":3,"file":"entity-admin-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/EntityAdmin/entity-admin-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAA0B,MAAM,sBAAsB,CAAC;AAI1E,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAuC,MAAM,+BAA+B,CAAC;;AAKlG,qBAOa,6BAA8B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IACpD,YAAY,EAAG,qBAAqB,CAAC;IAE5E,SAAS,UAAS;IAClB,eAAe,UAAS;IACxB,cAAc,SAAM;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,kBAAkB,UAAQ;IAC1B,cAAc,EAAE,UAAU,GAAG,IAAI,CAAQ;IACzC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IAE3C,uEAAuE;IACvE,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAGD,OAAO,CAAC,sBAAsB,CAAoC;IAClE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,eAAe,IAAI,IAAI;IASjB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,WAAW,IAAI,IAAI;IAK5B,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,QAAQ,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAOzB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAkB7C,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAKjD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxC,YAAY,CAAC,KAAK,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAOjE,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAQ3C;;OAEG;YACW,yBAAyB;IA8BvC;;OAEG;YACW,uBAAuB;yCAvI1B,6BAA6B;2CAA7B,6BAA6B;CAiKzC"}
|