Реакция на клики и контекстное меню
Как обрабатывать hit-test, selection и контекстные меню в табличном редакторе.
Compute contract отвечает за семантику книги. Pointer-события принадлежат UI-хосту. Интегратор должен разделять эти обязанности:
| Событие/задача | Кто владеет | Что передавать |
|---|---|---|
| click / double-click | Web/Desktop host | Координату, hit-test result, текущий selection |
| контекстное меню | Web/Desktop host | Тип объекта и разрешённые команды из состояния |
| значение/формула ячейки | Rust compute contract | sheetKey, row, col, inputKind, input |
| Undo/Redo | Rust compute contract | subsetId и direction |
| сохранение | Rust compute contract | subsetId и destinationUri |
Минимальный объект контекста UI
Заголовок раздела «Минимальный объект контекста UI»{ "workbookSession": "subset-...", "sheetKey": "xl/worksheets/sheet1.xml", "selection": { "top": 0, "left": 0, "rows": 1, "cols": 1 }, "hit": { "kind": "cell", "row": 0, "col": 0 }, "pointer": { "kind": "double-click", "button": 0 }}UI использует такой объект для выбора меню. Команда, изменяющая документ, затем преобразуется в строго типизированный запрос compute contract. Не отправляйте DOM-объекты или HTML в Rust.