Why
Real-phone testing (2026-06-11) showed the mobile version unusable; emulation / mobile-chromium e2e doesn't catch these. Needs a real-device pass: collect, triage, fix critical bugs.
Proposed solution
Done criterion: basic scenarios work on a real phone (open/load, pan/zoom, create/select/move, draw+bind link, open panels); all critical/blocker bugs closed; manual verification on device required.
Property-panel on mobile (design APPROVED 2026-06-12): narrow screen → panel pinned to BOTTOM (bottom sheet), not floating by element. Switch in SelectionFloatingPanel (floating↔sheet) by media-query (pointer:coarse OR width < ~640px, via useMobileLayout → .du-sel-panel-dock); PropertyPanel controls marked primary|overflow and reused. Frequent/⋮ split (approved):
- Shape: frequent
Fill·Stroke·Width; ⋮ Dash·Roundness·Opacity·Layer·Link·Dup·Delete.
- Text: frequent
Size·Color·Alignment; ⋮ Font·Bold/strike·Layer·Link·Dup·Delete.
- Link: frequent
Color·Width·Arrowhead(end); ⋮ Dash·Routing·LineKind·Arrowhead(start)·Auto·Delete.
Where in code: packages/state/src/editor/pointer-binding.ts — touch/pointer gestures; editor/pinch.ts, editor/long-press.ts; packages/react-ui/src/* — responsive panels/toolbar/popover; apps/diagram/* — demo wrapper, viewport meta, responsive layout; apps/e2e — mobile-chromium project.
Kind: feature
Alternatives / Notes
- No data-model changes — UX/interaction/layout only. Check hi-DPI / scaling on mobile canvas2d/webgl2. Mobile needs its own layout, not a scaled desktop one. Coordinate layer pinned by
scene/tests/viewport-transform-matrix, state/tests/pinch, state/tests/dom-events-coords, renderer-canvas/tests/canvas-target-dpr.
- Fixed: selection-frame/overlay drawn without DPR scaling (
Canvas2DTarget.setTransform clobbered DPR base; viewport-meta user-scalable=no) 64af7d0; input steals focus/hotkeys while typing (shared isEditableTarget incl. contenteditable in hotkeys.ts) 879ec8e; one-finger canvas pan 20b2171; library→canvas drag as tap-to-place on coarse-pointer 20761ec. Done: bottom-sheet on narrow/touch, floating on fine-pointer; safe-area-inset-bottom + targets ≥44px (styles.css .du-sel-panel-dock, .du-sel-panel-mobile .du-sel-icon-button).
Why
Real-phone testing (2026-06-11) showed the mobile version unusable; emulation /
mobile-chromiume2e doesn't catch these. Needs a real-device pass: collect, triage, fix critical bugs.Proposed solution
mobile-chromiume2e to catch the regressions found.Done criterion: basic scenarios work on a real phone (open/load, pan/zoom, create/select/move, draw+bind link, open panels); all critical/blocker bugs closed; manual verification on device required.
Property-panel on mobile (design APPROVED 2026-06-12): narrow screen → panel pinned to BOTTOM (bottom sheet), not floating by element. Switch in
SelectionFloatingPanel(floating↔sheet) by media-query (pointer:coarseOR width < ~640px, viauseMobileLayout→.du-sel-panel-dock);PropertyPanelcontrols markedprimary|overflowand reused. Frequent/⋮ split (approved):Fill·Stroke·Width; ⋮Dash·Roundness·Opacity·Layer·Link·Dup·Delete.Size·Color·Alignment; ⋮Font·Bold/strike·Layer·Link·Dup·Delete.Color·Width·Arrowhead(end); ⋮Dash·Routing·LineKind·Arrowhead(start)·Auto·Delete.Where in code:
packages/state/src/editor/pointer-binding.ts— touch/pointer gestures;editor/pinch.ts,editor/long-press.ts;packages/react-ui/src/*— responsive panels/toolbar/popover;apps/diagram/*— demo wrapper, viewport meta, responsive layout;apps/e2e—mobile-chromiumproject.Kind: feature
Alternatives / Notes
scene/tests/viewport-transform-matrix,state/tests/pinch,state/tests/dom-events-coords,renderer-canvas/tests/canvas-target-dpr.Canvas2DTarget.setTransformclobbered DPR base; viewport-metauser-scalable=no)64af7d0; input steals focus/hotkeys while typing (sharedisEditableTargetincl. contenteditable inhotkeys.ts)879ec8e; one-finger canvas pan20b2171; library→canvas drag as tap-to-place on coarse-pointer20761ec. Done: bottom-sheet on narrow/touch, floating on fine-pointer; safe-area-inset-bottom + targets ≥44px (styles.css .du-sel-panel-dock,.du-sel-panel-mobile .du-sel-icon-button).