/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { useQuery } from '@tanstack/react-query' import { Construction } from 'lucide-react' import { useTranslation } from 'react-i18next' import { PublicLayout } from '@/components/layout' import { RichContent } from '@/components/rich-content' import { Skeleton } from '@/components/ui/skeleton' import { isHttpUrl, isLikelyHtml } from '@/lib/content-format' import { getAboutContent } from './api' function EmptyAboutState() { const { t } = useTranslation() const currentYear = new Date().getFullYear() return (

{t('No About Content Set')}

{t( 'The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.' )}

{t('New API Project Repository:')}{' '} {t('https://github.com/QuantumNous/new-api')}

{t('NewAPI')} {' '} © {currentYear}{' '} {t('QuantumNous')} {' '} {t('| Based on')}{' '} {t('One API')} {' '} © 2023{' '} {t('JustSong')}

{t('This project must be used in compliance with the')}{' '} {t('AGPL v3.0 License')} .

) } export function About() { const { t } = useTranslation() const { data, isLoading } = useQuery({ queryKey: ['about-content'], queryFn: getAboutContent, }) const rawContent = data?.data?.trim() ?? '' const hasContent = rawContent.length > 0 const isUrl = hasContent && isHttpUrl(rawContent) const contentIsHtml = hasContent && isLikelyHtml(rawContent) if (isLoading) { return (
) } if (!hasContent) { return ( ) } if (isUrl) { return (