test(touch): align kiosk smoke and Russian guide (#691)

Issue: #691
User-Visible: no
This commit is contained in:
Matysh
2026-09-28 17:17:08 +03:00
parent 09f8cf4c11
commit 33ae14a99d
2 changed files with 22 additions and 16 deletions
+16 -10
View File
@@ -9,7 +9,8 @@
// at 800 %, in view mode and in every editor; how far you may walk is decided
// by `_clampView` (PAN_SLACK: about a screen past the content) and not by the
// zoom. The tools keep the pointer they already owned — a resize handle, a
// device badge, an opening — and the kiosk keeps its floor swipe.
// device badge, an opening — and the kiosk keeps its floor swipe from the
// active 48 px edge while central horizontal drags remain pan.
import { launch, check, checkAll, finish } from './serve.mjs';
const { page, browser } = await launch();
const out = {};
@@ -192,7 +193,7 @@ Object.assign(out, await page.evaluate(async () => {
return o;
}));
// ---- the kiosk keeps its floor swipe ---------------------------------------
// ---- the kiosk keeps its edge-owned floor swipe ----------------------------
Object.assign(out, await page.evaluate(async () => {
const c0 = window.__card;
const o = {};
@@ -207,19 +208,24 @@ Object.assign(out, await page.evaluate(async () => {
const sr = k.shadowRoot || k.renderRoot;
const stage = sr.querySelector('.stage');
const fire = (type, id, x, y) => stage.dispatchEvent(new PointerEvent(type, {
bubbles: true, composed: true, cancelable: true, pointerId: id, clientX: x, clientY: y,
bubbles: true, composed: true, cancelable: true, pointerId: id,
pointerType: 'touch', isPrimary: true, button: 0,
buttons: type === 'pointerup' ? 0 : 1, clientX: x, clientY: y,
}));
k._applyView(1); await k.updateComplete;
const rect = stage.getBoundingClientRect();
const rightEdgeX = rect.right - 20;
const centerY = rect.top + rect.height / 2;
const s0 = k._space;
const v0 = { ...k._viewOr(k._baseVb()) };
// a REAL swipe: down, several moves, up — the moves are what used to be
// impossible to add to smoke_kiosk without hijacking the gesture
fire('pointerdown', 41, 600, 300);
fire('pointermove', 41, 540, 302);
fire('pointermove', 41, 480, 305);
fire('pointermove', 41, 450, 305);
// A real floor swipe starts inside the active right-edge strip and moves
// inward. Several moves prove that the plan never pans under the gesture.
fire('pointerdown', 41, rightEdgeX, centerY);
fire('pointermove', 41, rightEdgeX - 60, centerY + 2);
fire('pointermove', 41, rightEdgeX - 120, centerY + 5);
fire('pointermove', 41, rightEdgeX - 150, centerY + 5);
const midPan = Math.abs(k._viewOr(k._baseVb()).x - v0.x);
fire('pointerup', 41, 450, 305);
fire('pointerup', 41, rightEdgeX - 150, centerY + 5);
await k.updateComplete;
o.kioskSwipeStillSwitchesFloors = k._space !== s0;
o.kioskHorizontalDragIsNotAPan = midPan < 1;
+6 -6
View File
@@ -471,9 +471,9 @@ desktop: для точного рисования, Resize, модификато
| Сценарий | Мышь | Touch в просмотре | Touch в редакторах | Клавиатура |
|---|---|---|---|---|
| Масштаб и панорама | Колесо; drag пустого места; кнопки `−`/`+`; двойной клик по свободному фону вписывает всё | Щипок; drag; двойной тап по свободному фону вписывает всё | Работает, но точность не гарантируется; двойного тапа «Вписать всё» нет | — |
| Комната | Клик по свободной части комнаты вписывает её с полями 10% | Одиночный tap вписывает комнату; повторный tap не сбрасывает киоск | — | `Enter`/`Space` на видимой подписи комнаты |
| Переключение пространства | Клик по вкладке | Клик; в киоске свайп при масштабе 1:1 | Клик по вкладке | — |
| Масштаб и панорама | Колесо; drag пустого места; кнопки `−`/`+`; двойной клик по фону, заливке комнаты или её пассивной подписи вписывает всё | Щипок; drag; двойной тап по фону, заливке комнаты или её пассивной подписи вписывает всё | Работает, но точность не гарантируется; двойного тапа «Вписать всё» нет | — |
| Комната | Одиночный клик по свободной части комнаты ждёт 350 мс и вписывает её с полями 10%; второй чистый клик за это время вписывает весь план без промежуточного движения | Одиночный tap ждёт 350 мс и вписывает комнату; второй чистый tap за это время вписывает весь план без промежуточного движения | — | `Enter`/`Space` на видимой подписи комнаты вписывает её сразу |
| Переключение пространства | Клик по вкладке | Клик; в киоске при масштабе 1:1 — свайп внутрь из 48 CSS px у края, за которым есть соседнее пространство | Клик по вкладке | — |
| Устройство | Клик/двойной клик по правилам режима | Tap; безопасные действия как на desktop | Drag и свойства — best effort | `Esc` закрывает верхнюю поверхность |
| Рисование стен и точный drag | Полный контракт | Не применяется | Best effort; для Resize и точных точек используйте мышь | `Shift` меняет магнит/угол; `Esc` завершает цепочку стен или отменяет текущий точный drag |
| История редактора | Кнопки Undo/Redo | Не применяется | Кнопки могут работать, жест не гарантирован | `Ctrl/Cmd+Z`, `Ctrl/Cmd+Shift+Z`, `Ctrl+Y` |
@@ -482,7 +482,7 @@ desktop: для точного рисования, Resize, модификато
Особенности:
- колесо, кнопки `−`/`+`, «Вписать всё», стрелка возврата и двойной клик/тап по
свободному фону в Просмотре или киоске используют короткий плавный переход
фону, заливке комнаты или её пассивной подписи в Просмотре или киоске используют короткий плавный переход
камеры; частые события колеса меняют текущую цель, а не выстраиваются в очередь;
- щипок и панорамирование по-прежнему следуют за пальцами без задержки; при
включённом в системе уменьшении движения любой масштаб меняется мгновенно;
@@ -1933,9 +1933,9 @@ cycle: 30
| Шапка карточки | Скрыта |
| Редакторы | Недоступны |
| Высота | 100dvh |
| Свайп | Листает пространства по кругу при масштабе 1:1 |
| Свайп | При масштабе 1:1 листает пространства жестом внутрь из 48 CSS px у края, за которым есть соседнее пространство; drag вне этой зоны панорамирует план |
| Щипок/панорама | Масштабирует и двигает план |
| Двойной тап по свободному фону | Вписывает весь план (как «Вписать всё») |
| Двойной тап по фону, заливке комнаты или её пассивной подписи | Вписывает весь план (как «Вписать всё») без промежуточного вписывания комнаты |
| Удержание пустого места 3 секунды | Открывает локальные размеры иконок и текста |
| `cycle` | Автоматически листает пространства; при взаимодействии пауза 60 секунд |