@memberjunction/ng-dashboards 5.34.0 → 5.35.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 +75 -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 +400 -89
- 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.js +990 -992
- 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.js +781 -783
- 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/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 +79 -30
- 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 +196 -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 +32 -40
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +32 -40
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +32 -40
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +32 -40
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +76 -82
- 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-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 +245 -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 +294 -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 +21 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +147 -160
- 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 +19 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +20 -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 +309 -318
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +866 -847
- 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 +610 -606
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +241 -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.js +673 -674
- 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.js +745 -703
- 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 +18 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +486 -532
- 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.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +234 -246
- package/dist/Lists/components/lists-operations-resource.component.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 +262 -104
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +4 -0
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +812 -784
- 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 +8 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +587 -608
- 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 +107 -93
- 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 +36 -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 +2 -1
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +24 -3
- 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 +31 -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 +1 -1
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +28 -1
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -2
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -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 +30 -0
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +52 -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
|
@@ -24,139 +24,152 @@ import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
|
24
24
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
25
25
|
import { CronToHumanReadable } from '../autotagging/autotagging-pipeline-resource.component';
|
|
26
26
|
import * as i0 from "@angular/core";
|
|
27
|
-
import * as i1 from "@angular/
|
|
28
|
-
import * as i2 from "@
|
|
29
|
-
import * as i3 from "@memberjunction/ng-
|
|
30
|
-
import * as i4 from "
|
|
31
|
-
import * as i5 from "
|
|
27
|
+
import * as i1 from "@angular/common";
|
|
28
|
+
import * as i2 from "@angular/forms";
|
|
29
|
+
import * as i3 from "@memberjunction/ng-code-editor";
|
|
30
|
+
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
31
|
+
import * as i5 from "../widgets/kpi-card.component";
|
|
32
|
+
import * as i6 from "@memberjunction/ng-ui-components";
|
|
32
33
|
const _c0 = ["entitySearchInput"];
|
|
33
34
|
const _forTrack0 = ($index, $item) => $item.title;
|
|
34
35
|
const _forTrack1 = ($index, $item) => $item.EntityDocumentID;
|
|
35
36
|
const _forTrack2 = ($index, $item) => $item.ID;
|
|
36
37
|
const _forTrack3 = ($index, $item) => $item.SchemaName;
|
|
37
38
|
const _forTrack4 = ($index, $item) => $item.name;
|
|
38
|
-
function
|
|
39
|
-
i0.ɵɵ
|
|
40
|
-
i0.ɵɵelement(1, "mj-loading", 2);
|
|
41
|
-
i0.ɵɵelementEnd();
|
|
39
|
+
function VectorManagementResourceComponent_Conditional_0_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementContainer(0);
|
|
42
41
|
} }
|
|
43
|
-
function
|
|
44
|
-
const
|
|
45
|
-
i0.ɵɵelementStart(0, "div",
|
|
46
|
-
i0.ɵɵlistener("
|
|
47
|
-
i0.ɵɵ
|
|
48
|
-
i0.ɵɵ
|
|
49
|
-
i0.ɵɵ
|
|
50
|
-
i0.ɵɵelementStart(4, "button", 40);
|
|
51
|
-
i0.ɵɵlistener("click", function VectorManagementResourceComponent_Conditional_1_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.ViewMode = "operations"); });
|
|
52
|
-
i0.ɵɵelement(5, "i", 42);
|
|
53
|
-
i0.ɵɵtext(6, " Operations ");
|
|
42
|
+
function VectorManagementResourceComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 2)(2, "div", 3)(3, "mj-view-toggle", 4);
|
|
45
|
+
i0.ɵɵlistener("KeyChange", function VectorManagementResourceComponent_Conditional_0_Template_mj_view_toggle_KeyChange_3_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ViewMode = $event); });
|
|
46
|
+
i0.ɵɵelementEnd()()();
|
|
47
|
+
i0.ɵɵelementStart(4, "mj-page-body", 5);
|
|
48
|
+
i0.ɵɵtemplate(5, VectorManagementResourceComponent_Conditional_0_ng_container_5_Template, 1, 0, "ng-container", 6);
|
|
54
49
|
i0.ɵɵelementEnd()();
|
|
55
50
|
} if (rf & 2) {
|
|
56
|
-
const
|
|
57
|
-
i0.ɵɵ
|
|
58
|
-
i0.ɵɵclassProp("view-mode-btn-active", ctx_r2.ViewMode === "index");
|
|
51
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
52
|
+
const vectorBody_r3 = i0.ɵɵreference(3);
|
|
59
53
|
i0.ɵɵadvance(3);
|
|
60
|
-
i0.ɵɵ
|
|
54
|
+
i0.ɵɵproperty("Options", ctx_r1.VectorViewOptions)("ActiveKey", ctx_r1.ViewMode);
|
|
55
|
+
i0.ɵɵadvance();
|
|
56
|
+
i0.ɵɵproperty("Flex", true);
|
|
57
|
+
i0.ɵɵadvance();
|
|
58
|
+
i0.ɵɵproperty("ngTemplateOutlet", vectorBody_r3);
|
|
59
|
+
} }
|
|
60
|
+
function VectorManagementResourceComponent_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
i0.ɵɵelementContainer(0);
|
|
62
|
+
} }
|
|
63
|
+
function VectorManagementResourceComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
i0.ɵɵtemplate(0, VectorManagementResourceComponent_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 6);
|
|
65
|
+
} if (rf & 2) {
|
|
66
|
+
i0.ɵɵnextContext();
|
|
67
|
+
const vectorBody_r3 = i0.ɵɵreference(3);
|
|
68
|
+
i0.ɵɵproperty("ngTemplateOutlet", vectorBody_r3);
|
|
69
|
+
} }
|
|
70
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
i0.ɵɵelementStart(0, "div", 7);
|
|
72
|
+
i0.ɵɵelement(1, "mj-loading", 8);
|
|
73
|
+
i0.ɵɵelementEnd();
|
|
61
74
|
} }
|
|
62
|
-
function
|
|
63
|
-
i0.ɵɵelement(0, "app-kpi-card",
|
|
75
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelement(0, "app-kpi-card", 11);
|
|
64
77
|
} if (rf & 2) {
|
|
65
|
-
const
|
|
66
|
-
i0.ɵɵproperty("data",
|
|
78
|
+
const card_r5 = ctx.$implicit;
|
|
79
|
+
i0.ɵɵproperty("data", card_r5);
|
|
67
80
|
} }
|
|
68
|
-
function
|
|
69
|
-
i0.ɵɵelementStart(0, "div",
|
|
70
|
-
i0.ɵɵelement(1, "i",
|
|
81
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵelementStart(0, "div", 23);
|
|
83
|
+
i0.ɵɵelement(1, "i", 45);
|
|
71
84
|
i0.ɵɵelementStart(2, "p");
|
|
72
85
|
i0.ɵɵtext(3, "No entity documents configured for vectorization.");
|
|
73
86
|
i0.ɵɵelementEnd()();
|
|
74
87
|
} }
|
|
75
|
-
function
|
|
88
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
76
89
|
i0.ɵɵtext(0);
|
|
77
90
|
} if (rf & 2) {
|
|
78
|
-
const
|
|
79
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
91
|
+
const row_r7 = i0.ɵɵnextContext().$implicit;
|
|
92
|
+
i0.ɵɵtextInterpolate1(" ", row_r7.PercentComplete, "% ");
|
|
80
93
|
} }
|
|
81
|
-
function
|
|
94
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
82
95
|
i0.ɵɵtext(0);
|
|
83
96
|
} if (rf & 2) {
|
|
84
|
-
const
|
|
85
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
97
|
+
const row_r7 = i0.ɵɵnextContext().$implicit;
|
|
98
|
+
i0.ɵɵtextInterpolate1(" ", row_r7.Status, " ");
|
|
86
99
|
} }
|
|
87
|
-
function
|
|
88
|
-
i0.ɵɵelement(0, "i",
|
|
100
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
i0.ɵɵelement(0, "i", 60);
|
|
89
102
|
i0.ɵɵtext(1);
|
|
90
103
|
} if (rf & 2) {
|
|
91
|
-
const
|
|
104
|
+
const row_r7 = i0.ɵɵnextContext().$implicit;
|
|
92
105
|
i0.ɵɵadvance();
|
|
93
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
106
|
+
i0.ɵɵtextInterpolate1(" ", row_r7.PercentComplete > 0 ? row_r7.PercentComplete + "%" : "Sync", " ");
|
|
94
107
|
} }
|
|
95
|
-
function
|
|
96
|
-
i0.ɵɵelement(0, "i",
|
|
108
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelement(0, "i", 61);
|
|
97
110
|
i0.ɵɵtext(1, " Sync ");
|
|
98
111
|
} }
|
|
99
|
-
function
|
|
100
|
-
const
|
|
101
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
112
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Template(rf, ctx) { if (rf & 1) {
|
|
113
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
114
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 49);
|
|
102
115
|
i0.ɵɵtext(2);
|
|
103
116
|
i0.ɵɵelementEnd();
|
|
104
|
-
i0.ɵɵelementStart(3, "td",
|
|
117
|
+
i0.ɵɵelementStart(3, "td", 50);
|
|
105
118
|
i0.ɵɵtext(4);
|
|
106
119
|
i0.ɵɵelementEnd();
|
|
107
|
-
i0.ɵɵelementStart(5, "td",
|
|
120
|
+
i0.ɵɵelementStart(5, "td", 51);
|
|
108
121
|
i0.ɵɵtext(6);
|
|
109
122
|
i0.ɵɵpipe(7, "number");
|
|
110
123
|
i0.ɵɵelementEnd();
|
|
111
|
-
i0.ɵɵelementStart(8, "td",
|
|
124
|
+
i0.ɵɵelementStart(8, "td", 52);
|
|
112
125
|
i0.ɵɵtext(9);
|
|
113
126
|
i0.ɵɵelementEnd();
|
|
114
|
-
i0.ɵɵelementStart(10, "td")(11, "span",
|
|
127
|
+
i0.ɵɵelementStart(10, "td")(11, "span", 53);
|
|
115
128
|
i0.ɵɵelement(12, "i");
|
|
116
|
-
i0.ɵɵconditionalCreate(13,
|
|
129
|
+
i0.ɵɵconditionalCreate(13, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_13_Template, 1, 1)(14, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_14_Template, 1, 1);
|
|
117
130
|
i0.ɵɵelementEnd()();
|
|
118
|
-
i0.ɵɵelementStart(15, "td",
|
|
119
|
-
i0.ɵɵlistener("click", function
|
|
120
|
-
i0.ɵɵconditionalCreate(17,
|
|
131
|
+
i0.ɵɵelementStart(15, "td", 54)(16, "button", 55);
|
|
132
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Template_button_click_16_listener() { const row_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SyncEntity(row_r7.EntityDocumentID)); });
|
|
133
|
+
i0.ɵɵconditionalCreate(17, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_17_Template, 2, 1)(18, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Conditional_18_Template, 2, 0);
|
|
121
134
|
i0.ɵɵelementEnd();
|
|
122
|
-
i0.ɵɵelementStart(19, "button",
|
|
123
|
-
i0.ɵɵlistener("click", function
|
|
124
|
-
i0.ɵɵelement(20, "i",
|
|
135
|
+
i0.ɵɵelementStart(19, "button", 56);
|
|
136
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Template_button_click_19_listener() { const row_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenScheduleSyncDialog(row_r7.EntityDocumentID)); });
|
|
137
|
+
i0.ɵɵelement(20, "i", 57);
|
|
125
138
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵelementStart(21, "button",
|
|
127
|
-
i0.ɵɵlistener("click", function
|
|
128
|
-
i0.ɵɵelement(22, "i",
|
|
139
|
+
i0.ɵɵelementStart(21, "button", 58);
|
|
140
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Template_button_click_21_listener() { const row_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenEditPanel(row_r7.EntityDocumentID)); });
|
|
141
|
+
i0.ɵɵelement(22, "i", 59);
|
|
129
142
|
i0.ɵɵelementEnd()()();
|
|
130
143
|
} if (rf & 2) {
|
|
131
|
-
const
|
|
132
|
-
const
|
|
144
|
+
const row_r7 = ctx.$implicit;
|
|
145
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
133
146
|
i0.ɵɵadvance(2);
|
|
134
|
-
i0.ɵɵtextInterpolate(
|
|
147
|
+
i0.ɵɵtextInterpolate(row_r7.EntityName);
|
|
135
148
|
i0.ɵɵadvance(2);
|
|
136
|
-
i0.ɵɵtextInterpolate(
|
|
149
|
+
i0.ɵɵtextInterpolate(row_r7.DocumentName);
|
|
137
150
|
i0.ɵɵadvance(2);
|
|
138
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 11,
|
|
151
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 11, row_r7.VectorCount));
|
|
139
152
|
i0.ɵɵadvance(3);
|
|
140
|
-
i0.ɵɵtextInterpolate(
|
|
153
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormatDate(row_r7.LastSynced));
|
|
141
154
|
i0.ɵɵadvance(2);
|
|
142
|
-
i0.ɵɵclassMap(
|
|
155
|
+
i0.ɵɵclassMap(ctx_r1.GetStatusClass(row_r7.Status));
|
|
143
156
|
i0.ɵɵadvance();
|
|
144
|
-
i0.ɵɵclassMap(
|
|
157
|
+
i0.ɵɵclassMap(ctx_r1.GetStatusIcon(row_r7.Status));
|
|
145
158
|
i0.ɵɵadvance();
|
|
146
|
-
i0.ɵɵconditional(
|
|
159
|
+
i0.ɵɵconditional(row_r7.Status === "Syncing" && row_r7.PercentComplete > 0 ? 13 : 14);
|
|
147
160
|
i0.ɵɵadvance(3);
|
|
148
|
-
i0.ɵɵproperty("disabled",
|
|
161
|
+
i0.ɵɵproperty("disabled", ctx_r1.SyncingIds.has(row_r7.EntityDocumentID));
|
|
149
162
|
i0.ɵɵadvance();
|
|
150
|
-
i0.ɵɵconditional(
|
|
163
|
+
i0.ɵɵconditional(ctx_r1.SyncingIds.has(row_r7.EntityDocumentID) ? 17 : 18);
|
|
151
164
|
} }
|
|
152
|
-
function
|
|
153
|
-
i0.ɵɵelementStart(0, "div",
|
|
165
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "table", 46)(2, "thead")(3, "tr")(4, "th");
|
|
154
167
|
i0.ɵɵtext(5, "Entity");
|
|
155
168
|
i0.ɵɵelementEnd();
|
|
156
169
|
i0.ɵɵelementStart(6, "th");
|
|
157
170
|
i0.ɵɵtext(7, "Document");
|
|
158
171
|
i0.ɵɵelementEnd();
|
|
159
|
-
i0.ɵɵelementStart(8, "th",
|
|
172
|
+
i0.ɵɵelementStart(8, "th", 47);
|
|
160
173
|
i0.ɵɵtext(9, "Vectors");
|
|
161
174
|
i0.ɵɵelementEnd();
|
|
162
175
|
i0.ɵɵelementStart(10, "th");
|
|
@@ -165,793 +178,795 @@ function VectorManagementResourceComponent_Conditional_1_Conditional_20_Template
|
|
|
165
178
|
i0.ɵɵelementStart(12, "th");
|
|
166
179
|
i0.ɵɵtext(13, "Status");
|
|
167
180
|
i0.ɵɵelementEnd();
|
|
168
|
-
i0.ɵɵelementStart(14, "th",
|
|
181
|
+
i0.ɵɵelementStart(14, "th", 48);
|
|
169
182
|
i0.ɵɵtext(15, "Actions");
|
|
170
183
|
i0.ɵɵelementEnd()()();
|
|
171
184
|
i0.ɵɵelementStart(16, "tbody");
|
|
172
|
-
i0.ɵɵrepeaterCreate(17,
|
|
185
|
+
i0.ɵɵrepeaterCreate(17, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_For_18_Template, 23, 13, "tr", null, _forTrack1);
|
|
173
186
|
i0.ɵɵelementEnd()()();
|
|
174
187
|
} if (rf & 2) {
|
|
175
|
-
const
|
|
188
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
176
189
|
i0.ɵɵadvance(17);
|
|
177
|
-
i0.ɵɵrepeater(
|
|
190
|
+
i0.ɵɵrepeater(ctx_r1.SyncRows);
|
|
178
191
|
} }
|
|
179
|
-
function
|
|
180
|
-
i0.ɵɵelementStart(0, "div",
|
|
192
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "span", 36);
|
|
181
194
|
i0.ɵɵtext(2, "Dimensions");
|
|
182
195
|
i0.ɵɵelementEnd();
|
|
183
|
-
i0.ɵɵelementStart(3, "span",
|
|
196
|
+
i0.ɵɵelementStart(3, "span", 37);
|
|
184
197
|
i0.ɵɵtext(4);
|
|
185
198
|
i0.ɵɵpipe(5, "number");
|
|
186
199
|
i0.ɵɵelementEnd()();
|
|
187
200
|
} if (rf & 2) {
|
|
188
|
-
const
|
|
201
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
189
202
|
i0.ɵɵadvance(4);
|
|
190
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 1,
|
|
203
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 1, ctx_r1.EmbeddingModel.Dimensions));
|
|
191
204
|
} }
|
|
192
|
-
function
|
|
193
|
-
i0.ɵɵelement(0, "i",
|
|
205
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
+
i0.ɵɵelement(0, "i", 60);
|
|
194
207
|
i0.ɵɵtext(1, " Regenerating... ");
|
|
195
208
|
} }
|
|
196
|
-
function
|
|
197
|
-
i0.ɵɵelement(0, "i",
|
|
209
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
210
|
+
i0.ɵɵelement(0, "i", 19);
|
|
198
211
|
i0.ɵɵtext(1, " Regenerate with AI ");
|
|
199
212
|
} }
|
|
200
|
-
function
|
|
201
|
-
i0.ɵɵelementStart(0, "span",
|
|
213
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_24_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
214
|
+
i0.ɵɵelementStart(0, "span", 87);
|
|
202
215
|
i0.ɵɵtext(1);
|
|
203
216
|
i0.ɵɵelementEnd();
|
|
204
217
|
} if (rf & 2) {
|
|
205
|
-
const
|
|
218
|
+
const field_r9 = ctx.$implicit;
|
|
206
219
|
i0.ɵɵadvance();
|
|
207
|
-
i0.ɵɵtextInterpolate(
|
|
220
|
+
i0.ɵɵtextInterpolate(field_r9);
|
|
208
221
|
} }
|
|
209
|
-
function
|
|
210
|
-
i0.ɵɵelementStart(0, "div",
|
|
222
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "div", 70)(1, "label", 71);
|
|
211
224
|
i0.ɵɵtext(2, "Selected Fields");
|
|
212
225
|
i0.ɵɵelementEnd();
|
|
213
|
-
i0.ɵɵelementStart(3, "div",
|
|
214
|
-
i0.ɵɵrepeaterCreate(4,
|
|
226
|
+
i0.ɵɵelementStart(3, "div", 86);
|
|
227
|
+
i0.ɵɵrepeaterCreate(4, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_24_For_5_Template, 2, 1, "span", 87, i0.ɵɵrepeaterTrackByIdentity);
|
|
215
228
|
i0.ɵɵelementEnd()();
|
|
216
229
|
} if (rf & 2) {
|
|
217
|
-
const
|
|
230
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
218
231
|
i0.ɵɵadvance(4);
|
|
219
|
-
i0.ɵɵrepeater(
|
|
232
|
+
i0.ɵɵrepeater(ctx_r1.EditDocSelectedFields);
|
|
220
233
|
} }
|
|
221
|
-
function
|
|
222
|
-
i0.ɵɵelementStart(0, "option",
|
|
234
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_For_34_Template(rf, ctx) { if (rf & 1) {
|
|
235
|
+
i0.ɵɵelementStart(0, "option", 79);
|
|
223
236
|
i0.ɵɵtext(1);
|
|
224
237
|
i0.ɵɵelementEnd();
|
|
225
238
|
} if (rf & 2) {
|
|
226
|
-
const
|
|
227
|
-
i0.ɵɵproperty("value",
|
|
239
|
+
const model_r10 = ctx.$implicit;
|
|
240
|
+
i0.ɵɵproperty("value", model_r10.ID);
|
|
228
241
|
i0.ɵɵadvance();
|
|
229
|
-
i0.ɵɵtextInterpolate(
|
|
242
|
+
i0.ɵɵtextInterpolate(model_r10.Name);
|
|
230
243
|
} }
|
|
231
|
-
function
|
|
232
|
-
i0.ɵɵelementStart(0, "option",
|
|
244
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_For_40_Template(rf, ctx) { if (rf & 1) {
|
|
245
|
+
i0.ɵɵelementStart(0, "option", 79);
|
|
233
246
|
i0.ɵɵtext(1);
|
|
234
247
|
i0.ɵɵelementEnd();
|
|
235
248
|
} if (rf & 2) {
|
|
236
|
-
const
|
|
237
|
-
i0.ɵɵproperty("value",
|
|
249
|
+
const db_r11 = ctx.$implicit;
|
|
250
|
+
i0.ɵɵproperty("value", db_r11.ID);
|
|
238
251
|
i0.ɵɵadvance();
|
|
239
|
-
i0.ɵɵtextInterpolate(
|
|
252
|
+
i0.ɵɵtextInterpolate(db_r11.Name);
|
|
240
253
|
} }
|
|
241
|
-
function
|
|
242
|
-
i0.ɵɵelementStart(0, "option",
|
|
254
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_44_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
i0.ɵɵelementStart(0, "option", 79);
|
|
243
256
|
i0.ɵɵtext(1);
|
|
244
257
|
i0.ɵɵelementEnd();
|
|
245
258
|
} if (rf & 2) {
|
|
246
|
-
const
|
|
247
|
-
i0.ɵɵproperty("value",
|
|
259
|
+
const idx_r13 = ctx.$implicit;
|
|
260
|
+
i0.ɵɵproperty("value", idx_r13.ID);
|
|
248
261
|
i0.ɵɵadvance();
|
|
249
|
-
i0.ɵɵtextInterpolate(
|
|
262
|
+
i0.ɵɵtextInterpolate(idx_r13.Name);
|
|
250
263
|
} }
|
|
251
|
-
function
|
|
252
|
-
const
|
|
253
|
-
i0.ɵɵelementStart(0, "select",
|
|
254
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
255
|
-
i0.ɵɵelementStart(1, "option",
|
|
264
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
265
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
266
|
+
i0.ɵɵelementStart(0, "select", 78);
|
|
267
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_44_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDocVectorIndexID, $event) || (ctx_r1.EditDocVectorIndexID = $event); return i0.ɵɵresetView($event); });
|
|
268
|
+
i0.ɵɵelementStart(1, "option", 88);
|
|
256
269
|
i0.ɵɵtext(2, "Auto (create/find matching index)");
|
|
257
270
|
i0.ɵɵelementEnd();
|
|
258
|
-
i0.ɵɵrepeaterCreate(3,
|
|
271
|
+
i0.ɵɵrepeaterCreate(3, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_44_For_4_Template, 2, 2, "option", 79, _forTrack2);
|
|
259
272
|
i0.ɵɵelementEnd();
|
|
260
273
|
} if (rf & 2) {
|
|
261
|
-
const
|
|
262
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
274
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
275
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditDocVectorIndexID);
|
|
263
276
|
i0.ɵɵadvance(3);
|
|
264
|
-
i0.ɵɵrepeater(
|
|
277
|
+
i0.ɵɵrepeater(ctx_r1.EditFilteredIndexes);
|
|
265
278
|
} }
|
|
266
|
-
function
|
|
267
|
-
i0.ɵɵelementStart(0, "span",
|
|
279
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
280
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
268
281
|
i0.ɵɵtext(1, " No indexes for this database \u2014 one will be created automatically on sync ");
|
|
269
282
|
i0.ɵɵelementEnd();
|
|
270
283
|
} }
|
|
271
|
-
function
|
|
272
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
284
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
i0.ɵɵelement(0, "mj-loading", 85);
|
|
273
286
|
} }
|
|
274
|
-
function
|
|
275
|
-
const
|
|
276
|
-
i0.ɵɵelementStart(0, "button",
|
|
277
|
-
i0.ɵɵlistener("click", function
|
|
278
|
-
i0.ɵɵelement(1, "i",
|
|
287
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
288
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
289
|
+
i0.ɵɵelementStart(0, "button", 89);
|
|
290
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_56_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SaveEditedDocument()); });
|
|
291
|
+
i0.ɵɵelement(1, "i", 90);
|
|
279
292
|
i0.ɵɵtext(2, " Save Changes ");
|
|
280
293
|
i0.ɵɵelementEnd();
|
|
281
|
-
i0.ɵɵelementStart(3, "button",
|
|
282
|
-
i0.ɵɵlistener("click", function
|
|
283
|
-
i0.ɵɵelement(4, "i",
|
|
294
|
+
i0.ɵɵelementStart(3, "button", 91);
|
|
295
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_56_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.DeleteEntityDocument()); });
|
|
296
|
+
i0.ɵɵelement(4, "i", 92);
|
|
284
297
|
i0.ɵɵtext(5, " Delete ");
|
|
285
298
|
i0.ɵɵelementEnd();
|
|
286
|
-
i0.ɵɵelementStart(6, "button",
|
|
287
|
-
i0.ɵɵlistener("click", function
|
|
299
|
+
i0.ɵɵelementStart(6, "button", 93);
|
|
300
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_56_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
|
|
288
301
|
i0.ɵɵtext(7, " Cancel ");
|
|
289
302
|
i0.ɵɵelementEnd();
|
|
290
303
|
} }
|
|
291
|
-
function
|
|
292
|
-
const
|
|
293
|
-
i0.ɵɵelementStart(0, "div",
|
|
294
|
-
i0.ɵɵlistener("click", function
|
|
295
|
-
i0.ɵɵelementStart(1, "div",
|
|
296
|
-
i0.ɵɵlistener("click", function
|
|
297
|
-
i0.ɵɵelementStart(2, "div",
|
|
298
|
-
i0.ɵɵelement(4, "i",
|
|
304
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
306
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
307
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
|
|
308
|
+
i0.ɵɵelementStart(1, "div", 63);
|
|
309
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r8); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
310
|
+
i0.ɵɵelementStart(2, "div", 64)(3, "h3", 65);
|
|
311
|
+
i0.ɵɵelement(4, "i", 59);
|
|
299
312
|
i0.ɵɵtext(5, " Edit Entity Document ");
|
|
300
313
|
i0.ɵɵelementEnd();
|
|
301
|
-
i0.ɵɵelementStart(6, "button",
|
|
302
|
-
i0.ɵɵlistener("click", function
|
|
303
|
-
i0.ɵɵelement(7, "i",
|
|
314
|
+
i0.ɵɵelementStart(6, "button", 66);
|
|
315
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
|
|
316
|
+
i0.ɵɵelement(7, "i", 67);
|
|
304
317
|
i0.ɵɵelementEnd()();
|
|
305
|
-
i0.ɵɵelementStart(8, "div",
|
|
318
|
+
i0.ɵɵelementStart(8, "div", 68)(9, "div", 69)(10, "div", 70)(11, "label", 71);
|
|
306
319
|
i0.ɵɵtext(12, "Entity");
|
|
307
320
|
i0.ɵɵelementEnd();
|
|
308
|
-
i0.ɵɵelementStart(13, "span",
|
|
321
|
+
i0.ɵɵelementStart(13, "span", 72);
|
|
309
322
|
i0.ɵɵtext(14);
|
|
310
323
|
i0.ɵɵelementEnd()();
|
|
311
|
-
i0.ɵɵelementStart(15, "div",
|
|
324
|
+
i0.ɵɵelementStart(15, "div", 70)(16, "div", 73)(17, "label", 71);
|
|
312
325
|
i0.ɵɵtext(18, "Template");
|
|
313
326
|
i0.ɵɵelementEnd();
|
|
314
|
-
i0.ɵɵelementStart(19, "button",
|
|
315
|
-
i0.ɵɵlistener("click", function
|
|
316
|
-
i0.ɵɵconditionalCreate(20,
|
|
327
|
+
i0.ɵɵelementStart(19, "button", 74);
|
|
328
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RegenerateTemplate()); });
|
|
329
|
+
i0.ɵɵconditionalCreate(20, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_20_Template, 2, 0)(21, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_21_Template, 2, 0);
|
|
317
330
|
i0.ɵɵelementEnd()();
|
|
318
|
-
i0.ɵɵelementStart(22, "div",
|
|
319
|
-
i0.ɵɵlistener("change", function
|
|
331
|
+
i0.ɵɵelementStart(22, "div", 75)(23, "mj-code-editor", 76);
|
|
332
|
+
i0.ɵɵlistener("change", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_mj_code_editor_change_23_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnEditTemplateChange($event)); });
|
|
320
333
|
i0.ɵɵelementEnd()()();
|
|
321
|
-
i0.ɵɵconditionalCreate(24,
|
|
322
|
-
i0.ɵɵelementStart(25, "div",
|
|
334
|
+
i0.ɵɵconditionalCreate(24, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_24_Template, 6, 0, "div", 70);
|
|
335
|
+
i0.ɵɵelementStart(25, "div", 70)(26, "label", 71);
|
|
323
336
|
i0.ɵɵtext(27, "Document Name");
|
|
324
337
|
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵelementStart(28, "input",
|
|
326
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
338
|
+
i0.ɵɵelementStart(28, "input", 77);
|
|
339
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_input_ngModelChange_28_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDocName, $event) || (ctx_r1.EditDocName = $event); return i0.ɵɵresetView($event); });
|
|
327
340
|
i0.ɵɵelementEnd()();
|
|
328
|
-
i0.ɵɵelementStart(29, "div",
|
|
341
|
+
i0.ɵɵelementStart(29, "div", 70)(30, "label", 71);
|
|
329
342
|
i0.ɵɵtext(31, "Embedding Model");
|
|
330
343
|
i0.ɵɵelementEnd();
|
|
331
|
-
i0.ɵɵelementStart(32, "select",
|
|
332
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
333
|
-
i0.ɵɵrepeaterCreate(33,
|
|
344
|
+
i0.ɵɵelementStart(32, "select", 78);
|
|
345
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_select_ngModelChange_32_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDocAIModelID, $event) || (ctx_r1.EditDocAIModelID = $event); return i0.ɵɵresetView($event); });
|
|
346
|
+
i0.ɵɵrepeaterCreate(33, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_For_34_Template, 2, 2, "option", 79, _forTrack2);
|
|
334
347
|
i0.ɵɵelementEnd()();
|
|
335
|
-
i0.ɵɵelementStart(35, "div",
|
|
348
|
+
i0.ɵɵelementStart(35, "div", 70)(36, "label", 71);
|
|
336
349
|
i0.ɵɵtext(37, "Vector Database");
|
|
337
350
|
i0.ɵɵelementEnd();
|
|
338
|
-
i0.ɵɵelementStart(38, "select",
|
|
339
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
340
|
-
i0.ɵɵrepeaterCreate(39,
|
|
351
|
+
i0.ɵɵelementStart(38, "select", 78);
|
|
352
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_select_ngModelChange_38_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDocVectorDBID, $event) || (ctx_r1.EditDocVectorDBID = $event); return i0.ɵɵresetView($event); });
|
|
353
|
+
i0.ɵɵrepeaterCreate(39, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_For_40_Template, 2, 2, "option", 79, _forTrack2);
|
|
341
354
|
i0.ɵɵelementEnd()();
|
|
342
|
-
i0.ɵɵelementStart(41, "div",
|
|
355
|
+
i0.ɵɵelementStart(41, "div", 70)(42, "label", 71);
|
|
343
356
|
i0.ɵɵtext(43, "Vector Index");
|
|
344
357
|
i0.ɵɵelementEnd();
|
|
345
|
-
i0.ɵɵconditionalCreate(44,
|
|
358
|
+
i0.ɵɵconditionalCreate(44, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_44_Template, 5, 1, "select", 80)(45, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_45_Template, 2, 0, "span", 81);
|
|
346
359
|
i0.ɵɵelementEnd();
|
|
347
|
-
i0.ɵɵelementStart(46, "div",
|
|
360
|
+
i0.ɵɵelementStart(46, "div", 70)(47, "label", 71);
|
|
348
361
|
i0.ɵɵtext(48, "Status");
|
|
349
362
|
i0.ɵɵelementEnd();
|
|
350
|
-
i0.ɵɵelementStart(49, "select",
|
|
351
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
352
|
-
i0.ɵɵelementStart(50, "option",
|
|
363
|
+
i0.ɵɵelementStart(49, "select", 78);
|
|
364
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template_select_ngModelChange_49_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.EditDocStatus, $event) || (ctx_r1.EditDocStatus = $event); return i0.ɵɵresetView($event); });
|
|
365
|
+
i0.ɵɵelementStart(50, "option", 82);
|
|
353
366
|
i0.ɵɵtext(51, "Active");
|
|
354
367
|
i0.ɵɵelementEnd();
|
|
355
|
-
i0.ɵɵelementStart(52, "option",
|
|
368
|
+
i0.ɵɵelementStart(52, "option", 83);
|
|
356
369
|
i0.ɵɵtext(53, "Inactive");
|
|
357
370
|
i0.ɵɵelementEnd()()();
|
|
358
|
-
i0.ɵɵelementStart(54, "div",
|
|
359
|
-
i0.ɵɵconditionalCreate(55,
|
|
371
|
+
i0.ɵɵelementStart(54, "div", 84);
|
|
372
|
+
i0.ɵɵconditionalCreate(55, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_55_Template, 1, 0, "mj-loading", 85)(56, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Conditional_56_Template, 8, 0);
|
|
360
373
|
i0.ɵɵelementEnd()()()()();
|
|
361
374
|
} if (rf & 2) {
|
|
362
|
-
const
|
|
375
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
363
376
|
i0.ɵɵadvance(14);
|
|
364
|
-
i0.ɵɵtextInterpolate(
|
|
377
|
+
i0.ɵɵtextInterpolate(ctx_r1.EditDocEntityName);
|
|
365
378
|
i0.ɵɵadvance(5);
|
|
366
|
-
i0.ɵɵproperty("disabled",
|
|
379
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsEditRegenerating);
|
|
367
380
|
i0.ɵɵadvance();
|
|
368
|
-
i0.ɵɵconditional(
|
|
381
|
+
i0.ɵɵconditional(ctx_r1.IsEditRegenerating ? 20 : 21);
|
|
369
382
|
i0.ɵɵadvance(3);
|
|
370
|
-
i0.ɵɵproperty("value",
|
|
383
|
+
i0.ɵɵproperty("value", ctx_r1.EditDocTemplate)("readonly", false)("lineWrapping", true);
|
|
371
384
|
i0.ɵɵadvance();
|
|
372
|
-
i0.ɵɵconditional(
|
|
385
|
+
i0.ɵɵconditional(ctx_r1.EditDocSelectedFields.length > 0 ? 24 : -1);
|
|
373
386
|
i0.ɵɵadvance(4);
|
|
374
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
387
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditDocName);
|
|
375
388
|
i0.ɵɵadvance(4);
|
|
376
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
389
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditDocAIModelID);
|
|
377
390
|
i0.ɵɵadvance();
|
|
378
|
-
i0.ɵɵrepeater(
|
|
391
|
+
i0.ɵɵrepeater(ctx_r1.AvailableEmbeddingModels);
|
|
379
392
|
i0.ɵɵadvance(5);
|
|
380
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
393
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditDocVectorDBID);
|
|
381
394
|
i0.ɵɵadvance();
|
|
382
|
-
i0.ɵɵrepeater(
|
|
395
|
+
i0.ɵɵrepeater(ctx_r1.vectorDatabases);
|
|
383
396
|
i0.ɵɵadvance(5);
|
|
384
|
-
i0.ɵɵconditional(
|
|
397
|
+
i0.ɵɵconditional(ctx_r1.EditFilteredIndexes.length > 0 ? 44 : 45);
|
|
385
398
|
i0.ɵɵadvance(5);
|
|
386
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
399
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditDocStatus);
|
|
387
400
|
i0.ɵɵadvance(6);
|
|
388
|
-
i0.ɵɵconditional(
|
|
401
|
+
i0.ɵɵconditional(ctx_r1.IsEditSaving || ctx_r1.IsEditDeleting ? 55 : 56);
|
|
389
402
|
} }
|
|
390
|
-
function
|
|
391
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
403
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
404
|
+
i0.ɵɵelement(0, "mj-loading", 85);
|
|
392
405
|
} }
|
|
393
|
-
function
|
|
394
|
-
const
|
|
395
|
-
i0.ɵɵelementStart(0, "button",
|
|
396
|
-
i0.ɵɵlistener("click", function
|
|
397
|
-
i0.ɵɵelement(1, "i",
|
|
406
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
407
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
408
|
+
i0.ɵɵelementStart(0, "button", 89);
|
|
409
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Conditional_33_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SaveScheduleSync()); });
|
|
410
|
+
i0.ɵɵelement(1, "i", 100);
|
|
398
411
|
i0.ɵɵtext(2, " Create Schedule ");
|
|
399
412
|
i0.ɵɵelementEnd();
|
|
400
|
-
i0.ɵɵelementStart(3, "button",
|
|
401
|
-
i0.ɵɵlistener("click", function
|
|
413
|
+
i0.ɵɵelementStart(3, "button", 93);
|
|
414
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Conditional_33_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.CloseScheduleSyncDialog()); });
|
|
402
415
|
i0.ɵɵtext(4, " Cancel ");
|
|
403
416
|
i0.ɵɵelementEnd();
|
|
404
417
|
} }
|
|
405
|
-
function
|
|
406
|
-
const
|
|
407
|
-
i0.ɵɵelementStart(0, "div",
|
|
408
|
-
i0.ɵɵlistener("click", function
|
|
409
|
-
i0.ɵɵelementStart(1, "div",
|
|
410
|
-
i0.ɵɵlistener("click", function
|
|
411
|
-
i0.ɵɵelementStart(2, "div",
|
|
412
|
-
i0.ɵɵelement(4, "i",
|
|
418
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
419
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
420
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
421
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseScheduleSyncDialog()); });
|
|
422
|
+
i0.ɵɵelementStart(1, "div", 94);
|
|
423
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r15); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
424
|
+
i0.ɵɵelementStart(2, "div", 64)(3, "h3", 65);
|
|
425
|
+
i0.ɵɵelement(4, "i", 57);
|
|
413
426
|
i0.ɵɵtext(5, " Schedule Vector Sync ");
|
|
414
427
|
i0.ɵɵelementEnd();
|
|
415
|
-
i0.ɵɵelementStart(6, "button",
|
|
416
|
-
i0.ɵɵlistener("click", function
|
|
417
|
-
i0.ɵɵelement(7, "i",
|
|
428
|
+
i0.ɵɵelementStart(6, "button", 66);
|
|
429
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseScheduleSyncDialog()); });
|
|
430
|
+
i0.ɵɵelement(7, "i", 67);
|
|
418
431
|
i0.ɵɵelementEnd()();
|
|
419
|
-
i0.ɵɵelementStart(8, "div",
|
|
432
|
+
i0.ɵɵelementStart(8, "div", 68)(9, "div", 69)(10, "div", 70)(11, "label", 71);
|
|
420
433
|
i0.ɵɵtext(12, "Entity Document");
|
|
421
434
|
i0.ɵɵelementEnd();
|
|
422
|
-
i0.ɵɵelementStart(13, "span",
|
|
435
|
+
i0.ɵɵelementStart(13, "span", 72);
|
|
423
436
|
i0.ɵɵtext(14);
|
|
424
437
|
i0.ɵɵelementEnd()();
|
|
425
|
-
i0.ɵɵelementStart(15, "div",
|
|
438
|
+
i0.ɵɵelementStart(15, "div", 70)(16, "label", 71);
|
|
426
439
|
i0.ɵɵtext(17, "Action");
|
|
427
440
|
i0.ɵɵelementEnd();
|
|
428
|
-
i0.ɵɵelementStart(18, "span",
|
|
441
|
+
i0.ɵɵelementStart(18, "span", 72);
|
|
429
442
|
i0.ɵɵtext(19, "__VectorizeEntity");
|
|
430
443
|
i0.ɵɵelementEnd()();
|
|
431
|
-
i0.ɵɵelementStart(20, "div",
|
|
444
|
+
i0.ɵɵelementStart(20, "div", 70)(21, "label", 71);
|
|
432
445
|
i0.ɵɵtext(22, "Cron Expression");
|
|
433
446
|
i0.ɵɵelementEnd();
|
|
434
|
-
i0.ɵɵelementStart(23, "input",
|
|
435
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
447
|
+
i0.ɵɵelementStart(23, "input", 95);
|
|
448
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template_input_ngModelChange_23_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.ScheduleSyncCron, $event) || (ctx_r1.ScheduleSyncCron = $event); return i0.ɵɵresetView($event); });
|
|
436
449
|
i0.ɵɵelementEnd();
|
|
437
|
-
i0.ɵɵelementStart(24, "div",
|
|
438
|
-
i0.ɵɵelement(25, "i",
|
|
450
|
+
i0.ɵɵelementStart(24, "div", 96);
|
|
451
|
+
i0.ɵɵelement(25, "i", 97);
|
|
439
452
|
i0.ɵɵtext(26);
|
|
440
453
|
i0.ɵɵelementEnd()();
|
|
441
|
-
i0.ɵɵelementStart(27, "div",
|
|
454
|
+
i0.ɵɵelementStart(27, "div", 98)(28, "label", 71);
|
|
442
455
|
i0.ɵɵtext(29, "Enabled");
|
|
443
456
|
i0.ɵɵelementEnd();
|
|
444
|
-
i0.ɵɵelementStart(30, "input",
|
|
445
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
457
|
+
i0.ɵɵelementStart(30, "input", 99);
|
|
458
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template_input_ngModelChange_30_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.ScheduleSyncEnabled, $event) || (ctx_r1.ScheduleSyncEnabled = $event); return i0.ɵɵresetView($event); });
|
|
446
459
|
i0.ɵɵelementEnd()();
|
|
447
|
-
i0.ɵɵelementStart(31, "div",
|
|
448
|
-
i0.ɵɵconditionalCreate(32,
|
|
460
|
+
i0.ɵɵelementStart(31, "div", 84);
|
|
461
|
+
i0.ɵɵconditionalCreate(32, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Conditional_32_Template, 1, 0, "mj-loading", 85)(33, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Conditional_33_Template, 5, 0);
|
|
449
462
|
i0.ɵɵelementEnd()()()()();
|
|
450
463
|
} if (rf & 2) {
|
|
451
|
-
const
|
|
464
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
452
465
|
i0.ɵɵadvance(14);
|
|
453
|
-
i0.ɵɵtextInterpolate(
|
|
466
|
+
i0.ɵɵtextInterpolate(ctx_r1.ScheduleSyncDocName);
|
|
454
467
|
i0.ɵɵadvance(9);
|
|
455
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
468
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ScheduleSyncCron);
|
|
456
469
|
i0.ɵɵadvance(3);
|
|
457
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
470
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.GetScheduleCronPreview(ctx_r1.ScheduleSyncCron), " ");
|
|
458
471
|
i0.ɵɵadvance(4);
|
|
459
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
472
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ScheduleSyncEnabled);
|
|
460
473
|
i0.ɵɵadvance(2);
|
|
461
|
-
i0.ɵɵconditional(
|
|
474
|
+
i0.ɵɵconditional(ctx_r1.ScheduleSyncSaving ? 32 : 33);
|
|
462
475
|
} }
|
|
463
|
-
function
|
|
464
|
-
const
|
|
465
|
-
i0.ɵɵelementStart(0, "div",
|
|
466
|
-
i0.ɵɵlistener("click", function
|
|
467
|
-
i0.ɵɵelementStart(1, "div",
|
|
468
|
-
i0.ɵɵlistener("click", function
|
|
469
|
-
i0.ɵɵelementStart(2, "div",
|
|
470
|
-
i0.ɵɵelement(3, "i",
|
|
471
|
-
i0.ɵɵelementEnd();
|
|
472
|
-
i0.ɵɵelementStart(4, "h3",
|
|
476
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
477
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
478
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
479
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_56_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseNoIndexWarning()); });
|
|
480
|
+
i0.ɵɵelementStart(1, "div", 101);
|
|
481
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_56_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r17); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
482
|
+
i0.ɵɵelementStart(2, "div", 102);
|
|
483
|
+
i0.ɵɵelement(3, "i", 103);
|
|
484
|
+
i0.ɵɵelementEnd();
|
|
485
|
+
i0.ɵɵelementStart(4, "h3", 104);
|
|
473
486
|
i0.ɵɵtext(5, "Vector Index Required");
|
|
474
487
|
i0.ɵɵelementEnd();
|
|
475
|
-
i0.ɵɵelementStart(6, "p",
|
|
488
|
+
i0.ɵɵelementStart(6, "p", 105);
|
|
476
489
|
i0.ɵɵtext(7, " You need to create at least one vector database and index before creating entity documents. Go to the Configuration section to set up a vector database and create an index. ");
|
|
477
490
|
i0.ɵɵelementEnd();
|
|
478
|
-
i0.ɵɵelementStart(8, "div",
|
|
479
|
-
i0.ɵɵlistener("click", function
|
|
480
|
-
i0.ɵɵelement(10, "i",
|
|
491
|
+
i0.ɵɵelementStart(8, "div", 106)(9, "button", 89);
|
|
492
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_56_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.GoToConfiguration()); });
|
|
493
|
+
i0.ɵɵelement(10, "i", 107);
|
|
481
494
|
i0.ɵɵtext(11, " Go to Configuration ");
|
|
482
495
|
i0.ɵɵelementEnd();
|
|
483
|
-
i0.ɵɵelementStart(12, "button",
|
|
484
|
-
i0.ɵɵlistener("click", function
|
|
496
|
+
i0.ɵɵelementStart(12, "button", 93);
|
|
497
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_56_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseNoIndexWarning()); });
|
|
485
498
|
i0.ɵɵtext(13, " Close ");
|
|
486
499
|
i0.ɵɵelementEnd()()()();
|
|
487
500
|
} }
|
|
488
|
-
function
|
|
489
|
-
i0.ɵɵelement(0, "i",
|
|
490
|
-
i0.ɵɵelementStart(1, "span",
|
|
501
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
502
|
+
i0.ɵɵelement(0, "i", 121);
|
|
503
|
+
i0.ɵɵelementStart(1, "span", 122);
|
|
491
504
|
i0.ɵɵtext(2);
|
|
492
505
|
i0.ɵɵelementEnd();
|
|
493
506
|
} if (rf & 2) {
|
|
494
|
-
const
|
|
507
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
495
508
|
i0.ɵɵadvance(2);
|
|
496
|
-
i0.ɵɵtextInterpolate(
|
|
509
|
+
i0.ɵɵtextInterpolate(ctx_r1.SuggestEntityName);
|
|
497
510
|
} }
|
|
498
|
-
function
|
|
499
|
-
i0.ɵɵelement(0, "i",
|
|
500
|
-
i0.ɵɵelementStart(1, "span",
|
|
511
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
512
|
+
i0.ɵɵelement(0, "i", 123);
|
|
513
|
+
i0.ɵɵelementStart(1, "span", 124);
|
|
501
514
|
i0.ɵɵtext(2, "Search and select an entity...");
|
|
502
515
|
i0.ɵɵelementEnd();
|
|
503
516
|
} }
|
|
504
|
-
function
|
|
505
|
-
const
|
|
506
|
-
i0.ɵɵelementStart(0, "button",
|
|
507
|
-
i0.ɵɵlistener("click", function
|
|
508
|
-
i0.ɵɵelement(1, "i",
|
|
517
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_For_7_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
518
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
519
|
+
i0.ɵɵelementStart(0, "button", 134);
|
|
520
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_For_7_For_5_Template_button_click_0_listener() { const entity_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r1 = i0.ɵɵnextContext(7); return i0.ɵɵresetView(ctx_r1.SelectEntity(entity_r22.Name)); });
|
|
521
|
+
i0.ɵɵelement(1, "i", 121);
|
|
509
522
|
i0.ɵɵtext(2);
|
|
510
523
|
i0.ɵɵelementEnd();
|
|
511
524
|
} if (rf & 2) {
|
|
512
|
-
const
|
|
513
|
-
const
|
|
514
|
-
i0.ɵɵclassProp("entity-picker-item-selected",
|
|
525
|
+
const entity_r22 = ctx.$implicit;
|
|
526
|
+
const ctx_r1 = i0.ɵɵnextContext(7);
|
|
527
|
+
i0.ɵɵclassProp("entity-picker-item-selected", entity_r22.Name === ctx_r1.SuggestEntityName)("entity-picker-item-focused", (ctx_r1.FlatFilteredEntities[ctx_r1.SelectedEntityIndex] == null ? null : ctx_r1.FlatFilteredEntities[ctx_r1.SelectedEntityIndex].ID) === entity_r22.ID);
|
|
515
528
|
i0.ɵɵadvance(2);
|
|
516
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
529
|
+
i0.ɵɵtextInterpolate1(" ", entity_r22.Name, " ");
|
|
517
530
|
} }
|
|
518
|
-
function
|
|
519
|
-
i0.ɵɵelementStart(0, "div",
|
|
520
|
-
i0.ɵɵelement(2, "i",
|
|
531
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
532
|
+
i0.ɵɵelementStart(0, "div", 129)(1, "div", 131);
|
|
533
|
+
i0.ɵɵelement(2, "i", 132);
|
|
521
534
|
i0.ɵɵtext(3);
|
|
522
535
|
i0.ɵɵelementEnd();
|
|
523
|
-
i0.ɵɵrepeaterCreate(4,
|
|
536
|
+
i0.ɵɵrepeaterCreate(4, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_For_7_For_5_Template, 3, 5, "button", 133, _forTrack2);
|
|
524
537
|
i0.ɵɵelementEnd();
|
|
525
538
|
} if (rf & 2) {
|
|
526
|
-
const
|
|
539
|
+
const group_r23 = ctx.$implicit;
|
|
527
540
|
i0.ɵɵadvance(3);
|
|
528
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
541
|
+
i0.ɵɵtextInterpolate1(" ", group_r23.SchemaName, " ");
|
|
529
542
|
i0.ɵɵadvance();
|
|
530
|
-
i0.ɵɵrepeater(
|
|
543
|
+
i0.ɵɵrepeater(group_r23.Entities);
|
|
531
544
|
} }
|
|
532
|
-
function
|
|
533
|
-
i0.ɵɵelementStart(0, "div",
|
|
545
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
546
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
534
547
|
i0.ɵɵtext(1);
|
|
535
548
|
i0.ɵɵelementEnd();
|
|
536
549
|
} if (rf & 2) {
|
|
537
|
-
const
|
|
550
|
+
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
538
551
|
i0.ɵɵadvance();
|
|
539
|
-
i0.ɵɵtextInterpolate1(" No entities matching \"",
|
|
552
|
+
i0.ɵɵtextInterpolate1(" No entities matching \"", ctx_r1.EntitySearchText, "\" ");
|
|
540
553
|
} }
|
|
541
|
-
function
|
|
542
|
-
const
|
|
543
|
-
i0.ɵɵelementStart(0, "div",
|
|
544
|
-
i0.ɵɵlistener("mousedown", function
|
|
545
|
-
i0.ɵɵelementStart(1, "div",
|
|
546
|
-
i0.ɵɵelement(2, "i",
|
|
547
|
-
i0.ɵɵelementStart(3, "input",
|
|
548
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
549
|
-
i0.ɵɵlistener("input", function
|
|
554
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
556
|
+
i0.ɵɵelementStart(0, "div", 125);
|
|
557
|
+
i0.ɵɵlistener("mousedown", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r20); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
558
|
+
i0.ɵɵelementStart(1, "div", 126);
|
|
559
|
+
i0.ɵɵelement(2, "i", 123);
|
|
560
|
+
i0.ɵɵelementStart(3, "input", 127, 1);
|
|
561
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r1.EntitySearchText, $event) || (ctx_r1.EntitySearchText = $event); return i0.ɵɵresetView($event); });
|
|
562
|
+
i0.ɵɵlistener("input", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Template_input_input_3_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.FilterEntities()); })("keydown", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Template_input_keydown_3_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OnEntityPickerKeyDown($event)); });
|
|
550
563
|
i0.ɵɵelementEnd()();
|
|
551
|
-
i0.ɵɵelementStart(5, "div",
|
|
552
|
-
i0.ɵɵrepeaterCreate(6,
|
|
553
|
-
i0.ɵɵconditionalCreate(8,
|
|
564
|
+
i0.ɵɵelementStart(5, "div", 128);
|
|
565
|
+
i0.ɵɵrepeaterCreate(6, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_For_7_Template, 6, 1, "div", 129, _forTrack3);
|
|
566
|
+
i0.ɵɵconditionalCreate(8, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Conditional_8_Template, 2, 1, "div", 130);
|
|
554
567
|
i0.ɵɵelementEnd()();
|
|
555
568
|
} if (rf & 2) {
|
|
556
|
-
const
|
|
569
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
557
570
|
i0.ɵɵadvance(3);
|
|
558
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
571
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EntitySearchText);
|
|
559
572
|
i0.ɵɵadvance(3);
|
|
560
|
-
i0.ɵɵrepeater(
|
|
573
|
+
i0.ɵɵrepeater(ctx_r1.FilteredEntityGroups);
|
|
561
574
|
i0.ɵɵadvance(2);
|
|
562
|
-
i0.ɵɵconditional(
|
|
575
|
+
i0.ɵɵconditional(ctx_r1.FilteredEntityGroups.length === 0 ? 8 : -1);
|
|
563
576
|
} }
|
|
564
|
-
function
|
|
565
|
-
i0.ɵɵelement(0, "i",
|
|
577
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
578
|
+
i0.ɵɵelement(0, "i", 60);
|
|
566
579
|
i0.ɵɵtext(1, " Generating with AI... ");
|
|
567
580
|
} }
|
|
568
|
-
function
|
|
569
|
-
i0.ɵɵelement(0, "i",
|
|
581
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
582
|
+
i0.ɵɵelement(0, "i", 19);
|
|
570
583
|
i0.ɵɵtext(1, " Generate Template ");
|
|
571
584
|
} }
|
|
572
|
-
function
|
|
573
|
-
i0.ɵɵelementStart(0, "div",
|
|
574
|
-
i0.ɵɵelement(1, "i",
|
|
585
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
586
|
+
i0.ɵɵelementStart(0, "div", 120);
|
|
587
|
+
i0.ɵɵelement(1, "i", 135);
|
|
575
588
|
i0.ɵɵtext(2);
|
|
576
589
|
i0.ɵɵelementEnd();
|
|
577
590
|
} if (rf & 2) {
|
|
578
|
-
const
|
|
591
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
579
592
|
i0.ɵɵadvance(2);
|
|
580
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
593
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SuggestionError, " ");
|
|
581
594
|
} }
|
|
582
|
-
function
|
|
583
|
-
const
|
|
584
|
-
i0.ɵɵelementStart(0, "div",
|
|
595
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
596
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
597
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "div", 70)(2, "label", 71);
|
|
585
598
|
i0.ɵɵtext(3, "Entity");
|
|
586
599
|
i0.ɵɵelementEnd();
|
|
587
|
-
i0.ɵɵelementStart(4, "div",
|
|
588
|
-
i0.ɵɵlistener("click", function
|
|
589
|
-
i0.ɵɵconditionalCreate(6,
|
|
590
|
-
i0.ɵɵelement(8, "i",
|
|
600
|
+
i0.ɵɵelementStart(4, "div", 110)(5, "button", 111);
|
|
601
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ToggleEntityPicker()); });
|
|
602
|
+
i0.ɵɵconditionalCreate(6, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_6_Template, 3, 1)(7, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_7_Template, 3, 0);
|
|
603
|
+
i0.ɵɵelement(8, "i", 112);
|
|
591
604
|
i0.ɵɵelementEnd();
|
|
592
|
-
i0.ɵɵconditionalCreate(9,
|
|
605
|
+
i0.ɵɵconditionalCreate(9, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_9_Template, 9, 2, "div", 113);
|
|
593
606
|
i0.ɵɵelementEnd()();
|
|
594
|
-
i0.ɵɵelementStart(10, "div",
|
|
607
|
+
i0.ɵɵelementStart(10, "div", 70)(11, "label", 71);
|
|
595
608
|
i0.ɵɵtext(12, "Use Case");
|
|
596
609
|
i0.ɵɵelementEnd();
|
|
597
|
-
i0.ɵɵelementStart(13, "div",
|
|
598
|
-
i0.ɵɵlistener("click", function
|
|
599
|
-
i0.ɵɵelement(15, "i",
|
|
610
|
+
i0.ɵɵelementStart(13, "div", 114)(14, "button", 115);
|
|
611
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SuggestUseCase = "duplicate detection"); });
|
|
612
|
+
i0.ɵɵelement(15, "i", 116);
|
|
600
613
|
i0.ɵɵtext(16, " Duplicate Detection ");
|
|
601
614
|
i0.ɵɵelementEnd();
|
|
602
|
-
i0.ɵɵelementStart(17, "button",
|
|
603
|
-
i0.ɵɵlistener("click", function
|
|
604
|
-
i0.ɵɵelement(18, "i",
|
|
615
|
+
i0.ɵɵelementStart(17, "button", 115);
|
|
616
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SuggestUseCase = "search"); });
|
|
617
|
+
i0.ɵɵelement(18, "i", 117);
|
|
605
618
|
i0.ɵɵtext(19, " Search ");
|
|
606
619
|
i0.ɵɵelementEnd();
|
|
607
|
-
i0.ɵɵelementStart(20, "button",
|
|
608
|
-
i0.ɵɵlistener("click", function
|
|
609
|
-
i0.ɵɵelement(21, "i",
|
|
620
|
+
i0.ɵɵelementStart(20, "button", 115);
|
|
621
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SuggestUseCase = "classification"); });
|
|
622
|
+
i0.ɵɵelement(21, "i", 118);
|
|
610
623
|
i0.ɵɵtext(22, " Classification ");
|
|
611
624
|
i0.ɵɵelementEnd()()();
|
|
612
|
-
i0.ɵɵelementStart(23, "button",
|
|
613
|
-
i0.ɵɵlistener("click", function
|
|
614
|
-
i0.ɵɵconditionalCreate(24,
|
|
625
|
+
i0.ɵɵelementStart(23, "button", 119);
|
|
626
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSuggestion()); });
|
|
627
|
+
i0.ɵɵconditionalCreate(24, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_24_Template, 2, 0)(25, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_25_Template, 2, 0);
|
|
615
628
|
i0.ɵɵelementEnd();
|
|
616
|
-
i0.ɵɵconditionalCreate(26,
|
|
629
|
+
i0.ɵɵconditionalCreate(26, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Conditional_26_Template, 3, 1, "div", 120);
|
|
617
630
|
i0.ɵɵelementEnd();
|
|
618
631
|
} if (rf & 2) {
|
|
619
|
-
const
|
|
632
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
620
633
|
i0.ɵɵadvance(6);
|
|
621
|
-
i0.ɵɵconditional(
|
|
634
|
+
i0.ɵɵconditional(ctx_r1.SuggestEntityName ? 6 : 7);
|
|
622
635
|
i0.ɵɵadvance(3);
|
|
623
|
-
i0.ɵɵconditional(
|
|
636
|
+
i0.ɵɵconditional(ctx_r1.ShowEntityPicker ? 9 : -1);
|
|
624
637
|
i0.ɵɵadvance(5);
|
|
625
|
-
i0.ɵɵclassProp("use-case-btn-active",
|
|
638
|
+
i0.ɵɵclassProp("use-case-btn-active", ctx_r1.SuggestUseCase === "duplicate detection");
|
|
626
639
|
i0.ɵɵadvance(3);
|
|
627
|
-
i0.ɵɵclassProp("use-case-btn-active",
|
|
640
|
+
i0.ɵɵclassProp("use-case-btn-active", ctx_r1.SuggestUseCase === "search");
|
|
628
641
|
i0.ɵɵadvance(3);
|
|
629
|
-
i0.ɵɵclassProp("use-case-btn-active",
|
|
642
|
+
i0.ɵɵclassProp("use-case-btn-active", ctx_r1.SuggestUseCase === "classification");
|
|
630
643
|
i0.ɵɵadvance(3);
|
|
631
|
-
i0.ɵɵproperty("disabled",
|
|
644
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsSuggesting || !ctx_r1.SuggestEntityName);
|
|
632
645
|
i0.ɵɵadvance();
|
|
633
|
-
i0.ɵɵconditional(
|
|
646
|
+
i0.ɵɵconditional(ctx_r1.IsSuggesting ? 24 : 25);
|
|
634
647
|
i0.ɵɵadvance(2);
|
|
635
|
-
i0.ɵɵconditional(
|
|
648
|
+
i0.ɵɵconditional(ctx_r1.SuggestionError ? 26 : -1);
|
|
636
649
|
} }
|
|
637
|
-
function
|
|
638
|
-
i0.ɵɵelementStart(0, "span",
|
|
650
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
651
|
+
i0.ɵɵelementStart(0, "span", 87);
|
|
639
652
|
i0.ɵɵtext(1);
|
|
640
653
|
i0.ɵɵelementEnd();
|
|
641
654
|
} if (rf & 2) {
|
|
642
|
-
const
|
|
655
|
+
const field_r25 = ctx.$implicit;
|
|
643
656
|
i0.ɵɵadvance();
|
|
644
|
-
i0.ɵɵtextInterpolate(
|
|
657
|
+
i0.ɵɵtextInterpolate(field_r25);
|
|
645
658
|
} }
|
|
646
|
-
function
|
|
647
|
-
i0.ɵɵelementStart(0, "div",
|
|
659
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_12_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
660
|
+
i0.ɵɵelementStart(0, "div", 146)(1, "span", 147);
|
|
648
661
|
i0.ɵɵtext(2);
|
|
649
662
|
i0.ɵɵelementEnd();
|
|
650
|
-
i0.ɵɵelementStart(3, "span",
|
|
663
|
+
i0.ɵɵelementStart(3, "span", 148);
|
|
651
664
|
i0.ɵɵtext(4);
|
|
652
665
|
i0.ɵɵelementEnd()();
|
|
653
666
|
} if (rf & 2) {
|
|
654
|
-
const
|
|
667
|
+
const rel_r26 = ctx.$implicit;
|
|
655
668
|
i0.ɵɵadvance(2);
|
|
656
|
-
i0.ɵɵtextInterpolate(
|
|
669
|
+
i0.ɵɵtextInterpolate(rel_r26.name);
|
|
657
670
|
i0.ɵɵadvance(2);
|
|
658
|
-
i0.ɵɵtextInterpolate(
|
|
671
|
+
i0.ɵɵtextInterpolate(rel_r26.fields.join(", "));
|
|
659
672
|
} }
|
|
660
|
-
function
|
|
661
|
-
i0.ɵɵelementStart(0, "div",
|
|
673
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
674
|
+
i0.ɵɵelementStart(0, "div", 136)(1, "h4", 137);
|
|
662
675
|
i0.ɵɵtext(2, "Related Entities");
|
|
663
676
|
i0.ɵɵelementEnd();
|
|
664
|
-
i0.ɵɵrepeaterCreate(3,
|
|
677
|
+
i0.ɵɵrepeaterCreate(3, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_12_For_4_Template, 5, 2, "div", 146, _forTrack4);
|
|
665
678
|
i0.ɵɵelementEnd();
|
|
666
679
|
} if (rf & 2) {
|
|
667
|
-
const
|
|
680
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
668
681
|
i0.ɵɵadvance(3);
|
|
669
|
-
i0.ɵɵrepeater(
|
|
682
|
+
i0.ɵɵrepeater(ctx_r1.SuggestionResult.selectedRelationships);
|
|
670
683
|
} }
|
|
671
|
-
function
|
|
672
|
-
i0.ɵɵelementStart(0, "option",
|
|
684
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_For_39_Template(rf, ctx) { if (rf & 1) {
|
|
685
|
+
i0.ɵɵelementStart(0, "option", 79);
|
|
673
686
|
i0.ɵɵtext(1);
|
|
674
687
|
i0.ɵɵelementEnd();
|
|
675
688
|
} if (rf & 2) {
|
|
676
|
-
const
|
|
677
|
-
i0.ɵɵproperty("value",
|
|
689
|
+
const model_r27 = ctx.$implicit;
|
|
690
|
+
i0.ɵɵproperty("value", model_r27.ID);
|
|
678
691
|
i0.ɵɵadvance();
|
|
679
|
-
i0.ɵɵtextInterpolate(
|
|
692
|
+
i0.ɵɵtextInterpolate(model_r27.Name);
|
|
680
693
|
} }
|
|
681
|
-
function
|
|
682
|
-
i0.ɵɵelementStart(0, "option",
|
|
694
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_For_45_Template(rf, ctx) { if (rf & 1) {
|
|
695
|
+
i0.ɵɵelementStart(0, "option", 79);
|
|
683
696
|
i0.ɵɵtext(1);
|
|
684
697
|
i0.ɵɵelementEnd();
|
|
685
698
|
} if (rf & 2) {
|
|
686
|
-
const
|
|
687
|
-
i0.ɵɵproperty("value",
|
|
699
|
+
const db_r28 = ctx.$implicit;
|
|
700
|
+
i0.ɵɵproperty("value", db_r28.ID);
|
|
688
701
|
i0.ɵɵadvance();
|
|
689
|
-
i0.ɵɵtextInterpolate(
|
|
702
|
+
i0.ɵɵtextInterpolate(db_r28.Name);
|
|
690
703
|
} }
|
|
691
|
-
function
|
|
692
|
-
i0.ɵɵelementStart(0, "option",
|
|
704
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_49_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
705
|
+
i0.ɵɵelementStart(0, "option", 79);
|
|
693
706
|
i0.ɵɵtext(1);
|
|
694
707
|
i0.ɵɵelementEnd();
|
|
695
708
|
} if (rf & 2) {
|
|
696
|
-
const
|
|
697
|
-
i0.ɵɵproperty("value",
|
|
709
|
+
const idx_r30 = ctx.$implicit;
|
|
710
|
+
i0.ɵɵproperty("value", idx_r30.ID);
|
|
698
711
|
i0.ɵɵadvance();
|
|
699
|
-
i0.ɵɵtextInterpolate(
|
|
712
|
+
i0.ɵɵtextInterpolate(idx_r30.Name);
|
|
700
713
|
} }
|
|
701
|
-
function
|
|
702
|
-
const
|
|
703
|
-
i0.ɵɵelementStart(0, "select",
|
|
704
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
705
|
-
i0.ɵɵelementStart(1, "option",
|
|
714
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
715
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
716
|
+
i0.ɵɵelementStart(0, "select", 78);
|
|
717
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_49_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(5); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedVectorIndexID, $event) || (ctx_r1.SelectedVectorIndexID = $event); return i0.ɵɵresetView($event); });
|
|
718
|
+
i0.ɵɵelementStart(1, "option", 88);
|
|
706
719
|
i0.ɵɵtext(2, "Auto (create/find matching index)");
|
|
707
720
|
i0.ɵɵelementEnd();
|
|
708
|
-
i0.ɵɵrepeaterCreate(3,
|
|
721
|
+
i0.ɵɵrepeaterCreate(3, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_49_For_4_Template, 2, 2, "option", 79, _forTrack2);
|
|
709
722
|
i0.ɵɵelementEnd();
|
|
710
723
|
} if (rf & 2) {
|
|
711
|
-
const
|
|
712
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
724
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
725
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedVectorIndexID);
|
|
713
726
|
i0.ɵɵadvance(3);
|
|
714
|
-
i0.ɵɵrepeater(
|
|
727
|
+
i0.ɵɵrepeater(ctx_r1.FilteredIndexesForSelectedDB);
|
|
715
728
|
} }
|
|
716
|
-
function
|
|
717
|
-
i0.ɵɵelementStart(0, "span",
|
|
729
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
730
|
+
i0.ɵɵelementStart(0, "span", 81);
|
|
718
731
|
i0.ɵɵtext(1, " No indexes yet \u2014 create one in Configuration > Vector Database, or one will be created on sync ");
|
|
719
732
|
i0.ɵɵelementEnd();
|
|
720
733
|
} }
|
|
721
|
-
function
|
|
722
|
-
i0.ɵɵelementStart(0, "div",
|
|
723
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
734
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
735
|
+
i0.ɵɵelementStart(0, "div", 145);
|
|
736
|
+
i0.ɵɵelement(1, "mj-loading", 85);
|
|
724
737
|
i0.ɵɵelementEnd();
|
|
725
738
|
} }
|
|
726
|
-
function
|
|
727
|
-
const
|
|
728
|
-
i0.ɵɵelementStart(0, "button",
|
|
729
|
-
i0.ɵɵlistener("click", function
|
|
730
|
-
i0.ɵɵelement(1, "i",
|
|
739
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
740
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
741
|
+
i0.ɵɵelementStart(0, "button", 89);
|
|
742
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_53_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.SaveAsEntityDocument()); });
|
|
743
|
+
i0.ɵɵelement(1, "i", 149);
|
|
731
744
|
i0.ɵɵtext(2, " Save as Entity Document ");
|
|
732
745
|
i0.ɵɵelementEnd();
|
|
733
|
-
i0.ɵɵelementStart(3, "button",
|
|
734
|
-
i0.ɵɵlistener("click", function
|
|
735
|
-
i0.ɵɵelement(4, "i",
|
|
746
|
+
i0.ɵɵelementStart(3, "button", 150);
|
|
747
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_53_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.ClearSuggestion()); });
|
|
748
|
+
i0.ɵɵelement(4, "i", 151);
|
|
736
749
|
i0.ɵɵtext(5, " Try Again ");
|
|
737
750
|
i0.ɵɵelementEnd();
|
|
738
|
-
i0.ɵɵelementStart(6, "button",
|
|
739
|
-
i0.ɵɵlistener("click", function
|
|
751
|
+
i0.ɵɵelementStart(6, "button", 93);
|
|
752
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_53_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.CloseSuggestDialog()); });
|
|
740
753
|
i0.ɵɵtext(7, " Close ");
|
|
741
754
|
i0.ɵɵelementEnd();
|
|
742
755
|
} }
|
|
743
|
-
function
|
|
744
|
-
const
|
|
745
|
-
i0.ɵɵelementStart(0, "div",
|
|
756
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
757
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
758
|
+
i0.ɵɵelementStart(0, "div", 109)(1, "div", 136)(2, "h4", 137);
|
|
746
759
|
i0.ɵɵtext(3, "Suggested Template");
|
|
747
760
|
i0.ɵɵelementEnd();
|
|
748
|
-
i0.ɵɵelementStart(4, "div",
|
|
749
|
-
i0.ɵɵlistener("change", function
|
|
761
|
+
i0.ɵɵelementStart(4, "div", 75)(5, "mj-code-editor", 76);
|
|
762
|
+
i0.ɵɵlistener("change", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Template_mj_code_editor_change_5_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnTemplateChange($event)); });
|
|
750
763
|
i0.ɵɵelementEnd()()();
|
|
751
|
-
i0.ɵɵelementStart(6, "div",
|
|
764
|
+
i0.ɵɵelementStart(6, "div", 136)(7, "h4", 137);
|
|
752
765
|
i0.ɵɵtext(8, "Selected Fields");
|
|
753
766
|
i0.ɵɵelementEnd();
|
|
754
|
-
i0.ɵɵelementStart(9, "div",
|
|
755
|
-
i0.ɵɵrepeaterCreate(10,
|
|
767
|
+
i0.ɵɵelementStart(9, "div", 86);
|
|
768
|
+
i0.ɵɵrepeaterCreate(10, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_For_11_Template, 2, 1, "span", 87, i0.ɵɵrepeaterTrackByIdentity);
|
|
756
769
|
i0.ɵɵelementEnd()();
|
|
757
|
-
i0.ɵɵconditionalCreate(12,
|
|
758
|
-
i0.ɵɵelementStart(13, "div",
|
|
770
|
+
i0.ɵɵconditionalCreate(12, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_12_Template, 5, 0, "div", 136);
|
|
771
|
+
i0.ɵɵelementStart(13, "div", 138)(14, "div", 139)(15, "span", 140);
|
|
759
772
|
i0.ɵɵtext(16, "Potential Match");
|
|
760
773
|
i0.ɵɵelementEnd();
|
|
761
|
-
i0.ɵɵelementStart(17, "span",
|
|
774
|
+
i0.ɵɵelementStart(17, "span", 141);
|
|
762
775
|
i0.ɵɵtext(18);
|
|
763
776
|
i0.ɵɵelementEnd()();
|
|
764
|
-
i0.ɵɵelementStart(19, "div",
|
|
777
|
+
i0.ɵɵelementStart(19, "div", 139)(20, "span", 140);
|
|
765
778
|
i0.ɵɵtext(21, "Absolute Match");
|
|
766
779
|
i0.ɵɵelementEnd();
|
|
767
|
-
i0.ɵɵelementStart(22, "span",
|
|
780
|
+
i0.ɵɵelementStart(22, "span", 141);
|
|
768
781
|
i0.ɵɵtext(23);
|
|
769
782
|
i0.ɵɵelementEnd()()();
|
|
770
|
-
i0.ɵɵelementStart(24, "div",
|
|
783
|
+
i0.ɵɵelementStart(24, "div", 136)(25, "h4", 137);
|
|
771
784
|
i0.ɵɵtext(26, "Reasoning");
|
|
772
785
|
i0.ɵɵelementEnd();
|
|
773
|
-
i0.ɵɵelementStart(27, "p",
|
|
786
|
+
i0.ɵɵelementStart(27, "p", 142);
|
|
774
787
|
i0.ɵɵtext(28);
|
|
775
788
|
i0.ɵɵelementEnd()();
|
|
776
|
-
i0.ɵɵelementStart(29, "div",
|
|
789
|
+
i0.ɵɵelementStart(29, "div", 136)(30, "div", 70)(31, "label", 71);
|
|
777
790
|
i0.ɵɵtext(32, "Document Name");
|
|
778
791
|
i0.ɵɵelementEnd();
|
|
779
|
-
i0.ɵɵelementStart(33, "input",
|
|
780
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
792
|
+
i0.ɵɵelementStart(33, "input", 77);
|
|
793
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Template_input_ngModelChange_33_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.SaveDocumentName, $event) || (ctx_r1.SaveDocumentName = $event); return i0.ɵɵresetView($event); });
|
|
781
794
|
i0.ɵɵelementEnd()();
|
|
782
|
-
i0.ɵɵelementStart(34, "div",
|
|
795
|
+
i0.ɵɵelementStart(34, "div", 143)(35, "label", 71);
|
|
783
796
|
i0.ɵɵtext(36, "Embedding Model");
|
|
784
797
|
i0.ɵɵelementEnd();
|
|
785
|
-
i0.ɵɵelementStart(37, "select",
|
|
786
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
787
|
-
i0.ɵɵrepeaterCreate(38,
|
|
798
|
+
i0.ɵɵelementStart(37, "select", 78);
|
|
799
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Template_select_ngModelChange_37_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedEmbeddingModelID, $event) || (ctx_r1.SelectedEmbeddingModelID = $event); return i0.ɵɵresetView($event); });
|
|
800
|
+
i0.ɵɵrepeaterCreate(38, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_For_39_Template, 2, 2, "option", 79, _forTrack2);
|
|
788
801
|
i0.ɵɵelementEnd()();
|
|
789
|
-
i0.ɵɵelementStart(40, "div",
|
|
802
|
+
i0.ɵɵelementStart(40, "div", 143)(41, "label", 71);
|
|
790
803
|
i0.ɵɵtext(42, "Vector Database");
|
|
791
804
|
i0.ɵɵelementEnd();
|
|
792
|
-
i0.ɵɵelementStart(43, "select",
|
|
793
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
794
|
-
i0.ɵɵrepeaterCreate(44,
|
|
805
|
+
i0.ɵɵelementStart(43, "select", 78);
|
|
806
|
+
i0.ɵɵtwoWayListener("ngModelChange", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Template_select_ngModelChange_43_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedVectorDBID, $event) || (ctx_r1.SelectedVectorDBID = $event); return i0.ɵɵresetView($event); });
|
|
807
|
+
i0.ɵɵrepeaterCreate(44, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_For_45_Template, 2, 2, "option", 79, _forTrack2);
|
|
795
808
|
i0.ɵɵelementEnd()();
|
|
796
|
-
i0.ɵɵelementStart(46, "div",
|
|
809
|
+
i0.ɵɵelementStart(46, "div", 143)(47, "label", 71);
|
|
797
810
|
i0.ɵɵtext(48, "Vector Index");
|
|
798
811
|
i0.ɵɵelementEnd();
|
|
799
|
-
i0.ɵɵconditionalCreate(49,
|
|
812
|
+
i0.ɵɵconditionalCreate(49, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_49_Template, 5, 1, "select", 80)(50, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_50_Template, 2, 0, "span", 81);
|
|
800
813
|
i0.ɵɵelementEnd()();
|
|
801
|
-
i0.ɵɵelementStart(51, "div",
|
|
802
|
-
i0.ɵɵconditionalCreate(52,
|
|
814
|
+
i0.ɵɵelementStart(51, "div", 144);
|
|
815
|
+
i0.ɵɵconditionalCreate(52, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_52_Template, 2, 0, "div", 145)(53, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Conditional_53_Template, 8, 0);
|
|
803
816
|
i0.ɵɵelementEnd()();
|
|
804
817
|
} if (rf & 2) {
|
|
805
|
-
const
|
|
818
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
806
819
|
i0.ɵɵadvance(5);
|
|
807
|
-
i0.ɵɵproperty("value",
|
|
820
|
+
i0.ɵɵproperty("value", ctx_r1.EditableTemplate)("readonly", false)("lineWrapping", true);
|
|
808
821
|
i0.ɵɵadvance(5);
|
|
809
|
-
i0.ɵɵrepeater(
|
|
822
|
+
i0.ɵɵrepeater(ctx_r1.SuggestionResult.selectedFields);
|
|
810
823
|
i0.ɵɵadvance(2);
|
|
811
|
-
i0.ɵɵconditional(((
|
|
824
|
+
i0.ɵɵconditional(((ctx_r1.SuggestionResult.selectedRelationships == null ? null : ctx_r1.SuggestionResult.selectedRelationships.length) ?? 0) > 0 ? 12 : -1);
|
|
812
825
|
i0.ɵɵadvance(6);
|
|
813
|
-
i0.ɵɵtextInterpolate1("", (
|
|
826
|
+
i0.ɵɵtextInterpolate1("", (ctx_r1.SuggestionResult.potentialMatchThreshold * 100).toFixed(0), "%");
|
|
814
827
|
i0.ɵɵadvance(5);
|
|
815
|
-
i0.ɵɵtextInterpolate1("", (
|
|
828
|
+
i0.ɵɵtextInterpolate1("", (ctx_r1.SuggestionResult.absoluteMatchThreshold * 100).toFixed(0), "%");
|
|
816
829
|
i0.ɵɵadvance(5);
|
|
817
|
-
i0.ɵɵtextInterpolate(
|
|
830
|
+
i0.ɵɵtextInterpolate(ctx_r1.SuggestionResult.reasoning);
|
|
818
831
|
i0.ɵɵadvance(5);
|
|
819
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
832
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SaveDocumentName);
|
|
820
833
|
i0.ɵɵadvance(4);
|
|
821
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
834
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedEmbeddingModelID);
|
|
822
835
|
i0.ɵɵadvance();
|
|
823
|
-
i0.ɵɵrepeater(
|
|
836
|
+
i0.ɵɵrepeater(ctx_r1.AvailableEmbeddingModels);
|
|
824
837
|
i0.ɵɵadvance(5);
|
|
825
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
838
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedVectorDBID);
|
|
826
839
|
i0.ɵɵadvance();
|
|
827
|
-
i0.ɵɵrepeater(
|
|
840
|
+
i0.ɵɵrepeater(ctx_r1.vectorDatabases);
|
|
828
841
|
i0.ɵɵadvance(5);
|
|
829
|
-
i0.ɵɵconditional(
|
|
842
|
+
i0.ɵɵconditional(ctx_r1.FilteredIndexesForSelectedDB.length > 0 ? 49 : 50);
|
|
830
843
|
i0.ɵɵadvance(3);
|
|
831
|
-
i0.ɵɵconditional(
|
|
844
|
+
i0.ɵɵconditional(ctx_r1.IsSavingDocument ? 52 : 53);
|
|
832
845
|
} }
|
|
833
|
-
function
|
|
834
|
-
const
|
|
835
|
-
i0.ɵɵelementStart(0, "div",
|
|
836
|
-
i0.ɵɵlistener("click", function
|
|
837
|
-
i0.ɵɵelementStart(1, "div",
|
|
838
|
-
i0.ɵɵlistener("click", function
|
|
839
|
-
i0.ɵɵelementStart(2, "div",
|
|
840
|
-
i0.ɵɵelement(4, "i",
|
|
846
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
847
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
848
|
+
i0.ɵɵelementStart(0, "div", 62);
|
|
849
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseSuggestDialog()); });
|
|
850
|
+
i0.ɵɵelementStart(1, "div", 108);
|
|
851
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r18); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
852
|
+
i0.ɵɵelementStart(2, "div", 64)(3, "h3", 65);
|
|
853
|
+
i0.ɵɵelement(4, "i", 19);
|
|
841
854
|
i0.ɵɵtext(5, " AI Document Suggestion ");
|
|
842
855
|
i0.ɵɵelementEnd();
|
|
843
|
-
i0.ɵɵelementStart(6, "button",
|
|
844
|
-
i0.ɵɵlistener("click", function
|
|
845
|
-
i0.ɵɵelement(7, "i",
|
|
856
|
+
i0.ɵɵelementStart(6, "button", 66);
|
|
857
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseSuggestDialog()); });
|
|
858
|
+
i0.ɵɵelement(7, "i", 67);
|
|
846
859
|
i0.ɵɵelementEnd()();
|
|
847
|
-
i0.ɵɵelementStart(8, "div",
|
|
848
|
-
i0.ɵɵconditionalCreate(9,
|
|
860
|
+
i0.ɵɵelementStart(8, "div", 68);
|
|
861
|
+
i0.ɵɵconditionalCreate(9, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_9_Template, 27, 11, "div", 69)(10, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Conditional_10_Template, 54, 12, "div", 109);
|
|
849
862
|
i0.ɵɵelementEnd()()();
|
|
850
863
|
} if (rf & 2) {
|
|
851
|
-
const
|
|
864
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
852
865
|
i0.ɵɵadvance();
|
|
853
|
-
i0.ɵɵclassProp("open",
|
|
866
|
+
i0.ɵɵclassProp("open", ctx_r1.ShowSuggestDialog);
|
|
854
867
|
i0.ɵɵadvance(8);
|
|
855
|
-
i0.ɵɵconditional(!
|
|
868
|
+
i0.ɵɵconditional(!ctx_r1.SuggestionResult ? 9 : 10);
|
|
856
869
|
} }
|
|
857
|
-
function
|
|
858
|
-
const
|
|
859
|
-
i0.ɵɵelementStart(0, "div",
|
|
860
|
-
i0.ɵɵ
|
|
861
|
-
i0.ɵɵ
|
|
862
|
-
i0.ɵɵ
|
|
863
|
-
i0.ɵɵ
|
|
864
|
-
i0.ɵɵ
|
|
865
|
-
i0.ɵɵ
|
|
866
|
-
i0.ɵɵ
|
|
867
|
-
i0.ɵɵ
|
|
868
|
-
i0.ɵɵ
|
|
869
|
-
i0.ɵɵ
|
|
870
|
-
i0.ɵɵ
|
|
871
|
-
i0.ɵɵelementStart(14, "span", 15);
|
|
872
|
-
i0.ɵɵtext(15, "Suggest Document");
|
|
870
|
+
function VectorManagementResourceComponent_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
871
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
872
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "div", 10);
|
|
873
|
+
i0.ɵɵrepeaterCreate(2, VectorManagementResourceComponent_ng_template_2_Conditional_1_For_3_Template, 1, 1, "app-kpi-card", 11, _forTrack0);
|
|
874
|
+
i0.ɵɵelementEnd();
|
|
875
|
+
i0.ɵɵelementStart(4, "div", 12)(5, "div", 13)(6, "div", 14)(7, "h3", 15);
|
|
876
|
+
i0.ɵɵelement(8, "i", 16);
|
|
877
|
+
i0.ɵɵtext(9, " Entity Sync Status ");
|
|
878
|
+
i0.ɵɵelementEnd();
|
|
879
|
+
i0.ɵɵelementStart(10, "div", 17)(11, "button", 18);
|
|
880
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenSuggestDialog()); });
|
|
881
|
+
i0.ɵɵelement(12, "i", 19);
|
|
882
|
+
i0.ɵɵelementStart(13, "span", 20);
|
|
883
|
+
i0.ɵɵtext(14, "Suggest Document");
|
|
873
884
|
i0.ɵɵelementEnd()();
|
|
874
|
-
i0.ɵɵelementStart(
|
|
875
|
-
i0.ɵɵlistener("click", function
|
|
876
|
-
i0.ɵɵelement(
|
|
877
|
-
i0.ɵɵtext(
|
|
885
|
+
i0.ɵɵelementStart(15, "button", 21);
|
|
886
|
+
i0.ɵɵlistener("click", function VectorManagementResourceComponent_ng_template_2_Conditional_1_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.LoadData()); });
|
|
887
|
+
i0.ɵɵelement(16, "i", 22);
|
|
888
|
+
i0.ɵɵtext(17, " Refresh ");
|
|
878
889
|
i0.ɵɵelementEnd()()();
|
|
879
|
-
i0.ɵɵconditionalCreate(
|
|
890
|
+
i0.ɵɵconditionalCreate(18, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_18_Template, 4, 0, "div", 23)(19, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_19_Template, 19, 0, "div", 24);
|
|
880
891
|
i0.ɵɵelementEnd();
|
|
881
|
-
i0.ɵɵelementStart(
|
|
882
|
-
i0.ɵɵelement(
|
|
883
|
-
i0.ɵɵtext(
|
|
892
|
+
i0.ɵɵelementStart(20, "div", 25)(21, "div", 26)(22, "h4", 27);
|
|
893
|
+
i0.ɵɵelement(23, "i", 28);
|
|
894
|
+
i0.ɵɵtext(24, " Vector DB Health ");
|
|
884
895
|
i0.ɵɵelementEnd();
|
|
885
|
-
i0.ɵɵelementStart(
|
|
886
|
-
i0.ɵɵelement(
|
|
887
|
-
i0.ɵɵelementStart(
|
|
888
|
-
i0.ɵɵtext(
|
|
896
|
+
i0.ɵɵelementStart(25, "div", 29);
|
|
897
|
+
i0.ɵɵelement(26, "span", 30);
|
|
898
|
+
i0.ɵɵelementStart(27, "span", 31);
|
|
899
|
+
i0.ɵɵtext(28);
|
|
889
900
|
i0.ɵɵelementEnd()();
|
|
890
|
-
i0.ɵɵelementStart(
|
|
891
|
-
i0.ɵɵtext(
|
|
901
|
+
i0.ɵɵelementStart(29, "div", 32);
|
|
902
|
+
i0.ɵɵtext(30);
|
|
892
903
|
i0.ɵɵelementEnd()();
|
|
893
|
-
i0.ɵɵelementStart(
|
|
894
|
-
i0.ɵɵelement(
|
|
895
|
-
i0.ɵɵtext(
|
|
904
|
+
i0.ɵɵelementStart(31, "div", 26)(32, "h4", 27);
|
|
905
|
+
i0.ɵɵelement(33, "i", 33);
|
|
906
|
+
i0.ɵɵtext(34, " Embedding Model ");
|
|
896
907
|
i0.ɵɵelementEnd();
|
|
897
|
-
i0.ɵɵelementStart(
|
|
898
|
-
i0.ɵɵtext(
|
|
908
|
+
i0.ɵɵelementStart(35, "div", 34)(36, "div", 35)(37, "span", 36);
|
|
909
|
+
i0.ɵɵtext(38, "Model");
|
|
899
910
|
i0.ɵɵelementEnd();
|
|
900
|
-
i0.ɵɵelementStart(
|
|
901
|
-
i0.ɵɵtext(
|
|
911
|
+
i0.ɵɵelementStart(39, "span", 37);
|
|
912
|
+
i0.ɵɵtext(40);
|
|
902
913
|
i0.ɵɵelementEnd()();
|
|
903
|
-
i0.ɵɵconditionalCreate(
|
|
914
|
+
i0.ɵɵconditionalCreate(41, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_41_Template, 6, 3, "div", 35);
|
|
904
915
|
i0.ɵɵelementEnd()();
|
|
905
|
-
i0.ɵɵelementStart(
|
|
906
|
-
i0.ɵɵelement(
|
|
907
|
-
i0.ɵɵtext(
|
|
916
|
+
i0.ɵɵelementStart(42, "div", 26)(43, "h4", 27);
|
|
917
|
+
i0.ɵɵelement(44, "i", 38);
|
|
918
|
+
i0.ɵɵtext(45, " Vectorization Coverage ");
|
|
908
919
|
i0.ɵɵelementEnd();
|
|
909
|
-
i0.ɵɵelementStart(
|
|
910
|
-
i0.ɵɵelement(
|
|
920
|
+
i0.ɵɵelementStart(46, "div", 39)(47, "div", 40);
|
|
921
|
+
i0.ɵɵelement(48, "div", 41);
|
|
911
922
|
i0.ɵɵelementEnd();
|
|
912
|
-
i0.ɵɵelementStart(
|
|
913
|
-
i0.ɵɵtext(
|
|
923
|
+
i0.ɵɵelementStart(49, "div", 42);
|
|
924
|
+
i0.ɵɵtext(50);
|
|
914
925
|
i0.ɵɵelementEnd()();
|
|
915
|
-
i0.ɵɵelementStart(
|
|
916
|
-
i0.ɵɵtext(
|
|
917
|
-
i0.ɵɵpipe(
|
|
926
|
+
i0.ɵɵelementStart(51, "div", 43);
|
|
927
|
+
i0.ɵɵtext(52);
|
|
928
|
+
i0.ɵɵpipe(53, "number");
|
|
918
929
|
i0.ɵɵelementEnd()()()()();
|
|
919
|
-
i0.ɵɵconditionalCreate(
|
|
920
|
-
i0.ɵɵconditionalCreate(
|
|
921
|
-
i0.ɵɵconditionalCreate(
|
|
922
|
-
i0.ɵɵconditionalCreate(
|
|
930
|
+
i0.ɵɵconditionalCreate(54, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_54_Template, 57, 13, "div", 44);
|
|
931
|
+
i0.ɵɵconditionalCreate(55, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_55_Template, 34, 5, "div", 44);
|
|
932
|
+
i0.ɵɵconditionalCreate(56, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_56_Template, 14, 0, "div", 44);
|
|
933
|
+
i0.ɵɵconditionalCreate(57, VectorManagementResourceComponent_ng_template_2_Conditional_1_Conditional_57_Template, 11, 3, "div", 44);
|
|
923
934
|
} if (rf & 2) {
|
|
924
|
-
const
|
|
925
|
-
i0.ɵɵadvance();
|
|
926
|
-
i0.ɵɵconditional(!ctx_r2.EmbeddedMode ? 1 : -1);
|
|
935
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
927
936
|
i0.ɵɵadvance(2);
|
|
928
|
-
i0.ɵɵrepeater(
|
|
937
|
+
i0.ɵɵrepeater(ctx_r1.KPICards);
|
|
929
938
|
i0.ɵɵadvance(16);
|
|
930
|
-
i0.ɵɵconditional(
|
|
939
|
+
i0.ɵɵconditional(ctx_r1.SyncRows.length === 0 ? 18 : 19);
|
|
931
940
|
i0.ɵɵadvance(8);
|
|
932
|
-
i0.ɵɵclassMap(
|
|
941
|
+
i0.ɵɵclassMap(ctx_r1.DBHealthClass);
|
|
933
942
|
i0.ɵɵadvance(2);
|
|
934
|
-
i0.ɵɵtextInterpolate(
|
|
943
|
+
i0.ɵɵtextInterpolate(ctx_r1.VectorDBName);
|
|
935
944
|
i0.ɵɵadvance(2);
|
|
936
|
-
i0.ɵɵtextInterpolate(
|
|
945
|
+
i0.ɵɵtextInterpolate(ctx_r1.VectorDBStatus);
|
|
937
946
|
i0.ɵɵadvance(10);
|
|
938
|
-
i0.ɵɵtextInterpolate(
|
|
947
|
+
i0.ɵɵtextInterpolate(ctx_r1.EmbeddingModel.Name);
|
|
939
948
|
i0.ɵɵadvance();
|
|
940
|
-
i0.ɵɵconditional(
|
|
949
|
+
i0.ɵɵconditional(ctx_r1.EmbeddingModel.Dimensions != null ? 41 : -1);
|
|
941
950
|
i0.ɵɵadvance(7);
|
|
942
|
-
i0.ɵɵstyleProp("width",
|
|
951
|
+
i0.ɵɵstyleProp("width", ctx_r1.StorageUsagePercent, "%");
|
|
943
952
|
i0.ɵɵadvance(2);
|
|
944
|
-
i0.ɵɵtextInterpolate1("",
|
|
953
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.StorageLabel, " of records vectorized");
|
|
945
954
|
i0.ɵɵadvance(2);
|
|
946
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(
|
|
955
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(53, 15, ctx_r1.TotalVectors), " vectors stored ");
|
|
947
956
|
i0.ɵɵadvance(2);
|
|
948
|
-
i0.ɵɵconditional(
|
|
957
|
+
i0.ɵɵconditional(ctx_r1.ShowEditPanel ? 54 : -1);
|
|
949
958
|
i0.ɵɵadvance();
|
|
950
|
-
i0.ɵɵconditional(
|
|
959
|
+
i0.ɵɵconditional(ctx_r1.ShowScheduleSyncDialog ? 55 : -1);
|
|
951
960
|
i0.ɵɵadvance();
|
|
952
|
-
i0.ɵɵconditional(
|
|
961
|
+
i0.ɵɵconditional(ctx_r1.ShowNoIndexWarning ? 56 : -1);
|
|
953
962
|
i0.ɵɵadvance();
|
|
954
|
-
i0.ɵɵconditional(
|
|
963
|
+
i0.ɵɵconditional(ctx_r1.ShowSuggestDialog ? 57 : -1);
|
|
964
|
+
} }
|
|
965
|
+
function VectorManagementResourceComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
966
|
+
i0.ɵɵconditionalCreate(0, VectorManagementResourceComponent_ng_template_2_Conditional_0_Template, 2, 0, "div", 7)(1, VectorManagementResourceComponent_ng_template_2_Conditional_1_Template, 58, 17);
|
|
967
|
+
} if (rf & 2) {
|
|
968
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
969
|
+
i0.ɵɵconditional(ctx_r1.IsLoading ? 0 : 1);
|
|
955
970
|
} }
|
|
956
971
|
let VectorManagementResourceComponent = class VectorManagementResourceComponent extends BaseResourceComponent {
|
|
957
972
|
cdr = inject(ChangeDetectorRef);
|
|
@@ -960,8 +975,15 @@ let VectorManagementResourceComponent = class VectorManagementResourceComponent
|
|
|
960
975
|
/** View mode: 'index' = Option A (shared index as hero, entity docs as children),
|
|
961
976
|
* 'operations' = Option C (operations monitoring with real-time sync status) */
|
|
962
977
|
ViewMode = 'index';
|
|
963
|
-
|
|
964
|
-
|
|
978
|
+
VectorViewOptions = [
|
|
979
|
+
{ key: 'index', icon: 'fa-solid fa-cubes', title: 'Index View' },
|
|
980
|
+
{ key: 'operations', icon: 'fa-solid fa-gauge-high', title: 'Operations View' }
|
|
981
|
+
];
|
|
982
|
+
/**
|
|
983
|
+
* When true, renders only the body content (no chrome). Set by parent shells
|
|
984
|
+
* that embed this resource. See plans/explorer-chrome-conventions.md Section 5.
|
|
985
|
+
*/
|
|
986
|
+
HideToolbar = false;
|
|
965
987
|
/** Toggle between view modes */
|
|
966
988
|
ToggleViewMode() {
|
|
967
989
|
this.ViewMode = this.ViewMode === 'index' ? 'operations' : 'index';
|
|
@@ -2211,11 +2233,15 @@ let VectorManagementResourceComponent = class VectorManagementResourceComponent
|
|
|
2211
2233
|
} if (rf & 2) {
|
|
2212
2234
|
let _t;
|
|
2213
2235
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entitySearchInput = _t.first);
|
|
2214
|
-
} }, inputs: {
|
|
2215
|
-
i0.ɵɵconditionalCreate(0, VectorManagementResourceComponent_Conditional_0_Template,
|
|
2236
|
+
} }, inputs: { HideToolbar: "HideToolbar" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 2, consts: [["vectorBody", ""], ["entitySearchInput", ""], ["Title", "Vector Management", "Icon", "fa-solid fa-cubes", "Subtitle", "Vector index health, embeddings, and entity sync status"], ["actions", ""], [3, "KeyChange", "Options", "ActiveKey"], [3, "Flex"], [4, "ngTemplateOutlet"], [1, "vector-loading"], ["text", "Loading vector management data..."], [1, "vector-dashboard"], [1, "kpi-row"], [3, "data"], [1, "content-area"], [1, "sync-table-panel"], [1, "panel-header"], [1, "panel-title"], [1, "fa-solid", "fa-table-list"], [1, "panel-actions"], ["title", "Use AI to suggest an Entity Document template", 1, "suggest-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "suggest-btn-text"], ["title", "Refresh data", 1, "refresh-btn", 3, "click"], [1, "fa-solid", "fa-arrows-rotate"], [1, "empty-state"], [1, "table-wrapper"], [1, "sidebar"], [1, "sidebar-card"], [1, "sidebar-title"], [1, "fa-solid", "fa-heart-pulse"], [1, "health-row"], [1, "health-dot"], [1, "health-label"], [1, "health-status"], [1, "fa-solid", "fa-microchip"], [1, "model-info"], [1, "info-row"], [1, "info-label"], [1, "info-value"], [1, "fa-solid", "fa-hard-drive"], [1, "gauge-container"], [1, "gauge-bar"], [1, "gauge-fill"], [1, "gauge-label"], [1, "storage-detail"], [1, "slide-panel-overlay"], [1, "fa-solid", "fa-folder-open"], [1, "sync-table"], [1, "text-right"], [1, "text-center"], [1, "entity-name"], [1, "document-name"], [1, "text-right", "vector-count"], [1, "last-synced"], [1, "status-badge"], [1, "text-center", "actions-cell"], ["title", "Sync now", 1, "sync-btn", 3, "click", "disabled"], ["title", "Schedule recurring sync", 1, "schedule-btn", 3, "click"], [1, "fa-regular", "fa-clock"], ["title", "Edit entity document", 1, "edit-btn", 3, "click"], [1, "fa-solid", "fa-pen"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], [1, "slide-panel-overlay", 3, "click"], [1, "slide-panel", "open", 3, "click"], [1, "suggest-dialog-header"], [1, "suggest-dialog-title"], [1, "suggest-close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "suggest-dialog-body"], [1, "suggest-form"], [1, "suggest-field"], [1, "suggest-label"], [1, "edit-readonly-value"], [1, "edit-template-header"], ["title", "Regenerate template using AI", 1, "edit-regenerate-btn", 3, "click", "disabled"], [1, "template-editor-wrapper"], ["language", "markdown", 3, "change", "value", "readonly", "lineWrapping"], ["type", "text", 1, "suggest-input", 3, "ngModelChange", "ngModel"], [1, "suggest-select", 3, "ngModelChange", "ngModel"], [3, "value"], [1, "suggest-select", 3, "ngModel"], [1, "edit-readonly-value", 2, "font-size", "13px", "color", "var(--mj-text-muted)"], ["value", "Active"], ["value", "Inactive"], [1, "result-actions", 2, "margin-top", "1rem"], ["text", "Saving...", "size", "small"], [1, "result-tags"], [1, "result-tag"], ["value", ""], [1, "suggest-submit-btn", 3, "click"], [1, "fa-solid", "fa-save"], [1, "edit-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "suggest-close-action", 3, "click"], [1, "schedule-dialog", 3, "click"], ["type", "text", "placeholder", "0 2 * * *", 1, "suggest-input", 3, "ngModelChange", "ngModel"], [1, "schedule-cron-preview"], [1, "fa-solid", "fa-info-circle"], [1, "suggest-field", "schedule-toggle-row"], ["type", "checkbox", 1, "mj-checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-check"], [1, "no-index-warning-dialog", 3, "click"], [1, "no-index-warning-icon"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "no-index-warning-title"], [1, "no-index-warning-message"], [1, "no-index-warning-actions"], [1, "fa-solid", "fa-gear"], [1, "slide-panel", 3, "click"], [1, "suggest-result"], [1, "entity-picker"], [1, "entity-picker-trigger", 3, "click"], [1, "fa-solid", "fa-chevron-down", "entity-picker-arrow"], [1, "entity-picker-dropdown"], [1, "use-case-options"], [1, "use-case-btn", 3, "click"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fa-solid", "fa-tags"], [1, "suggest-submit-btn", 3, "click", "disabled"], [1, "suggestion-error"], [1, "fa-solid", "fa-table"], [1, "entity-picker-value"], [1, "fa-solid", "fa-search"], [1, "entity-picker-placeholder"], [1, "entity-picker-dropdown", 3, "mousedown"], [1, "entity-picker-search"], ["type", "text", "placeholder", "Filter entities...", 1, "entity-picker-search-input", 3, "ngModelChange", "input", "keydown", "ngModel"], [1, "entity-picker-list"], [1, "entity-picker-group"], [1, "entity-picker-empty"], [1, "entity-picker-group-header"], [1, "fa-solid", "fa-database"], [1, "entity-picker-item", 3, "entity-picker-item-selected", "entity-picker-item-focused"], [1, "entity-picker-item", 3, "click"], [1, "fa-solid", "fa-circle-exclamation"], [1, "result-section"], [1, "result-heading"], [1, "result-section", "result-thresholds"], [1, "threshold-item"], [1, "threshold-label"], [1, "threshold-value"], [1, "result-reasoning"], [1, "suggest-field", 2, "margin-top", "0.75rem"], [1, "result-actions"], [1, "save-spinner"], [1, "result-relationship"], [1, "rel-name"], [1, "rel-fields"], [1, "fa-solid", "fa-floppy-disk"], [1, "suggest-submit-btn", "suggest-try-again-btn", 3, "click"], [1, "fa-solid", "fa-rotate"]], template: function VectorManagementResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
2237
|
+
i0.ɵɵconditionalCreate(0, VectorManagementResourceComponent_Conditional_0_Template, 6, 4, "mj-page-layout");
|
|
2238
|
+
i0.ɵɵconditionalCreate(1, VectorManagementResourceComponent_Conditional_1_Template, 1, 1, "ng-container");
|
|
2239
|
+
i0.ɵɵtemplate(2, VectorManagementResourceComponent_ng_template_2_Template, 2, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
2216
2240
|
} if (rf & 2) {
|
|
2217
|
-
i0.ɵɵconditional(ctx.
|
|
2218
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.CodeEditorComponent, i3.LoadingComponent, i4.KPICardComponent, i5.DecimalPipe], styles: ["\n\n\n\n\n\n\n\n.vector-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n}\n\n\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.25rem;\n padding: 0 24px 0;\n margin-bottom: -12px;\n}\n\n.view-mode-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.85rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.view-mode-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.view-mode-btn-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n\n\n.vector-dashboard[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: var(--mj-bg-page);\n min-height: 100%;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n@media (max-width: 1200px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 600px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 300px;\n gap: 24px;\n align-items: start;\n}\n\n@media (max-width: 1024px) {\n .content-area[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n.sync-table-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.refresh-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.refresh-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n.table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.sync-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.sync-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n white-space: nowrap;\n}\n\n.sync-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n\n.sync-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.text-right[_ngcontent-%COMP%] {\n text-align: right;\n}\n\n.text-center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.document-name[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.vector-count[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n\n.last-synced[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 12px;\n white-space: nowrap;\n}\n\n\n\n\n.actions-cell[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n justify-content: center;\n}\n\n.schedule-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.schedule-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.edit-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.schedule-dialog[_ngcontent-%COMP%] {\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n}\n\n.schedule-cron-preview[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 0 0;\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n}\n\n.schedule-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n}\n\n.edit-delete-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n}\n\n.edit-readonly-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n white-space: nowrap;\n}\n\n.status-synced[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.status-syncing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text, var(--mj-status-error));\n}\n\n.status-pending[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n\n\n.sync-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.sync-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.sync-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n\n\n.sidebar[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.sidebar-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n}\n\n.sidebar-title[_ngcontent-%COMP%] {\n margin: 0 0 14px 0;\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sidebar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n\n\n.health-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.health-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.health-healthy[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-success) 50%, transparent);\n}\n\n.health-degraded[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-warning) 50%, transparent);\n}\n\n.health-offline[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.health-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.health-status[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 18px;\n}\n\n\n\n.model-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.info-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.gauge-bar[_ngcontent-%COMP%] {\n height: 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n margin-bottom: 6px;\n}\n\n.gauge-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n background: var(--mj-brand-primary);\n transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 2px;\n}\n\n.gauge-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.storage-detail[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n\n.panel-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n.suggest-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.suggest-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n}\n\n\n\n.slide-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 100000;\n}\n\n.slide-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n height: 100vh;\n width: 480px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slide-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.suggest-dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.suggest-dialog-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggest-dialog-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.suggest-close-btn[_ngcontent-%COMP%] {\n border: none;\n background: none;\n color: var(--mj-text-muted);\n font-size: 16px;\n cursor: pointer;\n padding: 4px;\n}\n\n.suggest-close-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.suggest-dialog-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.suggest-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.suggest-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.suggest-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.suggest-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n}\n\n.suggest-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n\n.use-case-options[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.use-case-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.use-case-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.use-case-btn-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.use-case-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n\n.entity-picker[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.entity-picker-trigger[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s;\n}\n\n.entity-picker-trigger[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.entity-picker-placeholder[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n flex: 1;\n}\n\n.entity-picker-value[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.entity-picker-arrow[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 0.2s;\n}\n\n.entity-picker-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n box-shadow: 0 8px 32px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n z-index: 100;\n max-height: 350px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.entity-picker-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-picker-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n.entity-picker-search-input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n outline: none;\n}\n\n.entity-picker-search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.entity-picker-list[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 300px;\n padding: 4px 0;\n}\n\n.entity-picker-group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n}\n\n.entity-picker-group-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.entity-picker-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 14px 7px 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 0.1s;\n}\n\n.entity-picker-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-picker-item-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-picker-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.entity-picker-item-selected[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.entity-picker-item-focused[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.entity-picker-empty[_ngcontent-%COMP%] {\n padding: 20px 14px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n.template-editor-wrapper[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n min-height: 120px;\n max-height: 300px;\n}\n\n.template-editor-wrapper[_ngcontent-%COMP%] .cm-editor {\n min-height: 120px;\n max-height: 300px;\n font-size: 13px;\n}\n\n.suggest-submit-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 10px 20px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.suggest-submit-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.suggestion-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n font-size: 13px;\n line-height: 1.4;\n}\n\n.suggestion-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.suggest-submit-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.suggest-result[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.result-section[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 12px;\n}\n\n.result-section[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.result-heading[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.result-template[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-all;\n margin: 0;\n}\n\n.result-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.result-tag[_ngcontent-%COMP%] {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n}\n\n.result-relationship[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n}\n\n.rel-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.rel-fields[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.result-thresholds[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n}\n\n.threshold-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.threshold-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.threshold-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.result-reasoning[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.result-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n}\n\n.suggest-close-action[_ngcontent-%COMP%] {\n padding: 10px 20px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.suggest-close-action[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n.suggest-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n width: 100%;\n box-sizing: border-box;\n}\n\n.suggest-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n.suggest-try-again-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.suggest-try-again-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n\n\n.save-spinner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 0;\n}\n\n\n\n.edit-template-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.edit-regenerate-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.edit-regenerate-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.edit-regenerate-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.no-index-warning-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n padding: 32px;\n text-align: center;\n}\n\n.no-index-warning-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n margin: 0 auto 16px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n}\n\n.no-index-warning-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-status-warning);\n}\n\n.no-index-warning-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.no-index-warning-message[_ngcontent-%COMP%] {\n margin: 0 0 24px 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n}\n\n.no-index-warning-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .panel-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .panel-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n@media (max-width: 600px) {\n .slide-panel[_ngcontent-%COMP%] {\n width: 100vw;\n max-width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .vector-dashboard[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .suggest-btn[_ngcontent-%COMP%] .suggest-btn-text[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
|
|
2241
|
+
i0.ɵɵconditional(!ctx.HideToolbar ? 0 : -1);
|
|
2242
|
+
i0.ɵɵadvance();
|
|
2243
|
+
i0.ɵɵconditional(ctx.HideToolbar ? 1 : -1);
|
|
2244
|
+
} }, dependencies: [i1.NgTemplateOutlet, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.CheckboxControlValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.LoadingComponent, i5.KPICardComponent, i6.MJPageHeaderComponent, i6.MJPageLayoutComponent, i6.MJPageBodyComponent, i6.MJViewToggleComponent, i1.DecimalPipe], styles: ["\n\n\n\n\n\n\n\n\n.vector-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n}\n\n\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.25rem;\n padding: 0 24px 0;\n margin-bottom: -12px;\n}\n\n.view-mode-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.85rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.view-mode-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.view-mode-btn-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n\n\n.vector-dashboard[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: var(--mj-bg-page);\n min-height: 100%;\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n@media (max-width: 1200px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 600px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 300px;\n gap: 24px;\n align-items: start;\n}\n\n@media (max-width: 1024px) {\n .content-area[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n\n\n.sync-table-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.panel-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.refresh-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.refresh-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n.table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.sync-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.sync-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n white-space: nowrap;\n}\n\n.sync-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n\n.sync-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.text-right[_ngcontent-%COMP%] {\n text-align: right;\n}\n\n.text-center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.document-name[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.vector-count[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n\n.last-synced[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 12px;\n white-space: nowrap;\n}\n\n\n\n\n.actions-cell[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n justify-content: center;\n}\n\n.schedule-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.schedule-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.edit-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.schedule-dialog[_ngcontent-%COMP%] {\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n}\n\n.schedule-cron-preview[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 0 0;\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n}\n\n.schedule-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n}\n\n.edit-delete-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n}\n\n.edit-readonly-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n white-space: nowrap;\n}\n\n.status-synced[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.status-syncing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text, var(--mj-status-error));\n}\n\n.status-pending[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n\n\n.sync-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.sync-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.sync-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n\n\n.sidebar[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.sidebar-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n}\n\n.sidebar-title[_ngcontent-%COMP%] {\n margin: 0 0 14px 0;\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sidebar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n\n\n.health-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.health-dot[_ngcontent-%COMP%] {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.health-healthy[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-success) 50%, transparent);\n}\n\n.health-degraded[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-warning) 50%, transparent);\n}\n\n.health-offline[_ngcontent-%COMP%] {\n background: var(--mj-status-error);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.health-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.health-status[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 18px;\n}\n\n\n\n.model-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.info-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n\n\n.gauge-container[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.gauge-bar[_ngcontent-%COMP%] {\n height: 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n margin-bottom: 6px;\n}\n\n.gauge-fill[_ngcontent-%COMP%] {\n height: 100%;\n border-radius: 4px;\n background: var(--mj-brand-primary);\n transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 2px;\n}\n\n.gauge-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.storage-detail[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n\n\n.panel-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n.suggest-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.suggest-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n}\n\n\n\n.slide-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 100000;\n}\n\n.slide-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n height: 100vh;\n width: 480px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slide-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.suggest-dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.suggest-dialog-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggest-dialog-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.suggest-close-btn[_ngcontent-%COMP%] {\n border: none;\n background: none;\n color: var(--mj-text-muted);\n font-size: 16px;\n cursor: pointer;\n padding: 4px;\n}\n\n.suggest-close-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.suggest-dialog-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.suggest-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.suggest-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.suggest-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.suggest-select[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n}\n\n.suggest-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n\n.use-case-options[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.use-case-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.use-case-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.use-case-btn-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.use-case-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n\n.entity-picker[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.entity-picker-trigger[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s;\n}\n\n.entity-picker-trigger[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.entity-picker-placeholder[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n flex: 1;\n}\n\n.entity-picker-value[_ngcontent-%COMP%] {\n flex: 1;\n font-weight: 500;\n}\n\n.entity-picker-arrow[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 0.2s;\n}\n\n.entity-picker-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n box-shadow: 0 8px 32px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n z-index: 100;\n max-height: 350px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.entity-picker-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-picker-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n.entity-picker-search-input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n outline: none;\n}\n\n.entity-picker-search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.entity-picker-list[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 300px;\n padding: 4px 0;\n}\n\n.entity-picker-group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n}\n\n.entity-picker-group-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.entity-picker-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 14px 7px 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 0.1s;\n}\n\n.entity-picker-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-picker-item-selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-picker-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.entity-picker-item-selected[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.entity-picker-item-focused[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.entity-picker-empty[_ngcontent-%COMP%] {\n padding: 20px 14px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n.template-editor-wrapper[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n min-height: 120px;\n max-height: 300px;\n}\n\n.template-editor-wrapper[_ngcontent-%COMP%] .cm-editor {\n min-height: 120px;\n max-height: 300px;\n font-size: 13px;\n}\n\n.suggest-submit-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 10px 20px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.suggest-submit-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.suggestion-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n font-size: 13px;\n line-height: 1.4;\n}\n\n.suggestion-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.suggest-submit-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.suggest-result[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.result-section[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 12px;\n}\n\n.result-section[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.result-heading[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.result-template[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-all;\n margin: 0;\n}\n\n.result-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.result-tag[_ngcontent-%COMP%] {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n}\n\n.result-relationship[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n}\n\n.rel-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.rel-fields[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.result-thresholds[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n}\n\n.threshold-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.threshold-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.threshold-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.result-reasoning[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.result-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n}\n\n.suggest-close-action[_ngcontent-%COMP%] {\n padding: 10px 20px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.suggest-close-action[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n.suggest-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n width: 100%;\n box-sizing: border-box;\n}\n\n.suggest-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n.suggest-try-again-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.suggest-try-again-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n\n\n.save-spinner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 0;\n}\n\n\n\n.edit-template-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.edit-regenerate-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.edit-regenerate-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.edit-regenerate-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n\n\n.no-index-warning-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n padding: 32px;\n text-align: center;\n}\n\n.no-index-warning-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n margin: 0 auto 16px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n}\n\n.no-index-warning-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-status-warning);\n}\n\n.no-index-warning-title[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.no-index-warning-message[_ngcontent-%COMP%] {\n margin: 0 0 24px 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n}\n\n.no-index-warning-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .panel-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .panel-actions[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n@media (max-width: 600px) {\n .slide-panel[_ngcontent-%COMP%] {\n width: 100vw;\n max-width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .vector-dashboard[_ngcontent-%COMP%] {\n padding: 12px;\n }\n\n .suggest-btn[_ngcontent-%COMP%] .suggest-btn-text[_ngcontent-%COMP%] {\n display: none;\n }\n}"] });
|
|
2219
2245
|
};
|
|
2220
2246
|
VectorManagementResourceComponent = __decorate([
|
|
2221
2247
|
RegisterClass(BaseResourceComponent, 'VectorManagementResource')
|
|
@@ -2223,14 +2249,14 @@ VectorManagementResourceComponent = __decorate([
|
|
|
2223
2249
|
export { VectorManagementResourceComponent };
|
|
2224
2250
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VectorManagementResourceComponent, [{
|
|
2225
2251
|
type: Component,
|
|
2226
|
-
args: [{ standalone: false, selector: 'app-vector-management-resource', template: "@if (IsLoading) {\n <div class=\"vector-loading\">\n <mj-loading text=\"Loading vector management data...\"></mj-loading>\n </div>\n} @else {\n <div class=\"vector-dashboard\">\n <!-- View Mode Toggle -->\n @if (!EmbeddedMode) {\n <div class=\"view-mode-toggle\">\n <button class=\"view-mode-btn\" [class.view-mode-btn-active]=\"ViewMode === 'index'\" (click)=\"ViewMode = 'index'\">\n <i class=\"fa-solid fa-cubes\"></i> Index View\n </button>\n <button class=\"view-mode-btn\" [class.view-mode-btn-active]=\"ViewMode === 'operations'\" (click)=\"ViewMode = 'operations'\">\n <i class=\"fa-solid fa-gauge-high\"></i> Operations\n </button>\n </div>\n }\n\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n @for (card of KPICards; track card.title) {\n <app-kpi-card [data]=\"card\"></app-kpi-card>\n }\n </div>\n\n <!-- Main Content Area: Table + Sidebar -->\n <div class=\"content-area\">\n <!-- Entity Sync Table -->\n <div class=\"sync-table-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-table-list\"></i>\n Entity Sync Status\n </h3>\n <div class=\"panel-actions\">\n <button class=\"suggest-btn\" (click)=\"OpenSuggestDialog()\" title=\"Use AI to suggest an Entity Document template\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span class=\"suggest-btn-text\">Suggest Document</span>\n </button>\n <button class=\"refresh-btn\" (click)=\"LoadData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Refresh\n </button>\n </div>\n </div>\n\n @if (SyncRows.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No entity documents configured for vectorization.</p>\n </div>\n } @else {\n <div class=\"table-wrapper\">\n <table class=\"sync-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Document</th>\n <th class=\"text-right\">Vectors</th>\n <th>Last Synced</th>\n <th>Status</th>\n <th class=\"text-center\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (row of SyncRows; track row.EntityDocumentID) {\n <tr>\n <td class=\"entity-name\">{{ row.EntityName }}</td>\n <td class=\"document-name\">{{ row.DocumentName }}</td>\n <td class=\"text-right vector-count\">{{ row.VectorCount | number }}</td>\n <td class=\"last-synced\">{{ FormatDate(row.LastSynced) }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"GetStatusClass(row.Status)\">\n <i [class]=\"GetStatusIcon(row.Status)\"></i>\n @if (row.Status === 'Syncing' && row.PercentComplete > 0) {\n {{ row.PercentComplete }}%\n } @else {\n {{ row.Status }}\n }\n </span>\n </td>\n <td class=\"text-center actions-cell\">\n <button\n class=\"sync-btn\"\n [disabled]=\"SyncingIds.has(row.EntityDocumentID)\"\n (click)=\"SyncEntity(row.EntityDocumentID)\"\n title=\"Sync now\">\n @if (SyncingIds.has(row.EntityDocumentID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n {{ row.PercentComplete > 0 ? row.PercentComplete + '%' : 'Sync' }}\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Sync\n }\n </button>\n <button\n class=\"schedule-btn\"\n (click)=\"OpenScheduleSyncDialog(row.EntityDocumentID)\"\n title=\"Schedule recurring sync\">\n <i class=\"fa-regular fa-clock\"></i>\n </button>\n <button\n class=\"edit-btn\"\n (click)=\"OpenEditPanel(row.EntityDocumentID)\"\n title=\"Edit entity document\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n\n <!-- Sidebar Panels -->\n <div class=\"sidebar\">\n <!-- Vector DB Health -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-heart-pulse\"></i>\n Vector DB Health\n </h4>\n <div class=\"health-row\">\n <span class=\"health-dot\" [class]=\"DBHealthClass\"></span>\n <span class=\"health-label\">{{ VectorDBName }}</span>\n </div>\n <div class=\"health-status\">{{ VectorDBStatus }}</div>\n </div>\n\n <!-- Embedding Model Info -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Embedding Model\n </h4>\n <div class=\"model-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">Model</span>\n <span class=\"info-value\">{{ EmbeddingModel.Name }}</span>\n </div>\n @if (EmbeddingModel.Dimensions != null) {\n <div class=\"info-row\">\n <span class=\"info-label\">Dimensions</span>\n <span class=\"info-value\">{{ EmbeddingModel.Dimensions | number }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Storage Usage -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-hard-drive\"></i>\n Vectorization Coverage\n </h4>\n <div class=\"gauge-container\">\n <div class=\"gauge-bar\">\n <div class=\"gauge-fill\" [style.width.%]=\"StorageUsagePercent\"></div>\n </div>\n <div class=\"gauge-label\">{{ StorageLabel }} of records vectorized</div>\n </div>\n <div class=\"storage-detail\">\n {{ TotalVectors | number }} vectors stored\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Edit Entity Document Slide-in Panel -->\n @if (ShowEditPanel) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseEditPanel()\">\n <div class=\"slide-panel open\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-solid fa-pen\"></i>\n Edit Entity Document\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity</label>\n <span class=\"edit-readonly-value\">{{ EditDocEntityName }}</span>\n </div>\n\n <!-- Template Section -->\n <div class=\"suggest-field\">\n <div class=\"edit-template-header\">\n <label class=\"suggest-label\">Template</label>\n <button class=\"edit-regenerate-btn\"\n [disabled]=\"IsEditRegenerating\"\n (click)=\"RegenerateTemplate()\"\n title=\"Regenerate template using AI\">\n @if (IsEditRegenerating) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Regenerating...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Regenerate with AI\n }\n </button>\n </div>\n <div class=\"template-editor-wrapper\">\n <mj-code-editor\n [value]=\"EditDocTemplate\"\n language=\"markdown\"\n [readonly]=\"false\"\n [lineWrapping]=\"true\"\n (change)=\"OnEditTemplateChange($event)\">\n </mj-code-editor>\n </div>\n </div>\n\n <!-- Selected Fields (parsed from template) -->\n @if (EditDocSelectedFields.length > 0) {\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Selected Fields</label>\n <div class=\"result-tags\">\n @for (field of EditDocSelectedFields; track field) {\n <span class=\"result-tag\">{{ field }}</span>\n }\n </div>\n </div>\n }\n\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Document Name</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"EditDocName\" />\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Embedding Model</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocAIModelID\">\n @for (model of AvailableEmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Vector Database</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocVectorDBID\">\n @for (db of vectorDatabases; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Vector Index</label>\n @if (EditFilteredIndexes.length > 0) {\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocVectorIndexID\">\n <option value=\"\">Auto (create/find matching index)</option>\n @for (idx of EditFilteredIndexes; track idx.ID) {\n <option [value]=\"idx.ID\">{{ idx.Name }}</option>\n }\n </select>\n } @else {\n <span class=\"edit-readonly-value\" style=\"font-size: 13px; color: var(--mj-text-muted);\">\n No indexes for this database \u2014 one will be created automatically on sync\n </span>\n }\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Status</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocStatus\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n <div class=\"result-actions\" style=\"margin-top: 1rem\">\n @if (IsEditSaving || IsEditDeleting) {\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveEditedDocument()\">\n <i class=\"fa-solid fa-save\"></i> Save Changes\n </button>\n <button class=\"edit-delete-btn\" (click)=\"DeleteEntityDocument()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Schedule Sync Dialog -->\n @if (ShowScheduleSyncDialog) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseScheduleSyncDialog()\">\n <div class=\"schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Schedule Vector Sync\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseScheduleSyncDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity Document</label>\n <span class=\"edit-readonly-value\">{{ ScheduleSyncDocName }}</span>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Action</label>\n <span class=\"edit-readonly-value\">__VectorizeEntity</span>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Cron Expression</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"ScheduleSyncCron\" placeholder=\"0 2 * * *\" />\n <div class=\"schedule-cron-preview\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ GetScheduleCronPreview(ScheduleSyncCron) }}\n </div>\n </div>\n <div class=\"suggest-field schedule-toggle-row\">\n <label class=\"suggest-label\">Enabled</label>\n <input type=\"checkbox\" class=\"mj-checkbox\" [(ngModel)]=\"ScheduleSyncEnabled\" />\n </div>\n <div class=\"result-actions\" style=\"margin-top: 1rem\">\n @if (ScheduleSyncSaving) {\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveScheduleSync()\">\n <i class=\"fa-solid fa-check\"></i> Create Schedule\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseScheduleSyncDialog()\">\n Cancel\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- No Vector Index Warning Dialog -->\n @if (ShowNoIndexWarning) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseNoIndexWarning()\">\n <div class=\"no-index-warning-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"no-index-warning-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <h3 class=\"no-index-warning-title\">Vector Index Required</h3>\n <p class=\"no-index-warning-message\">\n You need to create at least one vector database and index before creating entity documents.\n Go to the Configuration section to set up a vector database and create an index.\n </p>\n <div class=\"no-index-warning-actions\">\n <button class=\"suggest-submit-btn\" (click)=\"GoToConfiguration()\">\n <i class=\"fa-solid fa-gear\"></i> Go to Configuration\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseNoIndexWarning()\">\n Close\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Suggest Document Slide-in Panel -->\n @if (ShowSuggestDialog) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseSuggestDialog()\">\n <div class=\"slide-panel\" [class.open]=\"ShowSuggestDialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n AI Document Suggestion\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseSuggestDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n @if (!SuggestionResult) {\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity</label>\n <div class=\"entity-picker\">\n <button class=\"entity-picker-trigger\" (click)=\"ToggleEntityPicker()\">\n @if (SuggestEntityName) {\n <i class=\"fa-solid fa-table\"></i>\n <span class=\"entity-picker-value\">{{ SuggestEntityName }}</span>\n } @else {\n <i class=\"fa-solid fa-search\"></i>\n <span class=\"entity-picker-placeholder\">Search and select an entity...</span>\n }\n <i class=\"fa-solid fa-chevron-down entity-picker-arrow\"></i>\n </button>\n @if (ShowEntityPicker) {\n <div class=\"entity-picker-dropdown\" (mousedown)=\"$event.stopPropagation()\">\n <div class=\"entity-picker-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input #entitySearchInput\n type=\"text\"\n class=\"entity-picker-search-input\"\n placeholder=\"Filter entities...\"\n [(ngModel)]=\"EntitySearchText\"\n (input)=\"FilterEntities()\"\n (keydown)=\"OnEntityPickerKeyDown($event)\" />\n </div>\n <div class=\"entity-picker-list\">\n @for (group of FilteredEntityGroups; track group.SchemaName) {\n <div class=\"entity-picker-group\">\n <div class=\"entity-picker-group-header\">\n <i class=\"fa-solid fa-database\"></i>\n {{ group.SchemaName }}\n </div>\n @for (entity of group.Entities; track entity.ID) {\n <button class=\"entity-picker-item\"\n [class.entity-picker-item-selected]=\"entity.Name === SuggestEntityName\"\n [class.entity-picker-item-focused]=\"FlatFilteredEntities[SelectedEntityIndex]?.ID === entity.ID\"\n (click)=\"SelectEntity(entity.Name)\">\n <i class=\"fa-solid fa-table\"></i>\n {{ entity.Name }}\n </button>\n }\n </div>\n }\n @if (FilteredEntityGroups.length === 0) {\n <div class=\"entity-picker-empty\">\n No entities matching \"{{ EntitySearchText }}\"\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Use Case</label>\n <div class=\"use-case-options\">\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'duplicate detection'\"\n (click)=\"SuggestUseCase = 'duplicate detection'\">\n <i class=\"fa-solid fa-clone\"></i>\n Duplicate Detection\n </button>\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'search'\"\n (click)=\"SuggestUseCase = 'search'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Search\n </button>\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'classification'\"\n (click)=\"SuggestUseCase = 'classification'\">\n <i class=\"fa-solid fa-tags\"></i>\n Classification\n </button>\n </div>\n </div>\n <button class=\"suggest-submit-btn\"\n [disabled]=\"IsSuggesting || !SuggestEntityName\"\n (click)=\"RunSuggestion()\">\n @if (IsSuggesting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating with AI...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Generate Template\n }\n </button>\n @if (SuggestionError) {\n <div class=\"suggestion-error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ SuggestionError }}\n </div>\n }\n </div>\n } @else {\n <div class=\"suggest-result\">\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Suggested Template</h4>\n <div class=\"template-editor-wrapper\">\n <mj-code-editor\n [value]=\"EditableTemplate\"\n language=\"markdown\"\n [readonly]=\"false\"\n [lineWrapping]=\"true\"\n (change)=\"OnTemplateChange($event)\">\n </mj-code-editor>\n </div>\n </div>\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Selected Fields</h4>\n <div class=\"result-tags\">\n @for (field of SuggestionResult.selectedFields; track field) {\n <span class=\"result-tag\">{{ field }}</span>\n }\n </div>\n </div>\n @if ((SuggestionResult.selectedRelationships?.length ?? 0) > 0) {\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Related Entities</h4>\n @for (rel of SuggestionResult.selectedRelationships; track rel.name) {\n <div class=\"result-relationship\">\n <span class=\"rel-name\">{{ rel.name }}</span>\n <span class=\"rel-fields\">{{ rel.fields.join(', ') }}</span>\n </div>\n }\n </div>\n }\n <div class=\"result-section result-thresholds\">\n <div class=\"threshold-item\">\n <span class=\"threshold-label\">Potential Match</span>\n <span class=\"threshold-value\">{{ (SuggestionResult.potentialMatchThreshold * 100).toFixed(0) }}%</span>\n </div>\n <div class=\"threshold-item\">\n <span class=\"threshold-label\">Absolute Match</span>\n <span class=\"threshold-value\">{{ (SuggestionResult.absoluteMatchThreshold * 100).toFixed(0) }}%</span>\n </div>\n </div>\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Reasoning</h4>\n <p class=\"result-reasoning\">{{ SuggestionResult.reasoning }}</p>\n </div>\n <div class=\"result-section\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Document Name</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"SaveDocumentName\" />\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Embedding Model</label>\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedEmbeddingModelID\">\n @for (model of AvailableEmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Vector Database</label>\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedVectorDBID\">\n @for (db of vectorDatabases; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Vector Index</label>\n @if (FilteredIndexesForSelectedDB.length > 0) {\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedVectorIndexID\">\n <option value=\"\">Auto (create/find matching index)</option>\n @for (idx of FilteredIndexesForSelectedDB; track idx.ID) {\n <option [value]=\"idx.ID\">{{ idx.Name }}</option>\n }\n </select>\n } @else {\n <span class=\"edit-readonly-value\" style=\"font-size: 13px; color: var(--mj-text-muted);\">\n No indexes yet \u2014 create one in Configuration > Vector Database, or one will be created on sync\n </span>\n }\n </div>\n </div>\n <div class=\"result-actions\">\n @if (IsSavingDocument) {\n <div class=\"save-spinner\">\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveAsEntityDocument()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Entity Document\n </button>\n <button class=\"suggest-submit-btn suggest-try-again-btn\" (click)=\"ClearSuggestion()\">\n <i class=\"fa-solid fa-rotate\"></i> Try Again\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseSuggestDialog()\">\n Close\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n}\n", styles: ["/* ================================================================\n Vector Management Dashboard\n All colors use MJ design tokens from _tokens.scss\n ================================================================ */\n\n/* --- Loading state --- */\n.vector-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n}\n\n/* --- View Mode Toggle --- */\n.view-mode-toggle {\n display: flex;\n gap: 0.25rem;\n padding: 0 24px 0;\n margin-bottom: -12px;\n}\n\n.view-mode-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.85rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.view-mode-btn:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.view-mode-btn-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* --- Dashboard container --- */\n.vector-dashboard {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: var(--mj-bg-page);\n min-height: 100%;\n}\n\n/* --- KPI cards row --- */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n@media (max-width: 1200px) {\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 600px) {\n .kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* --- Main content: table + sidebar --- */\n.content-area {\n display: grid;\n grid-template-columns: 1fr 300px;\n gap: 24px;\n align-items: start;\n}\n\n@media (max-width: 1024px) {\n .content-area {\n grid-template-columns: 1fr;\n }\n}\n\n/* --- Sync table panel --- */\n.sync-table-panel {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.panel-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.refresh-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.refresh-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* --- Empty state --- */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 36px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n/* --- Table --- */\n.table-wrapper {\n overflow-x: auto;\n}\n\n.sync-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.sync-table th {\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n white-space: nowrap;\n}\n\n.sync-table td {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n\n.sync-table tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-center {\n text-align: center;\n}\n\n.entity-name {\n font-weight: 600;\n}\n\n.document-name {\n color: var(--mj-text-secondary);\n}\n\n.vector-count {\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n\n.last-synced {\n color: var(--mj-text-secondary);\n font-size: 12px;\n white-space: nowrap;\n}\n\n/* --- Action buttons in table --- */\n\n.actions-cell {\n display: flex;\n gap: 6px;\n align-items: center;\n justify-content: center;\n}\n\n.schedule-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.schedule-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* --- Schedule Dialog --- */\n.schedule-dialog {\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n}\n\n.schedule-cron-preview {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 0 0;\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n}\n\n.schedule-toggle-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n}\n\n.edit-delete-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n}\n\n.edit-readonly-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0;\n}\n\n/* --- Status badges --- */\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n white-space: nowrap;\n}\n\n.status-synced {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.status-syncing {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text, var(--mj-status-error));\n}\n\n.status-pending {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n/* --- Sync button --- */\n.sync-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.sync-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.sync-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ================================================================\n Sidebar\n ================================================================ */\n.sidebar {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.sidebar-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n}\n\n.sidebar-title {\n margin: 0 0 14px 0;\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sidebar-title i {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n/* --- Vector DB Health --- */\n.health-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.health-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.health-healthy {\n background: var(--mj-status-success);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-success) 50%, transparent);\n}\n\n.health-degraded {\n background: var(--mj-status-warning);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-warning) 50%, transparent);\n}\n\n.health-offline {\n background: var(--mj-status-error);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.health-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.health-status {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 18px;\n}\n\n/* --- Model Info --- */\n.model-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.info-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.info-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.info-value {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n/* --- Storage / Coverage Gauge --- */\n.gauge-container {\n margin-bottom: 8px;\n}\n\n.gauge-bar {\n height: 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n margin-bottom: 6px;\n}\n\n.gauge-fill {\n height: 100%;\n border-radius: 4px;\n background: var(--mj-brand-primary);\n transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 2px;\n}\n\n.gauge-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.storage-detail {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* --- Panel actions row --- */\n.panel-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* --- Suggest Document Button --- */\n.suggest-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.suggest-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n}\n\n/* --- Slide-in Panel Overlay --- */\n.slide-panel-overlay {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 100000;\n}\n\n.slide-panel {\n position: fixed;\n top: 0;\n right: 0;\n height: 100vh;\n width: 480px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slide-panel.open {\n transform: translateX(0);\n}\n\n.suggest-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.suggest-dialog-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggest-dialog-title i {\n color: var(--mj-brand-primary);\n}\n\n.suggest-close-btn {\n border: none;\n background: none;\n color: var(--mj-text-muted);\n font-size: 16px;\n cursor: pointer;\n padding: 4px;\n}\n\n.suggest-close-btn:hover {\n color: var(--mj-text-primary);\n}\n\n.suggest-dialog-body {\n padding: 24px;\n}\n\n/* --- Suggest Form --- */\n.suggest-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.suggest-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.suggest-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.suggest-select {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n}\n\n.suggest-select:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* ---- Use Case Button Group ---- */\n\n.use-case-options {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.use-case-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.use-case-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.use-case-btn-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.use-case-btn i {\n font-size: 12px;\n}\n\n/* ---- Entity Picker (grouped by schema) ---- */\n\n.entity-picker {\n position: relative;\n}\n\n.entity-picker-trigger {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s;\n}\n\n.entity-picker-trigger:hover {\n border-color: var(--mj-border-strong);\n}\n\n.entity-picker-placeholder {\n color: var(--mj-text-muted);\n flex: 1;\n}\n\n.entity-picker-value {\n flex: 1;\n font-weight: 500;\n}\n\n.entity-picker-arrow {\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 0.2s;\n}\n\n.entity-picker-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n box-shadow: 0 8px 32px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n z-index: 100;\n max-height: 350px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.entity-picker-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-picker-search i {\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n.entity-picker-search-input {\n flex: 1;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n outline: none;\n}\n\n.entity-picker-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.entity-picker-list {\n overflow-y: auto;\n max-height: 300px;\n padding: 4px 0;\n}\n\n.entity-picker-group-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n}\n\n.entity-picker-group-header i {\n font-size: 10px;\n}\n\n.entity-picker-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 14px 7px 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 0.1s;\n}\n\n.entity-picker-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-picker-item-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-picker-item i {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.entity-picker-item-selected i {\n color: var(--mj-brand-primary);\n}\n\n.entity-picker-item-focused {\n background: var(--mj-bg-surface-hover);\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.entity-picker-empty {\n padding: 20px 14px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---- Template Editor ---- */\n\n.template-editor-wrapper {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n min-height: 120px;\n max-height: 300px;\n}\n\n.template-editor-wrapper ::ng-deep .cm-editor {\n min-height: 120px;\n max-height: 300px;\n font-size: 13px;\n}\n\n.suggest-submit-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 10px 20px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.suggest-submit-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.suggestion-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n font-size: 13px;\n line-height: 1.4;\n}\n\n.suggestion-error i {\n flex-shrink: 0;\n}\n\n.suggest-submit-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* --- Suggestion Result --- */\n.suggest-result {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.result-section {\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 12px;\n}\n\n.result-section:last-child {\n border-bottom: none;\n}\n\n.result-heading {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.result-template {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-all;\n margin: 0;\n}\n\n.result-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.result-tag {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n}\n\n.result-relationship {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n}\n\n.rel-name {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.rel-fields {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.result-thresholds {\n display: flex;\n gap: 24px;\n}\n\n.threshold-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.threshold-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.threshold-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.result-reasoning {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.result-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n}\n\n.suggest-close-action {\n padding: 10px 20px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.suggest-close-action:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* --- Suggest Input --- */\n.suggest-input {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n width: 100%;\n box-sizing: border-box;\n}\n\n.suggest-input:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* --- Try Again Button (secondary style) --- */\n.suggest-try-again-btn {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.suggest-try-again-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n/* --- Save Spinner --- */\n.save-spinner {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 0;\n}\n\n/* --- Edit Panel Template Header --- */\n.edit-template-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.edit-regenerate-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.edit-regenerate-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.edit-regenerate-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* --- No Vector Index Warning Dialog --- */\n.no-index-warning-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n padding: 32px;\n text-align: center;\n}\n\n.no-index-warning-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n margin: 0 auto 16px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n}\n\n.no-index-warning-icon i {\n font-size: 24px;\n color: var(--mj-status-warning);\n}\n\n.no-index-warning-title {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.no-index-warning-message {\n margin: 0 0 24px 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n}\n\n.no-index-warning-actions {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n/* ================================================================\n Responsive \u2014 Vector Management\n ================================================================ */\n\n@media (max-width: 768px) {\n .panel-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .panel-actions {\n flex-wrap: wrap;\n }\n}\n\n@media (max-width: 600px) {\n .slide-panel {\n width: 100vw;\n max-width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .vector-dashboard {\n padding: 12px;\n }\n\n .suggest-btn .suggest-btn-text {\n display: none;\n }\n}\n"] }]
|
|
2227
|
-
}], null, {
|
|
2252
|
+
args: [{ standalone: false, selector: 'app-vector-management-resource', template: "@if (!HideToolbar) {\n <mj-page-layout>\n <mj-page-header\n Title=\"Vector Management\"\n Icon=\"fa-solid fa-cubes\"\n Subtitle=\"Vector index health, embeddings, and entity sync status\">\n <div actions>\n <mj-view-toggle\n [Options]=\"VectorViewOptions\"\n [ActiveKey]=\"ViewMode\"\n (KeyChange)=\"ViewMode = $any($event)\">\n </mj-view-toggle>\n </div>\n </mj-page-header>\n <mj-page-body [Flex]=\"true\">\n <ng-container *ngTemplateOutlet=\"vectorBody\"></ng-container>\n </mj-page-body>\n </mj-page-layout>\n}\n@if (HideToolbar) {\n <ng-container *ngTemplateOutlet=\"vectorBody\"></ng-container>\n}\n\n<ng-template #vectorBody>\n@if (IsLoading) {\n <div class=\"vector-loading\">\n <mj-loading text=\"Loading vector management data...\"></mj-loading>\n </div>\n} @else {\n <div class=\"vector-dashboard\">\n\n <!-- KPI Cards Row -->\n <div class=\"kpi-row\">\n @for (card of KPICards; track card.title) {\n <app-kpi-card [data]=\"card\"></app-kpi-card>\n }\n </div>\n\n <!-- Main Content Area: Table + Sidebar -->\n <div class=\"content-area\">\n <!-- Entity Sync Table -->\n <div class=\"sync-table-panel\">\n <div class=\"panel-header\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-table-list\"></i>\n Entity Sync Status\n </h3>\n <div class=\"panel-actions\">\n <button class=\"suggest-btn\" (click)=\"OpenSuggestDialog()\" title=\"Use AI to suggest an Entity Document template\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span class=\"suggest-btn-text\">Suggest Document</span>\n </button>\n <button class=\"refresh-btn\" (click)=\"LoadData()\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Refresh\n </button>\n </div>\n </div>\n\n @if (SyncRows.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <p>No entity documents configured for vectorization.</p>\n </div>\n } @else {\n <div class=\"table-wrapper\">\n <table class=\"sync-table\">\n <thead>\n <tr>\n <th>Entity</th>\n <th>Document</th>\n <th class=\"text-right\">Vectors</th>\n <th>Last Synced</th>\n <th>Status</th>\n <th class=\"text-center\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (row of SyncRows; track row.EntityDocumentID) {\n <tr>\n <td class=\"entity-name\">{{ row.EntityName }}</td>\n <td class=\"document-name\">{{ row.DocumentName }}</td>\n <td class=\"text-right vector-count\">{{ row.VectorCount | number }}</td>\n <td class=\"last-synced\">{{ FormatDate(row.LastSynced) }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"GetStatusClass(row.Status)\">\n <i [class]=\"GetStatusIcon(row.Status)\"></i>\n @if (row.Status === 'Syncing' && row.PercentComplete > 0) {\n {{ row.PercentComplete }}%\n } @else {\n {{ row.Status }}\n }\n </span>\n </td>\n <td class=\"text-center actions-cell\">\n <button\n class=\"sync-btn\"\n [disabled]=\"SyncingIds.has(row.EntityDocumentID)\"\n (click)=\"SyncEntity(row.EntityDocumentID)\"\n title=\"Sync now\">\n @if (SyncingIds.has(row.EntityDocumentID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n {{ row.PercentComplete > 0 ? row.PercentComplete + '%' : 'Sync' }}\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Sync\n }\n </button>\n <button\n class=\"schedule-btn\"\n (click)=\"OpenScheduleSyncDialog(row.EntityDocumentID)\"\n title=\"Schedule recurring sync\">\n <i class=\"fa-regular fa-clock\"></i>\n </button>\n <button\n class=\"edit-btn\"\n (click)=\"OpenEditPanel(row.EntityDocumentID)\"\n title=\"Edit entity document\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n\n <!-- Sidebar Panels -->\n <div class=\"sidebar\">\n <!-- Vector DB Health -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-heart-pulse\"></i>\n Vector DB Health\n </h4>\n <div class=\"health-row\">\n <span class=\"health-dot\" [class]=\"DBHealthClass\"></span>\n <span class=\"health-label\">{{ VectorDBName }}</span>\n </div>\n <div class=\"health-status\">{{ VectorDBStatus }}</div>\n </div>\n\n <!-- Embedding Model Info -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-microchip\"></i>\n Embedding Model\n </h4>\n <div class=\"model-info\">\n <div class=\"info-row\">\n <span class=\"info-label\">Model</span>\n <span class=\"info-value\">{{ EmbeddingModel.Name }}</span>\n </div>\n @if (EmbeddingModel.Dimensions != null) {\n <div class=\"info-row\">\n <span class=\"info-label\">Dimensions</span>\n <span class=\"info-value\">{{ EmbeddingModel.Dimensions | number }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Storage Usage -->\n <div class=\"sidebar-card\">\n <h4 class=\"sidebar-title\">\n <i class=\"fa-solid fa-hard-drive\"></i>\n Vectorization Coverage\n </h4>\n <div class=\"gauge-container\">\n <div class=\"gauge-bar\">\n <div class=\"gauge-fill\" [style.width.%]=\"StorageUsagePercent\"></div>\n </div>\n <div class=\"gauge-label\">{{ StorageLabel }} of records vectorized</div>\n </div>\n <div class=\"storage-detail\">\n {{ TotalVectors | number }} vectors stored\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Edit Entity Document Slide-in Panel -->\n @if (ShowEditPanel) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseEditPanel()\">\n <div class=\"slide-panel open\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-solid fa-pen\"></i>\n Edit Entity Document\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity</label>\n <span class=\"edit-readonly-value\">{{ EditDocEntityName }}</span>\n </div>\n\n <!-- Template Section -->\n <div class=\"suggest-field\">\n <div class=\"edit-template-header\">\n <label class=\"suggest-label\">Template</label>\n <button class=\"edit-regenerate-btn\"\n [disabled]=\"IsEditRegenerating\"\n (click)=\"RegenerateTemplate()\"\n title=\"Regenerate template using AI\">\n @if (IsEditRegenerating) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Regenerating...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Regenerate with AI\n }\n </button>\n </div>\n <div class=\"template-editor-wrapper\">\n <mj-code-editor\n [value]=\"EditDocTemplate\"\n language=\"markdown\"\n [readonly]=\"false\"\n [lineWrapping]=\"true\"\n (change)=\"OnEditTemplateChange($event)\">\n </mj-code-editor>\n </div>\n </div>\n\n <!-- Selected Fields (parsed from template) -->\n @if (EditDocSelectedFields.length > 0) {\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Selected Fields</label>\n <div class=\"result-tags\">\n @for (field of EditDocSelectedFields; track field) {\n <span class=\"result-tag\">{{ field }}</span>\n }\n </div>\n </div>\n }\n\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Document Name</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"EditDocName\" />\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Embedding Model</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocAIModelID\">\n @for (model of AvailableEmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Vector Database</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocVectorDBID\">\n @for (db of vectorDatabases; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Vector Index</label>\n @if (EditFilteredIndexes.length > 0) {\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocVectorIndexID\">\n <option value=\"\">Auto (create/find matching index)</option>\n @for (idx of EditFilteredIndexes; track idx.ID) {\n <option [value]=\"idx.ID\">{{ idx.Name }}</option>\n }\n </select>\n } @else {\n <span class=\"edit-readonly-value\" style=\"font-size: 13px; color: var(--mj-text-muted);\">\n No indexes for this database \u2014 one will be created automatically on sync\n </span>\n }\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Status</label>\n <select class=\"suggest-select\" [(ngModel)]=\"EditDocStatus\">\n <option value=\"Active\">Active</option>\n <option value=\"Inactive\">Inactive</option>\n </select>\n </div>\n <div class=\"result-actions\" style=\"margin-top: 1rem\">\n @if (IsEditSaving || IsEditDeleting) {\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveEditedDocument()\">\n <i class=\"fa-solid fa-save\"></i> Save Changes\n </button>\n <button class=\"edit-delete-btn\" (click)=\"DeleteEntityDocument()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Schedule Sync Dialog -->\n @if (ShowScheduleSyncDialog) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseScheduleSyncDialog()\">\n <div class=\"schedule-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-regular fa-clock\"></i>\n Schedule Vector Sync\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseScheduleSyncDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity Document</label>\n <span class=\"edit-readonly-value\">{{ ScheduleSyncDocName }}</span>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Action</label>\n <span class=\"edit-readonly-value\">__VectorizeEntity</span>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Cron Expression</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"ScheduleSyncCron\" placeholder=\"0 2 * * *\" />\n <div class=\"schedule-cron-preview\">\n <i class=\"fa-solid fa-info-circle\"></i>\n {{ GetScheduleCronPreview(ScheduleSyncCron) }}\n </div>\n </div>\n <div class=\"suggest-field schedule-toggle-row\">\n <label class=\"suggest-label\">Enabled</label>\n <input type=\"checkbox\" class=\"mj-checkbox\" [(ngModel)]=\"ScheduleSyncEnabled\" />\n </div>\n <div class=\"result-actions\" style=\"margin-top: 1rem\">\n @if (ScheduleSyncSaving) {\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveScheduleSync()\">\n <i class=\"fa-solid fa-check\"></i> Create Schedule\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseScheduleSyncDialog()\">\n Cancel\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- No Vector Index Warning Dialog -->\n @if (ShowNoIndexWarning) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseNoIndexWarning()\">\n <div class=\"no-index-warning-dialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"no-index-warning-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <h3 class=\"no-index-warning-title\">Vector Index Required</h3>\n <p class=\"no-index-warning-message\">\n You need to create at least one vector database and index before creating entity documents.\n Go to the Configuration section to set up a vector database and create an index.\n </p>\n <div class=\"no-index-warning-actions\">\n <button class=\"suggest-submit-btn\" (click)=\"GoToConfiguration()\">\n <i class=\"fa-solid fa-gear\"></i> Go to Configuration\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseNoIndexWarning()\">\n Close\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Suggest Document Slide-in Panel -->\n @if (ShowSuggestDialog) {\n <div class=\"slide-panel-overlay\" (click)=\"CloseSuggestDialog()\">\n <div class=\"slide-panel\" [class.open]=\"ShowSuggestDialog\" (click)=\"$event.stopPropagation()\">\n <div class=\"suggest-dialog-header\">\n <h3 class=\"suggest-dialog-title\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n AI Document Suggestion\n </h3>\n <button class=\"suggest-close-btn\" (click)=\"CloseSuggestDialog()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"suggest-dialog-body\">\n @if (!SuggestionResult) {\n <div class=\"suggest-form\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Entity</label>\n <div class=\"entity-picker\">\n <button class=\"entity-picker-trigger\" (click)=\"ToggleEntityPicker()\">\n @if (SuggestEntityName) {\n <i class=\"fa-solid fa-table\"></i>\n <span class=\"entity-picker-value\">{{ SuggestEntityName }}</span>\n } @else {\n <i class=\"fa-solid fa-search\"></i>\n <span class=\"entity-picker-placeholder\">Search and select an entity...</span>\n }\n <i class=\"fa-solid fa-chevron-down entity-picker-arrow\"></i>\n </button>\n @if (ShowEntityPicker) {\n <div class=\"entity-picker-dropdown\" (mousedown)=\"$event.stopPropagation()\">\n <div class=\"entity-picker-search\">\n <i class=\"fa-solid fa-search\"></i>\n <input #entitySearchInput\n type=\"text\"\n class=\"entity-picker-search-input\"\n placeholder=\"Filter entities...\"\n [(ngModel)]=\"EntitySearchText\"\n (input)=\"FilterEntities()\"\n (keydown)=\"OnEntityPickerKeyDown($event)\" />\n </div>\n <div class=\"entity-picker-list\">\n @for (group of FilteredEntityGroups; track group.SchemaName) {\n <div class=\"entity-picker-group\">\n <div class=\"entity-picker-group-header\">\n <i class=\"fa-solid fa-database\"></i>\n {{ group.SchemaName }}\n </div>\n @for (entity of group.Entities; track entity.ID) {\n <button class=\"entity-picker-item\"\n [class.entity-picker-item-selected]=\"entity.Name === SuggestEntityName\"\n [class.entity-picker-item-focused]=\"FlatFilteredEntities[SelectedEntityIndex]?.ID === entity.ID\"\n (click)=\"SelectEntity(entity.Name)\">\n <i class=\"fa-solid fa-table\"></i>\n {{ entity.Name }}\n </button>\n }\n </div>\n }\n @if (FilteredEntityGroups.length === 0) {\n <div class=\"entity-picker-empty\">\n No entities matching \"{{ EntitySearchText }}\"\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Use Case</label>\n <div class=\"use-case-options\">\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'duplicate detection'\"\n (click)=\"SuggestUseCase = 'duplicate detection'\">\n <i class=\"fa-solid fa-clone\"></i>\n Duplicate Detection\n </button>\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'search'\"\n (click)=\"SuggestUseCase = 'search'\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Search\n </button>\n <button class=\"use-case-btn\"\n [class.use-case-btn-active]=\"SuggestUseCase === 'classification'\"\n (click)=\"SuggestUseCase = 'classification'\">\n <i class=\"fa-solid fa-tags\"></i>\n Classification\n </button>\n </div>\n </div>\n <button class=\"suggest-submit-btn\"\n [disabled]=\"IsSuggesting || !SuggestEntityName\"\n (click)=\"RunSuggestion()\">\n @if (IsSuggesting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating with AI...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Generate Template\n }\n </button>\n @if (SuggestionError) {\n <div class=\"suggestion-error\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ SuggestionError }}\n </div>\n }\n </div>\n } @else {\n <div class=\"suggest-result\">\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Suggested Template</h4>\n <div class=\"template-editor-wrapper\">\n <mj-code-editor\n [value]=\"EditableTemplate\"\n language=\"markdown\"\n [readonly]=\"false\"\n [lineWrapping]=\"true\"\n (change)=\"OnTemplateChange($event)\">\n </mj-code-editor>\n </div>\n </div>\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Selected Fields</h4>\n <div class=\"result-tags\">\n @for (field of SuggestionResult.selectedFields; track field) {\n <span class=\"result-tag\">{{ field }}</span>\n }\n </div>\n </div>\n @if ((SuggestionResult.selectedRelationships?.length ?? 0) > 0) {\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Related Entities</h4>\n @for (rel of SuggestionResult.selectedRelationships; track rel.name) {\n <div class=\"result-relationship\">\n <span class=\"rel-name\">{{ rel.name }}</span>\n <span class=\"rel-fields\">{{ rel.fields.join(', ') }}</span>\n </div>\n }\n </div>\n }\n <div class=\"result-section result-thresholds\">\n <div class=\"threshold-item\">\n <span class=\"threshold-label\">Potential Match</span>\n <span class=\"threshold-value\">{{ (SuggestionResult.potentialMatchThreshold * 100).toFixed(0) }}%</span>\n </div>\n <div class=\"threshold-item\">\n <span class=\"threshold-label\">Absolute Match</span>\n <span class=\"threshold-value\">{{ (SuggestionResult.absoluteMatchThreshold * 100).toFixed(0) }}%</span>\n </div>\n </div>\n <div class=\"result-section\">\n <h4 class=\"result-heading\">Reasoning</h4>\n <p class=\"result-reasoning\">{{ SuggestionResult.reasoning }}</p>\n </div>\n <div class=\"result-section\">\n <div class=\"suggest-field\">\n <label class=\"suggest-label\">Document Name</label>\n <input class=\"suggest-input\" type=\"text\" [(ngModel)]=\"SaveDocumentName\" />\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Embedding Model</label>\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedEmbeddingModelID\">\n @for (model of AvailableEmbeddingModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Vector Database</label>\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedVectorDBID\">\n @for (db of vectorDatabases; track db.ID) {\n <option [value]=\"db.ID\">{{ db.Name }}</option>\n }\n </select>\n </div>\n <div class=\"suggest-field\" style=\"margin-top: 0.75rem\">\n <label class=\"suggest-label\">Vector Index</label>\n @if (FilteredIndexesForSelectedDB.length > 0) {\n <select class=\"suggest-select\" [(ngModel)]=\"SelectedVectorIndexID\">\n <option value=\"\">Auto (create/find matching index)</option>\n @for (idx of FilteredIndexesForSelectedDB; track idx.ID) {\n <option [value]=\"idx.ID\">{{ idx.Name }}</option>\n }\n </select>\n } @else {\n <span class=\"edit-readonly-value\" style=\"font-size: 13px; color: var(--mj-text-muted);\">\n No indexes yet \u2014 create one in Configuration > Vector Database, or one will be created on sync\n </span>\n }\n </div>\n </div>\n <div class=\"result-actions\">\n @if (IsSavingDocument) {\n <div class=\"save-spinner\">\n <mj-loading text=\"Saving...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <button class=\"suggest-submit-btn\" (click)=\"SaveAsEntityDocument()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save as Entity Document\n </button>\n <button class=\"suggest-submit-btn suggest-try-again-btn\" (click)=\"ClearSuggestion()\">\n <i class=\"fa-solid fa-rotate\"></i> Try Again\n </button>\n <button class=\"suggest-close-action\" (click)=\"CloseSuggestDialog()\">\n Close\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n}\n</ng-template>\n", styles: ["/* ================================================================\n Vector Management Dashboard\n All colors use MJ design tokens from _tokens.scss\n ================================================================ */\n\n\n/* --- Loading state --- */\n.vector-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n}\n\n/* --- View Mode Toggle --- */\n.view-mode-toggle {\n display: flex;\n gap: 0.25rem;\n padding: 0 24px 0;\n margin-bottom: -12px;\n}\n\n.view-mode-btn {\n display: inline-flex;\n align-items: center;\n gap: 0.4rem;\n padding: 0.4rem 0.85rem;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 0.82rem;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.view-mode-btn:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n.view-mode-btn-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n\n/* --- Dashboard container --- */\n.vector-dashboard {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 24px;\n background: var(--mj-bg-page);\n min-height: 100%;\n}\n\n/* --- KPI cards row --- */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n}\n\n@media (max-width: 1200px) {\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 600px) {\n .kpi-row {\n grid-template-columns: 1fr;\n }\n}\n\n/* --- Main content: table + sidebar --- */\n.content-area {\n display: grid;\n grid-template-columns: 1fr 300px;\n gap: 24px;\n align-items: start;\n}\n\n@media (max-width: 1024px) {\n .content-area {\n grid-template-columns: 1fr;\n }\n}\n\n/* --- Sync table panel --- */\n.sync-table-panel {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.panel-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.panel-title i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.refresh-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.refresh-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* --- Empty state --- */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i {\n font-size: 36px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n/* --- Table --- */\n.table-wrapper {\n overflow-x: auto;\n}\n\n.sync-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.sync-table th {\n padding: 10px 16px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n white-space: nowrap;\n}\n\n.sync-table td {\n padding: 12px 16px;\n font-size: 13px;\n color: var(--mj-text-primary);\n border-bottom: 1px solid var(--mj-border-subtle);\n vertical-align: middle;\n}\n\n.sync-table tbody tr:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-center {\n text-align: center;\n}\n\n.entity-name {\n font-weight: 600;\n}\n\n.document-name {\n color: var(--mj-text-secondary);\n}\n\n.vector-count {\n font-variant-numeric: tabular-nums;\n font-weight: 600;\n}\n\n.last-synced {\n color: var(--mj-text-secondary);\n font-size: 12px;\n white-space: nowrap;\n}\n\n/* --- Action buttons in table --- */\n\n.actions-cell {\n display: flex;\n gap: 6px;\n align-items: center;\n justify-content: center;\n}\n\n.schedule-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.schedule-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 30px;\n height: 30px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 12px;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* --- Schedule Dialog --- */\n.schedule-dialog {\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n}\n\n.schedule-cron-preview {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 0 0;\n font-size: 0.82rem;\n color: var(--mj-text-muted);\n}\n\n.schedule-toggle-row {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 12px;\n}\n\n.edit-delete-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error-text);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.edit-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n}\n\n.edit-readonly-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0;\n}\n\n/* --- Status badges --- */\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border-radius: 999px;\n font-size: 11px;\n font-weight: 600;\n white-space: nowrap;\n}\n\n.status-synced {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.status-syncing {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.status-error {\n background: color-mix(in srgb, var(--mj-status-error) 12%, var(--mj-bg-surface));\n color: var(--mj-status-error-text, var(--mj-status-error));\n}\n\n.status-pending {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n/* --- Sync button --- */\n.sync-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.sync-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.sync-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ================================================================\n Sidebar\n ================================================================ */\n.sidebar {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.sidebar-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n}\n\n.sidebar-title {\n margin: 0 0 14px 0;\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.sidebar-title i {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n/* --- Vector DB Health --- */\n.health-row {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n}\n\n.health-dot {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.health-healthy {\n background: var(--mj-status-success);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-success) 50%, transparent);\n}\n\n.health-degraded {\n background: var(--mj-status-warning);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-warning) 50%, transparent);\n}\n\n.health-offline {\n background: var(--mj-status-error);\n box-shadow: 0 0 6px color-mix(in srgb, var(--mj-status-error) 50%, transparent);\n}\n\n.health-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.health-status {\n font-size: 12px;\n color: var(--mj-text-muted);\n padding-left: 18px;\n}\n\n/* --- Model Info --- */\n.model-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.info-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.info-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.info-value {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n/* --- Storage / Coverage Gauge --- */\n.gauge-container {\n margin-bottom: 8px;\n}\n\n.gauge-bar {\n height: 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n margin-bottom: 6px;\n}\n\n.gauge-fill {\n height: 100%;\n border-radius: 4px;\n background: var(--mj-brand-primary);\n transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);\n min-width: 2px;\n}\n\n.gauge-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.storage-detail {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n/* --- Panel actions row --- */\n.panel-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* --- Suggest Document Button --- */\n.suggest-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.suggest-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary-hover);\n}\n\n/* --- Slide-in Panel Overlay --- */\n.slide-panel-overlay {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 100000;\n}\n\n.slide-panel {\n position: fixed;\n top: 0;\n right: 0;\n height: 100vh;\n width: 480px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n box-shadow: -4px 0 24px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow-y: auto;\n}\n\n.slide-panel.open {\n transform: translateX(0);\n}\n\n.suggest-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.suggest-dialog-title {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggest-dialog-title i {\n color: var(--mj-brand-primary);\n}\n\n.suggest-close-btn {\n border: none;\n background: none;\n color: var(--mj-text-muted);\n font-size: 16px;\n cursor: pointer;\n padding: 4px;\n}\n\n.suggest-close-btn:hover {\n color: var(--mj-text-primary);\n}\n\n.suggest-dialog-body {\n padding: 24px;\n}\n\n/* --- Suggest Form --- */\n.suggest-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.suggest-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.suggest-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.suggest-select {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n}\n\n.suggest-select:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* ---- Use Case Button Group ---- */\n\n.use-case-options {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.use-case-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.use-case-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-primary);\n}\n\n.use-case-btn-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.use-case-btn i {\n font-size: 12px;\n}\n\n/* ---- Entity Picker (grouped by schema) ---- */\n\n.entity-picker {\n position: relative;\n}\n\n.entity-picker-trigger {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 9px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: border-color 0.15s;\n}\n\n.entity-picker-trigger:hover {\n border-color: var(--mj-border-strong);\n}\n\n.entity-picker-placeholder {\n color: var(--mj-text-muted);\n flex: 1;\n}\n\n.entity-picker-value {\n flex: 1;\n font-weight: 500;\n}\n\n.entity-picker-arrow {\n font-size: 10px;\n color: var(--mj-text-muted);\n transition: transform 0.2s;\n}\n\n.entity-picker-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n box-shadow: 0 8px 32px color-mix(in srgb, var(--mj-text-primary) 15%, transparent);\n z-index: 100;\n max-height: 350px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.entity-picker-search {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.entity-picker-search i {\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n.entity-picker-search-input {\n flex: 1;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n outline: none;\n}\n\n.entity-picker-search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.entity-picker-list {\n overflow-y: auto;\n max-height: 300px;\n padding: 4px 0;\n}\n\n.entity-picker-group-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px 4px;\n font-size: 11px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n background: var(--mj-bg-surface-elevated, var(--mj-bg-surface));\n}\n\n.entity-picker-group-header i {\n font-size: 10px;\n}\n\n.entity-picker-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 14px 7px 28px;\n border: none;\n background: transparent;\n color: var(--mj-text-primary);\n font-size: 13px;\n cursor: pointer;\n text-align: left;\n transition: background 0.1s;\n}\n\n.entity-picker-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-picker-item-selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.entity-picker-item i {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.entity-picker-item-selected i {\n color: var(--mj-brand-primary);\n}\n\n.entity-picker-item-focused {\n background: var(--mj-bg-surface-hover);\n outline: 2px solid var(--mj-brand-primary);\n outline-offset: -2px;\n}\n\n.entity-picker-empty {\n padding: 20px 14px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---- Template Editor ---- */\n\n.template-editor-wrapper {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n min-height: 120px;\n max-height: 300px;\n}\n\n.template-editor-wrapper ::ng-deep .cm-editor {\n min-height: 120px;\n max-height: 300px;\n font-size: 13px;\n}\n\n.suggest-submit-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 10px 20px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.2s ease;\n}\n\n.suggest-submit-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.suggestion-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n font-size: 13px;\n line-height: 1.4;\n}\n\n.suggestion-error i {\n flex-shrink: 0;\n}\n\n.suggest-submit-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* --- Suggestion Result --- */\n.suggest-result {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.result-section {\n border-bottom: 1px solid var(--mj-border-subtle);\n padding-bottom: 12px;\n}\n\n.result-section:last-child {\n border-bottom: none;\n}\n\n.result-heading {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.result-template {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 6px;\n padding: 12px;\n font-size: 12px;\n color: var(--mj-text-primary);\n white-space: pre-wrap;\n word-break: break-all;\n margin: 0;\n}\n\n.result-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.result-tag {\n padding: 3px 10px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n font-size: 12px;\n font-weight: 500;\n}\n\n.result-relationship {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n}\n\n.rel-name {\n font-weight: 600;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.rel-fields {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.result-thresholds {\n display: flex;\n gap: 24px;\n}\n\n.threshold-item {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.threshold-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.threshold-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.result-reasoning {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.result-actions {\n display: flex;\n gap: 8px;\n padding-top: 8px;\n}\n\n.suggest-close-action {\n padding: 10px 20px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.suggest-close-action:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n/* --- Suggest Input --- */\n.suggest-input {\n padding: 8px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n width: 100%;\n box-sizing: border-box;\n}\n\n.suggest-input:focus {\n outline: none;\n border-color: var(--mj-border-focus);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* --- Try Again Button (secondary style) --- */\n.suggest-try-again-btn {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.suggest-try-again-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n/* --- Save Spinner --- */\n.save-spinner {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 0;\n}\n\n/* --- Edit Panel Template Header --- */\n.edit-template-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.edit-regenerate-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 10px;\n border: 1px solid var(--mj-brand-primary);\n border-radius: 6px;\n background: transparent;\n color: var(--mj-brand-primary);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n\n.edit-regenerate-btn:hover:not(:disabled) {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.edit-regenerate-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* --- No Vector Index Warning Dialog --- */\n.no-index-warning-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 440px;\n max-width: 90vw;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px color-mix(in srgb, var(--mj-text-primary) 20%, transparent);\n padding: 32px;\n text-align: center;\n}\n\n.no-index-warning-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n margin: 0 auto 16px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n}\n\n.no-index-warning-icon i {\n font-size: 24px;\n color: var(--mj-status-warning);\n}\n\n.no-index-warning-title {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.no-index-warning-message {\n margin: 0 0 24px 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n}\n\n.no-index-warning-actions {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n/* ================================================================\n Responsive \u2014 Vector Management\n ================================================================ */\n\n@media (max-width: 768px) {\n .panel-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .panel-actions {\n flex-wrap: wrap;\n }\n}\n\n@media (max-width: 600px) {\n .slide-panel {\n width: 100vw;\n max-width: 100vw;\n }\n}\n\n@media (max-width: 480px) {\n .vector-dashboard {\n padding: 12px;\n }\n\n .suggest-btn .suggest-btn-text {\n display: none;\n }\n}\n"] }]
|
|
2253
|
+
}], null, { HideToolbar: [{
|
|
2228
2254
|
type: Input
|
|
2229
2255
|
}], entitySearchInput: [{
|
|
2230
2256
|
type: ViewChild,
|
|
2231
2257
|
args: ['entitySearchInput']
|
|
2232
2258
|
}] }); })();
|
|
2233
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(VectorManagementResourceComponent, { className: "VectorManagementResourceComponent", filePath: "src/AI/components/vectors/vector-management-resource.component.ts", lineNumber:
|
|
2259
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(VectorManagementResourceComponent, { className: "VectorManagementResourceComponent", filePath: "src/AI/components/vectors/vector-management-resource.component.ts", lineNumber: 72 }); })();
|
|
2234
2260
|
export function LoadVectorManagementResource() {
|
|
2235
2261
|
// Prevents tree-shaking
|
|
2236
2262
|
}
|