()
| 27 | } |
| 28 | |
| 29 | export function SideNav() { |
| 30 | const pathname = usePathname(); |
| 31 | const [npmVersion, setNpmVersion] = useState<string | null>(null); |
| 32 | |
| 33 | useEffect(() => { |
| 34 | fetch('https://registry.npmjs.org/agentation') |
| 35 | .then(res => res.json()) |
| 36 | .then(data => { |
| 37 | const latest = data['dist-tags']?.latest; |
| 38 | setNpmVersion(latest); |
| 39 | }) |
| 40 | .catch(() => {}); |
| 41 | }, []); |
| 42 | |
| 43 | const links: ({ href: string; label: string; badge?: string; items?: { id: string; text: string }[] } | { section: string })[] = [ |
| 44 | { href: "/", label: "Overview" }, |
| 45 | { href: "/install", label: "Install" }, |
| 46 | { |
| 47 | href: "/features", |
| 48 | label: "Features", |
| 49 | items: [ |
| 50 | { id: 'annotation-modes', text: 'Annotation Modes' }, |
| 51 | { id: 'toolbar-controls', text: 'Toolbar Controls' }, |
| 52 | { id: 'marker-types', text: 'Marker Types' }, |
| 53 | { id: 'smart-identification', text: 'Smart Identification' }, |
| 54 | { id: 'computed-styles', text: 'Computed Styles' }, |
| 55 | { id: 'react-detection', text: 'React Detection' }, |
| 56 | { id: 'layout-mode', text: 'Layout Mode' }, |
| 57 | { id: 'keyboard-shortcuts', text: 'Keyboard Shortcuts' }, |
| 58 | { id: 'agent-sync', text: 'Agent Sync' }, |
| 59 | { id: 'settings', text: 'Settings' }, |
| 60 | ], |
| 61 | }, |
| 62 | { href: "/output", label: "Output" }, |
| 63 | { |
| 64 | href: "/schema", |
| 65 | label: "Schema", |
| 66 | badge: "AFS 1.1", |
| 67 | items: [ |
| 68 | { id: 'overview', text: 'Overview' }, |
| 69 | { id: 'design-goals', text: 'Design Goals' }, |
| 70 | { id: 'annotation-object', text: 'Annotation Object' }, |
| 71 | { id: 'typescript-definition', text: 'TypeScript' }, |
| 72 | { id: 'event-envelope', text: 'Event Envelope' }, |
| 73 | { id: 'json-schema', text: 'JSON Schema' }, |
| 74 | { id: 'example', text: 'Example' }, |
| 75 | { id: 'markdown-output', text: 'Markdown Output' }, |
| 76 | { id: 'implementations', text: 'Implementations' }, |
| 77 | { id: 'building', text: 'Building' }, |
| 78 | { id: 'why', text: 'Why This Format?' }, |
| 79 | { id: 'versioning', text: 'Versioning' }, |
| 80 | ], |
| 81 | }, |
| 82 | { section: "Tools" }, |
| 83 | { |
| 84 | href: "/mcp", |
| 85 | label: "MCP", |
| 86 | items: [ |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…