Files
vidconf/frontend/src/components/auth/AuthLayout.tsx
Max Ronzhin b6f57384b0 feat(ui): общий футер на всех страницах, кроме комнаты
`AppFooter` — версия инстанса из публичного `/api/health` (не требует
авторизации, поэтому работает и на экранах входа; поля `version` может не
быть — тогда версия не показывается) плюс копирайт с ТЕКУЩИМ годом и
ссылкой на профиль автора.

Подключён во все раскладки: `page-shell` (календарь, админка, профиль, мои
конференции), `AuthLayout` (вход, регистрация, подтверждение email),
`join-shell` и `lobby-shell`. В комнате конференции футера нет — там
полноэкранное видео.

Прежний футер админки (`.admin-footer`) удалён вместе со стилем — дубля не
осталось. В брендовой панели экранов auth строка «© 2026 VidConf ·
self-hosted» ужата до «self-hosted»: год там был захардкожен, а два
копирайта на одном экране — дубль.
2026-07-27 01:31:52 +03:00

60 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { ReactNode } from 'react'
import { AppFooter } from '@/components/layout/AppFooter'
import { LogoMark } from '@/components/ui/LogoMark'
import { ThemeToggle } from '@/components/ui/ThemeToggle'
import '@/styles/auth.css'
/**
* Общая двухколоночная разметка экранов auth (бренд-панель + форма),
* см. design/mockups/auth.html. Переключатель темы — плавающей плашкой в
* правом верхнем углу (см. design/mockups/dark/login.html): у экрана нет
* общего топбара, панель бренда и форма — раздельные колонки.
*/
export function AuthLayout({ children }: { children: ReactNode }) {
return (
<div className="layout">
<ThemeToggle className="theme-toggle--floating" />
<aside className="brand-panel">
<div className="brand-mark">
<LogoMark /> VidConf
</div>
<div className="brand-copy">
<p className="eyebrow">[ SELF-HOSTED ВИДЕОКОНФЕРЕНЦИИ ]</p>
<h1 className="brand-headline">
Ваши встречи.
<br />
Ваша инфраструктура.
</h1>
<p className="brand-sub">
Видео, записи и AI-саммари обрабатываются на ваших серверах - данные не уходят за пределы вашей
инфраструктуры. Гости подключаются по ссылке или номеру, без регистрации.
</p>
<div className="brand-stats">
<div className="stat-glass">
<strong>100%</strong>
<span>данных - в вашем контуре</span>
</div>
<div className="stat-glass">
<strong>AI-саммари</strong>
<span>на почту после встречи</span>
</div>
</div>
</div>
<p className="hint-msg" style={{ position: 'relative', zIndex: 1 }}>
self-hosted
</p>
</aside>
{/* Копирайт с годом и версией инстанса — общий `AppFooter` (он же на всех
остальных страницах). Из брендовой панели строку «© 2026 VidConf ·
self-hosted» при этом ужали до «self-hosted»: год там был
захардкожен, а два копирайта на одном экране — дубль. */}
<main className="form-panel">
{children}
<AppFooter />
</main>
</div>
)
}