2.6 KiB
2.6 KiB
Frontend (src/)
React 19 + TypeScript + Vite. UI поверх Tauri IPC (см.
../src-tauri/README.md) — работает как в
Tauri-webview (десктоп/Android), так и в обычном браузере при pnpm dev
(Tauri API в этом случае недоступны, см. src/lib/platform.ts).
Поддиректории
| Путь | Назначение |
|---|---|
pages/ |
Роуты приложения |
features/README.md |
Крупные UI-фичи (кнопка VPN, селектор сервера, меню...) |
store/README.md |
Zustand-стейт |
lib/README.md |
API-клиент, платформенные хелперы |
components/ui/ |
Автогенерированные примитивы shadcn/radix — не редактируются вручную, без отдельного README |
components/shared/ |
Собственные переиспользуемые компоненты (кнопка-тумблер VPN, карточка настройки) |
assets/flags/ |
Локальные SVG-флаги для статического списка серверов (см. store/README.md) — принципиально не грузятся с внешнего CDN, см. комментарий в features/CountrySelect.tsx |
locales/ |
en.json / ru.json для i18next |
Точки входа
main.tsx— монтирует<App/>, инициализируетi18n.js.App.tsx— роутер, сплэш-скрин, фон-канвас (matrix-engine), корневой layout (Header + BurgerMenu + Outlet).ThemeProvider.tsx— тёмная/светлая тема с синхронизацией вlocalStorageи системной темой; хукuseTheme().i18n.js— конфиг react-i18next (RU/EN, автоопределение языка).
Роуты (pages/)
Home.tsx— главный экран:VpnControl+CountrySelect+VpnStats.Settings.tsx— killswitch, excluded domains, исключения приложений, reduce motion.About.tsx— статическая информация о протоколе.TelegramWeb.tsx— только мобильный режим: отдельный sandbox-туннель (allow-list только для Telegram-пакетов), не завязан на выбор сервера вCountrySelect— IP/SNI зашиты в коде. На десктопе показывает блокирующий экран.