From 33ae14a99d55b8959e54508c41c3e2eba63a9b33 Mon Sep 17 00:00:00 2001 From: Matysh Date: Mon, 28 Sep 2026 17:17:08 +0300 Subject: [PATCH] test(touch): align kiosk smoke and Russian guide (#691) Issue: #691 User-Visible: no --- demo/smoke_pan_any_zoom.mjs | 26 ++++++++++++++++---------- docs/USER-GUIDE.ru.md | 12 ++++++------ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/demo/smoke_pan_any_zoom.mjs b/demo/smoke_pan_any_zoom.mjs index 8fe959c1..13f9ad3e 100644 --- a/demo/smoke_pan_any_zoom.mjs +++ b/demo/smoke_pan_any_zoom.mjs @@ -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; diff --git a/docs/USER-GUIDE.ru.md b/docs/USER-GUIDE.ru.md index 5eaa85e6..fa61f5b1 100644 --- a/docs/USER-GUIDE.ru.md +++ b/docs/USER-GUIDE.ru.md @@ -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 секунд |