@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
|
@@ -10,18 +10,26 @@ import { BaseResourceComponent, SharedService } from '@memberjunction/ng-shared'
|
|
|
10
10
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
11
11
|
import { RunView, CompositeKey } from '@memberjunction/core';
|
|
12
12
|
import { Subject } from 'rxjs';
|
|
13
|
+
import { GraphQLListsClient } from '@memberjunction/graphql-dataprovider';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "../services/list-set-operations.service";
|
|
15
16
|
import * as i2 from "@memberjunction/ng-notifications";
|
|
16
|
-
import * as i3 from "@
|
|
17
|
-
import * as i4 from "@
|
|
18
|
-
import * as i5 from "@memberjunction/ng-
|
|
19
|
-
import * as i6 from "
|
|
17
|
+
import * as i3 from "@memberjunction/ng-export-service";
|
|
18
|
+
import * as i4 from "@angular/forms";
|
|
19
|
+
import * as i5 from "@memberjunction/ng-ui-components";
|
|
20
|
+
import * as i6 from "@memberjunction/ng-shared-generic";
|
|
21
|
+
import * as i7 from "@memberjunction/ng-list-management";
|
|
22
|
+
import * as i8 from "./venn-diagram/venn-diagram.component";
|
|
23
|
+
const _forTrack0 = ($index, $item) => $item.id;
|
|
24
|
+
const _forTrack1 = ($index, $item) => $item.list.ID;
|
|
25
|
+
const _forTrack2 = ($index, $item) => $item.view.ID;
|
|
26
|
+
const _forTrack3 = ($index, $item) => $item.ID;
|
|
27
|
+
const _forTrack4 = ($index, $item) => $item.Name;
|
|
20
28
|
function ListsOperationsResource_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
21
29
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
22
|
-
i0.ɵɵelementStart(0, "button",
|
|
30
|
+
i0.ɵɵelementStart(0, "button", 39);
|
|
23
31
|
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearAllSelections()); });
|
|
24
|
-
i0.ɵɵelement(1, "i",
|
|
32
|
+
i0.ɵɵelement(1, "i", 40);
|
|
25
33
|
i0.ɵɵtext(2, " Clear ");
|
|
26
34
|
i0.ɵɵelementEnd();
|
|
27
35
|
} }
|
|
@@ -32,7 +40,7 @@ function ListsOperationsResource_Conditional_15_Template(rf, ctx) { if (rf & 1)
|
|
|
32
40
|
} if (rf & 2) {
|
|
33
41
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
34
42
|
i0.ɵɵadvance();
|
|
35
|
-
i0.ɵɵtextInterpolate2(" ", ctx_r1.
|
|
43
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.totalOperandCount, "/", ctx_r1.maxLists, " ");
|
|
36
44
|
} }
|
|
37
45
|
function ListsOperationsResource_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
38
46
|
i0.ɵɵelementStart(0, "option", 16);
|
|
@@ -47,16 +55,16 @@ function ListsOperationsResource_For_24_Template(rf, ctx) { if (rf & 1) {
|
|
|
47
55
|
function ListsOperationsResource_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
48
56
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
49
57
|
i0.ɵɵelementStart(0, "div", 18);
|
|
50
|
-
i0.ɵɵelement(1, "div",
|
|
51
|
-
i0.ɵɵelementStart(2, "div",
|
|
58
|
+
i0.ɵɵelement(1, "div", 41);
|
|
59
|
+
i0.ɵɵelementStart(2, "div", 42)(3, "span", 43);
|
|
52
60
|
i0.ɵɵtext(4);
|
|
53
61
|
i0.ɵɵelementEnd();
|
|
54
|
-
i0.ɵɵelementStart(5, "span",
|
|
62
|
+
i0.ɵɵelementStart(5, "span", 44);
|
|
55
63
|
i0.ɵɵtext(6);
|
|
56
64
|
i0.ɵɵelementEnd()();
|
|
57
|
-
i0.ɵɵelementStart(7, "button",
|
|
65
|
+
i0.ɵɵelementStart(7, "button", 45);
|
|
58
66
|
i0.ɵɵlistener("click", function ListsOperationsResource_For_27_Template_button_click_7_listener() { const ɵ$index_54_r5 = i0.ɵɵrestoreView(_r4).$index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.removeList(ɵ$index_54_r5)); });
|
|
59
|
-
i0.ɵɵelement(8, "i",
|
|
67
|
+
i0.ɵɵelement(8, "i", 46);
|
|
60
68
|
i0.ɵɵelementEnd()();
|
|
61
69
|
} if (rf & 2) {
|
|
62
70
|
const item_r6 = ctx.$implicit;
|
|
@@ -69,12 +77,12 @@ function ListsOperationsResource_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
|
69
77
|
} }
|
|
70
78
|
function ListsOperationsResource_Conditional_28_Conditional_4_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
71
79
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
72
|
-
i0.ɵɵelementStart(0, "div",
|
|
80
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
73
81
|
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_28_Conditional_4_For_4_Template_div_click_0_listener() { const list_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addList(list_r10)); });
|
|
74
|
-
i0.ɵɵelementStart(1, "span",
|
|
82
|
+
i0.ɵɵelementStart(1, "span", 55);
|
|
75
83
|
i0.ɵɵtext(2);
|
|
76
84
|
i0.ɵɵelementEnd();
|
|
77
|
-
i0.ɵɵelementStart(3, "span",
|
|
85
|
+
i0.ɵɵelementStart(3, "span", 56);
|
|
78
86
|
i0.ɵɵtext(4);
|
|
79
87
|
i0.ɵɵelementEnd()();
|
|
80
88
|
} if (rf & 2) {
|
|
@@ -86,11 +94,11 @@ function ListsOperationsResource_Conditional_28_Conditional_4_For_4_Template(rf,
|
|
|
86
94
|
} }
|
|
87
95
|
function ListsOperationsResource_Conditional_28_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
88
96
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
89
|
-
i0.ɵɵelementStart(0, "div",
|
|
97
|
+
i0.ɵɵelementStart(0, "div", 50)(1, "div", 51);
|
|
90
98
|
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_28_Conditional_4_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.showListDropdown = false); });
|
|
91
99
|
i0.ɵɵelementEnd();
|
|
92
|
-
i0.ɵɵelementStart(2, "div",
|
|
93
|
-
i0.ɵɵrepeaterCreate(3, ListsOperationsResource_Conditional_28_Conditional_4_For_4_Template, 5, 2, "div",
|
|
100
|
+
i0.ɵɵelementStart(2, "div", 52);
|
|
101
|
+
i0.ɵɵrepeaterCreate(3, ListsOperationsResource_Conditional_28_Conditional_4_For_4_Template, 5, 2, "div", 53, i0.ɵɵrepeaterTrackByIdentity);
|
|
94
102
|
i0.ɵɵelementEnd()();
|
|
95
103
|
} if (rf & 2) {
|
|
96
104
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -99,13 +107,13 @@ function ListsOperationsResource_Conditional_28_Conditional_4_Template(rf, ctx)
|
|
|
99
107
|
} }
|
|
100
108
|
function ListsOperationsResource_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
101
109
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
102
|
-
i0.ɵɵelementStart(0, "div", 19)(1, "div",
|
|
103
|
-
i0.ɵɵelement(2, "i",
|
|
104
|
-
i0.ɵɵelementStart(3, "input",
|
|
110
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "div", 47);
|
|
111
|
+
i0.ɵɵelement(2, "i", 48);
|
|
112
|
+
i0.ɵɵelementStart(3, "input", 49);
|
|
105
113
|
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_28_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.listSearchTerm, $event) || (ctx_r1.listSearchTerm = $event); return i0.ɵɵresetView($event); });
|
|
106
114
|
i0.ɵɵlistener("ngModelChange", function ListsOperationsResource_Conditional_28_Template_input_ngModelChange_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.filterAvailableLists()); })("focus", function ListsOperationsResource_Conditional_28_Template_input_focus_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showListDropdown = true); });
|
|
107
115
|
i0.ɵɵelementEnd()();
|
|
108
|
-
i0.ɵɵconditionalCreate(4, ListsOperationsResource_Conditional_28_Conditional_4_Template, 5, 0, "div",
|
|
116
|
+
i0.ɵɵconditionalCreate(4, ListsOperationsResource_Conditional_28_Conditional_4_Template, 5, 0, "div", 50);
|
|
109
117
|
i0.ɵɵelementEnd();
|
|
110
118
|
} if (rf & 2) {
|
|
111
119
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -116,47 +124,121 @@ function ListsOperationsResource_Conditional_28_Template(rf, ctx) { if (rf & 1)
|
|
|
116
124
|
} }
|
|
117
125
|
function ListsOperationsResource_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
118
126
|
i0.ɵɵelementStart(0, "div", 20);
|
|
119
|
-
i0.ɵɵelement(1, "i",
|
|
127
|
+
i0.ɵɵelement(1, "i", 57);
|
|
120
128
|
i0.ɵɵtext(2);
|
|
121
129
|
i0.ɵɵelementEnd();
|
|
122
130
|
} if (rf & 2) {
|
|
123
131
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
124
132
|
i0.ɵɵadvance(2);
|
|
125
|
-
i0.ɵɵtextInterpolate1(" Maximum ", ctx_r1.maxLists, "
|
|
133
|
+
i0.ɵɵtextInterpolate1(" Maximum ", ctx_r1.maxLists, " operands can be compared ");
|
|
126
134
|
} }
|
|
127
|
-
function
|
|
128
|
-
i0.ɵɵ
|
|
129
|
-
i0.ɵɵ
|
|
135
|
+
function ListsOperationsResource_For_32_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
137
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
138
|
+
i0.ɵɵelement(1, "div", 58);
|
|
139
|
+
i0.ɵɵelementStart(2, "div", 42)(3, "span", 43);
|
|
140
|
+
i0.ɵɵelement(4, "i", 59);
|
|
141
|
+
i0.ɵɵtext(5);
|
|
142
|
+
i0.ɵɵelementEnd();
|
|
143
|
+
i0.ɵɵelementStart(6, "span", 44);
|
|
144
|
+
i0.ɵɵtext(7);
|
|
145
|
+
i0.ɵɵelementEnd()();
|
|
146
|
+
i0.ɵɵelementStart(8, "button", 45);
|
|
147
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_For_32_Template_button_click_8_listener() { const ɵ$index_104_r12 = i0.ɵɵrestoreView(_r11).$index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.removeView(ɵ$index_104_r12)); });
|
|
148
|
+
i0.ɵɵelement(9, "i", 46);
|
|
149
|
+
i0.ɵɵelementEnd()();
|
|
150
|
+
} if (rf & 2) {
|
|
151
|
+
const item_r13 = ctx.$implicit;
|
|
152
|
+
i0.ɵɵadvance();
|
|
153
|
+
i0.ɵɵstyleProp("border-color", item_r13.color);
|
|
154
|
+
i0.ɵɵadvance(3);
|
|
155
|
+
i0.ɵɵproperty("title", "View");
|
|
156
|
+
i0.ɵɵadvance();
|
|
157
|
+
i0.ɵɵtextInterpolate1(" ", item_r13.view.Name, " ");
|
|
158
|
+
i0.ɵɵadvance(2);
|
|
159
|
+
i0.ɵɵtextInterpolate(item_r13.entityName);
|
|
160
|
+
} }
|
|
161
|
+
function ListsOperationsResource_Conditional_33_Conditional_4_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
162
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
163
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
164
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_33_Conditional_4_For_4_Template_div_click_0_listener() { const view_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.addView(view_r17)); });
|
|
165
|
+
i0.ɵɵelementStart(1, "span", 55);
|
|
166
|
+
i0.ɵɵelement(2, "i", 60);
|
|
167
|
+
i0.ɵɵtext(3);
|
|
168
|
+
i0.ɵɵelementEnd();
|
|
169
|
+
i0.ɵɵelementStart(4, "span", 56);
|
|
170
|
+
i0.ɵɵtext(5);
|
|
171
|
+
i0.ɵɵelementEnd()();
|
|
172
|
+
} if (rf & 2) {
|
|
173
|
+
const view_r17 = ctx.$implicit;
|
|
174
|
+
i0.ɵɵadvance(3);
|
|
175
|
+
i0.ɵɵtextInterpolate1(" ", view_r17.Name, " ");
|
|
176
|
+
i0.ɵɵadvance(2);
|
|
177
|
+
i0.ɵɵtextInterpolate(view_r17.Entity);
|
|
178
|
+
} }
|
|
179
|
+
function ListsOperationsResource_Conditional_33_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
180
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
181
|
+
i0.ɵɵelementStart(0, "div", 50)(1, "div", 51);
|
|
182
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_33_Conditional_4_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.showViewDropdown = false); });
|
|
183
|
+
i0.ɵɵelementEnd();
|
|
184
|
+
i0.ɵɵelementStart(2, "div", 52);
|
|
185
|
+
i0.ɵɵrepeaterCreate(3, ListsOperationsResource_Conditional_33_Conditional_4_For_4_Template, 6, 2, "div", 53, i0.ɵɵrepeaterTrackByIdentity);
|
|
186
|
+
i0.ɵɵelementEnd()();
|
|
187
|
+
} if (rf & 2) {
|
|
188
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
189
|
+
i0.ɵɵadvance(3);
|
|
190
|
+
i0.ɵɵrepeater(ctx_r1.filteredAvailableViews);
|
|
191
|
+
} }
|
|
192
|
+
function ListsOperationsResource_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
194
|
+
i0.ɵɵelementStart(0, "div", 19)(1, "div", 47);
|
|
195
|
+
i0.ɵɵelement(2, "i", 60);
|
|
196
|
+
i0.ɵɵelementStart(3, "input", 61);
|
|
197
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_33_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.viewSearchTerm, $event) || (ctx_r1.viewSearchTerm = $event); return i0.ɵɵresetView($event); });
|
|
198
|
+
i0.ɵɵlistener("ngModelChange", function ListsOperationsResource_Conditional_33_Template_input_ngModelChange_3_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.filterAvailableViews()); })("focus", function ListsOperationsResource_Conditional_33_Template_input_focus_3_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.showViewDropdown = true); });
|
|
199
|
+
i0.ɵɵelementEnd()();
|
|
200
|
+
i0.ɵɵconditionalCreate(4, ListsOperationsResource_Conditional_33_Conditional_4_Template, 5, 0, "div", 50);
|
|
201
|
+
i0.ɵɵelementEnd();
|
|
202
|
+
} if (rf & 2) {
|
|
203
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
204
|
+
i0.ɵɵadvance(3);
|
|
205
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.viewSearchTerm);
|
|
206
|
+
i0.ɵɵadvance();
|
|
207
|
+
i0.ɵɵconditional(ctx_r1.showViewDropdown && ctx_r1.filteredAvailableViews.length > 0 ? 4 : -1);
|
|
208
|
+
} }
|
|
209
|
+
function ListsOperationsResource_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
210
|
+
i0.ɵɵelementStart(0, "div", 23);
|
|
211
|
+
i0.ɵɵelement(1, "i", 57);
|
|
130
212
|
i0.ɵɵelementStart(2, "span");
|
|
131
|
-
i0.ɵɵtext(3, "Comparing
|
|
213
|
+
i0.ɵɵtext(3, "Comparing operands of type: ");
|
|
132
214
|
i0.ɵɵelementStart(4, "strong");
|
|
133
215
|
i0.ɵɵtext(5);
|
|
134
216
|
i0.ɵɵelementEnd()()();
|
|
135
217
|
} if (rf & 2) {
|
|
136
218
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
137
219
|
i0.ɵɵadvance(5);
|
|
138
|
-
i0.ɵɵtextInterpolate(ctx_r1.
|
|
220
|
+
i0.ɵɵtextInterpolate(ctx_r1.lockedEntityName);
|
|
139
221
|
} }
|
|
140
|
-
function
|
|
141
|
-
const
|
|
142
|
-
i0.ɵɵelementStart(0, "div",
|
|
222
|
+
function ListsOperationsResource_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
224
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "h4");
|
|
143
225
|
i0.ɵɵtext(2, "Quick Operations");
|
|
144
226
|
i0.ɵɵelementEnd();
|
|
145
|
-
i0.ɵɵelementStart(3, "div",
|
|
146
|
-
i0.ɵɵlistener("click", function
|
|
147
|
-
i0.ɵɵelement(5, "i",
|
|
227
|
+
i0.ɵɵelementStart(3, "div", 62)(4, "button", 63);
|
|
228
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_35_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.performOperation("union")); });
|
|
229
|
+
i0.ɵɵelement(5, "i", 64);
|
|
148
230
|
i0.ɵɵelementStart(6, "span");
|
|
149
231
|
i0.ɵɵtext(7, "Union All");
|
|
150
232
|
i0.ɵɵelementEnd()();
|
|
151
|
-
i0.ɵɵelementStart(8, "button",
|
|
152
|
-
i0.ɵɵlistener("click", function
|
|
153
|
-
i0.ɵɵelement(9, "i",
|
|
233
|
+
i0.ɵɵelementStart(8, "button", 63);
|
|
234
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_35_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.performOperation("intersection")); });
|
|
235
|
+
i0.ɵɵelement(9, "i", 65);
|
|
154
236
|
i0.ɵɵelementStart(10, "span");
|
|
155
237
|
i0.ɵɵtext(11, "Intersection");
|
|
156
238
|
i0.ɵɵelementEnd()();
|
|
157
|
-
i0.ɵɵelementStart(12, "button",
|
|
158
|
-
i0.ɵɵlistener("click", function
|
|
159
|
-
i0.ɵɵelement(13, "i",
|
|
239
|
+
i0.ɵɵelementStart(12, "button", 63);
|
|
240
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_35_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.performOperation("symmetric_difference")); });
|
|
241
|
+
i0.ɵɵelement(13, "i", 66);
|
|
160
242
|
i0.ɵɵelementStart(14, "span");
|
|
161
243
|
i0.ɵɵtext(15, "Unique Each");
|
|
162
244
|
i0.ɵɵelementEnd()()()();
|
|
@@ -169,71 +251,71 @@ function ListsOperationsResource_Conditional_31_Template(rf, ctx) { if (rf & 1)
|
|
|
169
251
|
i0.ɵɵadvance(4);
|
|
170
252
|
i0.ɵɵproperty("disabled", ctx_r1.isCalculating);
|
|
171
253
|
} }
|
|
172
|
-
function
|
|
173
|
-
const
|
|
174
|
-
i0.ɵɵelementStart(0, "mj-venn-diagram",
|
|
175
|
-
i0.ɵɵlistener("regionClick", function
|
|
254
|
+
function ListsOperationsResource_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
256
|
+
i0.ɵɵelementStart(0, "mj-venn-diagram", 67);
|
|
257
|
+
i0.ɵɵlistener("regionClick", function ListsOperationsResource_Conditional_37_Template_mj_venn_diagram_regionClick_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRegionClick($event)); });
|
|
176
258
|
i0.ɵɵelementEnd();
|
|
177
259
|
} if (rf & 2) {
|
|
178
260
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
179
261
|
i0.ɵɵproperty("data", ctx_r1.vennData)("selectedRegion", ctx_r1.selectedRegion);
|
|
180
262
|
} }
|
|
181
|
-
function
|
|
182
|
-
i0.ɵɵelementStart(0, "div",
|
|
183
|
-
i0.ɵɵelement(2, "i",
|
|
263
|
+
function ListsOperationsResource_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelementStart(0, "div", 27)(1, "div", 68);
|
|
265
|
+
i0.ɵɵelement(2, "i", 69);
|
|
184
266
|
i0.ɵɵelementEnd();
|
|
185
267
|
i0.ɵɵelementStart(3, "h3");
|
|
186
|
-
i0.ɵɵtext(4, "Add Lists to Compare");
|
|
268
|
+
i0.ɵɵtext(4, "Add Lists or Views to Compare");
|
|
187
269
|
i0.ɵɵelementEnd();
|
|
188
270
|
i0.ɵɵelementStart(5, "p");
|
|
189
|
-
i0.ɵɵtext(6, "Select 2-4 lists from the same entity to visualize their overlaps and perform set operations.");
|
|
271
|
+
i0.ɵɵtext(6, "Select 2-4 lists or views from the same entity to visualize their overlaps and perform set operations.");
|
|
190
272
|
i0.ɵɵelementEnd()();
|
|
191
273
|
} }
|
|
192
|
-
function
|
|
193
|
-
i0.ɵɵelementStart(0, "div",
|
|
194
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
274
|
+
function ListsOperationsResource_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
275
|
+
i0.ɵɵelementStart(0, "div", 28);
|
|
276
|
+
i0.ɵɵelement(1, "mj-loading", 70);
|
|
195
277
|
i0.ɵɵelementEnd();
|
|
196
278
|
} }
|
|
197
|
-
function
|
|
198
|
-
i0.ɵɵelementStart(0, "span",
|
|
279
|
+
function ListsOperationsResource_Conditional_45_Conditional_16_For_5_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
+
i0.ɵɵelementStart(0, "span", 86);
|
|
199
281
|
i0.ɵɵtext(1);
|
|
200
282
|
i0.ɵɵelementEnd();
|
|
201
283
|
} if (rf & 2) {
|
|
202
|
-
const
|
|
284
|
+
const record_r22 = i0.ɵɵnextContext().$implicit;
|
|
203
285
|
i0.ɵɵadvance();
|
|
204
|
-
i0.ɵɵtextInterpolate(
|
|
286
|
+
i0.ɵɵtextInterpolate(record_r22.secondaryInfo);
|
|
205
287
|
} }
|
|
206
|
-
function
|
|
207
|
-
const
|
|
208
|
-
i0.ɵɵelementStart(0, "div",
|
|
288
|
+
function ListsOperationsResource_Conditional_45_Conditional_16_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
290
|
+
i0.ɵɵelementStart(0, "div", 82)(1, "div", 84)(2, "span", 85);
|
|
209
291
|
i0.ɵɵtext(3);
|
|
210
292
|
i0.ɵɵelementEnd();
|
|
211
|
-
i0.ɵɵconditionalCreate(4,
|
|
293
|
+
i0.ɵɵconditionalCreate(4, ListsOperationsResource_Conditional_45_Conditional_16_For_5_Conditional_4_Template, 2, 1, "span", 86);
|
|
212
294
|
i0.ɵɵelementEnd();
|
|
213
|
-
i0.ɵɵelementStart(5, "button",
|
|
214
|
-
i0.ɵɵlistener("click", function
|
|
215
|
-
i0.ɵɵelement(6, "i",
|
|
295
|
+
i0.ɵɵelementStart(5, "button", 87);
|
|
296
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_45_Conditional_16_For_5_Template_button_click_5_listener() { const record_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.openRecord(record_r22)); });
|
|
297
|
+
i0.ɵɵelement(6, "i", 88);
|
|
216
298
|
i0.ɵɵelementEnd()();
|
|
217
299
|
} if (rf & 2) {
|
|
218
|
-
const
|
|
300
|
+
const record_r22 = ctx.$implicit;
|
|
219
301
|
i0.ɵɵadvance(3);
|
|
220
|
-
i0.ɵɵtextInterpolate(
|
|
302
|
+
i0.ɵɵtextInterpolate(record_r22.displayName);
|
|
221
303
|
i0.ɵɵadvance();
|
|
222
|
-
i0.ɵɵconditional(
|
|
304
|
+
i0.ɵɵconditional(record_r22.secondaryInfo ? 4 : -1);
|
|
223
305
|
} }
|
|
224
|
-
function
|
|
225
|
-
i0.ɵɵelementStart(0, "div",
|
|
226
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
306
|
+
function ListsOperationsResource_Conditional_45_Conditional_16_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
i0.ɵɵelementStart(0, "div", 83);
|
|
308
|
+
i0.ɵɵelement(1, "mj-loading", 89);
|
|
227
309
|
i0.ɵɵelementEnd();
|
|
228
310
|
} }
|
|
229
|
-
function
|
|
230
|
-
i0.ɵɵelementStart(0, "div",
|
|
311
|
+
function ListsOperationsResource_Conditional_45_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
312
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "h5");
|
|
231
313
|
i0.ɵɵtext(2, "Preview (first 10)");
|
|
232
314
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵelementStart(3, "div",
|
|
234
|
-
i0.ɵɵrepeaterCreate(4,
|
|
315
|
+
i0.ɵɵelementStart(3, "div", 81);
|
|
316
|
+
i0.ɵɵrepeaterCreate(4, ListsOperationsResource_Conditional_45_Conditional_16_For_5_Template, 7, 2, "div", 82, i0.ɵɵrepeaterTrackByIdentity);
|
|
235
317
|
i0.ɵɵelementEnd();
|
|
236
|
-
i0.ɵɵconditionalCreate(6,
|
|
318
|
+
i0.ɵɵconditionalCreate(6, ListsOperationsResource_Conditional_45_Conditional_16_Conditional_6_Template, 2, 0, "div", 83);
|
|
237
319
|
i0.ɵɵelementEnd();
|
|
238
320
|
} if (rf & 2) {
|
|
239
321
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -242,30 +324,30 @@ function ListsOperationsResource_Conditional_41_Conditional_16_Template(rf, ctx)
|
|
|
242
324
|
i0.ɵɵadvance(2);
|
|
243
325
|
i0.ɵɵconditional(ctx_r1.loadingPreview ? 6 : -1);
|
|
244
326
|
} }
|
|
245
|
-
function
|
|
246
|
-
const
|
|
247
|
-
i0.ɵɵelementStart(0, "div",
|
|
327
|
+
function ListsOperationsResource_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
329
|
+
i0.ɵɵelementStart(0, "div", 31)(1, "div", 71)(2, "span", 72);
|
|
248
330
|
i0.ɵɵtext(3);
|
|
249
331
|
i0.ɵɵelementEnd();
|
|
250
|
-
i0.ɵɵelementStart(4, "span",
|
|
332
|
+
i0.ɵɵelementStart(4, "span", 73);
|
|
251
333
|
i0.ɵɵtext(5);
|
|
252
334
|
i0.ɵɵelementEnd()();
|
|
253
|
-
i0.ɵɵelementStart(6, "div",
|
|
254
|
-
i0.ɵɵlistener("click", function
|
|
255
|
-
i0.ɵɵelement(8, "i",
|
|
335
|
+
i0.ɵɵelementStart(6, "div", 74)(7, "button", 75);
|
|
336
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_45_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createListFromSelection()); });
|
|
337
|
+
i0.ɵɵelement(8, "i", 76);
|
|
256
338
|
i0.ɵɵtext(9, " Create New List ");
|
|
257
339
|
i0.ɵɵelementEnd();
|
|
258
|
-
i0.ɵɵelementStart(10, "button",
|
|
259
|
-
i0.ɵɵlistener("click", function
|
|
260
|
-
i0.ɵɵelement(11, "i",
|
|
340
|
+
i0.ɵɵelementStart(10, "button", 77);
|
|
341
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_45_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addToExistingList()); });
|
|
342
|
+
i0.ɵɵelement(11, "i", 78);
|
|
261
343
|
i0.ɵɵtext(12, " Add to List ");
|
|
262
344
|
i0.ɵɵelementEnd();
|
|
263
|
-
i0.ɵɵelementStart(13, "button",
|
|
264
|
-
i0.ɵɵlistener("click", function
|
|
265
|
-
i0.ɵɵelement(14, "i",
|
|
266
|
-
i0.ɵɵtext(15, " Export ");
|
|
345
|
+
i0.ɵɵelementStart(13, "button", 77);
|
|
346
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_45_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.openExportDialog()); });
|
|
347
|
+
i0.ɵɵelement(14, "i", 79);
|
|
348
|
+
i0.ɵɵtext(15, " Export\u2026 ");
|
|
267
349
|
i0.ɵɵelementEnd()();
|
|
268
|
-
i0.ɵɵconditionalCreate(16,
|
|
350
|
+
i0.ɵɵconditionalCreate(16, ListsOperationsResource_Conditional_45_Conditional_16_Template, 7, 1, "div", 80);
|
|
269
351
|
i0.ɵɵelementEnd();
|
|
270
352
|
} if (rf & 2) {
|
|
271
353
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -276,22 +358,22 @@ function ListsOperationsResource_Conditional_41_Template(rf, ctx) { if (rf & 1)
|
|
|
276
358
|
i0.ɵɵadvance(11);
|
|
277
359
|
i0.ɵɵconditional(ctx_r1.previewRecordsDisplay.length > 0 ? 16 : -1);
|
|
278
360
|
} }
|
|
279
|
-
function
|
|
280
|
-
const
|
|
281
|
-
i0.ɵɵelementStart(0, "div",
|
|
361
|
+
function ListsOperationsResource_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
362
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
363
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "div", 90)(2, "span", 91);
|
|
282
364
|
i0.ɵɵtext(3);
|
|
283
365
|
i0.ɵɵelementEnd();
|
|
284
|
-
i0.ɵɵelementStart(4, "span",
|
|
366
|
+
i0.ɵɵelementStart(4, "span", 92);
|
|
285
367
|
i0.ɵɵtext(5);
|
|
286
368
|
i0.ɵɵelementEnd()();
|
|
287
|
-
i0.ɵɵelementStart(6, "div",
|
|
288
|
-
i0.ɵɵlistener("click", function
|
|
289
|
-
i0.ɵɵelement(8, "i",
|
|
369
|
+
i0.ɵɵelementStart(6, "div", 74)(7, "button", 75);
|
|
370
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_46_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createListFromResult()); });
|
|
371
|
+
i0.ɵɵelement(8, "i", 76);
|
|
290
372
|
i0.ɵɵtext(9, " Create New List ");
|
|
291
373
|
i0.ɵɵelementEnd();
|
|
292
|
-
i0.ɵɵelementStart(10, "button",
|
|
293
|
-
i0.ɵɵlistener("click", function
|
|
294
|
-
i0.ɵɵelement(11, "i",
|
|
374
|
+
i0.ɵɵelementStart(10, "button", 77);
|
|
375
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_46_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.addResultToExistingList()); });
|
|
376
|
+
i0.ɵɵelement(11, "i", 78);
|
|
295
377
|
i0.ɵɵtext(12, " Add to List ");
|
|
296
378
|
i0.ɵɵelementEnd()()();
|
|
297
379
|
} if (rf & 2) {
|
|
@@ -301,54 +383,407 @@ function ListsOperationsResource_Conditional_42_Template(rf, ctx) { if (rf & 1)
|
|
|
301
383
|
i0.ɵɵadvance(2);
|
|
302
384
|
i0.ɵɵtextInterpolate1("", ctx_r1.lastOperationResult.resultCount, " records");
|
|
303
385
|
} }
|
|
304
|
-
function
|
|
305
|
-
i0.ɵɵelementStart(0, "div",
|
|
306
|
-
i0.ɵɵelement(1, "i",
|
|
386
|
+
function ListsOperationsResource_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
+
i0.ɵɵelementStart(0, "div", 33);
|
|
388
|
+
i0.ɵɵelement(1, "i", 93);
|
|
307
389
|
i0.ɵɵelementStart(2, "p");
|
|
308
390
|
i0.ɵɵtext(3, "Click a region in the diagram or run an operation to see results");
|
|
309
391
|
i0.ɵɵelementEnd()();
|
|
310
392
|
} }
|
|
311
|
-
function
|
|
312
|
-
|
|
313
|
-
i0.ɵɵ
|
|
314
|
-
i0.ɵɵ
|
|
393
|
+
function ListsOperationsResource_Conditional_48_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
394
|
+
i0.ɵɵelementStart(0, "div", 101);
|
|
395
|
+
i0.ɵɵelement(1, "i", 119);
|
|
396
|
+
i0.ɵɵelementStart(2, "span", 120);
|
|
397
|
+
i0.ɵɵtext(3);
|
|
315
398
|
i0.ɵɵelementEnd();
|
|
399
|
+
i0.ɵɵelementStart(4, "span", 121);
|
|
400
|
+
i0.ɵɵtext(5, "List");
|
|
401
|
+
i0.ɵɵelementEnd()();
|
|
402
|
+
} if (rf & 2) {
|
|
403
|
+
const s_r25 = ctx.$implicit;
|
|
404
|
+
i0.ɵɵadvance();
|
|
405
|
+
i0.ɵɵstyleProp("color", s_r25.color);
|
|
406
|
+
i0.ɵɵadvance(2);
|
|
407
|
+
i0.ɵɵtextInterpolate(s_r25.list.Name);
|
|
316
408
|
} }
|
|
317
|
-
function
|
|
318
|
-
i0.ɵɵ
|
|
409
|
+
function ListsOperationsResource_Conditional_48_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
411
|
+
i0.ɵɵelement(1, "i", 60);
|
|
412
|
+
i0.ɵɵelementStart(2, "span", 120);
|
|
413
|
+
i0.ɵɵtext(3);
|
|
414
|
+
i0.ɵɵelementEnd();
|
|
415
|
+
i0.ɵɵelementStart(4, "span", 122);
|
|
416
|
+
i0.ɵɵtext(5, "View");
|
|
417
|
+
i0.ɵɵelementEnd()();
|
|
418
|
+
} if (rf & 2) {
|
|
419
|
+
const s_r26 = ctx.$implicit;
|
|
420
|
+
i0.ɵɵadvance();
|
|
421
|
+
i0.ɵɵstyleProp("color", s_r26.color);
|
|
422
|
+
i0.ɵɵadvance(2);
|
|
423
|
+
i0.ɵɵtextInterpolate(s_r26.view.Name);
|
|
319
424
|
} }
|
|
320
|
-
function
|
|
321
|
-
const
|
|
322
|
-
i0.ɵɵelementStart(0, "
|
|
425
|
+
function ListsOperationsResource_Conditional_48_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
426
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
427
|
+
i0.ɵɵelementStart(0, "input", 123);
|
|
428
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_48_Conditional_59_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.composeNewListName, $event) || (ctx_r1.composeNewListName = $event); return i0.ɵɵresetView($event); });
|
|
429
|
+
i0.ɵɵelementEnd();
|
|
430
|
+
} if (rf & 2) {
|
|
431
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
432
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.composeNewListName);
|
|
433
|
+
} }
|
|
434
|
+
function ListsOperationsResource_Conditional_48_Conditional_60_Conditional_2_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
435
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
436
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
437
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_48_Conditional_60_Conditional_2_For_4_Template_div_click_0_listener() { const l_r31 = i0.ɵɵrestoreView(_r30).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectComposeTarget(l_r31)); });
|
|
438
|
+
i0.ɵɵelementStart(1, "span", 55);
|
|
439
|
+
i0.ɵɵtext(2);
|
|
440
|
+
i0.ɵɵelementEnd();
|
|
441
|
+
i0.ɵɵelementStart(3, "span", 56);
|
|
442
|
+
i0.ɵɵtext(4);
|
|
443
|
+
i0.ɵɵelementEnd()();
|
|
444
|
+
} if (rf & 2) {
|
|
445
|
+
const l_r31 = ctx.$implicit;
|
|
446
|
+
i0.ɵɵadvance(2);
|
|
447
|
+
i0.ɵɵtextInterpolate(l_r31.Name);
|
|
448
|
+
i0.ɵɵadvance(2);
|
|
449
|
+
i0.ɵɵtextInterpolate(l_r31.Entity);
|
|
450
|
+
} }
|
|
451
|
+
function ListsOperationsResource_Conditional_48_Conditional_60_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
452
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
453
|
+
i0.ɵɵelementStart(0, "div", 125)(1, "div", 51);
|
|
454
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_48_Conditional_60_Conditional_2_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.showComposeTargetDropdown = false); });
|
|
455
|
+
i0.ɵɵelementEnd();
|
|
456
|
+
i0.ɵɵelementStart(2, "div", 52);
|
|
457
|
+
i0.ɵɵrepeaterCreate(3, ListsOperationsResource_Conditional_48_Conditional_60_Conditional_2_For_4_Template, 5, 2, "div", 53, _forTrack3);
|
|
458
|
+
i0.ɵɵelementEnd()();
|
|
459
|
+
} if (rf & 2) {
|
|
460
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
461
|
+
i0.ɵɵadvance(3);
|
|
462
|
+
i0.ɵɵrepeater(ctx_r1.filteredComposeTargets);
|
|
463
|
+
} }
|
|
464
|
+
function ListsOperationsResource_Conditional_48_Conditional_60_Template(rf, ctx) { if (rf & 1) {
|
|
465
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
466
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "input", 124);
|
|
467
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_48_Conditional_60_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.composeTargetSearch, $event) || (ctx_r1.composeTargetSearch = $event); return i0.ɵɵresetView($event); });
|
|
468
|
+
i0.ɵɵlistener("focus", function ListsOperationsResource_Conditional_48_Conditional_60_Template_input_focus_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.showComposeTargetDropdown = true); });
|
|
469
|
+
i0.ɵɵelementEnd();
|
|
470
|
+
i0.ɵɵconditionalCreate(2, ListsOperationsResource_Conditional_48_Conditional_60_Conditional_2_Template, 5, 0, "div", 125);
|
|
471
|
+
i0.ɵɵelementEnd();
|
|
472
|
+
} if (rf & 2) {
|
|
473
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
474
|
+
i0.ɵɵadvance();
|
|
475
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.composeTargetSearch);
|
|
476
|
+
i0.ɵɵadvance();
|
|
477
|
+
i0.ɵɵconditional(ctx_r1.showComposeTargetDropdown && ctx_r1.filteredComposeTargets.length > 0 ? 2 : -1);
|
|
478
|
+
} }
|
|
479
|
+
function ListsOperationsResource_Conditional_48_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
480
|
+
i0.ɵɵelement(0, "i", 115);
|
|
481
|
+
} }
|
|
482
|
+
function ListsOperationsResource_Conditional_48_Conditional_68_Template(rf, ctx) { if (rf & 1) {
|
|
483
|
+
i0.ɵɵelement(0, "i", 116);
|
|
484
|
+
} }
|
|
485
|
+
function ListsOperationsResource_Conditional_48_Conditional_72_Template(rf, ctx) { if (rf & 1) {
|
|
486
|
+
i0.ɵɵelementStart(0, "div", 118);
|
|
487
|
+
i0.ɵɵtext(1, " Expected output: ");
|
|
488
|
+
i0.ɵɵelementStart(2, "strong");
|
|
489
|
+
i0.ɵɵtext(3);
|
|
490
|
+
i0.ɵɵelementEnd();
|
|
491
|
+
i0.ɵɵtext(4);
|
|
492
|
+
i0.ɵɵelementEnd();
|
|
493
|
+
} if (rf & 2) {
|
|
494
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
495
|
+
i0.ɵɵadvance(3);
|
|
496
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.lastOperationResult.resultCount, " records");
|
|
497
|
+
i0.ɵɵadvance();
|
|
498
|
+
i0.ɵɵtextInterpolate1(" (", ctx_r1.getOperationLabel(ctx_r1.lastOperationResult.operation), ") ");
|
|
499
|
+
} }
|
|
500
|
+
function ListsOperationsResource_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
501
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
502
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "div", 94);
|
|
503
|
+
i0.ɵɵelement(2, "i", 95);
|
|
504
|
+
i0.ɵɵelementStart(3, "h3");
|
|
505
|
+
i0.ɵɵtext(4, "Compose into a Target List");
|
|
506
|
+
i0.ɵɵelementEnd()();
|
|
507
|
+
i0.ɵɵelementStart(5, "div", 96)(6, "div", 97)(7, "div", 98)(8, "div", 99);
|
|
508
|
+
i0.ɵɵtext(9);
|
|
509
|
+
i0.ɵɵelementEnd();
|
|
510
|
+
i0.ɵɵelementStart(10, "div", 100);
|
|
511
|
+
i0.ɵɵrepeaterCreate(11, ListsOperationsResource_Conditional_48_For_12_Template, 6, 3, "div", 101, _forTrack1);
|
|
512
|
+
i0.ɵɵrepeaterCreate(13, ListsOperationsResource_Conditional_48_For_14_Template, 6, 3, "div", 102, _forTrack2);
|
|
513
|
+
i0.ɵɵelementEnd()();
|
|
514
|
+
i0.ɵɵelementStart(15, "div", 103);
|
|
515
|
+
i0.ɵɵtext(16, "\u2192");
|
|
516
|
+
i0.ɵɵelementEnd();
|
|
517
|
+
i0.ɵɵelementStart(17, "div", 98)(18, "div", 99);
|
|
518
|
+
i0.ɵɵtext(19, "Operation");
|
|
519
|
+
i0.ɵɵelementEnd();
|
|
520
|
+
i0.ɵɵelementStart(20, "div", 104)(21, "label", 105)(22, "input", 106);
|
|
521
|
+
i0.ɵɵlistener("change", function ListsOperationsResource_Conditional_48_Template_input_change_22_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.composeOp = "union"); });
|
|
522
|
+
i0.ɵɵelementEnd();
|
|
523
|
+
i0.ɵɵelement(23, "i", 64);
|
|
524
|
+
i0.ɵɵelementStart(24, "div")(25, "div", 107);
|
|
525
|
+
i0.ɵɵtext(26, "Union");
|
|
526
|
+
i0.ɵɵelementEnd();
|
|
527
|
+
i0.ɵɵelementStart(27, "div", 108);
|
|
528
|
+
i0.ɵɵtext(28, "Combine all sources, dedupe");
|
|
529
|
+
i0.ɵɵelementEnd()()();
|
|
530
|
+
i0.ɵɵelementStart(29, "label", 105)(30, "input", 106);
|
|
531
|
+
i0.ɵɵlistener("change", function ListsOperationsResource_Conditional_48_Template_input_change_30_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.composeOp = "intersection"); });
|
|
532
|
+
i0.ɵɵelementEnd();
|
|
533
|
+
i0.ɵɵelement(31, "i", 65);
|
|
534
|
+
i0.ɵɵelementStart(32, "div")(33, "div", 107);
|
|
535
|
+
i0.ɵɵtext(34, "Intersection");
|
|
536
|
+
i0.ɵɵelementEnd();
|
|
537
|
+
i0.ɵɵelementStart(35, "div", 108);
|
|
538
|
+
i0.ɵɵtext(36, "Only records in all sources");
|
|
539
|
+
i0.ɵɵelementEnd()()();
|
|
540
|
+
i0.ɵɵelementStart(37, "label", 105)(38, "input", 106);
|
|
541
|
+
i0.ɵɵlistener("change", function ListsOperationsResource_Conditional_48_Template_input_change_38_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.composeOp = "difference"); });
|
|
542
|
+
i0.ɵɵelementEnd();
|
|
543
|
+
i0.ɵɵelement(39, "i", 109);
|
|
544
|
+
i0.ɵɵelementStart(40, "div")(41, "div", 107);
|
|
545
|
+
i0.ɵɵtext(42, "Difference");
|
|
546
|
+
i0.ɵɵelementEnd();
|
|
547
|
+
i0.ɵɵelementStart(43, "div", 108);
|
|
548
|
+
i0.ɵɵtext(44, "First minus the rest");
|
|
549
|
+
i0.ɵɵelementEnd()()()()();
|
|
550
|
+
i0.ɵɵelementStart(45, "div", 103);
|
|
551
|
+
i0.ɵɵtext(46, "\u2192");
|
|
552
|
+
i0.ɵɵelementEnd();
|
|
553
|
+
i0.ɵɵelementStart(47, "div", 98)(48, "div", 99);
|
|
554
|
+
i0.ɵɵtext(49, "Target");
|
|
555
|
+
i0.ɵɵelementEnd();
|
|
556
|
+
i0.ɵɵelementStart(50, "div", 104)(51, "label", 105)(52, "input", 110);
|
|
557
|
+
i0.ɵɵlistener("change", function ListsOperationsResource_Conditional_48_Template_input_change_52_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.composeTarget = "new"); });
|
|
558
|
+
i0.ɵɵelementEnd();
|
|
559
|
+
i0.ɵɵelementStart(53, "div", 107);
|
|
560
|
+
i0.ɵɵtext(54, "Create New List");
|
|
561
|
+
i0.ɵɵelementEnd()();
|
|
562
|
+
i0.ɵɵelementStart(55, "label", 105)(56, "input", 110);
|
|
563
|
+
i0.ɵɵlistener("change", function ListsOperationsResource_Conditional_48_Template_input_change_56_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.composeTarget = "existing"); });
|
|
564
|
+
i0.ɵɵelementEnd();
|
|
565
|
+
i0.ɵɵelementStart(57, "div", 107);
|
|
566
|
+
i0.ɵɵtext(58, "Existing List\u2026");
|
|
567
|
+
i0.ɵɵelementEnd()();
|
|
568
|
+
i0.ɵɵconditionalCreate(59, ListsOperationsResource_Conditional_48_Conditional_59_Template, 1, 1, "input", 111)(60, ListsOperationsResource_Conditional_48_Conditional_60_Template, 3, 2, "div", 112);
|
|
569
|
+
i0.ɵɵelementEnd()()();
|
|
570
|
+
i0.ɵɵelementStart(61, "div", 113)(62, "button", 63);
|
|
571
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_48_Template_button_click_62_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.previewCompose()); });
|
|
572
|
+
i0.ɵɵelement(63, "i", 60);
|
|
573
|
+
i0.ɵɵelementStart(64, "span");
|
|
574
|
+
i0.ɵɵtext(65, "Preview Result");
|
|
575
|
+
i0.ɵɵelementEnd()();
|
|
576
|
+
i0.ɵɵelementStart(66, "button", 114);
|
|
577
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_48_Template_button_click_66_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.composeAndSave()); });
|
|
578
|
+
i0.ɵɵconditionalCreate(67, ListsOperationsResource_Conditional_48_Conditional_67_Template, 1, 0, "i", 115)(68, ListsOperationsResource_Conditional_48_Conditional_68_Template, 1, 0, "i", 116);
|
|
579
|
+
i0.ɵɵelementStart(69, "span");
|
|
580
|
+
i0.ɵɵtext(70);
|
|
581
|
+
i0.ɵɵelementEnd()();
|
|
582
|
+
i0.ɵɵelement(71, "div", 117);
|
|
583
|
+
i0.ɵɵconditionalCreate(72, ListsOperationsResource_Conditional_48_Conditional_72_Template, 5, 2, "div", 118);
|
|
584
|
+
i0.ɵɵelementEnd()()();
|
|
585
|
+
} if (rf & 2) {
|
|
586
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
587
|
+
i0.ɵɵadvance(9);
|
|
588
|
+
i0.ɵɵtextInterpolate1("Sources (", ctx_r1.totalOperandCount, ")");
|
|
589
|
+
i0.ɵɵadvance(2);
|
|
590
|
+
i0.ɵɵrepeater(ctx_r1.selectedLists);
|
|
591
|
+
i0.ɵɵadvance(2);
|
|
592
|
+
i0.ɵɵrepeater(ctx_r1.selectedViews);
|
|
593
|
+
i0.ɵɵadvance(8);
|
|
594
|
+
i0.ɵɵclassProp("compose-option--selected", ctx_r1.composeOp === "union");
|
|
595
|
+
i0.ɵɵadvance();
|
|
596
|
+
i0.ɵɵproperty("checked", ctx_r1.composeOp === "union");
|
|
597
|
+
i0.ɵɵadvance(7);
|
|
598
|
+
i0.ɵɵclassProp("compose-option--selected", ctx_r1.composeOp === "intersection");
|
|
599
|
+
i0.ɵɵadvance();
|
|
600
|
+
i0.ɵɵproperty("checked", ctx_r1.composeOp === "intersection");
|
|
601
|
+
i0.ɵɵadvance(7);
|
|
602
|
+
i0.ɵɵclassProp("compose-option--selected", ctx_r1.composeOp === "difference");
|
|
603
|
+
i0.ɵɵadvance();
|
|
604
|
+
i0.ɵɵproperty("checked", ctx_r1.composeOp === "difference");
|
|
605
|
+
i0.ɵɵadvance(13);
|
|
606
|
+
i0.ɵɵclassProp("compose-option--selected", ctx_r1.composeTarget === "new");
|
|
607
|
+
i0.ɵɵadvance();
|
|
608
|
+
i0.ɵɵproperty("checked", ctx_r1.composeTarget === "new");
|
|
609
|
+
i0.ɵɵadvance(3);
|
|
610
|
+
i0.ɵɵclassProp("compose-option--selected", ctx_r1.composeTarget === "existing");
|
|
611
|
+
i0.ɵɵadvance();
|
|
612
|
+
i0.ɵɵproperty("checked", ctx_r1.composeTarget === "existing");
|
|
613
|
+
i0.ɵɵadvance(3);
|
|
614
|
+
i0.ɵɵconditional(ctx_r1.composeTarget === "new" ? 59 : 60);
|
|
615
|
+
i0.ɵɵadvance(3);
|
|
616
|
+
i0.ɵɵproperty("disabled", ctx_r1.isCalculating || ctx_r1.isComposing);
|
|
617
|
+
i0.ɵɵadvance(4);
|
|
618
|
+
i0.ɵɵproperty("disabled", !ctx_r1.canCompose || ctx_r1.isCalculating || ctx_r1.isComposing);
|
|
619
|
+
i0.ɵɵadvance();
|
|
620
|
+
i0.ɵɵconditional(ctx_r1.isComposing ? 67 : 68);
|
|
621
|
+
i0.ɵɵadvance(3);
|
|
622
|
+
i0.ɵɵtextInterpolate(ctx_r1.isComposing ? "Composing\u2026" : "Compute & Save");
|
|
623
|
+
i0.ɵɵadvance(2);
|
|
624
|
+
i0.ɵɵconditional(ctx_r1.lastOperationResult ? 72 : -1);
|
|
625
|
+
} }
|
|
626
|
+
function ListsOperationsResource_Conditional_50_For_30_Template(rf, ctx) { if (rf & 1) {
|
|
627
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
628
|
+
i0.ɵɵelementStart(0, "label", 142)(1, "input", 149);
|
|
629
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_50_For_30_Template_input_ngModelChange_1_listener($event) { const f_r34 = i0.ɵɵrestoreView(_r33).$implicit; i0.ɵɵtwoWayBindingSet(f_r34.Selected, $event) || (f_r34.Selected = $event); return i0.ɵɵresetView($event); });
|
|
630
|
+
i0.ɵɵelementEnd();
|
|
631
|
+
i0.ɵɵelementStart(2, "span");
|
|
632
|
+
i0.ɵɵtext(3);
|
|
633
|
+
i0.ɵɵelementEnd()();
|
|
634
|
+
} if (rf & 2) {
|
|
635
|
+
const f_r34 = ctx.$implicit;
|
|
636
|
+
i0.ɵɵadvance();
|
|
637
|
+
i0.ɵɵtwoWayProperty("ngModel", f_r34.Selected);
|
|
638
|
+
i0.ɵɵadvance(2);
|
|
639
|
+
i0.ɵɵtextInterpolate(f_r34.DisplayName);
|
|
640
|
+
} }
|
|
641
|
+
function ListsOperationsResource_Conditional_50_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
642
|
+
i0.ɵɵelement(0, "i", 115);
|
|
643
|
+
i0.ɵɵtext(1, " Exporting\u2026 ");
|
|
644
|
+
} }
|
|
645
|
+
function ListsOperationsResource_Conditional_50_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
646
|
+
i0.ɵɵelement(0, "i", 150);
|
|
647
|
+
i0.ɵɵtext(1);
|
|
648
|
+
} if (rf & 2) {
|
|
649
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
650
|
+
i0.ɵɵadvance();
|
|
651
|
+
i0.ɵɵtextInterpolate2(" Export ", ctx_r1.exportRecordCount, " Record", ctx_r1.exportRecordCount === 1 ? "" : "s", " ");
|
|
652
|
+
} }
|
|
653
|
+
function ListsOperationsResource_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
654
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
655
|
+
i0.ɵɵelementStart(0, "div", 126);
|
|
656
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeExportDialog()); });
|
|
657
|
+
i0.ɵɵelementEnd();
|
|
658
|
+
i0.ɵɵelementStart(1, "div", 127)(2, "div", 128)(3, "h3");
|
|
659
|
+
i0.ɵɵelement(4, "i", 79);
|
|
660
|
+
i0.ɵɵtext(5);
|
|
661
|
+
i0.ɵɵelementEnd();
|
|
662
|
+
i0.ɵɵelementStart(6, "button", 129);
|
|
663
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeExportDialog()); });
|
|
664
|
+
i0.ɵɵelement(7, "i", 46);
|
|
665
|
+
i0.ɵɵelementEnd()();
|
|
666
|
+
i0.ɵɵelementStart(8, "div", 130)(9, "div", 131)(10, "label", 132);
|
|
667
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_label_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.exportFormat = "excel"); });
|
|
668
|
+
i0.ɵɵelementStart(11, "input", 133);
|
|
669
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_50_Template_input_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.exportFormat, $event) || (ctx_r1.exportFormat = $event); return i0.ɵɵresetView($event); });
|
|
670
|
+
i0.ɵɵelementEnd();
|
|
671
|
+
i0.ɵɵelement(12, "i", 134);
|
|
672
|
+
i0.ɵɵelementStart(13, "span");
|
|
673
|
+
i0.ɵɵtext(14, "Excel (.xlsx)");
|
|
674
|
+
i0.ɵɵelementEnd()();
|
|
675
|
+
i0.ɵɵelementStart(15, "label", 132);
|
|
676
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_label_click_15_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.exportFormat = "csv"); });
|
|
677
|
+
i0.ɵɵelementStart(16, "input", 135);
|
|
678
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_50_Template_input_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.exportFormat, $event) || (ctx_r1.exportFormat = $event); return i0.ɵɵresetView($event); });
|
|
679
|
+
i0.ɵɵelementEnd();
|
|
680
|
+
i0.ɵɵelement(17, "i", 136);
|
|
681
|
+
i0.ɵɵelementStart(18, "span");
|
|
682
|
+
i0.ɵɵtext(19, "CSV");
|
|
683
|
+
i0.ɵɵelementEnd()();
|
|
684
|
+
i0.ɵɵelementStart(20, "label", 132);
|
|
685
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_label_click_20_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.exportFormat = "json"); });
|
|
686
|
+
i0.ɵɵelementStart(21, "input", 137);
|
|
687
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_50_Template_input_ngModelChange_21_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.exportFormat, $event) || (ctx_r1.exportFormat = $event); return i0.ɵɵresetView($event); });
|
|
688
|
+
i0.ɵɵelementEnd();
|
|
689
|
+
i0.ɵɵelement(22, "i", 138);
|
|
690
|
+
i0.ɵɵelementStart(23, "span");
|
|
691
|
+
i0.ɵɵtext(24, "JSON");
|
|
692
|
+
i0.ɵɵelementEnd()()();
|
|
693
|
+
i0.ɵɵelement(25, "div", 139);
|
|
694
|
+
i0.ɵɵelementStart(26, "label", 140);
|
|
695
|
+
i0.ɵɵtext(27, "Columns to include");
|
|
696
|
+
i0.ɵɵelementEnd();
|
|
697
|
+
i0.ɵɵelementStart(28, "div", 141);
|
|
698
|
+
i0.ɵɵrepeaterCreate(29, ListsOperationsResource_Conditional_50_For_30_Template, 4, 2, "label", 142, _forTrack4);
|
|
699
|
+
i0.ɵɵelementEnd();
|
|
700
|
+
i0.ɵɵelementStart(31, "div", 143)(32, "a", 144);
|
|
701
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_a_click_32_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.selectAllExportFields(); return i0.ɵɵresetView($event.preventDefault()); });
|
|
702
|
+
i0.ɵɵtext(33, "Select All");
|
|
703
|
+
i0.ɵɵelementEnd();
|
|
704
|
+
i0.ɵɵelementStart(34, "a", 144);
|
|
705
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_a_click_34_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); ctx_r1.selectNoneExportFields(); return i0.ɵɵresetView($event.preventDefault()); });
|
|
706
|
+
i0.ɵɵtext(35, "Select None");
|
|
707
|
+
i0.ɵɵelementEnd();
|
|
708
|
+
i0.ɵɵelementStart(36, "span", 145);
|
|
709
|
+
i0.ɵɵtext(37);
|
|
710
|
+
i0.ɵɵelementEnd()()();
|
|
711
|
+
i0.ɵɵelementStart(38, "div", 146)(39, "button", 147);
|
|
712
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_button_click_39_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.executeExport()); });
|
|
713
|
+
i0.ɵɵconditionalCreate(40, ListsOperationsResource_Conditional_50_Conditional_40_Template, 2, 0)(41, ListsOperationsResource_Conditional_50_Conditional_41_Template, 2, 2);
|
|
714
|
+
i0.ɵɵelementEnd();
|
|
715
|
+
i0.ɵɵelementStart(42, "button", 148);
|
|
716
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_50_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeExportDialog()); });
|
|
717
|
+
i0.ɵɵtext(43, "Cancel");
|
|
718
|
+
i0.ɵɵelementEnd()()();
|
|
719
|
+
} if (rf & 2) {
|
|
720
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
721
|
+
i0.ɵɵadvance(5);
|
|
722
|
+
i0.ɵɵtextInterpolate2(" Export ", ctx_r1.exportRecordCount, " Record", ctx_r1.exportRecordCount === 1 ? "" : "s");
|
|
723
|
+
i0.ɵɵadvance(5);
|
|
724
|
+
i0.ɵɵclassProp("export-format-option--selected", ctx_r1.exportFormat === "excel");
|
|
725
|
+
i0.ɵɵadvance();
|
|
726
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportFormat);
|
|
727
|
+
i0.ɵɵadvance(4);
|
|
728
|
+
i0.ɵɵclassProp("export-format-option--selected", ctx_r1.exportFormat === "csv");
|
|
729
|
+
i0.ɵɵadvance();
|
|
730
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportFormat);
|
|
731
|
+
i0.ɵɵadvance(4);
|
|
732
|
+
i0.ɵɵclassProp("export-format-option--selected", ctx_r1.exportFormat === "json");
|
|
733
|
+
i0.ɵɵadvance();
|
|
734
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.exportFormat);
|
|
735
|
+
i0.ɵɵadvance(8);
|
|
736
|
+
i0.ɵɵrepeater(ctx_r1.exportFields);
|
|
737
|
+
i0.ɵɵadvance(8);
|
|
738
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.selectedExportFieldCount, " of ", ctx_r1.exportFields.length, " selected");
|
|
739
|
+
i0.ɵɵadvance(2);
|
|
740
|
+
i0.ɵɵproperty("disabled", ctx_r1.selectedExportFieldCount === 0 || ctx_r1.isExporting);
|
|
741
|
+
i0.ɵɵadvance();
|
|
742
|
+
i0.ɵɵconditional(ctx_r1.isExporting ? 40 : 41);
|
|
743
|
+
i0.ɵɵadvance(2);
|
|
744
|
+
i0.ɵɵproperty("disabled", ctx_r1.isExporting);
|
|
745
|
+
} }
|
|
746
|
+
function ListsOperationsResource_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
747
|
+
const _r35 = i0.ɵɵgetCurrentView();
|
|
748
|
+
i0.ɵɵelementStart(0, "div", 126);
|
|
749
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_51_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelCreateDialog()); });
|
|
750
|
+
i0.ɵɵelementEnd();
|
|
751
|
+
} }
|
|
752
|
+
function ListsOperationsResource_Conditional_52_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
753
|
+
i0.ɵɵelement(0, "i", 115);
|
|
754
|
+
} }
|
|
755
|
+
function ListsOperationsResource_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
756
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
757
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "div", 128)(2, "h3");
|
|
323
758
|
i0.ɵɵtext(3, "Create New List from Selection");
|
|
324
759
|
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵelementStart(4, "button",
|
|
326
|
-
i0.ɵɵlistener("click", function
|
|
327
|
-
i0.ɵɵelement(5, "i",
|
|
760
|
+
i0.ɵɵelementStart(4, "button", 129);
|
|
761
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_52_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelCreateDialog()); });
|
|
762
|
+
i0.ɵɵelement(5, "i", 46);
|
|
328
763
|
i0.ɵɵelementEnd()();
|
|
329
|
-
i0.ɵɵelementStart(6, "div",
|
|
764
|
+
i0.ɵɵelementStart(6, "div", 130)(7, "div", 151)(8, "label");
|
|
330
765
|
i0.ɵɵtext(9, "List Name *");
|
|
331
766
|
i0.ɵɵelementEnd();
|
|
332
|
-
i0.ɵɵelementStart(10, "input",
|
|
333
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
767
|
+
i0.ɵɵelementStart(10, "input", 152);
|
|
768
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_52_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newListName, $event) || (ctx_r1.newListName = $event); return i0.ɵɵresetView($event); });
|
|
334
769
|
i0.ɵɵelementEnd()();
|
|
335
|
-
i0.ɵɵelementStart(11, "div",
|
|
770
|
+
i0.ɵɵelementStart(11, "div", 151)(12, "label");
|
|
336
771
|
i0.ɵɵtext(13, "Description");
|
|
337
772
|
i0.ɵɵelementEnd();
|
|
338
|
-
i0.ɵɵelementStart(14, "textarea",
|
|
339
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
773
|
+
i0.ɵɵelementStart(14, "textarea", 153);
|
|
774
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_52_Template_textarea_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newListDescription, $event) || (ctx_r1.newListDescription = $event); return i0.ɵɵresetView($event); });
|
|
340
775
|
i0.ɵɵelementEnd()();
|
|
341
|
-
i0.ɵɵelementStart(15, "div",
|
|
342
|
-
i0.ɵɵelement(16, "i",
|
|
776
|
+
i0.ɵɵelementStart(15, "div", 154);
|
|
777
|
+
i0.ɵɵelement(16, "i", 57);
|
|
343
778
|
i0.ɵɵtext(17);
|
|
344
779
|
i0.ɵɵelementEnd()();
|
|
345
|
-
i0.ɵɵelementStart(18, "div",
|
|
346
|
-
i0.ɵɵlistener("click", function
|
|
347
|
-
i0.ɵɵconditionalCreate(20,
|
|
780
|
+
i0.ɵɵelementStart(18, "div", 146)(19, "button", 155);
|
|
781
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_52_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.confirmCreateList()); });
|
|
782
|
+
i0.ɵɵconditionalCreate(20, ListsOperationsResource_Conditional_52_Conditional_20_Template, 1, 0, "i", 115);
|
|
348
783
|
i0.ɵɵtext(21);
|
|
349
784
|
i0.ɵɵelementEnd();
|
|
350
|
-
i0.ɵɵelementStart(22, "button",
|
|
351
|
-
i0.ɵɵlistener("click", function
|
|
785
|
+
i0.ɵɵelementStart(22, "button", 156);
|
|
786
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_52_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelCreateDialog()); });
|
|
352
787
|
i0.ɵɵtext(23, "Cancel");
|
|
353
788
|
i0.ɵɵelementEnd()()();
|
|
354
789
|
} if (rf & 2) {
|
|
@@ -366,39 +801,39 @@ function ListsOperationsResource_Conditional_45_Template(rf, ctx) { if (rf & 1)
|
|
|
366
801
|
i0.ɵɵadvance();
|
|
367
802
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.isSaving ? "Creating..." : "Create List", " ");
|
|
368
803
|
} }
|
|
369
|
-
function
|
|
370
|
-
const
|
|
371
|
-
i0.ɵɵelementStart(0, "div",
|
|
372
|
-
i0.ɵɵlistener("click", function
|
|
804
|
+
function ListsOperationsResource_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
805
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
806
|
+
i0.ɵɵelementStart(0, "div", 126);
|
|
807
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_53_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r37); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelAddToListDialog()); });
|
|
373
808
|
i0.ɵɵelementEnd();
|
|
374
809
|
} }
|
|
375
|
-
function
|
|
376
|
-
const
|
|
377
|
-
i0.ɵɵelementStart(0, "div",
|
|
378
|
-
i0.ɵɵlistener("click", function
|
|
379
|
-
i0.ɵɵelementStart(1, "div",
|
|
380
|
-
i0.ɵɵelement(2, "input",
|
|
810
|
+
function ListsOperationsResource_Conditional_54_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
811
|
+
const _r39 = i0.ɵɵgetCurrentView();
|
|
812
|
+
i0.ɵɵelementStart(0, "div", 163);
|
|
813
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_54_For_15_Template_div_click_0_listener() { const list_r40 = i0.ɵɵrestoreView(_r39).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectTargetList(list_r40.ID)); });
|
|
814
|
+
i0.ɵɵelementStart(1, "div", 164);
|
|
815
|
+
i0.ɵɵelement(2, "input", 165);
|
|
381
816
|
i0.ɵɵelementEnd();
|
|
382
|
-
i0.ɵɵelementStart(3, "div",
|
|
817
|
+
i0.ɵɵelementStart(3, "div", 166)(4, "span", 167);
|
|
383
818
|
i0.ɵɵtext(5);
|
|
384
819
|
i0.ɵɵelementEnd();
|
|
385
|
-
i0.ɵɵelementStart(6, "span",
|
|
820
|
+
i0.ɵɵelementStart(6, "span", 168);
|
|
386
821
|
i0.ɵɵtext(7);
|
|
387
822
|
i0.ɵɵelementEnd()()();
|
|
388
823
|
} if (rf & 2) {
|
|
389
|
-
const
|
|
824
|
+
const list_r40 = ctx.$implicit;
|
|
390
825
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
391
|
-
i0.ɵɵclassProp("selected", ctx_r1.IsTargetListSelected(
|
|
826
|
+
i0.ɵɵclassProp("selected", ctx_r1.IsTargetListSelected(list_r40));
|
|
392
827
|
i0.ɵɵadvance(2);
|
|
393
|
-
i0.ɵɵproperty("checked", ctx_r1.IsTargetListSelected(
|
|
828
|
+
i0.ɵɵproperty("checked", ctx_r1.IsTargetListSelected(list_r40));
|
|
394
829
|
i0.ɵɵadvance(3);
|
|
395
|
-
i0.ɵɵtextInterpolate(
|
|
830
|
+
i0.ɵɵtextInterpolate(list_r40.Name);
|
|
396
831
|
i0.ɵɵadvance(2);
|
|
397
|
-
i0.ɵɵtextInterpolate(
|
|
832
|
+
i0.ɵɵtextInterpolate(list_r40.Entity);
|
|
398
833
|
} }
|
|
399
|
-
function
|
|
400
|
-
i0.ɵɵelementStart(0, "div",
|
|
401
|
-
i0.ɵɵelement(1, "i",
|
|
834
|
+
function ListsOperationsResource_Conditional_54_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
835
|
+
i0.ɵɵelementStart(0, "div", 162);
|
|
836
|
+
i0.ɵɵelement(1, "i", 169);
|
|
402
837
|
i0.ɵɵelementStart(2, "p");
|
|
403
838
|
i0.ɵɵtext(3);
|
|
404
839
|
i0.ɵɵelementEnd()();
|
|
@@ -407,39 +842,39 @@ function ListsOperationsResource_Conditional_47_Conditional_16_Template(rf, ctx)
|
|
|
407
842
|
i0.ɵɵadvance(3);
|
|
408
843
|
i0.ɵɵtextInterpolate(ctx_r1.addToListSearchTerm ? "No lists match your search" : "No other lists available");
|
|
409
844
|
} }
|
|
410
|
-
function
|
|
411
|
-
i0.ɵɵelement(0, "i",
|
|
845
|
+
function ListsOperationsResource_Conditional_54_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
846
|
+
i0.ɵɵelement(0, "i", 115);
|
|
412
847
|
} }
|
|
413
|
-
function
|
|
414
|
-
const
|
|
415
|
-
i0.ɵɵelementStart(0, "div",
|
|
848
|
+
function ListsOperationsResource_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
849
|
+
const _r38 = i0.ɵɵgetCurrentView();
|
|
850
|
+
i0.ɵɵelementStart(0, "div", 38)(1, "div", 128)(2, "h3");
|
|
416
851
|
i0.ɵɵtext(3, "Add to Existing List");
|
|
417
852
|
i0.ɵɵelementEnd();
|
|
418
|
-
i0.ɵɵelementStart(4, "button",
|
|
419
|
-
i0.ɵɵlistener("click", function
|
|
420
|
-
i0.ɵɵelement(5, "i",
|
|
853
|
+
i0.ɵɵelementStart(4, "button", 129);
|
|
854
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_54_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelAddToListDialog()); });
|
|
855
|
+
i0.ɵɵelement(5, "i", 46);
|
|
421
856
|
i0.ɵɵelementEnd()();
|
|
422
|
-
i0.ɵɵelementStart(6, "div",
|
|
423
|
-
i0.ɵɵelement(8, "i",
|
|
857
|
+
i0.ɵɵelementStart(6, "div", 130)(7, "div", 157);
|
|
858
|
+
i0.ɵɵelement(8, "i", 57);
|
|
424
859
|
i0.ɵɵtext(9);
|
|
425
860
|
i0.ɵɵelementEnd();
|
|
426
|
-
i0.ɵɵelementStart(10, "div",
|
|
427
|
-
i0.ɵɵelement(11, "i",
|
|
428
|
-
i0.ɵɵelementStart(12, "input",
|
|
429
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
430
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
861
|
+
i0.ɵɵelementStart(10, "div", 158);
|
|
862
|
+
i0.ɵɵelement(11, "i", 48);
|
|
863
|
+
i0.ɵɵelementStart(12, "input", 159);
|
|
864
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ListsOperationsResource_Conditional_54_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.addToListSearchTerm, $event) || (ctx_r1.addToListSearchTerm = $event); return i0.ɵɵresetView($event); });
|
|
865
|
+
i0.ɵɵlistener("ngModelChange", function ListsOperationsResource_Conditional_54_Template_input_ngModelChange_12_listener() { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.filterAddToListOptions()); });
|
|
431
866
|
i0.ɵɵelementEnd()();
|
|
432
|
-
i0.ɵɵelementStart(13, "div",
|
|
433
|
-
i0.ɵɵrepeaterCreate(14,
|
|
434
|
-
i0.ɵɵconditionalCreate(16,
|
|
867
|
+
i0.ɵɵelementStart(13, "div", 160);
|
|
868
|
+
i0.ɵɵrepeaterCreate(14, ListsOperationsResource_Conditional_54_For_15_Template, 8, 5, "div", 161, i0.ɵɵrepeaterTrackByIdentity);
|
|
869
|
+
i0.ɵɵconditionalCreate(16, ListsOperationsResource_Conditional_54_Conditional_16_Template, 4, 1, "div", 162);
|
|
435
870
|
i0.ɵɵelementEnd()();
|
|
436
|
-
i0.ɵɵelementStart(17, "div",
|
|
437
|
-
i0.ɵɵlistener("click", function
|
|
438
|
-
i0.ɵɵconditionalCreate(19,
|
|
871
|
+
i0.ɵɵelementStart(17, "div", 146)(18, "button", 155);
|
|
872
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_54_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.confirmAddToList()); });
|
|
873
|
+
i0.ɵɵconditionalCreate(19, ListsOperationsResource_Conditional_54_Conditional_19_Template, 1, 0, "i", 115);
|
|
439
874
|
i0.ɵɵtext(20);
|
|
440
875
|
i0.ɵɵelementEnd();
|
|
441
|
-
i0.ɵɵelementStart(21, "button",
|
|
442
|
-
i0.ɵɵlistener("click", function
|
|
876
|
+
i0.ɵɵelementStart(21, "button", 156);
|
|
877
|
+
i0.ɵɵlistener("click", function ListsOperationsResource_Conditional_54_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.cancelAddToListDialog()); });
|
|
443
878
|
i0.ɵɵtext(22, "Cancel");
|
|
444
879
|
i0.ɵɵelementEnd()()();
|
|
445
880
|
} if (rf & 2) {
|
|
@@ -463,6 +898,7 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
463
898
|
cdr;
|
|
464
899
|
setOperationsService;
|
|
465
900
|
notificationService;
|
|
901
|
+
exportService;
|
|
466
902
|
destroy$ = new Subject();
|
|
467
903
|
maxLists = 4;
|
|
468
904
|
selectedLists = [];
|
|
@@ -470,6 +906,14 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
470
906
|
filteredAvailableLists = [];
|
|
471
907
|
listSearchTerm = '';
|
|
472
908
|
showListDropdown = false;
|
|
909
|
+
// View operands (new in Phase 1.8). Tracked separately from selectedLists
|
|
910
|
+
// so the existing list-only logic keeps working; the operand-aware
|
|
911
|
+
// service combines both into a single computation.
|
|
912
|
+
selectedViews = [];
|
|
913
|
+
availableViews = [];
|
|
914
|
+
filteredAvailableViews = [];
|
|
915
|
+
viewSearchTerm = '';
|
|
916
|
+
showViewDropdown = false;
|
|
473
917
|
// Entity filter
|
|
474
918
|
entityOptions = [];
|
|
475
919
|
selectedEntityId = '';
|
|
@@ -491,22 +935,46 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
491
935
|
addToListSearchTerm = '';
|
|
492
936
|
filteredAddToListOptions = [];
|
|
493
937
|
selectedTargetListId = null;
|
|
938
|
+
// Compose-into-target panel (Phase 1.10) — picks an op + target for
|
|
939
|
+
// committing the result of the selected operands.
|
|
940
|
+
composeOp = 'union';
|
|
941
|
+
composeTarget = 'new';
|
|
942
|
+
composeNewListName = '';
|
|
943
|
+
composeTargetListId = null;
|
|
944
|
+
composeTargetSearch = '';
|
|
945
|
+
showComposeTargetDropdown = false;
|
|
946
|
+
isComposing = false;
|
|
947
|
+
composeDelta = null;
|
|
948
|
+
composeConfirmVisible = false;
|
|
949
|
+
// Export dialog (mockup 26). Opens before any export; lets the user
|
|
950
|
+
// pick format + which entity fields to include. Fields are resolved
|
|
951
|
+
// from EntityInfo when the dialog opens — no separate fetch.
|
|
952
|
+
showExportDialog = false;
|
|
953
|
+
exportFormat = 'excel';
|
|
954
|
+
exportFields = [];
|
|
955
|
+
exportRecordCount = 0;
|
|
956
|
+
isExporting = false;
|
|
494
957
|
entityIdFromSelectedLists = null;
|
|
495
958
|
currentEntityInfo = null;
|
|
496
959
|
// User Settings persistence
|
|
497
960
|
USER_SETTING_KEY = 'ListsOperations.State';
|
|
498
961
|
saveSettingsTimeout = null;
|
|
499
962
|
isLoadingSettings = false;
|
|
500
|
-
constructor(cdr, setOperationsService, notificationService) {
|
|
963
|
+
constructor(cdr, setOperationsService, notificationService, exportService) {
|
|
501
964
|
super();
|
|
502
965
|
this.cdr = cdr;
|
|
503
966
|
this.setOperationsService = setOperationsService;
|
|
504
967
|
this.notificationService = notificationService;
|
|
968
|
+
this.exportService = exportService;
|
|
505
969
|
}
|
|
506
970
|
get hasMultipleEntities() {
|
|
507
|
-
if (this.
|
|
971
|
+
if (this.totalOperandCount < 2)
|
|
508
972
|
return false;
|
|
509
|
-
const entities = new Set(
|
|
973
|
+
const entities = new Set();
|
|
974
|
+
for (const s of this.selectedLists)
|
|
975
|
+
entities.add(s.list.EntityID);
|
|
976
|
+
for (const s of this.selectedViews)
|
|
977
|
+
entities.add(s.entityID);
|
|
510
978
|
return entities.size > 1;
|
|
511
979
|
}
|
|
512
980
|
async ngOnInit() {
|
|
@@ -528,17 +996,32 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
528
996
|
async loadAvailableLists() {
|
|
529
997
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
530
998
|
const md = this.ProviderToUse;
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
999
|
+
// RunViews's typed overload doesn't express tuple positions, so we
|
|
1000
|
+
// run them as two parallel single-typed RunView calls — same number
|
|
1001
|
+
// of round trips, cleaner typing.
|
|
1002
|
+
const [listResult, viewResult] = await Promise.all([
|
|
1003
|
+
rv.RunView({
|
|
1004
|
+
EntityName: 'MJ: Lists',
|
|
1005
|
+
ExtraFilter: `UserID = '${md.CurrentUser?.ID}'`,
|
|
1006
|
+
OrderBy: 'Name',
|
|
1007
|
+
ResultType: 'entity_object',
|
|
1008
|
+
}),
|
|
1009
|
+
rv.RunView({
|
|
1010
|
+
EntityName: 'MJ: User Views',
|
|
1011
|
+
ExtraFilter: `UserID = '${md.CurrentUser?.ID}'`,
|
|
1012
|
+
OrderBy: 'Name',
|
|
1013
|
+
ResultType: 'entity_object',
|
|
1014
|
+
}),
|
|
1015
|
+
]);
|
|
1016
|
+
if (listResult.Success) {
|
|
1017
|
+
this.availableLists = listResult.Results || [];
|
|
539
1018
|
this.buildEntityOptions();
|
|
540
1019
|
this.filterAvailableLists();
|
|
541
1020
|
}
|
|
1021
|
+
if (viewResult.Success) {
|
|
1022
|
+
this.availableViews = viewResult.Results || [];
|
|
1023
|
+
this.filterAvailableViews();
|
|
1024
|
+
}
|
|
542
1025
|
}
|
|
543
1026
|
/**
|
|
544
1027
|
* Build entity options for the filter dropdown
|
|
@@ -566,19 +1049,20 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
566
1049
|
* Handle entity filter change
|
|
567
1050
|
*/
|
|
568
1051
|
onEntityFilterChange() {
|
|
569
|
-
//
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
1052
|
+
// If we're locked to an entity and the filter changes to a different
|
|
1053
|
+
// one, wipe both list AND view selections — the entity invariant
|
|
1054
|
+
// applies to all operands.
|
|
1055
|
+
const lockedEntityId = this.lockedEntityID;
|
|
1056
|
+
if (lockedEntityId && this.selectedEntityId && this.selectedEntityId !== lockedEntityId) {
|
|
1057
|
+
this.selectedLists = [];
|
|
1058
|
+
this.selectedViews = [];
|
|
1059
|
+
this.vennData = null;
|
|
1060
|
+
this.selectedRegion = null;
|
|
1061
|
+
this.lastOperationResult = null;
|
|
1062
|
+
this.previewRecordsDisplay = [];
|
|
580
1063
|
}
|
|
581
1064
|
this.filterAvailableLists();
|
|
1065
|
+
this.filterAvailableViews();
|
|
582
1066
|
this.saveState();
|
|
583
1067
|
}
|
|
584
1068
|
filterAvailableLists() {
|
|
@@ -588,10 +1072,10 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
588
1072
|
if (this.selectedEntityId) {
|
|
589
1073
|
filtered = filtered.filter(l => UUIDsEqual(l.EntityID, this.selectedEntityId));
|
|
590
1074
|
}
|
|
591
|
-
// If we have selected
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
filtered = filtered.filter(l => UUIDsEqual(l.EntityID,
|
|
1075
|
+
// If we have any operands selected (list or view), restrict to same entity.
|
|
1076
|
+
const lockedEntityId = this.lockedEntityID;
|
|
1077
|
+
if (lockedEntityId) {
|
|
1078
|
+
filtered = filtered.filter(l => UUIDsEqual(l.EntityID, lockedEntityId));
|
|
595
1079
|
}
|
|
596
1080
|
if (this.listSearchTerm) {
|
|
597
1081
|
const term = this.listSearchTerm.toLowerCase();
|
|
@@ -600,8 +1084,53 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
600
1084
|
}
|
|
601
1085
|
this.filteredAvailableLists = filtered.slice(0, 10);
|
|
602
1086
|
}
|
|
1087
|
+
/**
|
|
1088
|
+
* Same logic as `filterAvailableLists` for the view picker. Views are
|
|
1089
|
+
* locked to the same entity as any already-selected list or view.
|
|
1090
|
+
*/
|
|
1091
|
+
filterAvailableViews() {
|
|
1092
|
+
const selectedIds = new Set(this.selectedViews.map(s => s.view.ID));
|
|
1093
|
+
let filtered = this.availableViews.filter(v => !selectedIds.has(v.ID));
|
|
1094
|
+
if (this.selectedEntityId) {
|
|
1095
|
+
filtered = filtered.filter(v => UUIDsEqual(v.EntityID, this.selectedEntityId));
|
|
1096
|
+
}
|
|
1097
|
+
const lockedEntityId = this.lockedEntityID;
|
|
1098
|
+
if (lockedEntityId) {
|
|
1099
|
+
filtered = filtered.filter(v => UUIDsEqual(v.EntityID, lockedEntityId));
|
|
1100
|
+
}
|
|
1101
|
+
if (this.viewSearchTerm) {
|
|
1102
|
+
const term = this.viewSearchTerm.toLowerCase();
|
|
1103
|
+
filtered = filtered.filter(v => v.Name.toLowerCase().includes(term) ||
|
|
1104
|
+
(v.Entity && v.Entity.toLowerCase().includes(term)));
|
|
1105
|
+
}
|
|
1106
|
+
this.filteredAvailableViews = filtered.slice(0, 10);
|
|
1107
|
+
}
|
|
1108
|
+
/**
|
|
1109
|
+
* Returns the entity ID that operands are currently locked to, or null
|
|
1110
|
+
* if no operands are selected. Lists win over views purely because they
|
|
1111
|
+
* come first in the operand list; either source is authoritative.
|
|
1112
|
+
*/
|
|
1113
|
+
get lockedEntityID() {
|
|
1114
|
+
if (this.selectedLists.length > 0)
|
|
1115
|
+
return this.selectedLists[0].list.EntityID;
|
|
1116
|
+
if (this.selectedViews.length > 0)
|
|
1117
|
+
return this.selectedViews[0].entityID;
|
|
1118
|
+
return null;
|
|
1119
|
+
}
|
|
1120
|
+
/**
|
|
1121
|
+
* Display name of the entity currently locking the picker — drives the
|
|
1122
|
+
* "Comparing operands of type: …" hint in the UI. Falls back to the
|
|
1123
|
+
* first available denormalized name we have.
|
|
1124
|
+
*/
|
|
1125
|
+
get lockedEntityName() {
|
|
1126
|
+
if (this.selectedLists.length > 0)
|
|
1127
|
+
return this.selectedLists[0].entityName;
|
|
1128
|
+
if (this.selectedViews.length > 0)
|
|
1129
|
+
return this.selectedViews[0].entityName;
|
|
1130
|
+
return null;
|
|
1131
|
+
}
|
|
603
1132
|
addList(list) {
|
|
604
|
-
const color = this.setOperationsService.getColorForIndex(this.
|
|
1133
|
+
const color = this.setOperationsService.getColorForIndex(this.totalOperandCount);
|
|
605
1134
|
this.selectedLists.push({
|
|
606
1135
|
list,
|
|
607
1136
|
entityName: list.Entity || 'Unknown',
|
|
@@ -610,21 +1139,53 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
610
1139
|
this.listSearchTerm = '';
|
|
611
1140
|
this.showListDropdown = false;
|
|
612
1141
|
this.filterAvailableLists();
|
|
1142
|
+
this.filterAvailableViews();
|
|
613
1143
|
this.recalculateVenn();
|
|
614
1144
|
this.saveState();
|
|
615
1145
|
}
|
|
616
1146
|
removeList(index) {
|
|
617
1147
|
this.selectedLists.splice(index, 1);
|
|
618
|
-
// Reassign colors
|
|
619
|
-
this.
|
|
620
|
-
|
|
1148
|
+
// Reassign colors across BOTH lists and views so the palette stays in order.
|
|
1149
|
+
this.reassignOperandColors();
|
|
1150
|
+
this.filterAvailableLists();
|
|
1151
|
+
this.filterAvailableViews();
|
|
1152
|
+
this.recalculateVenn();
|
|
1153
|
+
this.saveState();
|
|
1154
|
+
}
|
|
1155
|
+
addView(view) {
|
|
1156
|
+
const color = this.setOperationsService.getColorForIndex(this.totalOperandCount);
|
|
1157
|
+
this.selectedViews.push({
|
|
1158
|
+
view,
|
|
1159
|
+
entityName: view.Entity || 'Unknown',
|
|
1160
|
+
entityID: view.EntityID,
|
|
1161
|
+
color,
|
|
621
1162
|
});
|
|
1163
|
+
this.viewSearchTerm = '';
|
|
1164
|
+
this.showViewDropdown = false;
|
|
622
1165
|
this.filterAvailableLists();
|
|
1166
|
+
this.filterAvailableViews();
|
|
623
1167
|
this.recalculateVenn();
|
|
624
1168
|
this.saveState();
|
|
625
1169
|
}
|
|
1170
|
+
removeView(index) {
|
|
1171
|
+
this.selectedViews.splice(index, 1);
|
|
1172
|
+
this.reassignOperandColors();
|
|
1173
|
+
this.filterAvailableLists();
|
|
1174
|
+
this.filterAvailableViews();
|
|
1175
|
+
this.recalculateVenn();
|
|
1176
|
+
this.saveState();
|
|
1177
|
+
}
|
|
1178
|
+
reassignOperandColors() {
|
|
1179
|
+
let i = 0;
|
|
1180
|
+
for (const s of this.selectedLists) {
|
|
1181
|
+
s.color = this.setOperationsService.getColorForIndex(i++);
|
|
1182
|
+
}
|
|
1183
|
+
for (const s of this.selectedViews) {
|
|
1184
|
+
s.color = this.setOperationsService.getColorForIndex(i++);
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
626
1187
|
async recalculateVenn() {
|
|
627
|
-
if (this.
|
|
1188
|
+
if (this.totalOperandCount === 0) {
|
|
628
1189
|
this.vennData = null;
|
|
629
1190
|
this.selectedRegion = null;
|
|
630
1191
|
this.lastOperationResult = null;
|
|
@@ -633,8 +1194,8 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
633
1194
|
this.isCalculating = true;
|
|
634
1195
|
this.cdr.detectChanges();
|
|
635
1196
|
try {
|
|
636
|
-
const
|
|
637
|
-
this.vennData = await this.setOperationsService.
|
|
1197
|
+
const operands = this.buildAllOperands();
|
|
1198
|
+
this.vennData = await this.setOperationsService.calculateVennDataForOperands(operands);
|
|
638
1199
|
this.selectedRegion = null;
|
|
639
1200
|
this.lastOperationResult = null;
|
|
640
1201
|
}
|
|
@@ -646,6 +1207,37 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
646
1207
|
this.cdr.detectChanges();
|
|
647
1208
|
}
|
|
648
1209
|
}
|
|
1210
|
+
/**
|
|
1211
|
+
* Combined operand count — drives "≥ 2 operands" checks for showing
|
|
1212
|
+
* operation buttons + the Venn diagram empty-state.
|
|
1213
|
+
*/
|
|
1214
|
+
get totalOperandCount() {
|
|
1215
|
+
return this.selectedLists.length + this.selectedViews.length;
|
|
1216
|
+
}
|
|
1217
|
+
/**
|
|
1218
|
+
* Build the unified `SetOperand[]` for the service. Lists come first
|
|
1219
|
+
* (preserving the existing color order); views follow. Each view's
|
|
1220
|
+
* color is picked sequentially from the same palette.
|
|
1221
|
+
*/
|
|
1222
|
+
buildAllOperands() {
|
|
1223
|
+
const fromLists = this.selectedLists.map((s) => ({
|
|
1224
|
+
kind: 'list',
|
|
1225
|
+
id: s.list.ID,
|
|
1226
|
+
name: s.list.Name,
|
|
1227
|
+
entityID: s.list.EntityID,
|
|
1228
|
+
entityName: s.entityName,
|
|
1229
|
+
color: s.color,
|
|
1230
|
+
}));
|
|
1231
|
+
const fromViews = this.selectedViews.map((s) => ({
|
|
1232
|
+
kind: 'view',
|
|
1233
|
+
id: s.view.ID,
|
|
1234
|
+
name: s.view.Name,
|
|
1235
|
+
entityID: s.entityID,
|
|
1236
|
+
entityName: s.entityName,
|
|
1237
|
+
color: s.color,
|
|
1238
|
+
}));
|
|
1239
|
+
return [...fromLists, ...fromViews];
|
|
1240
|
+
}
|
|
649
1241
|
onRegionClick(event) {
|
|
650
1242
|
this.selectedRegion = event.intersection;
|
|
651
1243
|
this.lastOperationResult = null;
|
|
@@ -801,14 +1393,14 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
801
1393
|
}
|
|
802
1394
|
}
|
|
803
1395
|
async performOperation(operation) {
|
|
804
|
-
if (this.
|
|
1396
|
+
if (this.totalOperandCount < 2)
|
|
805
1397
|
return;
|
|
806
1398
|
this.isCalculating = true;
|
|
807
1399
|
this.selectedRegion = null;
|
|
808
1400
|
this.cdr.detectChanges();
|
|
809
1401
|
try {
|
|
810
|
-
const
|
|
811
|
-
this.lastOperationResult = await this.setOperationsService.
|
|
1402
|
+
const operands = this.buildAllOperands();
|
|
1403
|
+
this.lastOperationResult = await this.setOperationsService.performOperationForOperands(operation, operands);
|
|
812
1404
|
this.previewRecords = this.lastOperationResult.resultRecordIds.slice(0, 10);
|
|
813
1405
|
}
|
|
814
1406
|
catch (error) {
|
|
@@ -819,6 +1411,185 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
819
1411
|
this.cdr.detectChanges();
|
|
820
1412
|
}
|
|
821
1413
|
}
|
|
1414
|
+
// -------------------------------------------------------------------
|
|
1415
|
+
// Compose-into-target (Phase 1.10)
|
|
1416
|
+
//
|
|
1417
|
+
// The "Compose" panel sits below the Venn diagram. It mirrors the
|
|
1418
|
+
// operand list already chosen above but adds the explicit target step:
|
|
1419
|
+
// either materialize the result into a brand-new List, or merge into an
|
|
1420
|
+
// existing one (which routes through the delta-confirm dialog because
|
|
1421
|
+
// existing-target operations can produce drops).
|
|
1422
|
+
//
|
|
1423
|
+
// The op selector here only supports the three set-ops the server
|
|
1424
|
+
// exposes (union / intersection / difference). The Quick Operations
|
|
1425
|
+
// panel above still has `symmetric_difference` for preview, but that
|
|
1426
|
+
// doesn't map to a server compose op — and a target commit needs the
|
|
1427
|
+
// server side for the delta + drop-guard.
|
|
1428
|
+
// -------------------------------------------------------------------
|
|
1429
|
+
/**
|
|
1430
|
+
* Server-side compose preview — builds inputs from the currently selected
|
|
1431
|
+
* operands (lists + views) and calls `ComposeLists`. Returns the signed
|
|
1432
|
+
* delta so `composeAndSave` can route through `ApplyListDelta` when the
|
|
1433
|
+
* target is an existing list.
|
|
1434
|
+
*/
|
|
1435
|
+
buildComposeInputs() {
|
|
1436
|
+
const inputs = this.selectedLists.map((s) => ({
|
|
1437
|
+
kind: 'list',
|
|
1438
|
+
listId: s.list.ID,
|
|
1439
|
+
}));
|
|
1440
|
+
for (const s of this.selectedViews) {
|
|
1441
|
+
inputs.push({ kind: 'view', viewId: s.view.ID });
|
|
1442
|
+
}
|
|
1443
|
+
return inputs;
|
|
1444
|
+
}
|
|
1445
|
+
get canCompose() {
|
|
1446
|
+
if (this.totalOperandCount < 2)
|
|
1447
|
+
return false;
|
|
1448
|
+
if (this.composeTarget === 'new')
|
|
1449
|
+
return this.composeNewListName.trim().length > 0;
|
|
1450
|
+
return !!this.composeTargetListId;
|
|
1451
|
+
}
|
|
1452
|
+
/**
|
|
1453
|
+
* "Preview Result" — re-runs the Quick-Operation path with the compose
|
|
1454
|
+
* panel's chosen op so the user can see the expected output count
|
|
1455
|
+
* before committing. We use the local set-op service rather than the
|
|
1456
|
+
* server here because preview is a read-only operation that doesn't
|
|
1457
|
+
* need a delta token (target is null) — staying local keeps it fast.
|
|
1458
|
+
*/
|
|
1459
|
+
async previewCompose() {
|
|
1460
|
+
if (this.totalOperandCount < 2)
|
|
1461
|
+
return;
|
|
1462
|
+
await this.performOperation(this.composeOp);
|
|
1463
|
+
}
|
|
1464
|
+
/**
|
|
1465
|
+
* Commit the compose: either materialize a new list (client-side using
|
|
1466
|
+
* the previewed record IDs) or merge into an existing list via the
|
|
1467
|
+
* server's ComposeLists + ApplyListDelta flow.
|
|
1468
|
+
*/
|
|
1469
|
+
async composeAndSave() {
|
|
1470
|
+
if (!this.canCompose || this.isComposing)
|
|
1471
|
+
return;
|
|
1472
|
+
this.isComposing = true;
|
|
1473
|
+
this.cdr.detectChanges();
|
|
1474
|
+
try {
|
|
1475
|
+
if (this.composeTarget === 'new') {
|
|
1476
|
+
await this.composeToNewList();
|
|
1477
|
+
}
|
|
1478
|
+
else {
|
|
1479
|
+
await this.composeToExistingList();
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
catch (e) {
|
|
1483
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
1484
|
+
this.notificationService.CreateSimpleNotification(`Compose failed: ${message}`, 'error', 5000);
|
|
1485
|
+
}
|
|
1486
|
+
finally {
|
|
1487
|
+
this.isComposing = false;
|
|
1488
|
+
this.cdr.detectChanges();
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
/**
|
|
1492
|
+
* New-list path: ensure preview is fresh, then route through the
|
|
1493
|
+
* existing "create list from selection" machinery using the result's
|
|
1494
|
+
* record IDs. This keeps materialization + naming in one place.
|
|
1495
|
+
*/
|
|
1496
|
+
async composeToNewList() {
|
|
1497
|
+
// Refresh preview so result reflects the compose-panel's op (the user
|
|
1498
|
+
// may have run a different op via Quick Operations).
|
|
1499
|
+
await this.performOperation(this.composeOp);
|
|
1500
|
+
if (!this.lastOperationResult || this.lastOperationResult.resultCount === 0) {
|
|
1501
|
+
this.notificationService.CreateSimpleNotification('Compose produced zero records — nothing to save.', 'warning', 3000);
|
|
1502
|
+
return;
|
|
1503
|
+
}
|
|
1504
|
+
this.newListName = this.composeNewListName.trim();
|
|
1505
|
+
this.newListDescription = `Composed via ${this.getOperationLabel(this.composeOp)} of ${this.totalOperandCount} source(s).`;
|
|
1506
|
+
this.recordsToAdd = this.lastOperationResult.resultRecordIds;
|
|
1507
|
+
await this.confirmCreateList();
|
|
1508
|
+
// Clear the compose form on success.
|
|
1509
|
+
this.composeNewListName = '';
|
|
1510
|
+
this.cdr.detectChanges();
|
|
1511
|
+
}
|
|
1512
|
+
/**
|
|
1513
|
+
* Existing-list path: compose server-side to get a signed delta, then
|
|
1514
|
+
* surface the delta-confirm dialog. Sync semantics (replace contents)
|
|
1515
|
+
* apply implicitly — the server returns ToRemove for any records that
|
|
1516
|
+
* are in the target but not in the compose result.
|
|
1517
|
+
*/
|
|
1518
|
+
async composeToExistingList() {
|
|
1519
|
+
if (!this.composeTargetListId)
|
|
1520
|
+
return;
|
|
1521
|
+
const provider = this.ProviderToUse;
|
|
1522
|
+
const client = new GraphQLListsClient(provider);
|
|
1523
|
+
const delta = await client.ComposeLists({
|
|
1524
|
+
Op: this.composeOp,
|
|
1525
|
+
Inputs: this.buildComposeInputs(),
|
|
1526
|
+
Target: { kind: 'list', listId: this.composeTargetListId },
|
|
1527
|
+
});
|
|
1528
|
+
this.composeDelta = delta;
|
|
1529
|
+
this.composeConfirmVisible = true;
|
|
1530
|
+
}
|
|
1531
|
+
onComposeConfirmCancel() {
|
|
1532
|
+
this.composeConfirmVisible = false;
|
|
1533
|
+
this.composeDelta = null;
|
|
1534
|
+
this.cdr.detectChanges();
|
|
1535
|
+
}
|
|
1536
|
+
async onComposeConfirmCommit(deltaToken) {
|
|
1537
|
+
if (!this.composeDelta)
|
|
1538
|
+
return;
|
|
1539
|
+
const provider = this.ProviderToUse;
|
|
1540
|
+
const client = new GraphQLListsClient(provider);
|
|
1541
|
+
try {
|
|
1542
|
+
const result = await client.ApplyListDelta({
|
|
1543
|
+
Delta: { ...this.composeDelta, DeltaToken: deltaToken },
|
|
1544
|
+
ConfirmDrops: (this.composeDelta.Counts.Remove ?? 0) > 0,
|
|
1545
|
+
});
|
|
1546
|
+
if (result.Success) {
|
|
1547
|
+
this.composeConfirmVisible = false;
|
|
1548
|
+
this.composeDelta = null;
|
|
1549
|
+
this.notificationService.CreateSimpleNotification(`Target updated: +${result.Counts?.Added ?? 0} / -${result.Counts?.Removed ?? 0}`, 'success', 3000);
|
|
1550
|
+
}
|
|
1551
|
+
else {
|
|
1552
|
+
this.notificationService.CreateSimpleNotification(`Compose apply failed: ${result.Message}`, 'error', 5000);
|
|
1553
|
+
}
|
|
1554
|
+
}
|
|
1555
|
+
catch (e) {
|
|
1556
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
1557
|
+
this.notificationService.CreateSimpleNotification(`Compose apply failed: ${message}`, 'error', 5000);
|
|
1558
|
+
}
|
|
1559
|
+
finally {
|
|
1560
|
+
this.cdr.detectChanges();
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
/**
|
|
1564
|
+
* Filtered list of existing lists eligible as compose targets. We
|
|
1565
|
+
* exclude lists already in the selected operands (committing to a
|
|
1566
|
+
* source list would be a self-referential compose) and lists from
|
|
1567
|
+
* other entities (the entity invariant still applies).
|
|
1568
|
+
*/
|
|
1569
|
+
get filteredComposeTargets() {
|
|
1570
|
+
const operandListIds = new Set(this.selectedLists.map((s) => s.list.ID));
|
|
1571
|
+
const lockedEntityId = this.lockedEntityID;
|
|
1572
|
+
let pool = this.availableLists.filter((l) => !operandListIds.has(l.ID));
|
|
1573
|
+
if (lockedEntityId) {
|
|
1574
|
+
pool = pool.filter((l) => UUIDsEqual(l.EntityID, lockedEntityId));
|
|
1575
|
+
}
|
|
1576
|
+
if (this.composeTargetSearch.trim().length > 0) {
|
|
1577
|
+
const term = this.composeTargetSearch.toLowerCase();
|
|
1578
|
+
pool = pool.filter((l) => l.Name.toLowerCase().includes(term));
|
|
1579
|
+
}
|
|
1580
|
+
return pool.slice(0, 10);
|
|
1581
|
+
}
|
|
1582
|
+
selectComposeTarget(list) {
|
|
1583
|
+
this.composeTargetListId = list.ID;
|
|
1584
|
+
this.composeTargetSearch = list.Name;
|
|
1585
|
+
this.showComposeTargetDropdown = false;
|
|
1586
|
+
}
|
|
1587
|
+
composeTargetDisplayName() {
|
|
1588
|
+
if (!this.composeTargetListId)
|
|
1589
|
+
return '';
|
|
1590
|
+
const found = this.availableLists.find((l) => UUIDsEqual(l.ID, this.composeTargetListId));
|
|
1591
|
+
return found?.Name ?? '';
|
|
1592
|
+
}
|
|
822
1593
|
getOperationLabel(operation) {
|
|
823
1594
|
switch (operation) {
|
|
824
1595
|
case 'union': return 'Union (All Records)';
|
|
@@ -998,9 +1769,134 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
998
1769
|
this.cdr.detectChanges();
|
|
999
1770
|
}
|
|
1000
1771
|
}
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1772
|
+
/**
|
|
1773
|
+
* Open the export-format-and-columns picker (mockup 26). Resolves the
|
|
1774
|
+
* candidate field list from EntityInfo on the loaded metadata — no
|
|
1775
|
+
* extra RunView. Default selection mirrors what the previous
|
|
1776
|
+
* "export all" behavior produced.
|
|
1777
|
+
*/
|
|
1778
|
+
openExportDialog() {
|
|
1779
|
+
const recordIds = this.selectedRegion?.recordIds ?? this.lastOperationResult?.resultRecordIds ?? [];
|
|
1780
|
+
if (recordIds.length === 0) {
|
|
1781
|
+
this.notificationService.CreateSimpleNotification('Nothing to export — pick a region first.', 'info', 3000);
|
|
1782
|
+
return;
|
|
1783
|
+
}
|
|
1784
|
+
const entityName = this.selectedLists[0]?.entityName ?? this.selectedViews[0]?.entityName ?? null;
|
|
1785
|
+
if (!entityName) {
|
|
1786
|
+
this.notificationService.CreateSimpleNotification('Cannot determine entity for export.', 'error', 4000);
|
|
1787
|
+
return;
|
|
1788
|
+
}
|
|
1789
|
+
const md = this.ProviderToUse;
|
|
1790
|
+
const entityInfo = md.EntityByName(entityName);
|
|
1791
|
+
if (!entityInfo) {
|
|
1792
|
+
this.notificationService.CreateSimpleNotification(`Entity '${entityName}' not found.`, 'error', 4000);
|
|
1793
|
+
return;
|
|
1794
|
+
}
|
|
1795
|
+
if (entityInfo.PrimaryKeys.length !== 1) {
|
|
1796
|
+
this.notificationService.CreateSimpleNotification(`Composite-PK entities ('${entityName}') aren't yet supported for Operations export.`, 'warning', 5000);
|
|
1797
|
+
return;
|
|
1798
|
+
}
|
|
1799
|
+
// Build the candidate field list from the loaded EntityInfo. Hide
|
|
1800
|
+
// virtual / not-queryable fields so users can't pick them and get
|
|
1801
|
+
// a confusing empty column. Default-select everything to match the
|
|
1802
|
+
// previous "export all" behavior.
|
|
1803
|
+
this.exportFields = entityInfo.Fields
|
|
1804
|
+
.filter((f) => f.IsVirtual !== true)
|
|
1805
|
+
.map((f) => ({
|
|
1806
|
+
Name: f.Name,
|
|
1807
|
+
DisplayName: f.DisplayName || f.Name,
|
|
1808
|
+
Selected: true,
|
|
1809
|
+
}));
|
|
1810
|
+
this.exportRecordCount = recordIds.length;
|
|
1811
|
+
this.exportFormat = 'excel';
|
|
1812
|
+
this.showExportDialog = true;
|
|
1813
|
+
this.cdr.detectChanges();
|
|
1814
|
+
}
|
|
1815
|
+
closeExportDialog() {
|
|
1816
|
+
this.showExportDialog = false;
|
|
1817
|
+
this.cdr.detectChanges();
|
|
1818
|
+
}
|
|
1819
|
+
selectAllExportFields() {
|
|
1820
|
+
for (const f of this.exportFields)
|
|
1821
|
+
f.Selected = true;
|
|
1822
|
+
}
|
|
1823
|
+
selectNoneExportFields() {
|
|
1824
|
+
for (const f of this.exportFields)
|
|
1825
|
+
f.Selected = false;
|
|
1826
|
+
}
|
|
1827
|
+
get selectedExportFieldCount() {
|
|
1828
|
+
return this.exportFields.filter((f) => f.Selected).length;
|
|
1829
|
+
}
|
|
1830
|
+
/**
|
|
1831
|
+
* Run the export with the user's selected format + columns. Bulk-load
|
|
1832
|
+
* via RunView restricted to the chosen Fields so we don't shuttle
|
|
1833
|
+
* data we'll then throw away.
|
|
1834
|
+
*/
|
|
1835
|
+
async executeExport() {
|
|
1836
|
+
const recordIds = this.selectedRegion?.recordIds ?? this.lastOperationResult?.resultRecordIds ?? [];
|
|
1837
|
+
if (recordIds.length === 0)
|
|
1838
|
+
return;
|
|
1839
|
+
const entityName = this.selectedLists[0]?.entityName ?? this.selectedViews[0]?.entityName ?? null;
|
|
1840
|
+
if (!entityName)
|
|
1841
|
+
return;
|
|
1842
|
+
const selectedFields = this.exportFields.filter((f) => f.Selected).map((f) => f.Name);
|
|
1843
|
+
if (selectedFields.length === 0)
|
|
1844
|
+
return;
|
|
1845
|
+
this.isExporting = true;
|
|
1846
|
+
this.cdr.detectChanges();
|
|
1847
|
+
try {
|
|
1848
|
+
const md = this.ProviderToUse;
|
|
1849
|
+
const entityInfo = md.EntityByName(entityName);
|
|
1850
|
+
const pk = entityInfo.PrimaryKeys[0].Name;
|
|
1851
|
+
// Always include the PK in the SELECT — RunView won't filter on
|
|
1852
|
+
// a column it didn't pull, and downstream lookups expect it.
|
|
1853
|
+
const fieldsForQuery = Array.from(new Set([pk, ...selectedFields]));
|
|
1854
|
+
const escaped = recordIds.map((id) => `'${String(id).replace(/'/g, "''")}'`).join(',');
|
|
1855
|
+
const rv = RunView.FromMetadataProvider(md);
|
|
1856
|
+
const result = await rv.RunView({
|
|
1857
|
+
EntityName: entityName,
|
|
1858
|
+
ExtraFilter: `${pk} IN (${escaped})`,
|
|
1859
|
+
Fields: fieldsForQuery,
|
|
1860
|
+
ResultType: 'simple',
|
|
1861
|
+
});
|
|
1862
|
+
if (!result.Success) {
|
|
1863
|
+
this.notificationService.CreateSimpleNotification(`Export failed: ${result.ErrorMessage}`, 'error', 5000);
|
|
1864
|
+
return;
|
|
1865
|
+
}
|
|
1866
|
+
// Project rows to exactly the user's selected columns + ordering
|
|
1867
|
+
// so the file matches what they checked. Skips the PK if they
|
|
1868
|
+
// didn't pick it.
|
|
1869
|
+
const rows = (result.Results ?? []).map((row) => {
|
|
1870
|
+
const projected = {};
|
|
1871
|
+
for (const f of selectedFields)
|
|
1872
|
+
projected[f] = row[f];
|
|
1873
|
+
return projected;
|
|
1874
|
+
});
|
|
1875
|
+
const dateStamp = new Date().toISOString().slice(0, 10);
|
|
1876
|
+
const ext = this.exportFormat === 'excel' ? 'xlsx' : this.exportFormat;
|
|
1877
|
+
const fileName = `lists-operations-${dateStamp}.${ext}`;
|
|
1878
|
+
const exportResult = this.exportFormat === 'excel'
|
|
1879
|
+
? await this.exportService.toExcel(rows, { fileName, includeHeaders: true })
|
|
1880
|
+
: this.exportFormat === 'csv'
|
|
1881
|
+
? await this.exportService.toCSV(rows, { fileName, includeHeaders: true })
|
|
1882
|
+
: await this.exportService.toJSON(rows, { fileName });
|
|
1883
|
+
if (exportResult.success) {
|
|
1884
|
+
this.exportService.downloadResult(exportResult);
|
|
1885
|
+
this.notificationService.CreateSimpleNotification(`Exported ${rows.length} record(s)`, 'success', 3000);
|
|
1886
|
+
this.showExportDialog = false;
|
|
1887
|
+
}
|
|
1888
|
+
else {
|
|
1889
|
+
this.notificationService.CreateSimpleNotification('Export failed', 'error', 5000);
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1892
|
+
catch (e) {
|
|
1893
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
1894
|
+
this.notificationService.CreateSimpleNotification(`Export error: ${message}`, 'error', 5000);
|
|
1895
|
+
}
|
|
1896
|
+
finally {
|
|
1897
|
+
this.isExporting = false;
|
|
1898
|
+
this.cdr.detectChanges();
|
|
1899
|
+
}
|
|
1004
1900
|
}
|
|
1005
1901
|
async GetResourceDisplayName(_data) {
|
|
1006
1902
|
return 'Operations';
|
|
@@ -1013,12 +1909,14 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
1013
1909
|
*/
|
|
1014
1910
|
clearAllSelections() {
|
|
1015
1911
|
this.selectedLists = [];
|
|
1912
|
+
this.selectedViews = [];
|
|
1016
1913
|
this.selectedEntityId = '';
|
|
1017
1914
|
this.vennData = null;
|
|
1018
1915
|
this.selectedRegion = null;
|
|
1019
1916
|
this.lastOperationResult = null;
|
|
1020
1917
|
this.previewRecordsDisplay = [];
|
|
1021
1918
|
this.filterAvailableLists();
|
|
1919
|
+
this.filterAvailableViews();
|
|
1022
1920
|
this.saveState();
|
|
1023
1921
|
this.cdr.detectChanges();
|
|
1024
1922
|
}
|
|
@@ -1116,8 +2014,8 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
1116
2014
|
this.isLoadingSettings = false;
|
|
1117
2015
|
}
|
|
1118
2016
|
}
|
|
1119
|
-
static ɵfac = function ListsOperationsResource_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListsOperationsResource)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ListSetOperationsService), i0.ɵɵdirectiveInject(i2.MJNotificationService)); };
|
|
1120
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListsOperationsResource, selectors: [["mj-lists-operations-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
2017
|
+
static ɵfac = function ListsOperationsResource_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ListsOperationsResource)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ListSetOperationsService), i0.ɵɵdirectiveInject(i2.MJNotificationService), i0.ɵɵdirectiveInject(i3.ExportService)); };
|
|
2018
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ListsOperationsResource, selectors: [["mj-lists-operations-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 55, vars: 25, consts: [[1, "operations-container"], [1, "operations-header"], [1, "header-top"], [1, "header-title"], [1, "fa-solid", "fa-diagram-project"], ["title", "Clear all selections", 1, "clear-all-btn"], [1, "header-subtitle"], [1, "operations-content"], [1, "selection-panel"], [1, "panel-header"], [1, "list-count"], [1, "entity-filter-section"], [1, "filter-label"], [1, "entity-selector"], [1, "entity-select", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], [1, "selected-lists"], [1, "selected-item"], [1, "add-list-area"], [1, "lists-full"], [1, "selected-views"], [1, "selected-item", "selected-item--view"], [1, "entity-note"], [1, "quick-operations"], [1, "venn-panel"], [3, "data", "selectedRegion"], [1, "venn-empty"], [1, "loading-overlay"], [1, "results-panel"], [1, "fa-solid", "fa-crosshairs"], [1, "region-details"], [1, "operation-result"], [1, "results-empty"], [1, "compose-panel"], [3, "Confirm", "Cancel", "Visible", "Delta", "TargetListName", "SourceLabel"], [1, "modal-overlay"], [1, "modal-dialog"], [1, "modal-dialog", "add-to-list-dialog"], ["title", "Clear all selections", 1, "clear-all-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "item-color"], [1, "item-info"], [1, "item-name"], [1, "item-entity"], [1, "remove-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "add-list-search"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search lists to add...", 3, "ngModelChange", "focus", "ngModel"], [1, "list-dropdown"], [1, "dropdown-backdrop", 3, "click"], [1, "dropdown-content"], [1, "dropdown-item"], [1, "dropdown-item", 3, "click"], [1, "dropdown-name"], [1, "dropdown-entity"], [1, "fa-solid", "fa-info-circle"], [1, "item-color", "item-color--view"], [1, "fa-solid", "fa-eye", 3, "title"], [1, "fa-solid", "fa-eye"], ["type", "text", "placeholder", "Search views to add...", 3, "ngModelChange", "focus", "ngModel"], [1, "operation-buttons"], [1, "op-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-circle-notch"], [1, "fa-solid", "fa-arrows-split-up-and-left"], [3, "regionClick", "data", "selectedRegion"], [1, "empty-icon"], [1, "fa-solid", "fa-circle-nodes"], ["text", "Calculating..."], [1, "region-header"], [1, "region-label"], [1, "region-count"], [1, "region-actions"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-folder-plus"], [1, "fa-solid", "fa-file-excel"], [1, "record-preview"], [1, "preview-list"], [1, "preview-card"], [1, "preview-loading"], [1, "preview-card-content"], [1, "preview-name"], [1, "preview-secondary"], ["title", "Open record", 1, "preview-open-btn", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], ["text", "Loading preview...", "size", "small"], [1, "result-header"], [1, "result-operation"], [1, "result-count"], [1, "fa-solid", "fa-hand-pointer"], [1, "compose-panel__header"], [1, "fa-solid", "fa-shapes"], [1, "compose-panel__body"], [1, "compose-grid"], [1, "compose-column"], [1, "compose-column__label"], [1, "compose-sources"], [1, "compose-source-chip"], [1, "compose-source-chip", "compose-source-chip--view"], [1, "compose-arrow"], [1, "compose-options"], [1, "compose-option"], ["type", "radio", "name", "composeOp", 3, "change", "checked"], [1, "compose-option__title"], [1, "compose-option__desc"], [1, "fa-solid", "fa-minus-circle"], ["type", "radio", "name", "composeTarget", 3, "change", "checked"], ["type", "text", "placeholder", "New list name\u2026", 1, "compose-input", 3, "ngModel"], [1, "compose-target-search"], [1, "compose-footer"], [1, "op-btn", "op-btn--primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-bolt"], [1, "compose-footer__spacer"], [1, "compose-footer__hint"], [1, "fa-solid", "fa-list"], [1, "compose-source-name"], [1, "compose-source-badge"], [1, "compose-source-badge", "compose-source-badge--view"], ["type", "text", "placeholder", "New list name\u2026", 1, "compose-input", 3, "ngModelChange", "ngModel"], ["type", "text", "placeholder", "Search lists\u2026", 1, "compose-input", 3, "ngModelChange", "focus", "ngModel"], [1, "compose-target-dropdown"], [1, "modal-overlay", 3, "click"], [1, "modal-dialog", "export-dialog"], [1, "modal-header"], [1, "modal-close", 3, "click"], [1, "modal-body"], [1, "export-format-row"], [1, "export-format-option", 3, "click"], ["type", "radio", "name", "exportFormat", "value", "excel", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-file-excel", 2, "color", "var(--mj-status-success)"], ["type", "radio", "name", "exportFormat", "value", "csv", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-file-csv", 2, "color", "var(--mj-text-secondary)"], ["type", "radio", "name", "exportFormat", "value", "json", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-file-code", 2, "color", "var(--mj-brand-primary)"], [1, "export-section-divider"], [1, "export-section-label"], [1, "export-fields-list"], [1, "export-field-row"], [1, "export-field-actions"], ["href", "#", 3, "click"], [1, "muted"], [1, "modal-footer"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-download"], [1, "form-group"], ["type", "text", "placeholder", "Enter list name", 1, "form-input", 3, "ngModelChange", "ngModel"], ["placeholder", "Optional description", "rows", "3", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "form-info"], [1, "btn-primary", 3, "click", "disabled"], [1, "btn-secondary", 3, "click"], [1, "form-info", 2, "margin-bottom", "16px"], [1, "list-search"], ["type", "text", "placeholder", "Search lists...", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "list-options"], [1, "list-option", 3, "selected"], [1, "list-options-empty"], [1, "list-option", 3, "click"], [1, "list-option-radio"], ["type", "radio", "name", "targetList", 3, "checked"], [1, "list-option-info"], [1, "list-option-name"], [1, "list-option-entity"], [1, "fa-solid", "fa-inbox"]], template: function ListsOperationsResource_Template(rf, ctx) { if (rf & 1) {
|
|
1121
2019
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
1122
2020
|
i0.ɵɵelement(4, "i", 4);
|
|
1123
2021
|
i0.ɵɵelementStart(5, "h2");
|
|
@@ -1129,7 +2027,7 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
1129
2027
|
i0.ɵɵtext(9, " Visualize overlaps and perform set operations on your lists ");
|
|
1130
2028
|
i0.ɵɵelementEnd()();
|
|
1131
2029
|
i0.ɵɵelementStart(10, "div", 7)(11, "div", 8)(12, "div", 9)(13, "h3");
|
|
1132
|
-
i0.ɵɵtext(14, "Selected
|
|
2030
|
+
i0.ɵɵtext(14, "Selected Operands");
|
|
1133
2031
|
i0.ɵɵelementEnd();
|
|
1134
2032
|
i0.ɵɵconditionalCreate(15, ListsOperationsResource_Conditional_15_Template, 2, 2, "span", 10);
|
|
1135
2033
|
i0.ɵɵelementEnd();
|
|
@@ -1142,39 +2040,48 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
1142
2040
|
i0.ɵɵelementStart(21, "option", 15);
|
|
1143
2041
|
i0.ɵɵtext(22, "All Entities");
|
|
1144
2042
|
i0.ɵɵelementEnd();
|
|
1145
|
-
i0.ɵɵrepeaterCreate(23, ListsOperationsResource_For_24_Template, 2, 3, "option", 16,
|
|
2043
|
+
i0.ɵɵrepeaterCreate(23, ListsOperationsResource_For_24_Template, 2, 3, "option", 16, _forTrack0);
|
|
1146
2044
|
i0.ɵɵelementEnd()()();
|
|
1147
2045
|
i0.ɵɵelementStart(25, "div", 17);
|
|
1148
2046
|
i0.ɵɵrepeaterCreate(26, ListsOperationsResource_For_27_Template, 9, 4, "div", 18, i0.ɵɵrepeaterTrackByIdentity);
|
|
1149
2047
|
i0.ɵɵconditionalCreate(28, ListsOperationsResource_Conditional_28_Template, 5, 2, "div", 19);
|
|
1150
2048
|
i0.ɵɵconditionalCreate(29, ListsOperationsResource_Conditional_29_Template, 3, 1, "div", 20);
|
|
1151
2049
|
i0.ɵɵelementEnd();
|
|
1152
|
-
i0.ɵɵ
|
|
1153
|
-
i0.ɵɵ
|
|
2050
|
+
i0.ɵɵelementStart(30, "div", 21);
|
|
2051
|
+
i0.ɵɵrepeaterCreate(31, ListsOperationsResource_For_32_Template, 10, 5, "div", 22, i0.ɵɵrepeaterTrackByIdentity);
|
|
2052
|
+
i0.ɵɵconditionalCreate(33, ListsOperationsResource_Conditional_33_Template, 5, 2, "div", 19);
|
|
2053
|
+
i0.ɵɵelementEnd();
|
|
2054
|
+
i0.ɵɵconditionalCreate(34, ListsOperationsResource_Conditional_34_Template, 6, 1, "div", 23);
|
|
2055
|
+
i0.ɵɵconditionalCreate(35, ListsOperationsResource_Conditional_35_Template, 16, 3, "div", 24);
|
|
1154
2056
|
i0.ɵɵelementEnd();
|
|
1155
|
-
i0.ɵɵelementStart(
|
|
1156
|
-
i0.ɵɵconditionalCreate(
|
|
1157
|
-
i0.ɵɵconditionalCreate(
|
|
1158
|
-
i0.ɵɵconditionalCreate(
|
|
2057
|
+
i0.ɵɵelementStart(36, "div", 25);
|
|
2058
|
+
i0.ɵɵconditionalCreate(37, ListsOperationsResource_Conditional_37_Template, 1, 2, "mj-venn-diagram", 26);
|
|
2059
|
+
i0.ɵɵconditionalCreate(38, ListsOperationsResource_Conditional_38_Template, 7, 0, "div", 27);
|
|
2060
|
+
i0.ɵɵconditionalCreate(39, ListsOperationsResource_Conditional_39_Template, 2, 0, "div", 28);
|
|
1159
2061
|
i0.ɵɵelementEnd();
|
|
1160
|
-
i0.ɵɵelementStart(
|
|
1161
|
-
i0.ɵɵelement(
|
|
1162
|
-
i0.ɵɵtext(
|
|
2062
|
+
i0.ɵɵelementStart(40, "div", 29)(41, "div", 9)(42, "h3");
|
|
2063
|
+
i0.ɵɵelement(43, "i", 30);
|
|
2064
|
+
i0.ɵɵtext(44);
|
|
1163
2065
|
i0.ɵɵelementEnd()();
|
|
1164
|
-
i0.ɵɵconditionalCreate(
|
|
1165
|
-
i0.ɵɵconditionalCreate(
|
|
1166
|
-
i0.ɵɵconditionalCreate(
|
|
2066
|
+
i0.ɵɵconditionalCreate(45, ListsOperationsResource_Conditional_45_Template, 17, 3, "div", 31);
|
|
2067
|
+
i0.ɵɵconditionalCreate(46, ListsOperationsResource_Conditional_46_Template, 13, 2, "div", 32);
|
|
2068
|
+
i0.ɵɵconditionalCreate(47, ListsOperationsResource_Conditional_47_Template, 4, 0, "div", 33);
|
|
1167
2069
|
i0.ɵɵelementEnd()();
|
|
1168
|
-
i0.ɵɵconditionalCreate(
|
|
1169
|
-
i0.ɵɵ
|
|
1170
|
-
i0.ɵɵ
|
|
1171
|
-
i0.ɵɵ
|
|
2070
|
+
i0.ɵɵconditionalCreate(48, ListsOperationsResource_Conditional_48_Template, 73, 22, "div", 34);
|
|
2071
|
+
i0.ɵɵelementStart(49, "mj-list-delta-confirm", 35);
|
|
2072
|
+
i0.ɵɵlistener("Confirm", function ListsOperationsResource_Template_mj_list_delta_confirm_Confirm_49_listener($event) { return ctx.onComposeConfirmCommit($event); })("Cancel", function ListsOperationsResource_Template_mj_list_delta_confirm_Cancel_49_listener() { return ctx.onComposeConfirmCancel(); });
|
|
2073
|
+
i0.ɵɵelementEnd();
|
|
2074
|
+
i0.ɵɵconditionalCreate(50, ListsOperationsResource_Conditional_50_Template, 44, 16);
|
|
2075
|
+
i0.ɵɵconditionalCreate(51, ListsOperationsResource_Conditional_51_Template, 1, 0, "div", 36);
|
|
2076
|
+
i0.ɵɵconditionalCreate(52, ListsOperationsResource_Conditional_52_Template, 24, 7, "div", 37);
|
|
2077
|
+
i0.ɵɵconditionalCreate(53, ListsOperationsResource_Conditional_53_Template, 1, 0, "div", 36);
|
|
2078
|
+
i0.ɵɵconditionalCreate(54, ListsOperationsResource_Conditional_54_Template, 23, 7, "div", 38);
|
|
1172
2079
|
i0.ɵɵelementEnd();
|
|
1173
2080
|
} if (rf & 2) {
|
|
1174
2081
|
i0.ɵɵadvance(7);
|
|
1175
|
-
i0.ɵɵconditional(ctx.
|
|
2082
|
+
i0.ɵɵconditional(ctx.totalOperandCount > 0 || ctx.selectedEntityId ? 7 : -1);
|
|
1176
2083
|
i0.ɵɵadvance(8);
|
|
1177
|
-
i0.ɵɵconditional(ctx.
|
|
2084
|
+
i0.ɵɵconditional(ctx.totalOperandCount > 0 ? 15 : -1);
|
|
1178
2085
|
i0.ɵɵadvance(5);
|
|
1179
2086
|
i0.ɵɵtwoWayProperty("ngModel", ctx.selectedEntityId);
|
|
1180
2087
|
i0.ɵɵadvance(3);
|
|
@@ -1182,36 +2089,46 @@ let ListsOperationsResource = class ListsOperationsResource extends BaseResource
|
|
|
1182
2089
|
i0.ɵɵadvance(3);
|
|
1183
2090
|
i0.ɵɵrepeater(ctx.selectedLists);
|
|
1184
2091
|
i0.ɵɵadvance(2);
|
|
1185
|
-
i0.ɵɵconditional(ctx.
|
|
2092
|
+
i0.ɵɵconditional(ctx.totalOperandCount < ctx.maxLists ? 28 : -1);
|
|
1186
2093
|
i0.ɵɵadvance();
|
|
1187
|
-
i0.ɵɵconditional(ctx.
|
|
2094
|
+
i0.ɵɵconditional(ctx.totalOperandCount >= ctx.maxLists ? 29 : -1);
|
|
2095
|
+
i0.ɵɵadvance(2);
|
|
2096
|
+
i0.ɵɵrepeater(ctx.selectedViews);
|
|
2097
|
+
i0.ɵɵadvance(2);
|
|
2098
|
+
i0.ɵɵconditional(ctx.totalOperandCount < ctx.maxLists ? 33 : -1);
|
|
1188
2099
|
i0.ɵɵadvance();
|
|
1189
|
-
i0.ɵɵconditional(ctx.
|
|
2100
|
+
i0.ɵɵconditional(ctx.totalOperandCount > 0 && ctx.lockedEntityName ? 34 : -1);
|
|
1190
2101
|
i0.ɵɵadvance();
|
|
1191
|
-
i0.ɵɵconditional(ctx.
|
|
2102
|
+
i0.ɵɵconditional(ctx.totalOperandCount >= 2 ? 35 : -1);
|
|
1192
2103
|
i0.ɵɵadvance(2);
|
|
1193
|
-
i0.ɵɵconditional(ctx.
|
|
2104
|
+
i0.ɵɵconditional(ctx.totalOperandCount > 0 ? 37 : -1);
|
|
1194
2105
|
i0.ɵɵadvance();
|
|
1195
|
-
i0.ɵɵconditional(ctx.
|
|
2106
|
+
i0.ɵɵconditional(ctx.totalOperandCount === 0 ? 38 : -1);
|
|
1196
2107
|
i0.ɵɵadvance();
|
|
1197
|
-
i0.ɵɵconditional(ctx.isCalculating ?
|
|
2108
|
+
i0.ɵɵconditional(ctx.isCalculating ? 39 : -1);
|
|
1198
2109
|
i0.ɵɵadvance(5);
|
|
1199
2110
|
i0.ɵɵtextInterpolate1(" ", ctx.selectedRegion ? "Selected Region" : "Results", " ");
|
|
1200
2111
|
i0.ɵɵadvance();
|
|
1201
|
-
i0.ɵɵconditional(ctx.selectedRegion ?
|
|
2112
|
+
i0.ɵɵconditional(ctx.selectedRegion ? 45 : -1);
|
|
1202
2113
|
i0.ɵɵadvance();
|
|
1203
|
-
i0.ɵɵconditional(ctx.lastOperationResult && !ctx.selectedRegion ?
|
|
2114
|
+
i0.ɵɵconditional(ctx.lastOperationResult && !ctx.selectedRegion ? 46 : -1);
|
|
1204
2115
|
i0.ɵɵadvance();
|
|
1205
|
-
i0.ɵɵconditional(!ctx.selectedRegion && !ctx.lastOperationResult ?
|
|
2116
|
+
i0.ɵɵconditional(!ctx.selectedRegion && !ctx.lastOperationResult ? 47 : -1);
|
|
1206
2117
|
i0.ɵɵadvance();
|
|
1207
|
-
i0.ɵɵconditional(ctx.
|
|
2118
|
+
i0.ɵɵconditional(ctx.totalOperandCount >= 2 ? 48 : -1);
|
|
1208
2119
|
i0.ɵɵadvance();
|
|
1209
|
-
i0.ɵɵ
|
|
2120
|
+
i0.ɵɵproperty("Visible", ctx.composeConfirmVisible && !!ctx.composeDelta)("Delta", ctx.composeDelta)("TargetListName", ctx.composeTargetDisplayName())("SourceLabel", "compose result");
|
|
1210
2121
|
i0.ɵɵadvance();
|
|
1211
|
-
i0.ɵɵconditional(ctx.
|
|
2122
|
+
i0.ɵɵconditional(ctx.showExportDialog ? 50 : -1);
|
|
1212
2123
|
i0.ɵɵadvance();
|
|
1213
|
-
i0.ɵɵconditional(ctx.
|
|
1214
|
-
} }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.DefaultValueAccessor, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.MJButtonDirective, i5.LoadingComponent, i6.VennDiagramComponent], styles: ["\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .operations-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n }\n\n .operations-header {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .clear-all-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .clear-all-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n }\n\n .clear-all-btn i {\n font-size: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .header-subtitle {\n color: var(--mj-text-secondary);\n font-size: 14px;\n }\n\n .operations-content {\n display: grid;\n grid-template-columns: 280px 1fr 300px;\n gap: 16px;\n flex: 1;\n padding: 16px;\n overflow: hidden;\n }\n\n /* Panels */\n .selection-panel,\n .results-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .venn-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n min-height: 400px;\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .list-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n /* Entity Filter */\n .entity-filter-section {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .filter-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .entity-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 13px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n }\n\n .entity-select:focus {\n border-color: var(--mj-brand-primary);\n }\n\n .entity-note {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 8px 12px;\n padding: 8px 10px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-success);\n }\n\n .entity-note i {\n color: var(--mj-status-success);\n }\n\n /* Selected Lists */\n .selected-lists {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n }\n\n .selected-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 8px;\n }\n\n .item-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n flex-shrink: 0;\n }\n\n .item-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .item-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .remove-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n }\n\n .remove-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n }\n\n /* Add list area */\n .add-list-area {\n position: relative;\n }\n\n .add-list-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n transition: border-color 0.2s;\n }\n\n .add-list-search:focus-within {\n border-color: var(--mj-brand-primary);\n }\n\n .add-list-search i {\n color: var(--mj-text-muted);\n }\n\n .add-list-search input {\n flex: 1;\n border: none;\n outline: none;\n font-size: 13px;\n }\n\n .list-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 100;\n margin-top: 4px;\n }\n\n .dropdown-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .dropdown-content {\n position: relative;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n }\n\n .dropdown-item {\n display: flex;\n flex-direction: column;\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .dropdown-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .dropdown-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .lists-full {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n }\n\n .entity-warning {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin: 12px;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-warning);\n }\n\n .entity-warning i {\n color: var(--mj-status-warning);\n margin-top: 2px;\n }\n\n /* Quick Operations */\n .quick-operations {\n padding: 12px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .quick-operations h4 {\n margin: 0 0 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .operation-buttons {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .op-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .op-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .op-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Venn Panel */\n .venn-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n padding: 40px;\n }\n\n .empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 50%;\n margin-bottom: 20px;\n }\n\n .empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n }\n\n .venn-empty h3 {\n margin: 0 0 8px;\n font-size: 18px;\n color: var(--mj-text-primary);\n }\n\n .venn-empty p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 14px;\n max-width: 300px;\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Results Panel */\n .region-details,\n .operation-result {\n padding: 16px;\n }\n\n .region-header,\n .result-header {\n margin-bottom: 16px;\n }\n\n .region-label,\n .result-operation {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .region-count,\n .result-count {\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n }\n\n .region-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n .action-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .action-btn.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .record-preview h5 {\n margin: 0 0 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .preview-list {\n max-height: 200px;\n overflow-y: auto;\n }\n\n .preview-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 6px;\n transition: all 0.15s ease;\n }\n\n .preview-card:hover {\n background: var(--mj-bg-surface-sunken);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .preview-card-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .preview-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-secondary {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-open-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n opacity: 0.6;\n transition: all 0.15s ease;\n flex-shrink: 0;\n }\n\n .preview-open-btn:hover {\n opacity: 1;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .preview-loading {\n padding: 12px;\n text-align: center;\n }\n\n .results-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .results-empty i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n }\n\n .results-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 200px;\n }\n\n /* Modal */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n }\n\n .modal-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n width: 420px;\n max-width: 90vw;\n z-index: 1001;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n }\n\n .modal-close {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px 8px;\n }\n\n .modal-body {\n padding: 20px;\n }\n\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n }\n\n .form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n box-sizing: border-box;\n }\n\n .form-input: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) 10%, transparent);\n }\n\n textarea.form-input {\n resize: vertical;\n }\n\n .form-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .form-info i {\n color: var(--mj-brand-primary);\n }\n\n .modal-footer {\n display: flex;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n padding: 10px 20px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-secondary:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n /* Add to List Dialog */\n .add-to-list-dialog {\n width: 480px;\n }\n\n .add-to-list-dialog .modal-body {\n max-height: 400px;\n overflow-y: auto;\n }\n\n .list-search {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-bottom: 12px;\n }\n\n .list-search i {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n\n .list-search .form-input {\n flex: 1;\n border: none;\n background: transparent;\n padding: 0;\n font-size: 14px;\n }\n\n .list-search .form-input:focus {\n box-shadow: none;\n outline: none;\n }\n\n .list-options {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n max-height: 250px;\n overflow-y: auto;\n }\n\n .list-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n cursor: pointer;\n transition: background 0.15s;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-option:last-child {\n border-bottom: none;\n }\n\n .list-option:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-option.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-option-radio {\n flex-shrink: 0;\n }\n\n .list-option-radio input[type=\"radio\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n }\n\n .list-option-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .list-option-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .list-option-entity {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 30px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty i {\n font-size: 28px;\n margin-bottom: 10px;\n opacity: 0.5;\n }\n\n .list-options-empty p {\n margin: 0;\n font-size: 13px;\n }\n\n /* Responsive */\n @media (max-width: 1024px) {\n .operations-content {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n }\n\n .selection-panel {\n order: 1;\n }\n\n .venn-panel {\n order: 2;\n min-height: 300px;\n }\n\n .results-panel {\n order: 3;\n }\n }\n "], encapsulation: 2 });
|
|
2124
|
+
i0.ɵɵconditional(ctx.showCreateDialog ? 51 : -1);
|
|
2125
|
+
i0.ɵɵadvance();
|
|
2126
|
+
i0.ɵɵconditional(ctx.showCreateDialog ? 52 : -1);
|
|
2127
|
+
i0.ɵɵadvance();
|
|
2128
|
+
i0.ɵɵconditional(ctx.showAddToListDialog ? 53 : -1);
|
|
2129
|
+
i0.ɵɵadvance();
|
|
2130
|
+
i0.ɵɵconditional(ctx.showAddToListDialog ? 54 : -1);
|
|
2131
|
+
} }, dependencies: [i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.DefaultValueAccessor, i4.CheckboxControlValueAccessor, i4.SelectControlValueAccessor, i4.RadioControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.MJButtonDirective, i6.LoadingComponent, i7.ListDeltaConfirmComponent, i8.VennDiagramComponent], styles: ["\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .operations-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n }\n\n .operations-header {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .clear-all-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .clear-all-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n }\n\n .clear-all-btn i {\n font-size: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .header-subtitle {\n color: var(--mj-text-secondary);\n font-size: 14px;\n }\n\n .operations-content {\n display: grid;\n grid-template-columns: 280px 1fr 300px;\n gap: 16px;\n flex: 1;\n padding: 16px;\n overflow: hidden;\n }\n\n /* Panels */\n .selection-panel,\n .results-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .venn-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n min-height: 400px;\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .list-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n /* Entity Filter */\n .entity-filter-section {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .filter-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .entity-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 13px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n }\n\n .entity-select:focus {\n border-color: var(--mj-brand-primary);\n }\n\n .entity-note {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 8px 12px;\n padding: 8px 10px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-success);\n }\n\n .entity-note i {\n color: var(--mj-status-success);\n }\n\n /* Selected Lists */\n .selected-lists {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n }\n\n /* Selected Views (sibling section) */\n .selected-views {\n overflow-y: auto;\n padding: 0 12px 12px 12px;\n }\n\n .selected-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 8px;\n }\n\n /* View operands get a dashed outline so they read distinctly from\n list operands. The fill stays muted because views are dynamic. */\n .selected-item--view {\n border: 1px dashed var(--mj-border-default);\n background: var(--mj-bg-surface);\n }\n\n .item-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n flex-shrink: 0;\n }\n\n /* View color swatch is a ring around a hollow centre \u2014 mirrors the\n dashed-stroke convention from the Venn diagram. */\n .item-color--view {\n background: transparent !important;\n border: 2px dashed currentColor;\n border-radius: 50%;\n }\n\n .item-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .item-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .remove-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n }\n\n .remove-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n }\n\n /* Add list area */\n .add-list-area {\n position: relative;\n }\n\n .add-list-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n transition: border-color 0.2s;\n }\n\n .add-list-search:focus-within {\n border-color: var(--mj-brand-primary);\n }\n\n .add-list-search i {\n color: var(--mj-text-muted);\n }\n\n .add-list-search input {\n flex: 1;\n border: none;\n outline: none;\n font-size: 13px;\n }\n\n .list-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 100;\n margin-top: 4px;\n }\n\n .dropdown-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .dropdown-content {\n position: relative;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n }\n\n .dropdown-item {\n display: flex;\n flex-direction: column;\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .dropdown-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .dropdown-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .lists-full {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n }\n\n .entity-warning {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin: 12px;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-warning);\n }\n\n .entity-warning i {\n color: var(--mj-status-warning);\n margin-top: 2px;\n }\n\n /* Quick Operations */\n .quick-operations {\n padding: 12px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .quick-operations h4 {\n margin: 0 0 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .operation-buttons {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .op-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .op-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .op-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Venn Panel */\n .venn-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n padding: 40px;\n }\n\n .empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 50%;\n margin-bottom: 20px;\n }\n\n .empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n }\n\n .venn-empty h3 {\n margin: 0 0 8px;\n font-size: 18px;\n color: var(--mj-text-primary);\n }\n\n .venn-empty p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 14px;\n max-width: 300px;\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Results Panel */\n .region-details,\n .operation-result {\n padding: 16px;\n }\n\n .region-header,\n .result-header {\n margin-bottom: 16px;\n }\n\n .region-label,\n .result-operation {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .region-count,\n .result-count {\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n }\n\n .region-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n .action-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .action-btn.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .record-preview h5 {\n margin: 0 0 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .preview-list {\n max-height: 200px;\n overflow-y: auto;\n }\n\n .preview-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 6px;\n transition: all 0.15s ease;\n }\n\n .preview-card:hover {\n background: var(--mj-bg-surface-sunken);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .preview-card-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .preview-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-secondary {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-open-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n opacity: 0.6;\n transition: all 0.15s ease;\n flex-shrink: 0;\n }\n\n .preview-open-btn:hover {\n opacity: 1;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .preview-loading {\n padding: 12px;\n text-align: center;\n }\n\n .results-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .results-empty i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n }\n\n .results-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 200px;\n }\n\n /* Modal */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n }\n\n .modal-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n width: 420px;\n max-width: 90vw;\n z-index: 1001;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n }\n\n .modal-close {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px 8px;\n }\n\n .modal-body {\n padding: 20px;\n }\n\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n }\n\n .form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n box-sizing: border-box;\n }\n\n .form-input: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) 10%, transparent);\n }\n\n textarea.form-input {\n resize: vertical;\n }\n\n .form-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .form-info i {\n color: var(--mj-brand-primary);\n }\n\n .modal-footer {\n display: flex;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n padding: 10px 20px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-secondary:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n /* Add to List Dialog */\n .add-to-list-dialog {\n width: 480px;\n }\n\n .add-to-list-dialog .modal-body {\n max-height: 400px;\n overflow-y: auto;\n }\n\n /* Export dialog (mockup 26) */\n .export-dialog .modal-body { max-height: 60vh; overflow-y: auto; }\n .export-format-row { display: flex; gap: 8px; margin-top: 8px; }\n .export-format-option {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n background: var(--mj-bg-surface);\n }\n .export-format-option--selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n }\n .export-format-option input[type=\"radio\"] { margin: 0; }\n .export-section-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 16px 0;\n }\n .export-section-label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n margin-bottom: 8px;\n }\n .export-fields-list {\n max-height: 220px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n }\n .export-field-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 13px;\n cursor: pointer;\n }\n .export-field-row:last-child { border-bottom: none; }\n .export-field-row:hover { background: var(--mj-bg-surface-hover); }\n .export-field-actions {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n align-items: center;\n font-size: 11.5px;\n }\n .export-field-actions a { color: var(--mj-text-link); }\n .export-field-actions .muted {\n margin-left: auto;\n color: var(--mj-text-muted);\n }\n\n .list-search {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-bottom: 12px;\n }\n\n .list-search i {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n\n .list-search .form-input {\n flex: 1;\n border: none;\n background: transparent;\n padding: 0;\n font-size: 14px;\n }\n\n .list-search .form-input:focus {\n box-shadow: none;\n outline: none;\n }\n\n .list-options {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n max-height: 250px;\n overflow-y: auto;\n }\n\n .list-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n cursor: pointer;\n transition: background 0.15s;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-option:last-child {\n border-bottom: none;\n }\n\n .list-option:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-option.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-option-radio {\n flex-shrink: 0;\n }\n\n .list-option-radio input[type=\"radio\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n }\n\n .list-option-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .list-option-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .list-option-entity {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 30px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty i {\n font-size: 28px;\n margin-bottom: 10px;\n opacity: 0.5;\n }\n\n .list-options-empty p {\n margin: 0;\n font-size: 13px;\n }\n\n /* Responsive */\n @media (max-width: 1024px) {\n .operations-content {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n }\n\n .selection-panel {\n order: 1;\n }\n\n .venn-panel {\n order: 2;\n min-height: 300px;\n }\n\n .results-panel {\n order: 3;\n }\n }\n\n /* Compose-into-target panel (Phase 1.10) */\n .compose-panel {\n margin: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n }\n\n .compose-panel__header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .compose-panel__header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .compose-panel__body {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .compose-grid {\n display: grid;\n grid-template-columns: 1.2fr auto 1fr auto 1fr;\n gap: 16px;\n align-items: flex-start;\n }\n\n .compose-arrow {\n align-self: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n }\n\n .compose-column {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .compose-column__label {\n font-size: 11px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n }\n\n .compose-sources {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .compose-source-chip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 12.5px;\n }\n\n .compose-source-chip--view {\n border: 1px dashed var(--mj-border-default);\n background: var(--mj-bg-surface);\n }\n\n .compose-source-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .compose-source-badge {\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .compose-source-badge--view {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .compose-options {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .compose-option {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n cursor: pointer;\n font-size: 12.5px;\n }\n\n .compose-option--selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n\n .compose-option__title {\n font-weight: 600;\n }\n\n .compose-option__desc {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n }\n\n .compose-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 12.5px;\n }\n\n .compose-target-search {\n position: relative;\n }\n\n .compose-target-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 50;\n }\n\n .compose-footer {\n display: flex;\n align-items: center;\n gap: 10px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .compose-footer__spacer { flex: 1; }\n\n .compose-footer__hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .op-btn--primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .op-btn--primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n "], encapsulation: 2 });
|
|
1215
2132
|
};
|
|
1216
2133
|
ListsOperationsResource = __decorate([
|
|
1217
2134
|
RegisterClass(BaseResourceComponent, 'ListsOperationsResource')
|
|
@@ -1228,7 +2145,7 @@ export { ListsOperationsResource };
|
|
|
1228
2145
|
<i class="fa-solid fa-diagram-project"></i>
|
|
1229
2146
|
<h2>List Operations</h2>
|
|
1230
2147
|
</div>
|
|
1231
|
-
@if (
|
|
2148
|
+
@if (totalOperandCount > 0 || selectedEntityId) {
|
|
1232
2149
|
<button
|
|
1233
2150
|
class="clear-all-btn"
|
|
1234
2151
|
(click)="clearAllSelections()"
|
|
@@ -1248,10 +2165,10 @@ export { ListsOperationsResource };
|
|
|
1248
2165
|
<!-- Left Panel: List Selection -->
|
|
1249
2166
|
<div class="selection-panel">
|
|
1250
2167
|
<div class="panel-header">
|
|
1251
|
-
<h3>Selected
|
|
1252
|
-
@if (
|
|
2168
|
+
<h3>Selected Operands</h3>
|
|
2169
|
+
@if (totalOperandCount > 0) {
|
|
1253
2170
|
<span class="list-count">
|
|
1254
|
-
{{
|
|
2171
|
+
{{totalOperandCount}}/{{maxLists}}
|
|
1255
2172
|
</span>
|
|
1256
2173
|
}
|
|
1257
2174
|
</div>
|
|
@@ -1265,7 +2182,7 @@ export { ListsOperationsResource };
|
|
|
1265
2182
|
(ngModelChange)="onEntityFilterChange()"
|
|
1266
2183
|
class="entity-select">
|
|
1267
2184
|
<option value="">All Entities</option>
|
|
1268
|
-
@for (entity of entityOptions; track entity) {
|
|
2185
|
+
@for (entity of entityOptions; track entity.id) {
|
|
1269
2186
|
<option [value]="entity.id">
|
|
1270
2187
|
{{entity.name}} ({{entity.listCount}})
|
|
1271
2188
|
</option>
|
|
@@ -1289,7 +2206,7 @@ export { ListsOperationsResource };
|
|
|
1289
2206
|
</div>
|
|
1290
2207
|
}
|
|
1291
2208
|
|
|
1292
|
-
@if (
|
|
2209
|
+
@if (totalOperandCount < maxLists) {
|
|
1293
2210
|
<div class="add-list-area">
|
|
1294
2211
|
<div class="add-list-search">
|
|
1295
2212
|
<i class="fa-solid fa-search"></i>
|
|
@@ -1319,24 +2236,78 @@ export { ListsOperationsResource };
|
|
|
1319
2236
|
</div>
|
|
1320
2237
|
}
|
|
1321
2238
|
|
|
1322
|
-
@if (
|
|
2239
|
+
@if (totalOperandCount >= maxLists) {
|
|
1323
2240
|
<div class="lists-full">
|
|
1324
2241
|
<i class="fa-solid fa-info-circle"></i>
|
|
1325
|
-
Maximum {{maxLists}}
|
|
2242
|
+
Maximum {{maxLists}} operands can be compared
|
|
1326
2243
|
</div>
|
|
1327
2244
|
}
|
|
1328
2245
|
</div>
|
|
1329
|
-
|
|
2246
|
+
|
|
2247
|
+
<!-- Selected views (Phase 1.8). Tracked separately from lists
|
|
2248
|
+
so the existing list flows stay untouched, but combined at
|
|
2249
|
+
compute time via SetOperand[]. Dashed-style icon flags them
|
|
2250
|
+
as dynamic-at-resolution. -->
|
|
2251
|
+
<div class="selected-views">
|
|
2252
|
+
@for (item of selectedViews; track item; let i = $index) {
|
|
2253
|
+
<div class="selected-item selected-item--view">
|
|
2254
|
+
<div class="item-color item-color--view" [style.border-color]="item.color"></div>
|
|
2255
|
+
<div class="item-info">
|
|
2256
|
+
<span class="item-name">
|
|
2257
|
+
<i class="fa-solid fa-eye" [title]="'View'"></i>
|
|
2258
|
+
{{item.view.Name}}
|
|
2259
|
+
</span>
|
|
2260
|
+
<span class="item-entity">{{item.entityName}}</span>
|
|
2261
|
+
</div>
|
|
2262
|
+
<button class="remove-btn" (click)="removeView(i)">
|
|
2263
|
+
<i class="fa-solid fa-times"></i>
|
|
2264
|
+
</button>
|
|
2265
|
+
</div>
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2268
|
+
@if (totalOperandCount < maxLists) {
|
|
2269
|
+
<div class="add-list-area">
|
|
2270
|
+
<div class="add-list-search">
|
|
2271
|
+
<i class="fa-solid fa-eye"></i>
|
|
2272
|
+
<input
|
|
2273
|
+
type="text"
|
|
2274
|
+
[(ngModel)]="viewSearchTerm"
|
|
2275
|
+
(ngModelChange)="filterAvailableViews()"
|
|
2276
|
+
placeholder="Search views to add..."
|
|
2277
|
+
(focus)="showViewDropdown = true" />
|
|
2278
|
+
</div>
|
|
2279
|
+
@if (showViewDropdown && filteredAvailableViews.length > 0) {
|
|
2280
|
+
<div class="list-dropdown">
|
|
2281
|
+
<div class="dropdown-backdrop" (click)="showViewDropdown = false"></div>
|
|
2282
|
+
<div class="dropdown-content">
|
|
2283
|
+
@for (view of filteredAvailableViews; track view) {
|
|
2284
|
+
<div
|
|
2285
|
+
class="dropdown-item"
|
|
2286
|
+
(click)="addView(view)">
|
|
2287
|
+
<span class="dropdown-name">
|
|
2288
|
+
<i class="fa-solid fa-eye"></i>
|
|
2289
|
+
{{view.Name}}
|
|
2290
|
+
</span>
|
|
2291
|
+
<span class="dropdown-entity">{{view.Entity}}</span>
|
|
2292
|
+
</div>
|
|
2293
|
+
}
|
|
2294
|
+
</div>
|
|
2295
|
+
</div>
|
|
2296
|
+
}
|
|
2297
|
+
</div>
|
|
2298
|
+
}
|
|
2299
|
+
</div>
|
|
2300
|
+
|
|
1330
2301
|
<!-- Entity consistency note -->
|
|
1331
|
-
@if (
|
|
2302
|
+
@if (totalOperandCount > 0 && lockedEntityName) {
|
|
1332
2303
|
<div class="entity-note">
|
|
1333
2304
|
<i class="fa-solid fa-info-circle"></i>
|
|
1334
|
-
<span>Comparing
|
|
2305
|
+
<span>Comparing operands of type: <strong>{{lockedEntityName}}</strong></span>
|
|
1335
2306
|
</div>
|
|
1336
2307
|
}
|
|
1337
|
-
|
|
2308
|
+
|
|
1338
2309
|
<!-- Quick Operations -->
|
|
1339
|
-
@if (
|
|
2310
|
+
@if (totalOperandCount >= 2) {
|
|
1340
2311
|
<div class="quick-operations">
|
|
1341
2312
|
<h4>Quick Operations</h4>
|
|
1342
2313
|
<div class="operation-buttons">
|
|
@@ -1356,24 +2327,24 @@ export { ListsOperationsResource };
|
|
|
1356
2327
|
</div>
|
|
1357
2328
|
}
|
|
1358
2329
|
</div>
|
|
1359
|
-
|
|
2330
|
+
|
|
1360
2331
|
<!-- Center: Venn Diagram -->
|
|
1361
2332
|
<div class="venn-panel">
|
|
1362
|
-
@if (
|
|
2333
|
+
@if (totalOperandCount > 0) {
|
|
1363
2334
|
<mj-venn-diagram
|
|
1364
2335
|
[data]="vennData"
|
|
1365
2336
|
[selectedRegion]="selectedRegion"
|
|
1366
2337
|
(regionClick)="onRegionClick($event)">
|
|
1367
2338
|
</mj-venn-diagram>
|
|
1368
2339
|
}
|
|
1369
|
-
|
|
1370
|
-
@if (
|
|
2340
|
+
|
|
2341
|
+
@if (totalOperandCount === 0) {
|
|
1371
2342
|
<div class="venn-empty">
|
|
1372
2343
|
<div class="empty-icon">
|
|
1373
2344
|
<i class="fa-solid fa-circle-nodes"></i>
|
|
1374
2345
|
</div>
|
|
1375
|
-
<h3>Add Lists to Compare</h3>
|
|
1376
|
-
<p>Select 2-4 lists from the same entity to visualize their overlaps and perform set operations.</p>
|
|
2346
|
+
<h3>Add Lists or Views to Compare</h3>
|
|
2347
|
+
<p>Select 2-4 lists or views from the same entity to visualize their overlaps and perform set operations.</p>
|
|
1377
2348
|
</div>
|
|
1378
2349
|
}
|
|
1379
2350
|
|
|
@@ -1409,9 +2380,9 @@ export { ListsOperationsResource };
|
|
|
1409
2380
|
<i class="fa-solid fa-folder-plus"></i>
|
|
1410
2381
|
Add to List
|
|
1411
2382
|
</button>
|
|
1412
|
-
<button mjButton (click)="
|
|
2383
|
+
<button mjButton (click)="openExportDialog()">
|
|
1413
2384
|
<i class="fa-solid fa-file-excel"></i>
|
|
1414
|
-
Export
|
|
2385
|
+
Export…
|
|
1415
2386
|
</button>
|
|
1416
2387
|
</div>
|
|
1417
2388
|
@if (previewRecordsDisplay.length > 0) {
|
|
@@ -1471,7 +2442,224 @@ export { ListsOperationsResource };
|
|
|
1471
2442
|
}
|
|
1472
2443
|
</div>
|
|
1473
2444
|
</div>
|
|
1474
|
-
|
|
2445
|
+
|
|
2446
|
+
<!-- Compose-into-target panel (Phase 1.10). Lives outside operations-content
|
|
2447
|
+
so it spans the full panel width per mockup 11. Only shows once
|
|
2448
|
+
the user has at least 2 operands selected. -->
|
|
2449
|
+
@if (totalOperandCount >= 2) {
|
|
2450
|
+
<div class="compose-panel">
|
|
2451
|
+
<div class="compose-panel__header">
|
|
2452
|
+
<i class="fa-solid fa-shapes"></i>
|
|
2453
|
+
<h3>Compose into a Target List</h3>
|
|
2454
|
+
</div>
|
|
2455
|
+
<div class="compose-panel__body">
|
|
2456
|
+
<div class="compose-grid">
|
|
2457
|
+
<!-- Sources column (read-only — reflects the chips above) -->
|
|
2458
|
+
<div class="compose-column">
|
|
2459
|
+
<div class="compose-column__label">Sources ({{ totalOperandCount }})</div>
|
|
2460
|
+
<div class="compose-sources">
|
|
2461
|
+
@for (s of selectedLists; track s.list.ID) {
|
|
2462
|
+
<div class="compose-source-chip">
|
|
2463
|
+
<i class="fa-solid fa-list" [style.color]="s.color"></i>
|
|
2464
|
+
<span class="compose-source-name">{{ s.list.Name }}</span>
|
|
2465
|
+
<span class="compose-source-badge">List</span>
|
|
2466
|
+
</div>
|
|
2467
|
+
}
|
|
2468
|
+
@for (s of selectedViews; track s.view.ID) {
|
|
2469
|
+
<div class="compose-source-chip compose-source-chip--view">
|
|
2470
|
+
<i class="fa-solid fa-eye" [style.color]="s.color"></i>
|
|
2471
|
+
<span class="compose-source-name">{{ s.view.Name }}</span>
|
|
2472
|
+
<span class="compose-source-badge compose-source-badge--view">View</span>
|
|
2473
|
+
</div>
|
|
2474
|
+
}
|
|
2475
|
+
</div>
|
|
2476
|
+
</div>
|
|
2477
|
+
|
|
2478
|
+
<div class="compose-arrow">→</div>
|
|
2479
|
+
|
|
2480
|
+
<!-- Operation column -->
|
|
2481
|
+
<div class="compose-column">
|
|
2482
|
+
<div class="compose-column__label">Operation</div>
|
|
2483
|
+
<div class="compose-options">
|
|
2484
|
+
<label class="compose-option" [class.compose-option--selected]="composeOp === 'union'">
|
|
2485
|
+
<input type="radio" name="composeOp" [checked]="composeOp === 'union'" (change)="composeOp = 'union'" />
|
|
2486
|
+
<i class="fa-solid fa-layer-group"></i>
|
|
2487
|
+
<div>
|
|
2488
|
+
<div class="compose-option__title">Union</div>
|
|
2489
|
+
<div class="compose-option__desc">Combine all sources, dedupe</div>
|
|
2490
|
+
</div>
|
|
2491
|
+
</label>
|
|
2492
|
+
<label class="compose-option" [class.compose-option--selected]="composeOp === 'intersection'">
|
|
2493
|
+
<input type="radio" name="composeOp" [checked]="composeOp === 'intersection'" (change)="composeOp = 'intersection'" />
|
|
2494
|
+
<i class="fa-solid fa-circle-notch"></i>
|
|
2495
|
+
<div>
|
|
2496
|
+
<div class="compose-option__title">Intersection</div>
|
|
2497
|
+
<div class="compose-option__desc">Only records in all sources</div>
|
|
2498
|
+
</div>
|
|
2499
|
+
</label>
|
|
2500
|
+
<label class="compose-option" [class.compose-option--selected]="composeOp === 'difference'">
|
|
2501
|
+
<input type="radio" name="composeOp" [checked]="composeOp === 'difference'" (change)="composeOp = 'difference'" />
|
|
2502
|
+
<i class="fa-solid fa-minus-circle"></i>
|
|
2503
|
+
<div>
|
|
2504
|
+
<div class="compose-option__title">Difference</div>
|
|
2505
|
+
<div class="compose-option__desc">First minus the rest</div>
|
|
2506
|
+
</div>
|
|
2507
|
+
</label>
|
|
2508
|
+
</div>
|
|
2509
|
+
</div>
|
|
2510
|
+
|
|
2511
|
+
<div class="compose-arrow">→</div>
|
|
2512
|
+
|
|
2513
|
+
<!-- Target column -->
|
|
2514
|
+
<div class="compose-column">
|
|
2515
|
+
<div class="compose-column__label">Target</div>
|
|
2516
|
+
<div class="compose-options">
|
|
2517
|
+
<label class="compose-option" [class.compose-option--selected]="composeTarget === 'new'">
|
|
2518
|
+
<input type="radio" name="composeTarget" [checked]="composeTarget === 'new'" (change)="composeTarget = 'new'" />
|
|
2519
|
+
<div class="compose-option__title">Create New List</div>
|
|
2520
|
+
</label>
|
|
2521
|
+
<label class="compose-option" [class.compose-option--selected]="composeTarget === 'existing'">
|
|
2522
|
+
<input type="radio" name="composeTarget" [checked]="composeTarget === 'existing'" (change)="composeTarget = 'existing'" />
|
|
2523
|
+
<div class="compose-option__title">Existing List…</div>
|
|
2524
|
+
</label>
|
|
2525
|
+
|
|
2526
|
+
@if (composeTarget === 'new') {
|
|
2527
|
+
<input
|
|
2528
|
+
class="compose-input"
|
|
2529
|
+
type="text"
|
|
2530
|
+
[(ngModel)]="composeNewListName"
|
|
2531
|
+
placeholder="New list name…" />
|
|
2532
|
+
} @else {
|
|
2533
|
+
<div class="compose-target-search">
|
|
2534
|
+
<input
|
|
2535
|
+
class="compose-input"
|
|
2536
|
+
type="text"
|
|
2537
|
+
[(ngModel)]="composeTargetSearch"
|
|
2538
|
+
(focus)="showComposeTargetDropdown = true"
|
|
2539
|
+
placeholder="Search lists…" />
|
|
2540
|
+
@if (showComposeTargetDropdown && filteredComposeTargets.length > 0) {
|
|
2541
|
+
<div class="compose-target-dropdown">
|
|
2542
|
+
<div class="dropdown-backdrop" (click)="showComposeTargetDropdown = false"></div>
|
|
2543
|
+
<div class="dropdown-content">
|
|
2544
|
+
@for (l of filteredComposeTargets; track l.ID) {
|
|
2545
|
+
<div class="dropdown-item" (click)="selectComposeTarget(l)">
|
|
2546
|
+
<span class="dropdown-name">{{ l.Name }}</span>
|
|
2547
|
+
<span class="dropdown-entity">{{ l.Entity }}</span>
|
|
2548
|
+
</div>
|
|
2549
|
+
}
|
|
2550
|
+
</div>
|
|
2551
|
+
</div>
|
|
2552
|
+
}
|
|
2553
|
+
</div>
|
|
2554
|
+
}
|
|
2555
|
+
</div>
|
|
2556
|
+
</div>
|
|
2557
|
+
</div>
|
|
2558
|
+
|
|
2559
|
+
<div class="compose-footer">
|
|
2560
|
+
<button class="op-btn" (click)="previewCompose()" [disabled]="isCalculating || isComposing">
|
|
2561
|
+
<i class="fa-solid fa-eye"></i>
|
|
2562
|
+
<span>Preview Result</span>
|
|
2563
|
+
</button>
|
|
2564
|
+
<button class="op-btn op-btn--primary" (click)="composeAndSave()" [disabled]="!canCompose || isCalculating || isComposing">
|
|
2565
|
+
@if (isComposing) {
|
|
2566
|
+
<i class="fa-solid fa-spinner fa-spin"></i>
|
|
2567
|
+
} @else {
|
|
2568
|
+
<i class="fa-solid fa-bolt"></i>
|
|
2569
|
+
}
|
|
2570
|
+
<span>{{ isComposing ? 'Composing…' : 'Compute & Save' }}</span>
|
|
2571
|
+
</button>
|
|
2572
|
+
<div class="compose-footer__spacer"></div>
|
|
2573
|
+
@if (lastOperationResult) {
|
|
2574
|
+
<div class="compose-footer__hint">
|
|
2575
|
+
Expected output: <strong>{{ lastOperationResult.resultCount }} records</strong>
|
|
2576
|
+
({{ getOperationLabel(lastOperationResult.operation) }})
|
|
2577
|
+
</div>
|
|
2578
|
+
}
|
|
2579
|
+
</div>
|
|
2580
|
+
</div>
|
|
2581
|
+
</div>
|
|
2582
|
+
}
|
|
2583
|
+
|
|
2584
|
+
<!-- Compose-into-existing-list delta-confirm -->
|
|
2585
|
+
<mj-list-delta-confirm
|
|
2586
|
+
[Visible]="composeConfirmVisible && !!composeDelta"
|
|
2587
|
+
[Delta]="composeDelta"
|
|
2588
|
+
[TargetListName]="composeTargetDisplayName()"
|
|
2589
|
+
[SourceLabel]="'compose result'"
|
|
2590
|
+
(Confirm)="onComposeConfirmCommit($event)"
|
|
2591
|
+
(Cancel)="onComposeConfirmCancel()">
|
|
2592
|
+
</mj-list-delta-confirm>
|
|
2593
|
+
|
|
2594
|
+
<!-- Export Dialog (mockup 26) -->
|
|
2595
|
+
@if (showExportDialog) {
|
|
2596
|
+
<div class="modal-overlay" (click)="closeExportDialog()"></div>
|
|
2597
|
+
<div class="modal-dialog export-dialog">
|
|
2598
|
+
<div class="modal-header">
|
|
2599
|
+
<h3><i class="fa-solid fa-file-excel"></i> Export {{ exportRecordCount }} Record{{ exportRecordCount === 1 ? '' : 's' }}</h3>
|
|
2600
|
+
<button class="modal-close" (click)="closeExportDialog()">
|
|
2601
|
+
<i class="fa-solid fa-times"></i>
|
|
2602
|
+
</button>
|
|
2603
|
+
</div>
|
|
2604
|
+
<div class="modal-body">
|
|
2605
|
+
<div class="export-format-row">
|
|
2606
|
+
<label class="export-format-option"
|
|
2607
|
+
[class.export-format-option--selected]="exportFormat === 'excel'"
|
|
2608
|
+
(click)="exportFormat = 'excel'">
|
|
2609
|
+
<input type="radio" name="exportFormat" value="excel" [(ngModel)]="exportFormat">
|
|
2610
|
+
<i class="fa-solid fa-file-excel" style="color: var(--mj-status-success);"></i>
|
|
2611
|
+
<span>Excel (.xlsx)</span>
|
|
2612
|
+
</label>
|
|
2613
|
+
<label class="export-format-option"
|
|
2614
|
+
[class.export-format-option--selected]="exportFormat === 'csv'"
|
|
2615
|
+
(click)="exportFormat = 'csv'">
|
|
2616
|
+
<input type="radio" name="exportFormat" value="csv" [(ngModel)]="exportFormat">
|
|
2617
|
+
<i class="fa-solid fa-file-csv" style="color: var(--mj-text-secondary);"></i>
|
|
2618
|
+
<span>CSV</span>
|
|
2619
|
+
</label>
|
|
2620
|
+
<label class="export-format-option"
|
|
2621
|
+
[class.export-format-option--selected]="exportFormat === 'json'"
|
|
2622
|
+
(click)="exportFormat = 'json'">
|
|
2623
|
+
<input type="radio" name="exportFormat" value="json" [(ngModel)]="exportFormat">
|
|
2624
|
+
<i class="fa-solid fa-file-code" style="color: var(--mj-brand-primary);"></i>
|
|
2625
|
+
<span>JSON</span>
|
|
2626
|
+
</label>
|
|
2627
|
+
</div>
|
|
2628
|
+
|
|
2629
|
+
<div class="export-section-divider"></div>
|
|
2630
|
+
|
|
2631
|
+
<label class="export-section-label">Columns to include</label>
|
|
2632
|
+
<div class="export-fields-list">
|
|
2633
|
+
@for (f of exportFields; track f.Name) {
|
|
2634
|
+
<label class="export-field-row">
|
|
2635
|
+
<input type="checkbox" [(ngModel)]="f.Selected">
|
|
2636
|
+
<span>{{ f.DisplayName }}</span>
|
|
2637
|
+
</label>
|
|
2638
|
+
}
|
|
2639
|
+
</div>
|
|
2640
|
+
<div class="export-field-actions">
|
|
2641
|
+
<a href="#" (click)="selectAllExportFields(); $event.preventDefault()">Select All</a>
|
|
2642
|
+
<a href="#" (click)="selectNoneExportFields(); $event.preventDefault()">Select None</a>
|
|
2643
|
+
<span class="muted">{{ selectedExportFieldCount }} of {{ exportFields.length }} selected</span>
|
|
2644
|
+
</div>
|
|
2645
|
+
</div>
|
|
2646
|
+
<div class="modal-footer">
|
|
2647
|
+
<button mjButton variant="primary"
|
|
2648
|
+
[disabled]="selectedExportFieldCount === 0 || isExporting"
|
|
2649
|
+
(click)="executeExport()">
|
|
2650
|
+
@if (isExporting) {
|
|
2651
|
+
<i class="fa-solid fa-spinner fa-spin"></i>
|
|
2652
|
+
Exporting…
|
|
2653
|
+
} @else {
|
|
2654
|
+
<i class="fa-solid fa-download"></i>
|
|
2655
|
+
Export {{ exportRecordCount }} Record{{ exportRecordCount === 1 ? '' : 's' }}
|
|
2656
|
+
}
|
|
2657
|
+
</button>
|
|
2658
|
+
<button mjButton variant="outline" [disabled]="isExporting" (click)="closeExportDialog()">Cancel</button>
|
|
2659
|
+
</div>
|
|
2660
|
+
</div>
|
|
2661
|
+
}
|
|
2662
|
+
|
|
1475
2663
|
<!-- Create List Dialog -->
|
|
1476
2664
|
@if (showCreateDialog) {
|
|
1477
2665
|
<div class="modal-overlay" (click)="cancelCreateDialog()"></div>
|
|
@@ -1584,7 +2772,7 @@ export { ListsOperationsResource };
|
|
|
1584
2772
|
</div>
|
|
1585
2773
|
}
|
|
1586
2774
|
</div>
|
|
1587
|
-
`, encapsulation: ViewEncapsulation.None, styles: ["\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .operations-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n }\n\n .operations-header {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .clear-all-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .clear-all-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n }\n\n .clear-all-btn i {\n font-size: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .header-subtitle {\n color: var(--mj-text-secondary);\n font-size: 14px;\n }\n\n .operations-content {\n display: grid;\n grid-template-columns: 280px 1fr 300px;\n gap: 16px;\n flex: 1;\n padding: 16px;\n overflow: hidden;\n }\n\n /* Panels */\n .selection-panel,\n .results-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .venn-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n min-height: 400px;\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .list-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n /* Entity Filter */\n .entity-filter-section {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .filter-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .entity-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 13px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n }\n\n .entity-select:focus {\n border-color: var(--mj-brand-primary);\n }\n\n .entity-note {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 8px 12px;\n padding: 8px 10px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-success);\n }\n\n .entity-note i {\n color: var(--mj-status-success);\n }\n\n /* Selected Lists */\n .selected-lists {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n }\n\n .selected-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 8px;\n }\n\n .item-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n flex-shrink: 0;\n }\n\n .item-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .item-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .remove-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n }\n\n .remove-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n }\n\n /* Add list area */\n .add-list-area {\n position: relative;\n }\n\n .add-list-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n transition: border-color 0.2s;\n }\n\n .add-list-search:focus-within {\n border-color: var(--mj-brand-primary);\n }\n\n .add-list-search i {\n color: var(--mj-text-muted);\n }\n\n .add-list-search input {\n flex: 1;\n border: none;\n outline: none;\n font-size: 13px;\n }\n\n .list-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 100;\n margin-top: 4px;\n }\n\n .dropdown-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .dropdown-content {\n position: relative;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n }\n\n .dropdown-item {\n display: flex;\n flex-direction: column;\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .dropdown-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .dropdown-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .lists-full {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n }\n\n .entity-warning {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin: 12px;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-warning);\n }\n\n .entity-warning i {\n color: var(--mj-status-warning);\n margin-top: 2px;\n }\n\n /* Quick Operations */\n .quick-operations {\n padding: 12px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .quick-operations h4 {\n margin: 0 0 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .operation-buttons {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .op-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .op-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .op-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Venn Panel */\n .venn-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n padding: 40px;\n }\n\n .empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 50%;\n margin-bottom: 20px;\n }\n\n .empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n }\n\n .venn-empty h3 {\n margin: 0 0 8px;\n font-size: 18px;\n color: var(--mj-text-primary);\n }\n\n .venn-empty p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 14px;\n max-width: 300px;\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Results Panel */\n .region-details,\n .operation-result {\n padding: 16px;\n }\n\n .region-header,\n .result-header {\n margin-bottom: 16px;\n }\n\n .region-label,\n .result-operation {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .region-count,\n .result-count {\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n }\n\n .region-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n .action-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .action-btn.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .record-preview h5 {\n margin: 0 0 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .preview-list {\n max-height: 200px;\n overflow-y: auto;\n }\n\n .preview-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 6px;\n transition: all 0.15s ease;\n }\n\n .preview-card:hover {\n background: var(--mj-bg-surface-sunken);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .preview-card-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .preview-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-secondary {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-open-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n opacity: 0.6;\n transition: all 0.15s ease;\n flex-shrink: 0;\n }\n\n .preview-open-btn:hover {\n opacity: 1;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .preview-loading {\n padding: 12px;\n text-align: center;\n }\n\n .results-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .results-empty i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n }\n\n .results-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 200px;\n }\n\n /* Modal */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n }\n\n .modal-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n width: 420px;\n max-width: 90vw;\n z-index: 1001;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n }\n\n .modal-close {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px 8px;\n }\n\n .modal-body {\n padding: 20px;\n }\n\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n }\n\n .form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n box-sizing: border-box;\n }\n\n .form-input: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) 10%, transparent);\n }\n\n textarea.form-input {\n resize: vertical;\n }\n\n .form-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .form-info i {\n color: var(--mj-brand-primary);\n }\n\n .modal-footer {\n display: flex;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n padding: 10px 20px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-secondary:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n /* Add to List Dialog */\n .add-to-list-dialog {\n width: 480px;\n }\n\n .add-to-list-dialog .modal-body {\n max-height: 400px;\n overflow-y: auto;\n }\n\n .list-search {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-bottom: 12px;\n }\n\n .list-search i {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n\n .list-search .form-input {\n flex: 1;\n border: none;\n background: transparent;\n padding: 0;\n font-size: 14px;\n }\n\n .list-search .form-input:focus {\n box-shadow: none;\n outline: none;\n }\n\n .list-options {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n max-height: 250px;\n overflow-y: auto;\n }\n\n .list-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n cursor: pointer;\n transition: background 0.15s;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-option:last-child {\n border-bottom: none;\n }\n\n .list-option:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-option.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-option-radio {\n flex-shrink: 0;\n }\n\n .list-option-radio input[type=\"radio\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n }\n\n .list-option-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .list-option-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .list-option-entity {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 30px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty i {\n font-size: 28px;\n margin-bottom: 10px;\n opacity: 0.5;\n }\n\n .list-options-empty p {\n margin: 0;\n font-size: 13px;\n }\n\n /* Responsive */\n @media (max-width: 1024px) {\n .operations-content {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n }\n\n .selection-panel {\n order: 1;\n }\n\n .venn-panel {\n order: 2;\n min-height: 300px;\n }\n\n .results-panel {\n order: 3;\n }\n }\n "] }]
|
|
1588
|
-
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.ListSetOperationsService }, { type: i2.MJNotificationService }], null); })();
|
|
1589
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListsOperationsResource, { className: "ListsOperationsResource", filePath: "src/Lists/components/lists-operations-resource.component.ts", lineNumber:
|
|
2775
|
+
`, encapsulation: ViewEncapsulation.None, styles: ["\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .operations-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n }\n\n .operations-header {\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n }\n\n .header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .clear-all-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .clear-all-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n }\n\n .clear-all-btn i {\n font-size: 12px;\n }\n\n .header-title i {\n font-size: 24px;\n color: var(--mj-brand-primary);\n }\n\n .header-title h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .header-subtitle {\n color: var(--mj-text-secondary);\n font-size: 14px;\n }\n\n .operations-content {\n display: grid;\n grid-template-columns: 280px 1fr 300px;\n gap: 16px;\n flex: 1;\n padding: 16px;\n overflow: hidden;\n }\n\n /* Panels */\n .selection-panel,\n .results-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .venn-panel {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-sm);\n position: relative;\n min-height: 400px;\n }\n\n .panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .panel-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .list-count {\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n }\n\n /* Entity Filter */\n .entity-filter-section {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .filter-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .entity-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 13px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n cursor: pointer;\n outline: none;\n transition: border-color 0.2s;\n }\n\n .entity-select:focus {\n border-color: var(--mj-brand-primary);\n }\n\n .entity-note {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 8px 12px;\n padding: 8px 10px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-success);\n }\n\n .entity-note i {\n color: var(--mj-status-success);\n }\n\n /* Selected Lists */\n .selected-lists {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n }\n\n /* Selected Views (sibling section) */\n .selected-views {\n overflow-y: auto;\n padding: 0 12px 12px 12px;\n }\n\n .selected-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 8px;\n }\n\n /* View operands get a dashed outline so they read distinctly from\n list operands. The fill stays muted because views are dynamic. */\n .selected-item--view {\n border: 1px dashed var(--mj-border-default);\n background: var(--mj-bg-surface);\n }\n\n .item-color {\n width: 12px;\n height: 12px;\n border-radius: 3px;\n flex-shrink: 0;\n }\n\n /* View color swatch is a ring around a hollow centre \u2014 mirrors the\n dashed-stroke convention from the Venn diagram. */\n .item-color--view {\n background: transparent !important;\n border: 2px dashed currentColor;\n border-radius: 50%;\n }\n\n .item-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .item-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .item-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .remove-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n border-radius: 4px;\n }\n\n .remove-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-secondary);\n }\n\n /* Add list area */\n .add-list-area {\n position: relative;\n }\n\n .add-list-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px dashed var(--mj-border-default);\n border-radius: 6px;\n transition: border-color 0.2s;\n }\n\n .add-list-search:focus-within {\n border-color: var(--mj-brand-primary);\n }\n\n .add-list-search i {\n color: var(--mj-text-muted);\n }\n\n .add-list-search input {\n flex: 1;\n border: none;\n outline: none;\n font-size: 13px;\n }\n\n .list-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 100;\n margin-top: 4px;\n }\n\n .dropdown-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .dropdown-content {\n position: relative;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n box-shadow: var(--mj-shadow-md);\n max-height: 200px;\n overflow-y: auto;\n }\n\n .dropdown-item {\n display: flex;\n flex-direction: column;\n padding: 10px 12px;\n cursor: pointer;\n transition: background 0.15s;\n }\n\n .dropdown-item:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .dropdown-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .dropdown-entity {\n font-size: 11px;\n color: var(--mj-text-muted);\n }\n\n .lists-full {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n }\n\n .entity-warning {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n margin: 12px;\n padding: 10px;\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n border-radius: 6px;\n font-size: 12px;\n color: var(--mj-status-warning);\n }\n\n .entity-warning i {\n color: var(--mj-status-warning);\n margin-top: 2px;\n }\n\n /* Quick Operations */\n .quick-operations {\n padding: 12px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .quick-operations h4 {\n margin: 0 0 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .operation-buttons {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .op-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .op-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n }\n\n .op-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Venn Panel */\n .venn-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n padding: 40px;\n }\n\n .empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-radius: 50%;\n margin-bottom: 20px;\n }\n\n .empty-icon i {\n font-size: 36px;\n color: var(--mj-brand-primary);\n }\n\n .venn-empty h3 {\n margin: 0 0 8px;\n font-size: 18px;\n color: var(--mj-text-primary);\n }\n\n .venn-empty p {\n margin: 0;\n color: var(--mj-text-secondary);\n font-size: 14px;\n max-width: 300px;\n }\n\n .loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 90%, transparent);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Results Panel */\n .region-details,\n .operation-result {\n padding: 16px;\n }\n\n .region-header,\n .result-header {\n margin-bottom: 16px;\n }\n\n .region-label,\n .result-operation {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n }\n\n .region-count,\n .result-count {\n font-size: 13px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n }\n\n .region-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n .action-btn {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s;\n }\n\n .action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .action-btn.primary {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .action-btn.primary:hover {\n background: var(--mj-brand-primary-hover);\n }\n\n .record-preview h5 {\n margin: 0 0 8px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .preview-list {\n max-height: 200px;\n overflow-y: auto;\n }\n\n .preview-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n margin-bottom: 6px;\n transition: all 0.15s ease;\n }\n\n .preview-card:hover {\n background: var(--mj-bg-surface-sunken);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .preview-card-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .preview-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-secondary {\n font-size: 11px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .preview-open-btn {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n padding: 6px 8px;\n border-radius: 4px;\n opacity: 0.6;\n transition: all 0.15s ease;\n flex-shrink: 0;\n }\n\n .preview-open-btn:hover {\n opacity: 1;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n }\n\n .preview-loading {\n padding: 12px;\n text-align: center;\n }\n\n .results-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .results-empty i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n }\n\n .results-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 200px;\n }\n\n /* Modal */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 1000;\n }\n\n .modal-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n width: 420px;\n max-width: 90vw;\n z-index: 1001;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n }\n\n .modal-close {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px 8px;\n }\n\n .modal-body {\n padding: 20px;\n }\n\n .form-group {\n margin-bottom: 16px;\n }\n\n .form-group label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n }\n\n .form-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n box-sizing: border-box;\n }\n\n .form-input: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) 10%, transparent);\n }\n\n textarea.form-input {\n resize: vertical;\n }\n\n .form-info {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n }\n\n .form-info i {\n color: var(--mj-brand-primary);\n }\n\n .modal-footer {\n display: flex;\n gap: 12px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .btn-primary {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n\n .btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n padding: 10px 20px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n cursor: pointer;\n }\n\n .btn-secondary:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n /* Add to List Dialog */\n .add-to-list-dialog {\n width: 480px;\n }\n\n .add-to-list-dialog .modal-body {\n max-height: 400px;\n overflow-y: auto;\n }\n\n /* Export dialog (mockup 26) */\n .export-dialog .modal-body { max-height: 60vh; overflow-y: auto; }\n .export-format-row { display: flex; gap: 8px; margin-top: 8px; }\n .export-format-option {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n background: var(--mj-bg-surface);\n }\n .export-format-option--selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n }\n .export-format-option input[type=\"radio\"] { margin: 0; }\n .export-section-divider {\n height: 1px;\n background: var(--mj-border-default);\n margin: 16px 0;\n }\n .export-section-label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.4px;\n margin-bottom: 8px;\n }\n .export-fields-list {\n max-height: 220px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n }\n .export-field-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 13px;\n cursor: pointer;\n }\n .export-field-row:last-child { border-bottom: none; }\n .export-field-row:hover { background: var(--mj-bg-surface-hover); }\n .export-field-actions {\n display: flex;\n gap: 12px;\n margin-top: 8px;\n align-items: center;\n font-size: 11.5px;\n }\n .export-field-actions a { color: var(--mj-text-link); }\n .export-field-actions .muted {\n margin-left: auto;\n color: var(--mj-text-muted);\n }\n\n .list-search {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-bottom: 12px;\n }\n\n .list-search i {\n color: var(--mj-text-muted);\n flex-shrink: 0;\n }\n\n .list-search .form-input {\n flex: 1;\n border: none;\n background: transparent;\n padding: 0;\n font-size: 14px;\n }\n\n .list-search .form-input:focus {\n box-shadow: none;\n outline: none;\n }\n\n .list-options {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n max-height: 250px;\n overflow-y: auto;\n }\n\n .list-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n cursor: pointer;\n transition: background 0.15s;\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .list-option:last-child {\n border-bottom: none;\n }\n\n .list-option:hover {\n background: var(--mj-bg-surface-sunken);\n }\n\n .list-option.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n }\n\n .list-option-radio {\n flex-shrink: 0;\n }\n\n .list-option-radio input[type=\"radio\"] {\n width: 18px;\n height: 18px;\n cursor: pointer;\n accent-color: var(--mj-brand-primary);\n }\n\n .list-option-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .list-option-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .list-option-entity {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 30px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n }\n\n .list-options-empty i {\n font-size: 28px;\n margin-bottom: 10px;\n opacity: 0.5;\n }\n\n .list-options-empty p {\n margin: 0;\n font-size: 13px;\n }\n\n /* Responsive */\n @media (max-width: 1024px) {\n .operations-content {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n }\n\n .selection-panel {\n order: 1;\n }\n\n .venn-panel {\n order: 2;\n min-height: 300px;\n }\n\n .results-panel {\n order: 3;\n }\n }\n\n /* Compose-into-target panel (Phase 1.10) */\n .compose-panel {\n margin: 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n overflow: hidden;\n }\n\n .compose-panel__header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .compose-panel__header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .compose-panel__body {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .compose-grid {\n display: grid;\n grid-template-columns: 1.2fr auto 1fr auto 1fr;\n gap: 16px;\n align-items: flex-start;\n }\n\n .compose-arrow {\n align-self: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n }\n\n .compose-column {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n }\n\n .compose-column__label {\n font-size: 11px;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n }\n\n .compose-sources {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .compose-source-chip {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 12.5px;\n }\n\n .compose-source-chip--view {\n border: 1px dashed var(--mj-border-default);\n background: var(--mj-bg-surface);\n }\n\n .compose-source-name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .compose-source-badge {\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n .compose-source-badge--view {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n }\n\n .compose-options {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .compose-option {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n cursor: pointer;\n font-size: 12.5px;\n }\n\n .compose-option--selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n }\n\n .compose-option__title {\n font-weight: 600;\n }\n\n .compose-option__desc {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n }\n\n .compose-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n font-size: 12.5px;\n }\n\n .compose-target-search {\n position: relative;\n }\n\n .compose-target-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n z-index: 50;\n }\n\n .compose-footer {\n display: flex;\n align-items: center;\n gap: 10px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n }\n\n .compose-footer__spacer { flex: 1; }\n\n .compose-footer__hint {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .op-btn--primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n .op-btn--primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n }\n "] }]
|
|
2776
|
+
}], () => [{ type: i0.ChangeDetectorRef }, { type: i1.ListSetOperationsService }, { type: i2.MJNotificationService }, { type: i3.ExportService }], null); })();
|
|
2777
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ListsOperationsResource, { className: "ListsOperationsResource", filePath: "src/Lists/components/lists-operations-resource.component.ts", lineNumber: 1841 }); })();
|
|
1590
2778
|
//# sourceMappingURL=lists-operations-resource.component.js.map
|