# Frontend (`src/`) React 19 + TypeScript + Vite. UI поверх Tauri IPC (см. [../src-tauri/README.md](../src-tauri/README.md)) — работает как в Tauri-webview (десктоп/Android), так и в обычном браузере при `pnpm dev` (Tauri API в этом случае недоступны, см. `src/lib/platform.ts`). ## Поддиректории | Путь | Назначение | |---|---| | [`pages/`](#pages) | Роуты приложения | | [`features/README.md`](features/README.md) | Крупные UI-фичи (кнопка VPN, селектор сервера, меню...) | | [`store/README.md`](store/README.md) | Zustand-стейт | | [`lib/README.md`](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`** — монтирует ``, инициализирует `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 зашиты в коде. На десктопе показывает блокирующий экран.