@itwin/appui-react 5.3.1 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -1
- package/lib/appui-react/UiFramework.d.ts +6 -2
- package/lib/appui-react/UiFramework.d.ts.map +1 -1
- package/lib/appui-react/UiFramework.js +29 -2
- package/lib/appui-react/UiFramework.js.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawFieldContainer.d.ts.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawFieldContainer.js +4 -4
- package/lib/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawPopupManager.d.ts.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawPopupManager.js +10 -6
- package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
- package/lib/appui-react/accudraw/Calculator.js +2 -2
- package/lib/appui-react/accudraw/Calculator.js.map +1 -1
- package/lib/appui-react/childwindow/ChildWindowRenderer.d.ts +2 -0
- package/lib/appui-react/childwindow/ChildWindowRenderer.d.ts.map +1 -1
- package/lib/appui-react/childwindow/ChildWindowRenderer.js +15 -10
- package/lib/appui-react/childwindow/ChildWindowRenderer.js.map +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +23 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.js +20 -12
- package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
- package/lib/appui-react/content/ContentLayout.d.ts.map +1 -1
- package/lib/appui-react/content/ContentLayout.js +10 -11
- package/lib/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/appui-react/content/ContentOverlay.d.ts +1 -0
- package/lib/appui-react/content/ContentOverlay.d.ts.map +1 -1
- package/lib/appui-react/content/ContentOverlay.js +3 -1
- package/lib/appui-react/content/ContentOverlay.js.map +1 -1
- package/lib/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
- package/lib/appui-react/content/FloatingViewportContent.js +1 -1
- package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
- package/lib/appui-react/cursor/CursorInformation.d.ts +4 -1
- package/lib/appui-react/cursor/CursorInformation.d.ts.map +1 -1
- package/lib/appui-react/cursor/CursorInformation.js +6 -1
- package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
- package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts +1 -24
- package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
- package/lib/appui-react/cursor/cursormenu/CursorMenu.js +37 -58
- package/lib/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
- package/lib/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +8 -22
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +109 -116
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
- package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +12 -15
- package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
- package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +85 -48
- package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
- package/lib/appui-react/framework/FrameworkFrontstages.d.ts +47 -0
- package/lib/appui-react/framework/FrameworkFrontstages.d.ts.map +1 -1
- package/lib/appui-react/framework/FrameworkFrontstages.js +136 -0
- package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
- package/lib/appui-react/framework/FrameworkVisibility.d.ts +2 -0
- package/lib/appui-react/framework/FrameworkVisibility.d.ts.map +1 -1
- package/lib/appui-react/framework/FrameworkVisibility.js.map +1 -1
- package/lib/appui-react/frontstage/InternalFrontstageManager.d.ts.map +1 -1
- package/lib/appui-react/frontstage/InternalFrontstageManager.js +121 -115
- package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
- package/lib/appui-react/hooks/useActiveTool.d.ts +9 -0
- package/lib/appui-react/hooks/useActiveTool.d.ts.map +1 -0
- package/lib/appui-react/hooks/useActiveTool.js +23 -0
- package/lib/appui-react/hooks/useActiveTool.js.map +1 -0
- package/lib/appui-react/icons/SvgAngle.d.ts +7 -0
- package/lib/appui-react/icons/SvgAngle.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgAngle.js +15 -0
- package/lib/appui-react/icons/SvgAngle.js.map +1 -0
- package/lib/appui-react/icons/SvgBackspace.d.ts +7 -0
- package/lib/appui-react/icons/SvgBackspace.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgBackspace.js +14 -0
- package/lib/appui-react/icons/SvgBackspace.js.map +1 -0
- package/lib/appui-react/icons/SvgDistance.d.ts +7 -0
- package/lib/appui-react/icons/SvgDistance.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgDistance.js +16 -0
- package/lib/appui-react/icons/SvgDistance.js.map +1 -0
- package/lib/appui-react/icons/SvgHeight.d.ts +7 -0
- package/lib/appui-react/icons/SvgHeight.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgHeight.js +17 -0
- package/lib/appui-react/icons/SvgHeight.js.map +1 -0
- package/lib/appui-react/icons/SvgMouseClickLeftDrag.d.ts +7 -0
- package/lib/appui-react/icons/SvgMouseClickLeftDrag.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgMouseClickLeftDrag.js +15 -0
- package/lib/appui-react/icons/SvgMouseClickLeftDrag.js.map +1 -0
- package/lib/appui-react/icons/SvgMouseClickRightDrag.d.ts +7 -0
- package/lib/appui-react/icons/SvgMouseClickRightDrag.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgMouseClickRightDrag.js +15 -0
- package/lib/appui-react/icons/SvgMouseClickRightDrag.js.map +1 -0
- package/lib/appui-react/icons/SvgMouseClickWheelDrag.d.ts +7 -0
- package/lib/appui-react/icons/SvgMouseClickWheelDrag.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgMouseClickWheelDrag.js +15 -0
- package/lib/appui-react/icons/SvgMouseClickWheelDrag.js.map +1 -0
- package/lib/appui-react/icons/SvgTouchCursorPan.d.ts +7 -0
- package/lib/appui-react/icons/SvgTouchCursorPan.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgTouchCursorPan.js +15 -0
- package/lib/appui-react/icons/SvgTouchCursorPan.js.map +1 -0
- package/lib/appui-react/icons/SvgTouchCursorPoint.d.ts +7 -0
- package/lib/appui-react/icons/SvgTouchCursorPoint.d.ts.map +1 -0
- package/lib/appui-react/icons/SvgTouchCursorPoint.js +16 -0
- package/lib/appui-react/icons/SvgTouchCursorPoint.js.map +1 -0
- package/lib/appui-react/layout/StandardLayout.scss +3 -8
- package/lib/appui-react/layout/base/DragManager.d.ts.map +1 -1
- package/lib/appui-react/layout/base/DragManager.js +10 -15
- package/lib/appui-react/layout/base/DragManager.js.map +1 -1
- package/lib/appui-react/layout/state/NineZoneAction.d.ts +1 -0
- package/lib/appui-react/layout/state/NineZoneAction.d.ts.map +1 -1
- package/lib/appui-react/layout/state/NineZoneAction.js.map +1 -1
- package/lib/appui-react/layout/state/NineZoneStateReducer.d.ts.map +1 -1
- package/lib/appui-react/layout/state/NineZoneStateReducer.js +23 -16
- package/lib/appui-react/layout/state/NineZoneStateReducer.js.map +1 -1
- package/lib/appui-react/shared/MenuItem.d.ts +3 -0
- package/lib/appui-react/shared/MenuItem.d.ts.map +1 -1
- package/lib/appui-react/shared/MenuItem.js +2 -3
- package/lib/appui-react/shared/MenuItem.js.map +1 -1
- package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +2 -55
- package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
- package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js +333 -403
- package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
- package/lib/appui-react/toolbar/Toolbar.d.ts.map +1 -1
- package/lib/appui-react/toolbar/Toolbar.js +4 -3
- package/lib/appui-react/toolbar/Toolbar.js.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/ActionItem.d.ts.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/ActionItem.js +3 -0
- package/lib/appui-react/toolbar/new-toolbars/ActionItem.js.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/GroupItem.d.ts.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/GroupItem.js +2 -0
- package/lib/appui-react/toolbar/new-toolbars/GroupItem.js.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/Toolbar.d.ts +6 -3
- package/lib/appui-react/toolbar/new-toolbars/Toolbar.d.ts.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/Toolbar.js +4 -3
- package/lib/appui-react/toolbar/new-toolbars/Toolbar.js.map +1 -1
- package/lib/appui-react/utils/InternalUiShowHideManager.d.ts +2 -0
- package/lib/appui-react/utils/InternalUiShowHideManager.d.ts.map +1 -1
- package/lib/appui-react/utils/InternalUiShowHideManager.js +6 -0
- package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
- package/lib/appui-react/widget-panels/Frontstage.d.ts +7 -2
- package/lib/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
- package/lib/appui-react/widget-panels/Frontstage.js +29 -12
- package/lib/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/lib/appui-react/widgets/BackstageAppButton.scss +8 -3
- package/lib/appui-react.d.ts +1 -1
- package/lib/appui-react.d.ts.map +1 -1
- package/lib/appui-react.js +1 -1
- package/lib/appui-react.js.map +1 -1
- package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
- package/lib/cjs/appui-react/layout/StandardLayout.scss +3 -8
- package/lib/cjs/appui-react/widgets/BackstageAppButton.scss +8 -3
- package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
- package/lib/esm/appui-react/layout/StandardLayout.scss +3 -8
- package/lib/esm/appui-react/widgets/BackstageAppButton.scss +8 -3
- package/package.json +8 -10
- package/lib/appui-react/accudraw/angle.svg +0 -1
- package/lib/appui-react/accudraw/backspace.svg +0 -9
- package/lib/appui-react/accudraw/constraint-2d.svg +0 -11
- package/lib/appui-react/accudraw/distance.svg +0 -1
- package/lib/appui-react/accudraw/height-2.svg +0 -10
- package/lib/appui-react/accudraw/height.svg +0 -11
- package/lib/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
- package/lib/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
- package/lib/cjs/appui-react/accudraw/angle.svg +0 -1
- package/lib/cjs/appui-react/accudraw/backspace.svg +0 -9
- package/lib/cjs/appui-react/accudraw/constraint-2d.svg +0 -11
- package/lib/cjs/appui-react/accudraw/distance.svg +0 -1
- package/lib/cjs/appui-react/accudraw/height-2.svg +0 -10
- package/lib/cjs/appui-react/accudraw/height.svg +0 -11
- package/lib/cjs/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
- package/lib/esm/appui-react/accudraw/angle.svg +0 -1
- package/lib/esm/appui-react/accudraw/backspace.svg +0 -9
- package/lib/esm/appui-react/accudraw/constraint-2d.svg +0 -11
- package/lib/esm/appui-react/accudraw/distance.svg +0 -1
- package/lib/esm/appui-react/accudraw/height-2.svg +0 -10
- package/lib/esm/appui-react/accudraw/height.svg +0 -11
- package/lib/esm/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
|
@@ -15,66 +15,45 @@ import { Logger } from "@itwin/core-bentley";
|
|
|
15
15
|
/** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.
|
|
16
16
|
* @alpha
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this._handleSyncUiEvent = (args) => {
|
|
29
|
-
if (!this._isMounted)
|
|
30
|
-
return;
|
|
31
|
-
if (SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
19
|
+
export function CursorPopupMenu(props) {
|
|
20
|
+
const windowIdRef = React.useRef();
|
|
21
|
+
const [opened, setOpened] = React.useState(false);
|
|
22
|
+
const [x, setX] = React.useState(0);
|
|
23
|
+
const [y, setY] = React.useState(0);
|
|
24
|
+
const [items, setItems] = React.useState(undefined);
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {
|
|
27
|
+
if (!SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [
|
|
32
28
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
33
29
|
SessionStateActionId.UpdateCursorMenu,
|
|
34
|
-
]))
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.setState({ menuVisible: false, items: undefined });
|
|
46
|
-
}
|
|
30
|
+
]))
|
|
31
|
+
return;
|
|
32
|
+
const menuData = UiFramework.getCursorMenuData();
|
|
33
|
+
const windowId = windowIdRef.current;
|
|
34
|
+
if (!menuData || windowId !== menuData.childWindowId) {
|
|
35
|
+
setOpened(false);
|
|
36
|
+
setItems(undefined);
|
|
37
|
+
return;
|
|
47
38
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
this._isMounted = false;
|
|
68
|
-
SyncUiEventDispatcher.onSyncUiEvent.removeListener(this._handleSyncUiEvent);
|
|
69
|
-
}
|
|
70
|
-
render() {
|
|
71
|
-
const { menuX, menuY, items, menuVisible } = this.state;
|
|
72
|
-
const onClose = this._hideContextMenu;
|
|
73
|
-
return (React.createElement("div", { className: "uifw-cursor-menu-container-div", ref: this._handleRefSet }, items && items.length > 0 && menuVisible && (
|
|
74
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
75
|
-
React.createElement(GlobalContextMenu, { className: this.props.className, style: this.props.style, identifier: "cursor-popup-menu", x: menuX, y: menuY, opened: menuVisible, onEsc: onClose, onOutsideClick: onClose, edgeLimit: false, autoflip: true }, MenuItemHelpers.createMenuItemNodes(
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
77
|
-
MenuItemHelpers.createMenuItems(items, this._itemPicked))))));
|
|
78
|
-
}
|
|
39
|
+
setOpened(menuData.items && menuData.items.length > 0);
|
|
40
|
+
setItems(menuData.items);
|
|
41
|
+
setX(menuData.position.x);
|
|
42
|
+
setY(menuData.position.y);
|
|
43
|
+
});
|
|
44
|
+
}, []);
|
|
45
|
+
const onClose = () => {
|
|
46
|
+
setOpened(false);
|
|
47
|
+
};
|
|
48
|
+
return (React.createElement("div", { className: "uifw-cursor-menu-container-div", ref: (el) => {
|
|
49
|
+
const parentWindow = el?.ownerDocument.defaultView ?? undefined;
|
|
50
|
+
const windowId = UiFramework.childWindows.findId(parentWindow);
|
|
51
|
+
windowIdRef.current = windowId;
|
|
52
|
+
Logger.logInfo(UiFramework.loggerCategory("UiFramework"), `Cursor Menu for ${windowId ?? "main"} window`);
|
|
53
|
+
} }, items && items.length > 0 && opened && (
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
55
|
+
React.createElement(GlobalContextMenu, { className: props.className, style: props.style, identifier: "cursor-popup-menu", x: x, y: y, opened: opened, onEsc: onClose, onOutsideClick: onClose, edgeLimit: false, autoflip: true }, MenuItemHelpers.createMenuItemNodes(
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
57
|
+
MenuItemHelpers.createMenuItems(items, onClose))))));
|
|
79
58
|
}
|
|
80
59
|
//# sourceMappingURL=CursorMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { GlobalContextMenu } from \"@itwin/core-react\"; // ContextSubMenu,\nimport { SessionStateActionId } from \"../../redux/SessionState.js\";\nimport type { CursorMenuItemProps } from \"../../shared/MenuItem.js\";\nimport { MenuItemHelpers } from \"../../shared/MenuItem.js\";\nimport { SyncUiEventDispatcher } from \"../../syncui/SyncUiEventDispatcher.js\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { Logger } from \"@itwin/core-bentley\";\n\n/** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function CursorPopupMenu(props: CommonProps) {\n const windowIdRef = React.useRef<string | undefined>();\n const [opened, setOpened] = React.useState(false);\n const [x, setX] = React.useState(0);\n const [y, setY] = React.useState(0);\n const [items, setItems] = React.useState<CursorMenuItemProps[] | undefined>(\n undefined\n );\n\n React.useEffect(() => {\n return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {\n if (\n !SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n SessionStateActionId.UpdateCursorMenu,\n ])\n )\n return;\n\n const menuData = UiFramework.getCursorMenuData();\n const windowId = windowIdRef.current;\n if (!menuData || windowId !== menuData.childWindowId) {\n setOpened(false);\n setItems(undefined);\n return;\n }\n\n setOpened(menuData.items && menuData.items.length > 0);\n setItems(menuData.items);\n setX(menuData.position.x);\n setY(menuData.position.y);\n });\n }, []);\n\n const onClose = () => {\n setOpened(false);\n };\n\n return (\n <div\n className=\"uifw-cursor-menu-container-div\"\n ref={(el) => {\n const parentWindow = el?.ownerDocument.defaultView ?? undefined;\n const windowId = UiFramework.childWindows.findId(parentWindow);\n windowIdRef.current = windowId;\n Logger.logInfo(\n UiFramework.loggerCategory(\"UiFramework\"),\n `Cursor Menu for ${windowId ?? \"main\"} window`\n );\n }}\n >\n {items && items.length > 0 && opened && (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <GlobalContextMenu\n className={props.className}\n style={props.style}\n identifier=\"cursor-popup-menu\"\n x={x}\n y={y}\n opened={opened}\n onEsc={onClose}\n onOutsideClick={onClose}\n edgeLimit={false}\n autoflip={true}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n {MenuItemHelpers.createMenuItemNodes(\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n MenuItemHelpers.createMenuItems(items, onClose)\n )}\n </GlobalContextMenu>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
@use "~@itwin/core-react/lib/core-react/z-index" as *;
|
|
5
6
|
@use "../../variables" as *;
|
|
6
7
|
|
|
7
8
|
.uifw-cursorpopup {
|
|
@@ -18,6 +19,8 @@
|
|
|
18
19
|
width: fit-content;
|
|
19
20
|
transition: opacity 500ms;
|
|
20
21
|
|
|
22
|
+
@include uicore-z-index(tooltip);
|
|
23
|
+
|
|
21
24
|
> .uifw-cursorpopup-title {
|
|
22
25
|
min-height: $uifw-popup-title-bar-min-height;
|
|
23
26
|
opacity: $uifw-popup-opacity;
|
|
@@ -21,7 +21,9 @@ export interface CursorPopupOptions {
|
|
|
21
21
|
/** Draw shadow */
|
|
22
22
|
shadow?: boolean;
|
|
23
23
|
}
|
|
24
|
-
/** Information maintained by CursorPopupManager about a CursorPopup.
|
|
24
|
+
/** Information maintained by CursorPopupManager about a CursorPopup.
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
25
27
|
interface CursorPopupInfo {
|
|
26
28
|
id: string;
|
|
27
29
|
content: React.ReactNode;
|
|
@@ -29,6 +31,7 @@ interface CursorPopupInfo {
|
|
|
29
31
|
offset: Point;
|
|
30
32
|
priority: number;
|
|
31
33
|
options?: CursorPopupOptions;
|
|
34
|
+
targetDocument?: Document;
|
|
32
35
|
renderRelativePosition: RelativePosition;
|
|
33
36
|
popupSize?: SizeProps;
|
|
34
37
|
cancelFadeOut?: () => void;
|
|
@@ -53,17 +56,16 @@ export declare class CursorPopupManager {
|
|
|
53
56
|
static clearPopups(): void;
|
|
54
57
|
static get popups(): CursorPopupInfo[];
|
|
55
58
|
static get popupCount(): number;
|
|
56
|
-
private static _emitPopupsChangedEvent;
|
|
57
59
|
private static pushPopup;
|
|
58
60
|
/** Called to open popup with a new set of properties
|
|
59
61
|
*/
|
|
60
|
-
static open(id: string, content: React.ReactNode, pt: XAndY, offset: XAndY, relativePosition: RelativePosition, priority?: number, options?: CursorPopupOptions): void;
|
|
62
|
+
static open(id: string, content: React.ReactNode, pt: XAndY, offset: XAndY, relativePosition: RelativePosition, priority?: number, options?: CursorPopupOptions, targetDocument?: Document): void;
|
|
61
63
|
/** Called to update popup with a new set of properties
|
|
62
64
|
*/
|
|
63
|
-
static update(id: string, content: React.ReactNode, pt: XAndY, offset: XAndY, relativePosition: RelativePosition, priority?: number): void;
|
|
65
|
+
static update(id: string, content: React.ReactNode, pt: XAndY, offset: XAndY, relativePosition: RelativePosition, priority?: number, targetDocument?: Document): void;
|
|
64
66
|
/** Called to move the open popup to new location
|
|
65
67
|
*/
|
|
66
|
-
static updatePosition(pt: XAndY): void;
|
|
68
|
+
static updatePosition(pt: XAndY, targetDocument?: Document): void;
|
|
67
69
|
/** Called when tool wants to close the popup
|
|
68
70
|
*/
|
|
69
71
|
static close(id: string, apply: boolean, fadeOut?: boolean): void;
|
|
@@ -72,25 +74,9 @@ export declare class CursorPopupManager {
|
|
|
72
74
|
private static validateRenderRelativePosition;
|
|
73
75
|
private static autoFlip;
|
|
74
76
|
}
|
|
75
|
-
/** State for the [[CursorPopupRenderer]] React component */
|
|
76
|
-
interface CursorPopupRendererState {
|
|
77
|
-
pt: Point;
|
|
78
|
-
}
|
|
79
77
|
/** CursorPopupRenderer React component.
|
|
80
78
|
* @public
|
|
81
79
|
*/
|
|
82
|
-
export declare
|
|
83
|
-
constructor(props: any);
|
|
84
|
-
render(): React.ReactNode;
|
|
85
|
-
private _handleSizeKnown;
|
|
86
|
-
private renderPositions;
|
|
87
|
-
private renderRelativePosition;
|
|
88
|
-
private getDimension;
|
|
89
|
-
private adjustOffset;
|
|
90
|
-
componentDidMount(): void;
|
|
91
|
-
componentWillUnmount(): void;
|
|
92
|
-
private _handlePopupChangedEvent;
|
|
93
|
-
private _handleCursorPopupUpdatePositionEvent;
|
|
94
|
-
}
|
|
80
|
+
export declare function CursorPopupRenderer(): React.JSX.Element | undefined;
|
|
95
81
|
export {};
|
|
96
82
|
//# sourceMappingURL=CursorPopupManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorPopupManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAU,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"CursorPopupManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAU,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,cAAc,CAAC,EAAE,QAAQ,CAAC;IAE1B,sBAAsB,EAAE,gBAAgB,CAAC;IACzC,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAmD;IAEzE,gBAAgB;IAChB,gBAAuB,gCAAgC;YACjD,KAAK;OACN;IACL,gBAAgB;IAChB,gBAAuB,yBAAyB;YAC1C,MAAM;eACH,eAAe;OACnB;IACL,gBAAgB;IAChB,gBAAuB,0BAA0B,oBAA2B;IAC5E,gBAAgB;WACF,WAAW;IAKzB,WAAkB,MAAM,sBAEvB;IAED,WAAkB,UAAU,WAE3B;IAED,OAAO,CAAC,MAAM,CAAC,SAAS;IAKxB;OACG;WACW,IAAI,CAChB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,KAAK,CAAC,SAAS,EACxB,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,KAAK,EACb,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,GAAE,MAAU,EACpB,OAAO,CAAC,EAAE,kBAAkB,EAC5B,cAAc,CAAC,EAAE,QAAQ;IAuC3B;OACG;WACW,MAAM,CAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,KAAK,CAAC,SAAS,EACxB,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,KAAK,EACb,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,GAAE,MAAU,EACpB,cAAc,CAAC,EAAE,QAAQ;IAsB3B;OACG;WACW,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,QAAQ;IAQjE;OACG;WACW,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO;IAqCjE,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,CAAC,MAAM,CAAC,iCAAiC;IAiChD,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAwB7C,OAAO,CAAC,MAAM,CAAC,QAAQ;CA+ExB;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,kCAuFlC"}
|
|
@@ -12,6 +12,7 @@ import { Point } from "@itwin/core-react/internal";
|
|
|
12
12
|
import { UiFramework } from "../../UiFramework.js";
|
|
13
13
|
import { CursorPopupShow } from "./CursorPopup.js";
|
|
14
14
|
import { CursorPopup } from "./CursorPopup.js";
|
|
15
|
+
import { ChildWindowContext } from "../../childwindow/ChildWindowRenderer.js";
|
|
15
16
|
/** CursorPopup component
|
|
16
17
|
* @public
|
|
17
18
|
*/
|
|
@@ -19,7 +20,7 @@ export class CursorPopupManager {
|
|
|
19
20
|
/** @internal */
|
|
20
21
|
static clearPopups() {
|
|
21
22
|
this._popups.length = 0;
|
|
22
|
-
CursorPopupManager.
|
|
23
|
+
CursorPopupManager.onCursorPopupsChangedEvent.emit({});
|
|
23
24
|
}
|
|
24
25
|
static get popups() {
|
|
25
26
|
return this._popups;
|
|
@@ -27,16 +28,13 @@ export class CursorPopupManager {
|
|
|
27
28
|
static get popupCount() {
|
|
28
29
|
return this._popups.length;
|
|
29
30
|
}
|
|
30
|
-
static _emitPopupsChangedEvent() {
|
|
31
|
-
CursorPopupManager.onCursorPopupsChangedEvent.emit({});
|
|
32
|
-
}
|
|
33
31
|
static pushPopup(popupInfo) {
|
|
34
32
|
CursorPopupManager._popups.push(popupInfo);
|
|
35
|
-
CursorPopupManager.
|
|
33
|
+
CursorPopupManager.onCursorPopupsChangedEvent.emit({});
|
|
36
34
|
}
|
|
37
35
|
/** Called to open popup with a new set of properties
|
|
38
36
|
*/
|
|
39
|
-
static open(id, content, pt, offset, relativePosition, priority = 0, options) {
|
|
37
|
+
static open(id, content, pt, offset, relativePosition, priority = 0, options, targetDocument) {
|
|
40
38
|
const popupInfo = CursorPopupManager._popups.find((info) => id === info.id);
|
|
41
39
|
if (popupInfo) {
|
|
42
40
|
CursorPopupManager.onCursorPopupFadeOutEvent.emit({
|
|
@@ -49,7 +47,8 @@ export class CursorPopupManager {
|
|
|
49
47
|
popupInfo.renderRelativePosition = relativePosition;
|
|
50
48
|
popupInfo.priority = priority;
|
|
51
49
|
popupInfo.options = options;
|
|
52
|
-
|
|
50
|
+
popupInfo.targetDocument = targetDocument;
|
|
51
|
+
CursorPopupManager.updatePosition(pt, targetDocument);
|
|
53
52
|
if (popupInfo.cancelFadeOut) {
|
|
54
53
|
popupInfo.cancelFadeOut();
|
|
55
54
|
popupInfo.cancelFadeOut = undefined;
|
|
@@ -64,13 +63,14 @@ export class CursorPopupManager {
|
|
|
64
63
|
options,
|
|
65
64
|
renderRelativePosition: relativePosition,
|
|
66
65
|
priority,
|
|
66
|
+
targetDocument,
|
|
67
67
|
};
|
|
68
68
|
CursorPopupManager.pushPopup(newPopupInfo);
|
|
69
|
-
CursorPopupManager.updatePosition(pt);
|
|
69
|
+
CursorPopupManager.updatePosition(pt, targetDocument);
|
|
70
70
|
}
|
|
71
71
|
/** Called to update popup with a new set of properties
|
|
72
72
|
*/
|
|
73
|
-
static update(id, content, pt, offset, relativePosition, priority = 0) {
|
|
73
|
+
static update(id, content, pt, offset, relativePosition, priority = 0, targetDocument) {
|
|
74
74
|
const popupInfo = CursorPopupManager._popups.find((info) => id === info.id);
|
|
75
75
|
if (popupInfo) {
|
|
76
76
|
popupInfo.content = content;
|
|
@@ -78,6 +78,7 @@ export class CursorPopupManager {
|
|
|
78
78
|
popupInfo.relativePosition = relativePosition;
|
|
79
79
|
popupInfo.renderRelativePosition = relativePosition;
|
|
80
80
|
popupInfo.priority = priority;
|
|
81
|
+
popupInfo.targetDocument = targetDocument;
|
|
81
82
|
}
|
|
82
83
|
else {
|
|
83
84
|
Logger.logError(UiFramework.loggerCategory("CursorPopupManager"), `update: Could not find popup with id of '${id}'`);
|
|
@@ -86,8 +87,8 @@ export class CursorPopupManager {
|
|
|
86
87
|
}
|
|
87
88
|
/** Called to move the open popup to new location
|
|
88
89
|
*/
|
|
89
|
-
static updatePosition(pt) {
|
|
90
|
-
CursorPopupManager.resetPopupsRenderRelativePosition(Point.create(pt));
|
|
90
|
+
static updatePosition(pt, targetDocument) {
|
|
91
|
+
CursorPopupManager.resetPopupsRenderRelativePosition(Point.create(pt), targetDocument);
|
|
91
92
|
CursorPopupManager.onCursorPopupUpdatePositionEvent.emit({ pt });
|
|
92
93
|
}
|
|
93
94
|
/** Called when tool wants to close the popup
|
|
@@ -125,22 +126,29 @@ export class CursorPopupManager {
|
|
|
125
126
|
const index = CursorPopupManager._popups.findIndex((popupInfo) => id === popupInfo.id);
|
|
126
127
|
if (index >= 0) {
|
|
127
128
|
CursorPopupManager._popups.splice(index, 1);
|
|
128
|
-
CursorPopupManager.
|
|
129
|
+
CursorPopupManager.onCursorPopupsChangedEvent.emit({});
|
|
129
130
|
}
|
|
130
131
|
}
|
|
131
|
-
static resetPopupsRenderRelativePosition(pt) {
|
|
132
|
+
static resetPopupsRenderRelativePosition(pt, targetDocument) {
|
|
132
133
|
CursorPopupManager.popups.forEach((popupInfo) => {
|
|
134
|
+
if (popupInfo.cancelFadeOut &&
|
|
135
|
+
popupInfo.targetDocument !== targetDocument) {
|
|
136
|
+
// Popup if fading out - do not change target document.
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
133
139
|
popupInfo.renderRelativePosition = popupInfo.relativePosition;
|
|
134
|
-
|
|
140
|
+
popupInfo.targetDocument = targetDocument;
|
|
141
|
+
const flipped = CursorPopupManager.validateRenderRelativePosition(pt, popupInfo, targetDocument);
|
|
135
142
|
// If flipped, call again to validate again.
|
|
136
143
|
if (flipped) {
|
|
137
|
-
CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);
|
|
144
|
+
CursorPopupManager.validateRenderRelativePosition(pt, popupInfo, targetDocument);
|
|
138
145
|
}
|
|
139
146
|
});
|
|
140
147
|
}
|
|
141
|
-
static validateRenderRelativePosition(pt, popupInfo) {
|
|
148
|
+
static validateRenderRelativePosition(pt, popupInfo, targetDocument) {
|
|
142
149
|
const popupRect = CursorPopup.getPopupRect(pt, Point.create(popupInfo.offset), popupInfo.popupSize, popupInfo.renderRelativePosition);
|
|
143
|
-
const
|
|
150
|
+
const targetWindow = targetDocument?.defaultView ?? window;
|
|
151
|
+
const { outPos, flipped } = CursorPopupManager.autoFlip(popupInfo.renderRelativePosition, popupRect, targetWindow.innerWidth, targetWindow.innerHeight);
|
|
144
152
|
if (flipped)
|
|
145
153
|
popupInfo.renderRelativePosition = outPos;
|
|
146
154
|
return flipped;
|
|
@@ -222,109 +230,94 @@ CursorPopupManager.onCursorPopupUpdatePositionEvent = new BeUiEvent();
|
|
|
222
230
|
CursorPopupManager.onCursorPopupFadeOutEvent = new BeUiEvent();
|
|
223
231
|
/** @internal */
|
|
224
232
|
CursorPopupManager.onCursorPopupsChangedEvent = new BeUiEvent();
|
|
233
|
+
const relativePositions = Object.values(RelativePosition).filter((value) => typeof value !== "string");
|
|
225
234
|
/** CursorPopupRenderer React component.
|
|
226
235
|
* @public
|
|
227
236
|
*/
|
|
228
|
-
export
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
case RelativePosition.Left:
|
|
297
|
-
case RelativePosition.Right:
|
|
298
|
-
dimension = popupSize.width;
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
return dimension;
|
|
302
|
-
}
|
|
303
|
-
adjustOffset(offset, relativePosition, dimension) {
|
|
304
|
-
let outOffset = Point.create(offset.toProps());
|
|
305
|
-
switch (relativePosition) {
|
|
306
|
-
case RelativePosition.Top:
|
|
307
|
-
case RelativePosition.Bottom:
|
|
308
|
-
case RelativePosition.TopLeft:
|
|
309
|
-
case RelativePosition.TopRight:
|
|
310
|
-
case RelativePosition.BottomLeft:
|
|
311
|
-
case RelativePosition.BottomRight:
|
|
312
|
-
outOffset = Point.create({ x: offset.x, y: offset.y + dimension });
|
|
313
|
-
break;
|
|
314
|
-
case RelativePosition.Left:
|
|
315
|
-
case RelativePosition.Right:
|
|
316
|
-
outOffset = Point.create({ x: offset.x + dimension, y: offset.y });
|
|
317
|
-
break;
|
|
318
|
-
}
|
|
319
|
-
return outOffset;
|
|
320
|
-
}
|
|
321
|
-
componentDidMount() {
|
|
322
|
-
CursorPopupManager.onCursorPopupsChangedEvent.addListener(this._handlePopupChangedEvent);
|
|
323
|
-
CursorPopupManager.onCursorPopupUpdatePositionEvent.addListener(this._handleCursorPopupUpdatePositionEvent);
|
|
237
|
+
export function CursorPopupRenderer() {
|
|
238
|
+
const popupWindow = React.useContext(ChildWindowContext) ?? window;
|
|
239
|
+
const [popups, setPopups] = React.useState(CursorPopupManager.popups);
|
|
240
|
+
const [point, setPoint] = React.useState(new Point());
|
|
241
|
+
React.useEffect(() => {
|
|
242
|
+
return CursorPopupManager.onCursorPopupsChangedEvent.addListener(() => {
|
|
243
|
+
const allPopups = CursorPopupManager.popups;
|
|
244
|
+
const newPopups = allPopups.map((p) => ({ ...p }));
|
|
245
|
+
setPopups(newPopups);
|
|
246
|
+
});
|
|
247
|
+
}, []);
|
|
248
|
+
React.useEffect(() => {
|
|
249
|
+
return CursorPopupManager.onCursorPopupUpdatePositionEvent.addListener((args) => {
|
|
250
|
+
const allPopups = CursorPopupManager.popups;
|
|
251
|
+
const newPopups = allPopups.map((p) => ({ ...p }));
|
|
252
|
+
setPopups(newPopups);
|
|
253
|
+
setPoint(Point.create(args.pt));
|
|
254
|
+
});
|
|
255
|
+
}, []);
|
|
256
|
+
if (popups.length === 0)
|
|
257
|
+
return undefined;
|
|
258
|
+
return (React.createElement(React.Fragment, null, relativePositions.map((position) => {
|
|
259
|
+
const filteredInfo = popups.filter((popupInfo) => popupInfo.renderRelativePosition === position);
|
|
260
|
+
if (filteredInfo.length === 0)
|
|
261
|
+
return undefined;
|
|
262
|
+
let totalDimension = 0;
|
|
263
|
+
const positionPopups = filteredInfo
|
|
264
|
+
.sort((a, b) => {
|
|
265
|
+
const ascending = position === RelativePosition.Right ||
|
|
266
|
+
position === RelativePosition.BottomRight ||
|
|
267
|
+
position === RelativePosition.Bottom ||
|
|
268
|
+
position === RelativePosition.BottomLeft;
|
|
269
|
+
return ascending
|
|
270
|
+
? a.priority - b.priority
|
|
271
|
+
: b.priority - a.priority;
|
|
272
|
+
})
|
|
273
|
+
.map((popupInfo, index) => {
|
|
274
|
+
const targetDocument = popupInfo.targetDocument ?? window.document;
|
|
275
|
+
if (popupWindow.document !== targetDocument)
|
|
276
|
+
return undefined;
|
|
277
|
+
const title = popupInfo.options !== undefined ? popupInfo.options.title : "";
|
|
278
|
+
const shadow = popupInfo.options !== undefined
|
|
279
|
+
? popupInfo.options.shadow
|
|
280
|
+
: false;
|
|
281
|
+
let offset = popupInfo.offset;
|
|
282
|
+
if (index > 0)
|
|
283
|
+
offset = adjustOffset(offset, popupInfo.renderRelativePosition, totalDimension);
|
|
284
|
+
if (popupInfo.popupSize)
|
|
285
|
+
totalDimension += getDimension(popupInfo.popupSize, position);
|
|
286
|
+
return (React.createElement(CursorPopup, { key: popupInfo.id, id: popupInfo.id, content: popupInfo.content, pt: point, offset: offset, relativePosition: popupInfo.renderRelativePosition, title: title, shadow: shadow, onSizeKnown: (size) => {
|
|
287
|
+
popupInfo.popupSize = size;
|
|
288
|
+
} }));
|
|
289
|
+
});
|
|
290
|
+
return React.createElement(React.Fragment, { key: position }, positionPopups);
|
|
291
|
+
})));
|
|
292
|
+
}
|
|
293
|
+
function adjustOffset(offset, relativePosition, dimension) {
|
|
294
|
+
switch (relativePosition) {
|
|
295
|
+
case RelativePosition.Top:
|
|
296
|
+
case RelativePosition.Bottom:
|
|
297
|
+
case RelativePosition.TopLeft:
|
|
298
|
+
case RelativePosition.TopRight:
|
|
299
|
+
case RelativePosition.BottomLeft:
|
|
300
|
+
case RelativePosition.BottomRight:
|
|
301
|
+
return Point.create({ x: offset.x, y: offset.y + dimension });
|
|
302
|
+
case RelativePosition.Left:
|
|
303
|
+
case RelativePosition.Right:
|
|
304
|
+
return Point.create({ x: offset.x + dimension, y: offset.y });
|
|
324
305
|
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
306
|
+
return Point.create(offset.toProps());
|
|
307
|
+
}
|
|
308
|
+
function getDimension(popupSize, relativePosition) {
|
|
309
|
+
switch (relativePosition) {
|
|
310
|
+
case RelativePosition.Top:
|
|
311
|
+
case RelativePosition.Bottom:
|
|
312
|
+
case RelativePosition.TopLeft:
|
|
313
|
+
case RelativePosition.TopRight:
|
|
314
|
+
case RelativePosition.BottomLeft:
|
|
315
|
+
case RelativePosition.BottomRight:
|
|
316
|
+
return popupSize.height;
|
|
317
|
+
case RelativePosition.Left:
|
|
318
|
+
case RelativePosition.Right:
|
|
319
|
+
return popupSize.width;
|
|
328
320
|
}
|
|
321
|
+
return 0;
|
|
329
322
|
}
|
|
330
323
|
//# sourceMappingURL=CursorPopupManager.js.map
|