Skip to content

Entering node selection #340

Description

@johannesmutter

Entering node selection (desktop + mobile)
Consolidates #248, the selection sub-thread in #322 (comments), and the mobile aspect of #259. Related: #53, #336.

Problem — The only ways into node selection today are the ESC key and the toolbar's select-parent button. That is an extra step, not discoverable for new users, and pointer/touch users have no direct path (#248).

Constraints (per discussion in #322) — Desktop-first 1, one implementation path, no mobile-only code paths 2. Nothing may battle native selection while we rely on it. Editing infrastructure is at its code-size limit. Ideal end state: no visible chrome at all; ESC stays as a keyboard shortcut only.

Approaches side by side

Approach Desktop Mobile Discoverable Conflict risk Cost
ESC + toolbar << (status quo) yes yes low none done
Direct click/tap on node frame (Figma-like, #248) yes yes medium edges occupied by node gaps and text hit areas; tricky hit box design medium
Floating handle / action zone (⠿ Notion, Craft) yes yes high occupies layout space; but can fit where whitespace is likely: bottom right near edge or top left near edge medium
Meta key + click yes no low none low
Swipe left on node, repeat to ascend (Craft) only trackpad yes medium back and forward navigation. (no risk for: native selection, scrolling ... as falsely assumed) mobile-first code path high
Long press no / (right click) yes low iOS callout and preview gestures medium

Swipe gestures and direct node click is the only chrome-free approach (matches the ideal end state), with a lot of work it can work identically on both platforms. It doesn't fight native selection, only back and forward navigation, but also manageable. A visible handle scores highest on discoverability and could later double as drag-to-reorder and menu anchor, but it is permanent chrome, but it can also be designed to be unobtrusive.

Proposal

  • For now: keep and optimize ESC + << (contextual, hidden at top level).
  • Mid term: clicking/tapping a node's non-text area selects it (needs exploration first);
  • Later: Gestures (app land only?)

To experiment

  • Prototype direct node click in empty space;
  • Edge case testing for "no native-selection interference on iOS/Android"
  • Decide descend/ascend click semantics

Footnotes

  1. Desktop first needs a more clear definition, e.g. is it meant as "desktop only" or "no mobile optimizations". Need to clarify if this is about priority of tasks, or something else e.g. principles like low LOC. Also not clear if desktop first refers to fine pointer input vs. touch screen or screen size, as an iPad Pro is desktop in size but touch and a remarkable with stylus is fine pointer, but small screen. Or is it very specific like: Chrome on a MacBook Pro with trackpad/ mouse?

  2. no mobile-only code paths: needs clarification because clearly there are already dozens of mobile related optimizations. What is the difference between a viewport size optimization and a pointer (touch vs. click) optimization? E.g. is meant that there should not be mobile only or desktop only features. So unclarity is mainly about where to draw the line.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions