# `src/features/`

Крупные самостоятельные UI-блоки (в отличие от `components/ui` — не
переиспользуемые примитивы, а конкретные фичи приложения).

| Файл | Назначение |
|---|---|
| `VpnControl.tsx` | Главная кнопка подключения. Берёт выбранный узел из `useNodesStore`, собирает `TunnelConfig` из `useSettingsStore` и вызывает `startVpn(config, ip, port, sni)` из `vpn-plugin`. Слушает Tauri-event `status-change`. |
| `CountrySelect.tsx` | Выпадающий список серверов (`useNodesStore`). Флаги — локальные SVG (`assets/flags`) для известных статических узлов, иначе эмодзи-фолбэк через `react-country-flag` (**намеренно без** `svg`-режима этой либы — он тянет иконки с внешнего CDN, что бьётся об CSP и не грузится офлайн). Заблокирован во время подключения. |
| `VpnStats.tsx` | RX/TX счётчики трафика из `useTrafficStore`, форматирование байт в человекочитаемый вид. |
| `Header.tsx` | Шапка: бургер-кнопка, лого, переключатели темы/языка. |
| `BurgerMenu.tsx` | Выезжающее боковое меню с навигацией (Home/Settings/Telegram/About). |
| `ThemeToggle.tsx` / `ToggleLanguge.tsx` | Точечные переключатели темы и языка (RU/EN), делегируют в `ThemeProvider`/`i18n`. |
| `SplashScreen.tsx` | Интро-заставка при старте (~5 сек), скрывается по таймеру. |
| `AppExclusions.tsx` | Диалог выбора приложений для исключения из VPN-туннеля. На Android дёргает `getInstalledApps()` из `vpn-plugin`, на остальных платформах — заглушка. Результат пишется в `useSettingsStore.excludedApps`. |
