2026-05-10 03:06:54 +07:00
|
|
|
import React from "react";
|
|
|
|
|
import { CONTEXT_MENU_SIZE } from "../lib/editor-constants";
|
|
|
|
|
|
|
|
|
|
type ContextMenuPosition = { x: number; y: number };
|
|
|
|
|
|
|
|
|
|
export function useEditorContextMenu() {
|
2026-05-31 03:03:49 +07:00
|
|
|
const [contextMenu, setContextMenu] =
|
|
|
|
|
React.useState<ContextMenuPosition | null>(null);
|
2026-05-10 03:06:54 +07:00
|
|
|
|
|
|
|
|
const openContextMenu = React.useCallback((x: number, y: number) => {
|
|
|
|
|
const rect = document.documentElement.getBoundingClientRect();
|
2026-05-31 03:03:49 +07:00
|
|
|
const {
|
|
|
|
|
width: menuWidth,
|
|
|
|
|
height: menuHeight,
|
|
|
|
|
viewportPadding: pad,
|
|
|
|
|
} = CONTEXT_MENU_SIZE;
|
2026-05-10 03:06:54 +07:00
|
|
|
const maxX = rect.width - menuWidth - pad;
|
|
|
|
|
const maxY = rect.height - menuHeight - pad;
|
2026-05-31 03:03:49 +07:00
|
|
|
setContextMenu({
|
|
|
|
|
x: Math.max(pad, Math.min(x, maxX)),
|
|
|
|
|
y: Math.max(pad, Math.min(y, maxY)),
|
|
|
|
|
});
|
2026-05-10 03:06:54 +07:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
const closeContextMenu = React.useCallback(() => {
|
|
|
|
|
setContextMenu(null);
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
return { contextMenu, openContextMenu, closeContextMenu };
|
|
|
|
|
}
|