Long-press pop menu
Press & hold a target to pop its actions
Hold ~0.5s (watch it dip), right-click, or focus it and press Enter / Menu / Shift+F10 (or its ⋯). In the menu: ↑ ↓ move, Enter runs, Esc closes.
Routing every session through the credential-store proxy for credentials. Ship it.
NockerlMenu opened 0 times · selected: none · pointer, right-click, and keyboard all work; the island is live.
Gestures
Section titled “Gestures”The pop is the same contextual action menu whichever gesture opens it. One menu, several triggers:
| Gesture | Where | Opens |
|---|---|---|
| Long-press (press-and-hold) | Android (primary), touch web | the pop menu |
| Hover → the ⋯ affordance, click | desktop / mouse web | the same pop menu (the ⋯ is the DESKTOP entry point) |
| Right-click / Ctrl-click | web, macOS (.contextMenu) |
the same pop menu |
| Keyboard (focus ⋯, or Shift+F10 → Enter) | web a11y | the same pop menu |
The hover ⋯ is therefore not an odd extra affordance; it is simply how a mouse / keyboard user reaches the long-press menu (long-press is a touch gesture, so the desktop needs a visible entry point to the same menu).
Tap-to-select is a different gesture. Tapping a chat bubble (its onSelect) selects the item (a toggle, marked by the cyan selection ring); it does not open the action menu. Reach for the pop menu when an element needs a menu of actions; reach for tap-to-select when it needs selection. The two compose: a bubble can be both selectable and long-press-poppable.
Parameters
Section titled “Parameters”The trigger and treatment are unified; the real divergences between shipped platforms:
- Composition: Android ships the reusable
Modifier.longPressPop(dip + accent ripple + haptic) and pairs it with aDropdownMenu; Swift uses the system.contextMenu(its own lift + dim, no custom ripple); web composes scrim + lifted target + anchored menu in oneLongPressPopisland. - Today’s bubble action: the Android chat
MessageBubblelong-press currently copies directly (combinedClickable(onLongClick)+ haptic) rather than opening the multi-action menu. The menu is the target state this spec documents. - Backdrop: web + Android dim with the
--color-scrimtoken; Swift inherits the system context-menu dim. - Haptics: Android fires
HapticFeedbackType.LongPress; web has no haptic channel; macOS relies on the system menu feedback.