# Архитектура Calculator ## Дерево файлов ``` calculator/ ├── service.yaml # Конфиг для ci-templates (тип, домен, ресурсы) ├── .drone.yml # CI/CD пайплайн (копия base.drone.yml) ├── index.html ├── package.json ├── tsconfig.json ├── vite.config.ts ├── public/ │ └── favicon.svg └── src/ ├── main.tsx # Точка входа, рендер ├── App.tsx # Роутинг: /login → /calculator ├── App.css # Глобальные стили (reset, body, центрирование) │ ├── context/ │ └── AuthContext.tsx # React Context + Provider для псевдоавторизации │ ├── hooks/ │ ├── useCalculator.ts # Стейт-машина калькулятора (вся логика) │ └── useKeyboard.ts # Слушатель клавиатуры → маппинг на действия │ ├── utils/ │ └── calculate.ts # Чистые функции вычислений │ ├── pages/ │ ├── LoginPage.tsx # Страница входа │ ├── LoginPage.module.css │ ├── CalculatorPage.tsx # Страница калькулятора (шапка + калькулятор) │ └── CalculatorPage.module.css │ └── components/ ├── Calculator/ │ ├── Calculator.tsx # Обёртка: Display + Keypad │ └── Calculator.module.css ├── Display/ │ ├── Display.tsx # Выражение + результат │ └── Display.module.css ├── Keypad/ │ ├── Keypad.tsx # Сетка кнопок │ └── Keypad.module.css └── Button/ ├── Button.tsx # Кнопка калькулятора └── Button.module.css ``` ## Схема компонентов ``` ← context/AuthContext.tsx /login → ← Форма логина / → ← Редирект на /login если нет юзера ├── Header (логин + выход) └── ├── ← expression + result └── ← сетка