1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | import { __assign, __rest } from "tslib";
|
17 | import classNames from "classnames";
|
18 | import * as React from "react";
|
19 | import { Classes, DISPLAYNAME_PREFIX } from "../../common";
|
20 | import { Popover } from "../popover/popover";
|
21 | import { Portal } from "../portal/portal";
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | export var ContextMenuPopover = React.memo(function _ContextMenuPopover(props) {
|
31 | var _a;
|
32 | var content = props.content, popoverClassName = props.popoverClassName, onClose = props.onClose, _b = props.isDarkTheme, isDarkTheme = _b === void 0 ? false : _b, _c = props.rootBoundary, rootBoundary = _c === void 0 ? "viewport" : _c, targetOffset = props.targetOffset, _d = props.transitionDuration, transitionDuration = _d === void 0 ? 100 : _d, popoverProps = __rest(props, ["content", "popoverClassName", "onClose", "isDarkTheme", "rootBoundary", "targetOffset", "transitionDuration"]);
|
33 | var cancelContextMenu = React.useCallback(function (e) { return e.preventDefault(); }, []);
|
34 |
|
35 | var renderTarget = React.useCallback(function (_a) {
|
36 | var ref = _a.ref;
|
37 | return (React.createElement(Portal, null,
|
38 | React.createElement("div", { className: Classes.CONTEXT_MENU_VIRTUAL_TARGET, style: targetOffset, ref: ref })));
|
39 | }, [targetOffset]);
|
40 | var handleInteraction = React.useCallback(function (nextOpenState) {
|
41 | if (!nextOpenState) {
|
42 | onClose === null || onClose === void 0 ? void 0 : onClose();
|
43 | }
|
44 | }, []);
|
45 | return (React.createElement(Popover, __assign({ placement: "right-start", rootBoundary: rootBoundary, transitionDuration: transitionDuration }, popoverProps, { content:
|
46 |
|
47 | React.createElement("div", { onContextMenu: cancelContextMenu }, content), enforceFocus: false,
|
48 |
|
49 |
|
50 | key: getPopoverKey(targetOffset), hasBackdrop: true, backdropProps: { className: Classes.CONTEXT_MENU_BACKDROP }, minimal: true, onInteraction: handleInteraction, popoverClassName: classNames(Classes.CONTEXT_MENU_POPOVER, popoverClassName, (_a = {},
|
51 | _a[Classes.DARK] = isDarkTheme,
|
52 | _a)), positioningStrategy: "fixed", renderTarget: renderTarget })));
|
53 | });
|
54 | ContextMenuPopover.displayName = "".concat(DISPLAYNAME_PREFIX, ".ContextMenuPopover");
|
55 | function getPopoverKey(targetOffset) {
|
56 | return targetOffset === undefined ? "default" : "".concat(targetOffset.left, "x").concat(targetOffset.top);
|
57 | }
|
58 |
|
\ | No newline at end of file |