Skip to content

Commit 8b4077d

Browse files
committed
Merge branch 'develop'
2 parents e2c13b2 + e3db4c8 commit 8b4077d

39 files changed

Lines changed: 2789 additions & 1272 deletions

.prettierrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"semi": false,
2+
"semi": true,
33
"singleQuote": true,
44
"trailingComma": "es5",
55
"tabWidth": 2,

DOCS_SYNC_SETUP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The setup creates:
88

99
- **Separate docs repository**: `altus4/docs` for documentation only
1010
- **Automatic sync**: Changes in `docs/` directory trigger sync to docs repo
11-
- **GitHub Pages**: Auto-deployment of documentation site
11+
- **GitHub Pages**: Auto-deployment of documentation site with Mermaid diagram support
1212
- **Manual sync**: Script for manual synchronization when needed
1313

1414
## Prerequisites

docs/.vitepress/config.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import { defineConfig } from 'vitepress'
2-
import { fileURLToPath, URL } from 'node:url'
3-
import tailwindcss from 'tailwindcss'
4-
import autoprefixer from 'autoprefixer'
1+
import { defineConfig } from 'vitepress';
2+
import { fileURLToPath, URL } from 'node:url';
3+
import tailwindcss from 'tailwindcss';
4+
import autoprefixer from 'autoprefixer';
55

66
// https://vitepress.dev/reference/site-config
77
export default defineConfig({
88
title: 'Altus 4',
99
description: 'AI-Enhanced Search Engine',
1010
base: '/docs/',
11-
ignoreDeadLinks: true,
11+
ignoreDeadLinks: false,
1212

1313
// Configure Vite for VitePress
1414
vite: {
@@ -83,6 +83,9 @@ export default defineConfig({
8383
},
8484
],
8585

86-
socialLinks: [{ icon: 'github', link: 'https://github.com/altus4/core' }],
86+
socialLinks: [
87+
{ icon: 'github', link: 'https://github.com/altus4/core' },
88+
{ icon: 'globe', link: 'https://altus4.thavarshan.com' },
89+
],
8790
},
88-
})
91+
});

docs/.vitepress/theme/custom.css

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/* Mermaid diagram styling */
2+
.mermaid-diagram {
3+
display: flex;
4+
justify-content: center;
5+
align-items: center;
6+
margin: 1.5rem 0;
7+
padding: 1rem;
8+
background-color: var(--vp-c-bg-soft);
9+
border-radius: 8px;
10+
border: 1px solid var(--vp-c-border);
11+
max-width: 100%;
12+
overflow: hidden;
13+
}
14+
15+
.mermaid-diagram svg {
16+
max-width: 100%;
17+
max-height: 600px;
18+
height: auto;
19+
width: auto;
20+
}
21+
22+
/* Dark mode adjustments */
23+
.dark .mermaid-diagram {
24+
background-color: var(--vp-c-bg-alt);
25+
}
26+
27+
/* Ensure mermaid diagrams are responsive */
28+
@media (max-width: 768px) {
29+
.mermaid-diagram {
30+
padding: 0.5rem;
31+
margin: 1rem 0;
32+
}
33+
34+
.mermaid-diagram svg {
35+
font-size: 12px;
36+
}
37+
}
38+
39+
/* Override mermaid default styles for better integration */
40+
.mermaid-diagram .node rect,
41+
.mermaid-diagram .node circle,
42+
.mermaid-diagram .node ellipse,
43+
.mermaid-diagram .node polygon {
44+
stroke: var(--vp-c-border-hard);
45+
stroke-width: 1px;
46+
}
47+
48+
.mermaid-diagram .edgePath .path {
49+
stroke: var(--vp-c-text-2);
50+
stroke-width: 1.5px;
51+
}
52+
53+
.mermaid-diagram .edgeLabel {
54+
background-color: var(--vp-c-bg);
55+
color: var(--vp-c-text-1);
56+
}
57+
58+
/* Style for different node types */
59+
.mermaid-diagram .node.default rect {
60+
fill: var(--vp-c-default-soft);
61+
}
62+
63+
.mermaid-diagram .node.primary rect {
64+
fill: var(--vp-c-brand-soft);
65+
}
66+
67+
.mermaid-diagram .node.secondary rect {
68+
fill: var(--vp-c-bg-soft);
69+
}

docs/.vitepress/theme/index.ts

Lines changed: 127 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,131 @@
1-
import { h } from 'vue'
2-
import DefaultTheme from 'vitepress/theme'
3-
import type { Theme } from 'vitepress'
1+
import DefaultTheme from 'vitepress/theme';
2+
import type { Theme } from 'vitepress';
3+
import './custom.css';
44

55
export default {
66
extends: DefaultTheme,
7-
Layout: () => {
8-
return h(DefaultTheme.Layout, null, {
9-
// Custom layout slots if needed
10-
})
11-
},
12-
enhanceApp() {
13-
// Register global components if needed
14-
// app.component('MyGlobalComponent', MyComponent)
7+
enhanceApp({ router }) {
8+
if (typeof window !== 'undefined') {
9+
// Initialize Mermaid when the app starts
10+
const initMermaid = async () => {
11+
try {
12+
console.log('Initializing Mermaid...');
13+
const { default: mermaid } = await import('mermaid');
14+
15+
mermaid.initialize({
16+
startOnLoad: false,
17+
theme: 'default',
18+
themeVariables: {
19+
primaryColor: '#3b82f6',
20+
primaryTextColor: '#1f2937',
21+
primaryBorderColor: '#e5e7eb',
22+
lineColor: '#6b7280',
23+
secondaryColor: '#f3f4f6',
24+
tertiaryColor: '#ffffff',
25+
},
26+
});
27+
28+
console.log('Mermaid initialized successfully');
29+
30+
// Function to render mermaid diagrams
31+
const renderMermaidDiagrams = async () => {
32+
// Try multiple selectors to find mermaid code blocks
33+
let mermaidElements = document.querySelectorAll(
34+
'pre code.language-mermaid'
35+
);
36+
37+
// If not found, try alternative selectors
38+
if (mermaidElements.length === 0) {
39+
mermaidElements = document.querySelectorAll(
40+
'code.language-mermaid'
41+
);
42+
}
43+
if (mermaidElements.length === 0) {
44+
mermaidElements = document.querySelectorAll(
45+
'pre[class*="language-mermaid"] code'
46+
);
47+
}
48+
if (mermaidElements.length === 0) {
49+
mermaidElements = document.querySelectorAll(
50+
'[class*="language-mermaid"]'
51+
);
52+
}
53+
54+
console.log(
55+
`Found ${mermaidElements.length} mermaid diagrams to render`
56+
);
57+
58+
for (let i = 0; i < mermaidElements.length; i++) {
59+
const element = mermaidElements[i] as HTMLElement;
60+
61+
// Skip if already processed
62+
if (element.getAttribute('data-mermaid-processed')) {
63+
continue;
64+
}
65+
66+
let graphDefinition = element.textContent || '';
67+
68+
// Clean up the text content - remove "mermaid" prefix if present
69+
if (graphDefinition.startsWith('mermaid')) {
70+
graphDefinition = graphDefinition.substring(7).trim();
71+
}
72+
73+
const graphId = `mermaid-diagram-${Date.now()}-${i}`;
74+
75+
// Mark as being processed
76+
element.setAttribute('data-mermaid-processed', 'processing');
77+
78+
// Create container for the diagram
79+
const container = document.createElement('div');
80+
container.className = 'mermaid-diagram';
81+
container.id = graphId;
82+
83+
try {
84+
// Render the mermaid diagram
85+
const { svg } = await mermaid.render(graphId, graphDefinition);
86+
container.innerHTML = svg;
87+
88+
// Find the correct parent element to replace (the <pre> element)
89+
const preElement = element.parentElement; // This should be <pre>
90+
console.log('Element structure:', {
91+
element: element.tagName,
92+
parent: preElement?.tagName,
93+
grandparent: preElement?.parentElement?.tagName,
94+
});
95+
96+
if (preElement && preElement.tagName === 'PRE') {
97+
// Replace only the <pre> element, not its parent
98+
preElement.parentElement?.replaceChild(container, preElement);
99+
} else {
100+
// Fallback: replace the element itself if structure is different
101+
element.parentElement?.replaceChild(container, element);
102+
}
103+
} catch (error) {
104+
console.error('Mermaid rendering failed:', error);
105+
// Keep the original code block on error
106+
element.setAttribute('data-mermaid-processed', 'error');
107+
}
108+
}
109+
};
110+
111+
// Render diagrams on initial load
112+
renderMermaidDiagrams();
113+
114+
// Re-render on route changes
115+
router.onAfterRouteChange = () => {
116+
setTimeout(renderMermaidDiagrams, 100);
117+
};
118+
} catch (error) {
119+
console.error('Failed to initialize Mermaid:', error);
120+
}
121+
};
122+
123+
// Initialize after DOM is ready
124+
if (document.readyState === 'loading') {
125+
document.addEventListener('DOMContentLoaded', initMermaid);
126+
} else {
127+
initMermaid();
128+
}
129+
}
15130
},
16-
} satisfies Theme
131+
} satisfies Theme;

docs/api/index.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,19 @@ All API responses follow this structure:
114114

115115
```typescript
116116
interface ApiResponse<T> {
117-
success: boolean
118-
data?: T
117+
success: boolean;
118+
data?: T;
119119
error?: {
120-
code: string
121-
message: string
122-
details?: any
123-
}
120+
code: string;
121+
message: string;
122+
details?: any;
123+
};
124124
meta?: {
125-
timestamp: Date
126-
requestId: string
127-
version: string
128-
executionTime?: number
129-
}
125+
timestamp: Date;
126+
requestId: string;
127+
version: string;
128+
executionTime?: number;
129+
};
130130
}
131131
```
132132

@@ -300,10 +300,10 @@ const response = await fetch('http://localhost:3000/api/search', {
300300
searchMode: 'natural',
301301
limit: 10,
302302
}),
303-
})
303+
});
304304

305-
const result = await response.json()
306-
console.log(result.data.results)
305+
const result = await response.json();
306+
console.log(result.data.results);
307307
```
308308

309309
### Python Examples

0 commit comments

Comments
 (0)