obsidian-qdrant/styles.css
Nicholai 38889c1d65 Initial implementation of Qdrant Semantic Search plugin
- Complete plugin architecture with modular design
- Qdrant client with HTTP integration using requestUrl
- Ollama and OpenAI embedding providers with batching
- Hybrid chunking (semantic + size-based fallback)
- Content extractors for markdown, code, PDFs, and images
- Real-time indexing with file watcher and queue
- Search modal with keyboard navigation
- Comprehensive settings UI with connection testing
- Graph visualization framework (basic implementation)
- Full TypeScript types and error handling
- Desktop-only plugin with status bar integration
- Complete documentation and setup guide

Features implemented:
 Semantic search with vector embeddings
 Multiple embedding providers (Ollama/OpenAI)
 Rich content extraction (markdown, code, PDFs, images)
 Smart chunking with heading-based splits
 Real-time file indexing with progress tracking
 Standalone search interface
 Comprehensive settings and configuration
 Graph view foundation for document relationships
 Full error handling and logging
 Complete documentation and troubleshooting guide

Ready for testing with Qdrant instance and embedding provider setup.
2025-10-23 08:48:29 -06:00

226 lines
4.2 KiB
CSS

/* Qdrant Semantic Search Plugin Styles */
.qdrant-search-header {
margin-bottom: 1rem;
}
.qdrant-search-input {
width: 100%;
padding: 0.5rem;
margin-bottom: 1rem;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-primary);
color: var(--text-normal);
font-size: 1rem;
}
.qdrant-search-input:focus {
outline: none;
border-color: var(--interactive-accent);
box-shadow: 0 0 0 2px var(--interactive-accent-hover);
}
.qdrant-search-results {
max-height: 400px;
overflow-y: auto;
}
.qdrant-search-result {
padding: 0.75rem;
margin-bottom: 0.5rem;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background: var(--background-primary);
cursor: pointer;
transition: all 0.2s ease;
}
.qdrant-search-result:hover {
background: var(--background-secondary);
border-color: var(--interactive-accent);
}
.qdrant-search-result.selected {
background: var(--interactive-accent);
color: var(--text-on-accent);
border-color: var(--interactive-accent);
}
.qdrant-search-result-path {
font-size: 0.8rem;
color: var(--text-muted);
margin-bottom: 0.25rem;
}
.qdrant-search-result-title {
font-weight: 600;
margin-bottom: 0.5rem;
color: var(--text-normal);
}
.qdrant-search-result.selected .qdrant-search-result-title {
color: var(--text-on-accent);
}
.qdrant-search-result-snippet {
font-size: 0.9rem;
line-height: 1.4;
margin-bottom: 0.5rem;
color: var(--text-normal);
}
.qdrant-search-result.selected .qdrant-search-result-snippet {
color: var(--text-on-accent);
}
.qdrant-search-result-metadata {
font-size: 0.75rem;
color: var(--text-muted);
margin-bottom: 0.25rem;
}
.qdrant-search-result.selected .qdrant-search-result-metadata {
color: var(--text-on-accent);
}
.qdrant-search-result-score {
font-size: 0.75rem;
color: var(--text-muted);
font-weight: 500;
}
.qdrant-search-result.selected .qdrant-search-result-score {
color: var(--text-on-accent);
}
.qdrant-search-no-results {
text-align: center;
padding: 2rem;
color: var(--text-muted);
font-style: italic;
}
.qdrant-search-status {
font-size: 0.8rem;
color: var(--text-muted);
margin-top: 0.5rem;
text-align: center;
}
/* Graph view styles */
.qdrant-graph-container {
width: 100%;
height: 100%;
position: relative;
}
.qdrant-graph-svg {
width: 100%;
height: 100%;
}
.qdrant-graph-node {
cursor: pointer;
transition: all 0.2s ease;
}
.qdrant-graph-node:hover {
stroke-width: 3px;
}
.qdrant-graph-edge {
stroke: var(--text-muted);
stroke-width: 1px;
opacity: 0.6;
}
.qdrant-graph-edge:hover {
stroke-width: 2px;
opacity: 1;
}
.qdrant-graph-tooltip {
position: absolute;
background: var(--background-primary);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
padding: 0.5rem;
font-size: 0.8rem;
pointer-events: none;
z-index: 1000;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* Settings styles */
.qdrant-settings-section {
margin-bottom: 2rem;
}
.qdrant-settings-section h3 {
margin-bottom: 1rem;
color: var(--text-accent);
}
.qdrant-settings-section h4 {
margin-bottom: 0.75rem;
color: var(--text-normal);
}
/* Status bar styles */
.qdrant-status-bar {
font-size: 0.8rem;
color: var(--text-muted);
}
/* Progress indicator */
.qdrant-progress {
width: 100%;
height: 4px;
background: var(--background-modifier-border);
border-radius: 2px;
overflow: hidden;
margin: 0.5rem 0;
}
.qdrant-progress-bar {
height: 100%;
background: var(--interactive-accent);
transition: width 0.3s ease;
}
/* Error styles */
.qdrant-error {
color: var(--text-error);
background: var(--background-modifier-error);
border: 1px solid var(--text-error);
border-radius: 4px;
padding: 0.5rem;
margin: 0.5rem 0;
}
/* Success styles */
.qdrant-success {
color: var(--text-success);
background: var(--background-modifier-success);
border: 1px solid var(--text-success);
border-radius: 4px;
padding: 0.5rem;
margin: 0.5rem 0;
}
/* Loading spinner */
.qdrant-spinner {
display: inline-block;
width: 16px;
height: 16px;
border: 2px solid var(--background-modifier-border);
border-top: 2px solid var(--interactive-accent);
border-radius: 50%;
animation: qdrant-spin 1s linear infinite;
}
@keyframes qdrant-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}