feat(frontend): open sidebar media on click, unbreak long-press menus
This commit is contained in:
1 parent
12cc7d57e3
commit
004fd56f2c
5 files changed
+156
-39
No files matched your search
@@ -8,12 +8,41 @@
|
||||
}
|
||||
|
||||
const { children, menu }: Props = $props();
|
||||
|
||||
type PointerHandler = (event: PointerEvent) => void;
|
||||
|
||||
let open = $state(false);
|
||||
let suppressClick = false;
|
||||
|
||||
function triggerProps(props: Record<string, unknown>) {
|
||||
const onpointerdown = props.onpointerdown as PointerHandler;
|
||||
const onpointerup = props.onpointerup as PointerHandler;
|
||||
return {
|
||||
...props,
|
||||
onpointerdown(event: PointerEvent) {
|
||||
suppressClick = false;
|
||||
event.stopPropagation();
|
||||
onpointerdown(event);
|
||||
},
|
||||
onpointerup(event: PointerEvent) {
|
||||
suppressClick = open && event.pointerType !== "mouse";
|
||||
onpointerup(event);
|
||||
},
|
||||
onclickcapture(event: MouseEvent) {
|
||||
if (suppressClick) {
|
||||
suppressClick = false;
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<ContextMenu.Root>
|
||||
<ContextMenu.Root bind:open>
|
||||
<ContextMenu.Trigger>
|
||||
{#snippet child({ props })}
|
||||
{@render children({ props })}
|
||||
{@render children({ props: triggerProps(props) })}
|
||||
{/snippet}
|
||||
</ContextMenu.Trigger>
|
||||
<ContextMenu.Portal>
|
||||
|
||||
Reference in new issue
Block a user