Same deck, same zones, one card — except the card is the thing you right-clicked and the pile is one deep. Press e , right-click a file, or hold it on a touch screen, and the zones appear around the pointer: a marking menu, the kind 3D and audio software has used for thirty years, because a direction is faster to aim than a list is to read. Then point and release — there is no drag, the position of the pointer when you let go is the answer. A release in the dead centre chooses nothing and closes.
Nothing here is a new feature. The menu is a Deck in a 260px fixed box, moved to the pointer, with
a card the size of a full stop:
const menu = new Deck(el, {
zones: ACTIONS,
layout: radialLayout({ maxPerRing: 6 }),
tapZones: true, // click the wedge — no drag needed
threshold: 40, // …but a flick towards it works too
renderCard: () => {}, // the card is a dot: the cursor is the card
onSort: (file, zone) => run(zone.id, file),
});
el.style.left = (e.clientX - 130) + 'px';
el.style.top = (e.clientY - 130) + 'px';
menu.setItems([file]); The wedges are the same annulus sectors as the radial layout uses, and the same rule keeps them legible: crowded tiles drop their keycap and shrink their glyph before the tile itself scales. At this size that happens immediately, which is why the menu shows icons and short words rather than the folder tiles the other demos use.
Because it is the same question — which of these, for this one thing — and the same answer: a direction. What changes is the pile (one item instead of hundreds) and the aim (from the pointer instead of from the middle of a stage). Everything else, including the keyboard, the throw and the model, is unchanged. The model is switched off here: six actions on a file it has never seen is not a prediction problem.