41 lines
2.7 KiB
Markdown
41 lines
2.7 KiB
Markdown
# 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:'<name>', 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
|
|
<!-- Заполняет реализатор -->
|