{
e.preventDefault();
cancelPress();
openAt(e.clientX, e.clientY);
}}
onkeydown={(e) => {
if (e.key === 'ContextMenu' || (e.key === 'F10' && e.shiftKey)) {
e.preventDefault();
const r = area.getBoundingClientRect();
openAt(r.left + 8, r.top + Math.min(r.height, 32));
}
}}
onpointerdown={(e) => {
if (e.pointerType !== 'touch') return;
press = {
x: e.clientX,
y: e.clientY,
timer: setTimeout(() => {
if (press) openAt(press.x, press.y);
press = undefined;
}, 500)
};
}}
onpointermove={(e) => {
// A finger that moves is scrolling, not pressing.
if (press && Math.hypot(e.clientX - press.x, e.clientY - press.y) > 10) cancelPress();
}}
onpointerup={cancelPress}
onpointercancel={cancelPress}
>
{@render children()}
Right-click, long-press or press Shift+F10 for options.
{#snippet trigger(props)}
{/snippet}
{@render menu()}