@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.
Files changed (215) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/lib/appui-react/UiFramework.d.ts +6 -2
  3. package/lib/appui-react/UiFramework.d.ts.map +1 -1
  4. package/lib/appui-react/UiFramework.js +29 -2
  5. package/lib/appui-react/UiFramework.js.map +1 -1
  6. package/lib/appui-react/accudraw/AccuDrawFieldContainer.d.ts.map +1 -1
  7. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js +4 -4
  8. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
  9. package/lib/appui-react/accudraw/AccuDrawPopupManager.d.ts.map +1 -1
  10. package/lib/appui-react/accudraw/AccuDrawPopupManager.js +10 -6
  11. package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  12. package/lib/appui-react/accudraw/Calculator.js +2 -2
  13. package/lib/appui-react/accudraw/Calculator.js.map +1 -1
  14. package/lib/appui-react/childwindow/ChildWindowRenderer.d.ts +2 -0
  15. package/lib/appui-react/childwindow/ChildWindowRenderer.d.ts.map +1 -1
  16. package/lib/appui-react/childwindow/ChildWindowRenderer.js +15 -10
  17. package/lib/appui-react/childwindow/ChildWindowRenderer.js.map +1 -1
  18. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +23 -1
  19. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  20. package/lib/appui-react/configurableui/ConfigurableUiContent.js +20 -12
  21. package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  22. package/lib/appui-react/content/ContentLayout.d.ts.map +1 -1
  23. package/lib/appui-react/content/ContentLayout.js +10 -11
  24. package/lib/appui-react/content/ContentLayout.js.map +1 -1
  25. package/lib/appui-react/content/ContentOverlay.d.ts +1 -0
  26. package/lib/appui-react/content/ContentOverlay.d.ts.map +1 -1
  27. package/lib/appui-react/content/ContentOverlay.js +3 -1
  28. package/lib/appui-react/content/ContentOverlay.js.map +1 -1
  29. package/lib/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
  30. package/lib/appui-react/content/FloatingViewportContent.js +1 -1
  31. package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
  32. package/lib/appui-react/cursor/CursorInformation.d.ts +4 -1
  33. package/lib/appui-react/cursor/CursorInformation.d.ts.map +1 -1
  34. package/lib/appui-react/cursor/CursorInformation.js +6 -1
  35. package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
  36. package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts +1 -24
  37. package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  38. package/lib/appui-react/cursor/cursormenu/CursorMenu.js +37 -58
  39. package/lib/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  40. package/lib/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
  41. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +8 -22
  42. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
  43. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +109 -116
  44. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  45. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +12 -15
  46. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
  47. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +85 -48
  48. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  49. package/lib/appui-react/framework/FrameworkFrontstages.d.ts +47 -0
  50. package/lib/appui-react/framework/FrameworkFrontstages.d.ts.map +1 -1
  51. package/lib/appui-react/framework/FrameworkFrontstages.js +136 -0
  52. package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
  53. package/lib/appui-react/framework/FrameworkVisibility.d.ts +2 -0
  54. package/lib/appui-react/framework/FrameworkVisibility.d.ts.map +1 -1
  55. package/lib/appui-react/framework/FrameworkVisibility.js.map +1 -1
  56. package/lib/appui-react/frontstage/InternalFrontstageManager.d.ts.map +1 -1
  57. package/lib/appui-react/frontstage/InternalFrontstageManager.js +121 -115
  58. package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  59. package/lib/appui-react/hooks/useActiveTool.d.ts +9 -0
  60. package/lib/appui-react/hooks/useActiveTool.d.ts.map +1 -0
  61. package/lib/appui-react/hooks/useActiveTool.js +23 -0
  62. package/lib/appui-react/hooks/useActiveTool.js.map +1 -0
  63. package/lib/appui-react/icons/SvgAngle.d.ts +7 -0
  64. package/lib/appui-react/icons/SvgAngle.d.ts.map +1 -0
  65. package/lib/appui-react/icons/SvgAngle.js +15 -0
  66. package/lib/appui-react/icons/SvgAngle.js.map +1 -0
  67. package/lib/appui-react/icons/SvgBackspace.d.ts +7 -0
  68. package/lib/appui-react/icons/SvgBackspace.d.ts.map +1 -0
  69. package/lib/appui-react/icons/SvgBackspace.js +14 -0
  70. package/lib/appui-react/icons/SvgBackspace.js.map +1 -0
  71. package/lib/appui-react/icons/SvgDistance.d.ts +7 -0
  72. package/lib/appui-react/icons/SvgDistance.d.ts.map +1 -0
  73. package/lib/appui-react/icons/SvgDistance.js +16 -0
  74. package/lib/appui-react/icons/SvgDistance.js.map +1 -0
  75. package/lib/appui-react/icons/SvgHeight.d.ts +7 -0
  76. package/lib/appui-react/icons/SvgHeight.d.ts.map +1 -0
  77. package/lib/appui-react/icons/SvgHeight.js +17 -0
  78. package/lib/appui-react/icons/SvgHeight.js.map +1 -0
  79. package/lib/appui-react/icons/SvgMouseClickLeftDrag.d.ts +7 -0
  80. package/lib/appui-react/icons/SvgMouseClickLeftDrag.d.ts.map +1 -0
  81. package/lib/appui-react/icons/SvgMouseClickLeftDrag.js +15 -0
  82. package/lib/appui-react/icons/SvgMouseClickLeftDrag.js.map +1 -0
  83. package/lib/appui-react/icons/SvgMouseClickRightDrag.d.ts +7 -0
  84. package/lib/appui-react/icons/SvgMouseClickRightDrag.d.ts.map +1 -0
  85. package/lib/appui-react/icons/SvgMouseClickRightDrag.js +15 -0
  86. package/lib/appui-react/icons/SvgMouseClickRightDrag.js.map +1 -0
  87. package/lib/appui-react/icons/SvgMouseClickWheelDrag.d.ts +7 -0
  88. package/lib/appui-react/icons/SvgMouseClickWheelDrag.d.ts.map +1 -0
  89. package/lib/appui-react/icons/SvgMouseClickWheelDrag.js +15 -0
  90. package/lib/appui-react/icons/SvgMouseClickWheelDrag.js.map +1 -0
  91. package/lib/appui-react/icons/SvgTouchCursorPan.d.ts +7 -0
  92. package/lib/appui-react/icons/SvgTouchCursorPan.d.ts.map +1 -0
  93. package/lib/appui-react/icons/SvgTouchCursorPan.js +15 -0
  94. package/lib/appui-react/icons/SvgTouchCursorPan.js.map +1 -0
  95. package/lib/appui-react/icons/SvgTouchCursorPoint.d.ts +7 -0
  96. package/lib/appui-react/icons/SvgTouchCursorPoint.d.ts.map +1 -0
  97. package/lib/appui-react/icons/SvgTouchCursorPoint.js +16 -0
  98. package/lib/appui-react/icons/SvgTouchCursorPoint.js.map +1 -0
  99. package/lib/appui-react/layout/StandardLayout.scss +3 -8
  100. package/lib/appui-react/layout/base/DragManager.d.ts.map +1 -1
  101. package/lib/appui-react/layout/base/DragManager.js +10 -15
  102. package/lib/appui-react/layout/base/DragManager.js.map +1 -1
  103. package/lib/appui-react/layout/state/NineZoneAction.d.ts +1 -0
  104. package/lib/appui-react/layout/state/NineZoneAction.d.ts.map +1 -1
  105. package/lib/appui-react/layout/state/NineZoneAction.js.map +1 -1
  106. package/lib/appui-react/layout/state/NineZoneStateReducer.d.ts.map +1 -1
  107. package/lib/appui-react/layout/state/NineZoneStateReducer.js +23 -16
  108. package/lib/appui-react/layout/state/NineZoneStateReducer.js.map +1 -1
  109. package/lib/appui-react/shared/MenuItem.d.ts +3 -0
  110. package/lib/appui-react/shared/MenuItem.d.ts.map +1 -1
  111. package/lib/appui-react/shared/MenuItem.js +2 -3
  112. package/lib/appui-react/shared/MenuItem.js.map +1 -1
  113. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +2 -55
  114. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  115. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js +333 -403
  116. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  117. package/lib/appui-react/toolbar/Toolbar.d.ts.map +1 -1
  118. package/lib/appui-react/toolbar/Toolbar.js +4 -3
  119. package/lib/appui-react/toolbar/Toolbar.js.map +1 -1
  120. package/lib/appui-react/toolbar/new-toolbars/ActionItem.d.ts.map +1 -1
  121. package/lib/appui-react/toolbar/new-toolbars/ActionItem.js +3 -0
  122. package/lib/appui-react/toolbar/new-toolbars/ActionItem.js.map +1 -1
  123. package/lib/appui-react/toolbar/new-toolbars/GroupItem.d.ts.map +1 -1
  124. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js +2 -0
  125. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js.map +1 -1
  126. package/lib/appui-react/toolbar/new-toolbars/Toolbar.d.ts +6 -3
  127. package/lib/appui-react/toolbar/new-toolbars/Toolbar.d.ts.map +1 -1
  128. package/lib/appui-react/toolbar/new-toolbars/Toolbar.js +4 -3
  129. package/lib/appui-react/toolbar/new-toolbars/Toolbar.js.map +1 -1
  130. package/lib/appui-react/utils/InternalUiShowHideManager.d.ts +2 -0
  131. package/lib/appui-react/utils/InternalUiShowHideManager.d.ts.map +1 -1
  132. package/lib/appui-react/utils/InternalUiShowHideManager.js +6 -0
  133. package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  134. package/lib/appui-react/widget-panels/Frontstage.d.ts +7 -2
  135. package/lib/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  136. package/lib/appui-react/widget-panels/Frontstage.js +29 -12
  137. package/lib/appui-react/widget-panels/Frontstage.js.map +1 -1
  138. package/lib/appui-react/widgets/BackstageAppButton.scss +8 -3
  139. package/lib/appui-react.d.ts +1 -1
  140. package/lib/appui-react.d.ts.map +1 -1
  141. package/lib/appui-react.js +1 -1
  142. package/lib/appui-react.js.map +1 -1
  143. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
  144. package/lib/cjs/appui-react/layout/StandardLayout.scss +3 -8
  145. package/lib/cjs/appui-react/widgets/BackstageAppButton.scss +8 -3
  146. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
  147. package/lib/esm/appui-react/layout/StandardLayout.scss +3 -8
  148. package/lib/esm/appui-react/widgets/BackstageAppButton.scss +8 -3
  149. package/package.json +8 -10
  150. package/lib/appui-react/accudraw/angle.svg +0 -1
  151. package/lib/appui-react/accudraw/backspace.svg +0 -9
  152. package/lib/appui-react/accudraw/constraint-2d.svg +0 -11
  153. package/lib/appui-react/accudraw/distance.svg +0 -1
  154. package/lib/appui-react/accudraw/height-2.svg +0 -10
  155. package/lib/appui-react/accudraw/height.svg +0 -11
  156. package/lib/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
  157. package/lib/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
  158. package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
  159. package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
  160. package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
  161. package/lib/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
  162. package/lib/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
  163. package/lib/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
  164. package/lib/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
  165. package/lib/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
  166. package/lib/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
  167. package/lib/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
  168. package/lib/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
  169. package/lib/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
  170. package/lib/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
  171. package/lib/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
  172. package/lib/cjs/appui-react/accudraw/angle.svg +0 -1
  173. package/lib/cjs/appui-react/accudraw/backspace.svg +0 -9
  174. package/lib/cjs/appui-react/accudraw/constraint-2d.svg +0 -11
  175. package/lib/cjs/appui-react/accudraw/distance.svg +0 -1
  176. package/lib/cjs/appui-react/accudraw/height-2.svg +0 -10
  177. package/lib/cjs/appui-react/accudraw/height.svg +0 -11
  178. package/lib/cjs/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
  179. package/lib/cjs/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
  180. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
  181. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
  182. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
  183. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
  184. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
  185. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
  186. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
  187. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
  188. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
  189. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
  190. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
  191. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
  192. package/lib/cjs/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
  193. package/lib/cjs/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
  194. package/lib/esm/appui-react/accudraw/angle.svg +0 -1
  195. package/lib/esm/appui-react/accudraw/backspace.svg +0 -9
  196. package/lib/esm/appui-react/accudraw/constraint-2d.svg +0 -11
  197. package/lib/esm/appui-react/accudraw/distance.svg +0 -1
  198. package/lib/esm/appui-react/accudraw/height-2.svg +0 -10
  199. package/lib/esm/appui-react/accudraw/height.svg +0 -11
  200. package/lib/esm/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
  201. package/lib/esm/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
  202. package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
  203. package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
  204. package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
  205. package/lib/esm/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
  206. package/lib/esm/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
  207. package/lib/esm/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
  208. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
  209. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
  210. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
  211. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
  212. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
  213. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
  214. package/lib/esm/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
  215. 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
- export class CursorPopupMenu extends React.PureComponent {
19
- constructor() {
20
- super(...arguments);
21
- this._isMounted = false; // used to ensure _handleSyncUiEvent callback is not processed after componentWillUnmount is called
22
- this.state = {
23
- menuX: 0,
24
- menuY: 0,
25
- menuVisible: false,
26
- items: undefined,
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
- const menuData = UiFramework.getCursorMenuData();
36
- if (menuData && this._hostChildWindowId === menuData.childWindowId) {
37
- this.setState({
38
- menuVisible: menuData.items && menuData.items.length > 0,
39
- items: menuData.items,
40
- menuX: menuData.position.x,
41
- menuY: menuData.position.y,
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
- this._handleRefSet = (popupDiv) => {
50
- const parentWindow = popupDiv?.ownerDocument.defaultView ?? undefined;
51
- // if the window is not a pop out set to undefined
52
- this._hostChildWindowId = UiFramework.childWindows.findId(parentWindow);
53
- Logger.logInfo(UiFramework.loggerCategory("UiFramework"), `Cursor Menu for ${this._hostChildWindowId ?? "main"} window`);
54
- };
55
- this._hideContextMenu = () => {
56
- this.setState({ menuVisible: false });
57
- };
58
- this._itemPicked = () => {
59
- this._hideContextMenu();
60
- };
61
- }
62
- componentDidMount() {
63
- this._isMounted = true;
64
- SyncUiEventDispatcher.onSyncUiEvent.addListener(this._handleSyncUiEvent);
65
- }
66
- componentWillUnmount() {
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":"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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 type { ListenerType } from \"@itwin/core-react/internal\";\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/** State for [[CursorPopupMenu]] component\n * @alpha\n */\ninterface CursorPopupMenuState {\n menuX: number;\n menuY: number;\n menuVisible: boolean;\n items?: CursorMenuItemProps[];\n}\n\n/** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.\n * @alpha\n */\nexport class CursorPopupMenu extends React.PureComponent<\n CommonProps, // eslint-disable-line @typescript-eslint/no-deprecated\n CursorPopupMenuState\n> {\n private _isMounted = false; // used to ensure _handleSyncUiEvent callback is not processed after componentWillUnmount is called\n private _hostChildWindowId?: string;\n\n public override readonly state: CursorPopupMenuState = {\n menuX: 0,\n menuY: 0,\n menuVisible: false,\n items: undefined,\n };\n\n private _handleSyncUiEvent: ListenerType<\n typeof SyncUiEventDispatcher.onSyncUiEvent\n > = (args) => {\n if (!this._isMounted) return;\n\n if (\n SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n SessionStateActionId.UpdateCursorMenu,\n ])\n ) {\n const menuData = UiFramework.getCursorMenuData();\n if (menuData && this._hostChildWindowId === menuData.childWindowId) {\n this.setState({\n menuVisible: menuData.items && menuData.items.length > 0,\n items: menuData.items as CursorMenuItemProps[],\n menuX: menuData.position.x,\n menuY: menuData.position.y,\n });\n } else {\n this.setState({ menuVisible: false, items: undefined });\n }\n }\n };\n\n public override componentDidMount() {\n this._isMounted = true;\n SyncUiEventDispatcher.onSyncUiEvent.addListener(this._handleSyncUiEvent);\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n SyncUiEventDispatcher.onSyncUiEvent.removeListener(this._handleSyncUiEvent);\n }\n\n private _handleRefSet = (popupDiv: HTMLElement | null) => {\n const parentWindow = popupDiv?.ownerDocument.defaultView ?? undefined;\n // if the window is not a pop out set to undefined\n this._hostChildWindowId = UiFramework.childWindows.findId(parentWindow);\n Logger.logInfo(\n UiFramework.loggerCategory(\"UiFramework\"),\n `Cursor Menu for ${this._hostChildWindowId ?? \"main\"} window`\n );\n };\n\n public override render(): React.ReactNode {\n const { menuX, menuY, items, menuVisible } = this.state;\n const onClose = this._hideContextMenu;\n\n return (\n <div className=\"uifw-cursor-menu-container-div\" ref={this._handleRefSet}>\n {items && items.length > 0 && menuVisible && (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <GlobalContextMenu\n className={this.props.className}\n style={this.props.style}\n identifier=\"cursor-popup-menu\"\n x={menuX}\n y={menuY}\n opened={menuVisible}\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, this._itemPicked)\n )}\n </GlobalContextMenu>\n )}\n </div>\n );\n }\n\n private _hideContextMenu = () => {\n this.setState({ menuVisible: false });\n };\n\n private _itemPicked = (): void => {\n this._hideContextMenu();\n };\n}\n"]}
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 class CursorPopupRenderer extends React.Component<any, CursorPopupRendererState> {
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":"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"}
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._emitPopupsChangedEvent();
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._emitPopupsChangedEvent();
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
- CursorPopupManager.updatePosition(pt);
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._emitPopupsChangedEvent();
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
- const flipped = CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);
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 { outPos, flipped } = CursorPopupManager.autoFlip(popupInfo.renderRelativePosition, popupRect, window.innerWidth, window.innerHeight);
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 class CursorPopupRenderer extends React.Component {
229
- constructor(props) {
230
- super(props);
231
- this._handlePopupChangedEvent = () => {
232
- this.forceUpdate();
233
- };
234
- this._handleCursorPopupUpdatePositionEvent = (args) => {
235
- this.setState({ pt: Point.create(args.pt) });
236
- };
237
- this.state = {
238
- pt: new Point(),
239
- };
240
- }
241
- render() {
242
- if (CursorPopupManager.popupCount <= 0)
243
- return null;
244
- return React.createElement(React.Fragment, null, this.renderPositions());
245
- }
246
- _handleSizeKnown(popupInfo, size) {
247
- popupInfo.popupSize = size;
248
- }
249
- renderPositions() {
250
- const positions = new Array();
251
- let renderedPosition;
252
- const begin = RelativePosition.Left;
253
- const end = RelativePosition.BottomRight;
254
- for (let position = begin; position <= end; position++) {
255
- renderedPosition = this.renderRelativePosition(position);
256
- if (renderedPosition)
257
- positions.push(renderedPosition);
258
- }
259
- return positions;
260
- }
261
- renderRelativePosition(relativePosition) {
262
- const filteredInfo = CursorPopupManager.popups.filter((popupInfo) => popupInfo.renderRelativePosition === relativePosition);
263
- if (filteredInfo.length > 0) {
264
- let totalDimension = 0;
265
- const ascending = relativePosition === RelativePosition.Right ||
266
- relativePosition === RelativePosition.BottomRight ||
267
- relativePosition === RelativePosition.Bottom ||
268
- relativePosition === RelativePosition.BottomLeft;
269
- const positionPopups = filteredInfo
270
- .sort((a, b) => ascending ? a.priority - b.priority : b.priority - a.priority)
271
- .map((popupInfo, index) => {
272
- const title = popupInfo.options !== undefined ? popupInfo.options.title : "";
273
- const shadow = popupInfo.options !== undefined ? popupInfo.options.shadow : false;
274
- let offset = popupInfo.offset;
275
- if (index > 0)
276
- offset = this.adjustOffset(offset, popupInfo.renderRelativePosition, totalDimension);
277
- if (popupInfo.popupSize)
278
- totalDimension += this.getDimension(popupInfo.popupSize, relativePosition);
279
- return (React.createElement(CursorPopup, { key: popupInfo.id, id: popupInfo.id, content: popupInfo.content, pt: this.state.pt, offset: offset, relativePosition: popupInfo.renderRelativePosition, title: title, shadow: shadow, onSizeKnown: (size) => this._handleSizeKnown(popupInfo, size) }));
280
- });
281
- return (React.createElement(React.Fragment, { key: relativePosition.toString() }, positionPopups));
282
- }
283
- return null;
284
- }
285
- getDimension(popupSize, relativePosition) {
286
- let dimension = 0;
287
- switch (relativePosition) {
288
- case RelativePosition.Top:
289
- case RelativePosition.Bottom:
290
- case RelativePosition.TopLeft:
291
- case RelativePosition.TopRight:
292
- case RelativePosition.BottomLeft:
293
- case RelativePosition.BottomRight:
294
- dimension = popupSize.height;
295
- break;
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
- componentWillUnmount() {
326
- CursorPopupManager.onCursorPopupsChangedEvent.removeListener(this._handlePopupChangedEvent);
327
- CursorPopupManager.onCursorPopupUpdatePositionEvent.removeListener(this._handleCursorPopupUpdatePositionEvent);
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