# Phase 1: Графики + интеракции **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** frontend ## Objective Добавить в рантайм графики (plot-объекты), перетаскиваемые ручки (drag → параметр), векторы и числовые readout. После фазы спека со слайдером, draggable-точкой и live-графиком работает. ## Tasks - [ ] Plot-объект в спеке: `{ type:'plot', expr:'...', var:'x', range:[a,b], samples, trace? }` — рисует график выражения; `trace:true` — накапливает след по `t`. Переиспользовать `_graph_panel.js` (посмотреть API). - [ ] Draggable-ручка: объект/маркер с `drag:{ param:'', axis:'x|y|xy', min,max }` — перетаскивание мышью/тачем меняет параметр (и наоборот, позиция следует за параметром). Хит-тест в мир-координатах. - [ ] Readout: `{ type:'readout', label, expr, unit, precision }` — живое значение выражения как текст/бейдж. - [ ] Vector-объект с привязкой к (origin, dx, dy)-выражениям + стрелка. - [ ] Тач-поддержка drag (pointer events), не ломая существующую логику доски/лабы. - [ ] Обновить демо-спеку: добавить слайдер, draggable-точку, plot + readout. ## Files to Modify/Create - `frontend/js/labs/_sim_engine.js` — типы plot/readout/vector, drag-интеракции (modify) - `frontend/js/labs/_sim_demo.js` — расширить демо (modify) ## Acceptance Criteria - Перетаскивание ручки меняет параметр; зависимые объекты/график обновляются. - График строится по выражению; trace накапливает след во времени. - Readout показывает живое значение. Тач работает. ## Notes - Drag не должен конфликтовать с pan/zoom рантайма (если есть). Приоритет хит-теста — ручки. - Сэмплинг графика разумный (без фриза на больших range). ## Review Checklist - [ ] Все задачи выполнены - [ ] Drag работает мышью и тачем - [ ] Нет регрессий рантайма Ф0 - [ ] Нет эмодзи, стиль проекта ## Handoff to Next Phase