import { useState, useEffect } from 'react'; import { Text, Stack, Anchor, Group, Card, Image, Center, Badge, Button, rem, } from '@mantine/core'; import { Github, FolderOpen } from 'lucide-react'; import type { VersionInfo } from '@/types/electron'; import { PRODUCT_NAME } from '@/constants'; import iconUrl from '/icon.png'; export const AboutTab = () => { const [versionInfo, setVersionInfo] = useState(null); useEffect(() => { const loadVersionInfo = async () => { try { const info = await window.electronAPI.app.getVersionInfo(); setVersionInfo(info); } catch (error) { window.electronAPI.logs.logError( 'Failed to load version info', error as Error ); } }; loadVersionInfo(); }, []); if (!versionInfo) { return (
Loading version information...
); } const versionItems = [ { label: 'App Version', value: versionInfo.appVersion }, { label: 'Electron', value: versionInfo.electronVersion }, { label: 'Node.js', value: versionInfo.nodeVersion }, { label: 'Chromium', value: versionInfo.chromeVersion }, { label: 'V8', value: versionInfo.v8Version }, { label: 'Operating System', value: `${versionInfo.platform} ${versionInfo.arch} (${versionInfo.osVersion})`, }, ]; return ( {PRODUCT_NAME}
{PRODUCT_NAME} v{versionInfo.appVersion} Run Large Language Models locally { e.preventDefault(); window.electronAPI.app.openExternal( 'https://github.com/lone-cloud/gerbil' ); }} style={{ textDecoration: 'none' }} > GitHub
{versionItems.map((item, index) => ( {item.label}: {item.value} ))}
); };