@itwin/appui-react 3.0.0-dev.147 → 3.0.0-dev.152
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/lib/cjs/appui-react/UiFramework.d.ts +2 -1
- package/lib/cjs/appui-react/UiFramework.d.ts.map +1 -1
- package/lib/cjs/appui-react/UiFramework.js +2 -2
- package/lib/cjs/appui-react/UiFramework.js.map +1 -1
- package/lib/cjs/appui-react/backstage/BackstageComposer.d.ts.map +1 -1
- package/lib/cjs/appui-react/backstage/BackstageComposer.js.map +1 -1
- package/lib/cjs/appui-react/backstage/CommandLaunch.d.ts.map +1 -1
- package/lib/cjs/appui-react/backstage/CommandLaunch.js.map +1 -1
- package/lib/cjs/appui-react/childwindow/ChildWindowManager.d.ts +1 -1
- package/lib/cjs/appui-react/childwindow/ChildWindowManager.js +1 -1
- package/lib/cjs/appui-react/childwindow/ChildWindowManager.js.map +1 -1
- package/lib/cjs/appui-react/content/ContentControl.d.ts +1 -1
- package/lib/cjs/appui-react/content/ContentControl.d.ts.map +1 -1
- package/lib/cjs/appui-react/content/ContentControl.js +2 -2
- package/lib/cjs/appui-react/content/ContentControl.js.map +1 -1
- package/lib/cjs/appui-react/content/ContentLayout.d.ts +2 -2
- package/lib/cjs/appui-react/content/ContentLayout.d.ts.map +1 -1
- package/lib/cjs/appui-react/content/ContentLayout.js +4 -3
- package/lib/cjs/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/cjs/appui-react/content/ContentViewManager.d.ts +1 -1
- package/lib/cjs/appui-react/content/ContentViewManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/content/ContentViewManager.js +3 -3
- package/lib/cjs/appui-react/content/ContentViewManager.js.map +1 -1
- package/lib/cjs/appui-react/content/split-pane/Pane.d.ts +21 -0
- package/lib/cjs/appui-react/content/split-pane/Pane.d.ts.map +1 -0
- package/lib/cjs/appui-react/content/split-pane/Pane.js +43 -0
- package/lib/cjs/appui-react/content/split-pane/Pane.js.map +1 -0
- package/lib/cjs/appui-react/content/split-pane/Resizer.d.ts +23 -0
- package/lib/cjs/appui-react/content/split-pane/Resizer.d.ts.map +1 -0
- package/lib/cjs/appui-react/content/split-pane/Resizer.js +39 -0
- package/lib/cjs/appui-react/content/split-pane/Resizer.js.map +1 -0
- package/lib/cjs/appui-react/content/split-pane/SplitPane.d.ts +70 -0
- package/lib/cjs/appui-react/content/split-pane/SplitPane.d.ts.map +1 -0
- package/lib/cjs/appui-react/content/split-pane/SplitPane.js +243 -0
- package/lib/cjs/appui-react/content/split-pane/SplitPane.js.map +1 -0
- package/lib/cjs/appui-react/cursor/CursorInformation.d.ts +1 -2
- package/lib/cjs/appui-react/cursor/CursorInformation.d.ts.map +1 -1
- package/lib/cjs/appui-react/cursor/CursorInformation.js +1 -1
- package/lib/cjs/appui-react/cursor/CursorInformation.js.map +1 -1
- package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
- package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
- package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +2 -2
- package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.js +3 -3
- package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
- package/lib/cjs/appui-react/dialog/DialogManagerBase.d.ts +1 -1
- package/lib/cjs/appui-react/dialog/DialogManagerBase.d.ts.map +1 -1
- package/lib/cjs/appui-react/dialog/DialogManagerBase.js +2 -2
- package/lib/cjs/appui-react/dialog/DialogManagerBase.js.map +1 -1
- package/lib/cjs/appui-react/feedback/ElementTooltip.d.ts +2 -2
- package/lib/cjs/appui-react/feedback/ElementTooltip.d.ts.map +1 -1
- package/lib/cjs/appui-react/feedback/ElementTooltip.js +2 -1
- package/lib/cjs/appui-react/feedback/ElementTooltip.js.map +1 -1
- package/lib/cjs/appui-react/frontstage/Frontstage.d.ts.map +1 -1
- package/lib/cjs/appui-react/frontstage/Frontstage.js +2 -0
- package/lib/cjs/appui-react/frontstage/Frontstage.js.map +1 -1
- package/lib/cjs/appui-react/hooks/useActiveIModelConnection.d.ts.map +1 -1
- package/lib/cjs/appui-react/hooks/useActiveIModelConnection.js.map +1 -1
- package/lib/cjs/appui-react/hooks/useActiveViewport.d.ts.map +1 -1
- package/lib/cjs/appui-react/hooks/useActiveViewport.js.map +1 -1
- package/lib/cjs/appui-react/keyboardshortcut/KeyboardShortcut.d.ts.map +1 -1
- package/lib/cjs/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
- package/lib/cjs/appui-react/keyboardshortcut/KeyboardShortcutMenu.d.ts +2 -1
- package/lib/cjs/appui-react/keyboardshortcut/KeyboardShortcutMenu.d.ts.map +1 -1
- package/lib/cjs/appui-react/keyboardshortcut/KeyboardShortcutMenu.js +1 -1
- package/lib/cjs/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
- package/lib/cjs/appui-react/messages/MessageManager.d.ts +1 -2
- package/lib/cjs/appui-react/messages/MessageManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/messages/MessageManager.js +8 -8
- package/lib/cjs/appui-react/messages/MessageManager.js.map +1 -1
- package/lib/cjs/appui-react/messages/Pointer.d.ts +2 -2
- package/lib/cjs/appui-react/messages/Pointer.d.ts.map +1 -1
- package/lib/cjs/appui-react/messages/Pointer.js +2 -2
- package/lib/cjs/appui-react/messages/Pointer.js.map +1 -1
- package/lib/cjs/appui-react/navigationaids/NavigationAidControl.d.ts +1 -1
- package/lib/cjs/appui-react/navigationaids/NavigationAidControl.d.ts.map +1 -1
- package/lib/cjs/appui-react/navigationaids/NavigationAidControl.js +2 -2
- package/lib/cjs/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
- package/lib/cjs/appui-react/navigationaids/SheetsModalFrontstage.d.ts +2 -1
- package/lib/cjs/appui-react/navigationaids/SheetsModalFrontstage.d.ts.map +1 -1
- package/lib/cjs/appui-react/navigationaids/SheetsModalFrontstage.js +2 -1
- package/lib/cjs/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
- package/lib/cjs/appui-react/pickers/ViewSelector.d.ts +1 -1
- package/lib/cjs/appui-react/pickers/ViewSelector.d.ts.map +1 -1
- package/lib/cjs/appui-react/pickers/ViewSelector.js +3 -3
- package/lib/cjs/appui-react/pickers/ViewSelector.js.map +1 -1
- package/lib/cjs/appui-react/popup/PopupManager.d.ts +2 -2
- package/lib/cjs/appui-react/popup/PopupManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/popup/PopupManager.js +1 -1
- package/lib/cjs/appui-react/popup/PopupManager.js.map +1 -1
- package/lib/cjs/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
- package/lib/cjs/appui-react/statusbar/StatusBarComposer.js.map +1 -1
- package/lib/cjs/appui-react/syncui/BooleanListener.d.ts +2 -2
- package/lib/cjs/appui-react/syncui/BooleanListener.d.ts.map +1 -1
- package/lib/cjs/appui-react/syncui/BooleanListener.js +2 -1
- package/lib/cjs/appui-react/syncui/BooleanListener.js.map +1 -1
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -16
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js +28 -101
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/ActionItemButton.d.ts.map +1 -1
- package/lib/cjs/appui-react/toolbar/ActionItemButton.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/GroupItem.d.ts.map +1 -1
- package/lib/cjs/appui-react/toolbar/GroupItem.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/ToolButton.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/Toolbar.d.ts.map +1 -1
- package/lib/cjs/appui-react/toolbar/Toolbar.js +1 -1
- package/lib/cjs/appui-react/toolbar/Toolbar.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/ToolbarComposer.js.map +1 -1
- package/lib/cjs/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
- package/lib/cjs/appui-react/uistate/AppUiSettings.js.map +1 -1
- package/lib/cjs/appui-react/uistate/useUiStateStorage.d.ts.map +1 -1
- package/lib/cjs/appui-react/uistate/useUiStateStorage.js.map +1 -1
- package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +1 -2
- package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
- package/lib/cjs/appui-react/widgets/WidgetDef.js +1 -2
- package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/cjs/appui-react/zones/toolsettings/ToolSettingsManager.d.ts +1 -2
- package/lib/cjs/appui-react/zones/toolsettings/ToolSettingsManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/zones/toolsettings/ToolSettingsManager.js +3 -2
- package/lib/cjs/appui-react/zones/toolsettings/ToolSettingsManager.js.map +1 -1
- package/lib/cjs/appui-react.d.ts +3 -2
- package/lib/cjs/appui-react.d.ts.map +1 -1
- package/lib/cjs/appui-react.js +3 -2
- package/lib/cjs/appui-react.js.map +1 -1
- package/lib/esm/appui-react/UiFramework.d.ts +2 -1
- package/lib/esm/appui-react/UiFramework.d.ts.map +1 -1
- package/lib/esm/appui-react/UiFramework.js +2 -2
- package/lib/esm/appui-react/UiFramework.js.map +1 -1
- package/lib/esm/appui-react/backstage/BackstageComposer.d.ts.map +1 -1
- package/lib/esm/appui-react/backstage/BackstageComposer.js.map +1 -1
- package/lib/esm/appui-react/backstage/CommandLaunch.d.ts.map +1 -1
- package/lib/esm/appui-react/backstage/CommandLaunch.js.map +1 -1
- package/lib/esm/appui-react/childwindow/ChildWindowManager.d.ts +1 -1
- package/lib/esm/appui-react/childwindow/ChildWindowManager.js +1 -1
- package/lib/esm/appui-react/childwindow/ChildWindowManager.js.map +1 -1
- package/lib/esm/appui-react/content/ContentControl.d.ts +1 -1
- package/lib/esm/appui-react/content/ContentControl.d.ts.map +1 -1
- package/lib/esm/appui-react/content/ContentControl.js +1 -1
- package/lib/esm/appui-react/content/ContentControl.js.map +1 -1
- package/lib/esm/appui-react/content/ContentLayout.d.ts +2 -2
- package/lib/esm/appui-react/content/ContentLayout.d.ts.map +1 -1
- package/lib/esm/appui-react/content/ContentLayout.js +3 -2
- package/lib/esm/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/esm/appui-react/content/ContentViewManager.d.ts +1 -1
- package/lib/esm/appui-react/content/ContentViewManager.d.ts.map +1 -1
- package/lib/esm/appui-react/content/ContentViewManager.js +1 -1
- package/lib/esm/appui-react/content/ContentViewManager.js.map +1 -1
- package/lib/esm/appui-react/content/split-pane/Pane.d.ts +21 -0
- package/lib/esm/appui-react/content/split-pane/Pane.d.ts.map +1 -0
- package/lib/esm/appui-react/content/split-pane/Pane.js +39 -0
- package/lib/esm/appui-react/content/split-pane/Pane.js.map +1 -0
- package/lib/esm/appui-react/content/split-pane/Resizer.d.ts +23 -0
- package/lib/esm/appui-react/content/split-pane/Resizer.d.ts.map +1 -0
- package/lib/esm/appui-react/content/split-pane/Resizer.js +35 -0
- package/lib/esm/appui-react/content/split-pane/Resizer.js.map +1 -0
- package/lib/esm/appui-react/content/split-pane/SplitPane.d.ts +70 -0
- package/lib/esm/appui-react/content/split-pane/SplitPane.d.ts.map +1 -0
- package/lib/esm/appui-react/content/split-pane/SplitPane.js +239 -0
- package/lib/esm/appui-react/content/split-pane/SplitPane.js.map +1 -0
- package/lib/esm/appui-react/cursor/CursorInformation.d.ts +1 -2
- package/lib/esm/appui-react/cursor/CursorInformation.d.ts.map +1 -1
- package/lib/esm/appui-react/cursor/CursorInformation.js +2 -2
- package/lib/esm/appui-react/cursor/CursorInformation.js.map +1 -1
- package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
- package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
- package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +2 -2
- package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
- package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.js +2 -2
- package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
- package/lib/esm/appui-react/dialog/DialogManagerBase.d.ts +1 -1
- package/lib/esm/appui-react/dialog/DialogManagerBase.d.ts.map +1 -1
- package/lib/esm/appui-react/dialog/DialogManagerBase.js +1 -1
- package/lib/esm/appui-react/dialog/DialogManagerBase.js.map +1 -1
- package/lib/esm/appui-react/feedback/ElementTooltip.d.ts +2 -2
- package/lib/esm/appui-react/feedback/ElementTooltip.d.ts.map +1 -1
- package/lib/esm/appui-react/feedback/ElementTooltip.js +2 -1
- package/lib/esm/appui-react/feedback/ElementTooltip.js.map +1 -1
- package/lib/esm/appui-react/frontstage/Frontstage.d.ts.map +1 -1
- package/lib/esm/appui-react/frontstage/Frontstage.js +2 -0
- package/lib/esm/appui-react/frontstage/Frontstage.js.map +1 -1
- package/lib/esm/appui-react/hooks/useActiveIModelConnection.d.ts.map +1 -1
- package/lib/esm/appui-react/hooks/useActiveIModelConnection.js.map +1 -1
- package/lib/esm/appui-react/hooks/useActiveViewport.d.ts.map +1 -1
- package/lib/esm/appui-react/hooks/useActiveViewport.js.map +1 -1
- package/lib/esm/appui-react/keyboardshortcut/KeyboardShortcut.d.ts.map +1 -1
- package/lib/esm/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
- package/lib/esm/appui-react/keyboardshortcut/KeyboardShortcutMenu.d.ts +2 -1
- package/lib/esm/appui-react/keyboardshortcut/KeyboardShortcutMenu.d.ts.map +1 -1
- package/lib/esm/appui-react/keyboardshortcut/KeyboardShortcutMenu.js +2 -2
- package/lib/esm/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
- package/lib/esm/appui-react/messages/MessageManager.d.ts +1 -2
- package/lib/esm/appui-react/messages/MessageManager.d.ts.map +1 -1
- package/lib/esm/appui-react/messages/MessageManager.js +2 -2
- package/lib/esm/appui-react/messages/MessageManager.js.map +1 -1
- package/lib/esm/appui-react/messages/Pointer.d.ts +2 -2
- package/lib/esm/appui-react/messages/Pointer.d.ts.map +1 -1
- package/lib/esm/appui-react/messages/Pointer.js +2 -2
- package/lib/esm/appui-react/messages/Pointer.js.map +1 -1
- package/lib/esm/appui-react/navigationaids/NavigationAidControl.d.ts +1 -1
- package/lib/esm/appui-react/navigationaids/NavigationAidControl.d.ts.map +1 -1
- package/lib/esm/appui-react/navigationaids/NavigationAidControl.js +1 -1
- package/lib/esm/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
- package/lib/esm/appui-react/navigationaids/SheetsModalFrontstage.d.ts +2 -1
- package/lib/esm/appui-react/navigationaids/SheetsModalFrontstage.d.ts.map +1 -1
- package/lib/esm/appui-react/navigationaids/SheetsModalFrontstage.js +2 -1
- package/lib/esm/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
- package/lib/esm/appui-react/pickers/ViewSelector.d.ts +1 -1
- package/lib/esm/appui-react/pickers/ViewSelector.d.ts.map +1 -1
- package/lib/esm/appui-react/pickers/ViewSelector.js +1 -1
- package/lib/esm/appui-react/pickers/ViewSelector.js.map +1 -1
- package/lib/esm/appui-react/popup/PopupManager.d.ts +2 -2
- package/lib/esm/appui-react/popup/PopupManager.d.ts.map +1 -1
- package/lib/esm/appui-react/popup/PopupManager.js +2 -2
- package/lib/esm/appui-react/popup/PopupManager.js.map +1 -1
- package/lib/esm/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
- package/lib/esm/appui-react/statusbar/StatusBarComposer.js.map +1 -1
- package/lib/esm/appui-react/syncui/BooleanListener.d.ts +2 -2
- package/lib/esm/appui-react/syncui/BooleanListener.d.ts.map +1 -1
- package/lib/esm/appui-react/syncui/BooleanListener.js +2 -1
- package/lib/esm/appui-react/syncui/BooleanListener.js.map +1 -1
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -16
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js +27 -99
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
- package/lib/esm/appui-react/toolbar/ActionItemButton.d.ts.map +1 -1
- package/lib/esm/appui-react/toolbar/ActionItemButton.js.map +1 -1
- package/lib/esm/appui-react/toolbar/GroupItem.d.ts.map +1 -1
- package/lib/esm/appui-react/toolbar/GroupItem.js.map +1 -1
- package/lib/esm/appui-react/toolbar/ToolButton.js.map +1 -1
- package/lib/esm/appui-react/toolbar/Toolbar.d.ts.map +1 -1
- package/lib/esm/appui-react/toolbar/Toolbar.js +1 -1
- package/lib/esm/appui-react/toolbar/Toolbar.js.map +1 -1
- package/lib/esm/appui-react/toolbar/ToolbarComposer.js.map +1 -1
- package/lib/esm/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
- package/lib/esm/appui-react/uistate/AppUiSettings.js.map +1 -1
- package/lib/esm/appui-react/uistate/useUiStateStorage.d.ts.map +1 -1
- package/lib/esm/appui-react/uistate/useUiStateStorage.js.map +1 -1
- package/lib/esm/appui-react/widgets/WidgetDef.d.ts +1 -2
- package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
- package/lib/esm/appui-react/widgets/WidgetDef.js +1 -2
- package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/esm/appui-react/zones/toolsettings/ToolSettingsManager.d.ts +1 -2
- package/lib/esm/appui-react/zones/toolsettings/ToolSettingsManager.d.ts.map +1 -1
- package/lib/esm/appui-react/zones/toolsettings/ToolSettingsManager.js +2 -1
- package/lib/esm/appui-react/zones/toolsettings/ToolSettingsManager.js.map +1 -1
- package/lib/esm/appui-react.d.ts +3 -2
- package/lib/esm/appui-react.d.ts.map +1 -1
- package/lib/esm/appui-react.js +3 -2
- package/lib/esm/appui-react.js.map +1 -1
- package/package.json +34 -35
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module ContentView
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SplitPane = void 0;
|
|
11
|
+
const React = require("react");
|
|
12
|
+
const classnames_1 = require("classnames");
|
|
13
|
+
const Pane_1 = require("./Pane");
|
|
14
|
+
const Resizer_1 = require("./Resizer");
|
|
15
|
+
function unFocus(ownerDoc) {
|
|
16
|
+
var _a;
|
|
17
|
+
// istanbul ignore next
|
|
18
|
+
if (!ownerDoc)
|
|
19
|
+
return;
|
|
20
|
+
const docSelection = ownerDoc.getSelection();
|
|
21
|
+
// istanbul ignore else
|
|
22
|
+
if (docSelection) {
|
|
23
|
+
docSelection.empty();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// istanbul ignore next
|
|
27
|
+
try {
|
|
28
|
+
const winSelection = (_a = ownerDoc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
29
|
+
winSelection === null || winSelection === void 0 ? void 0 : winSelection.removeAllRanges();
|
|
30
|
+
}
|
|
31
|
+
catch (_e) { }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function getDefaultSize(defaultSize, minSize, maxSize, draggedSize) {
|
|
35
|
+
// istanbul ignore next
|
|
36
|
+
if (typeof draggedSize === "number") {
|
|
37
|
+
const min = typeof minSize === "number" ? minSize : 0;
|
|
38
|
+
const max = typeof maxSize === "number" && maxSize >= 0 ? maxSize : Infinity;
|
|
39
|
+
return Math.max(min, Math.min(max, draggedSize));
|
|
40
|
+
}
|
|
41
|
+
if (defaultSize !== undefined) {
|
|
42
|
+
return defaultSize;
|
|
43
|
+
}
|
|
44
|
+
return minSize;
|
|
45
|
+
}
|
|
46
|
+
function removeNullChildren(children) {
|
|
47
|
+
return React.Children.toArray(children).filter((c) => c);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Local TypeScript implementation of `SplitPane` from `react-split-pane` package since that
|
|
51
|
+
* package is not regularly maintained.
|
|
52
|
+
* See https://github.com/tomkp/react-split-pane/blob/master/LICENSE.
|
|
53
|
+
* @public
|
|
54
|
+
*/
|
|
55
|
+
function SplitPane(props) {
|
|
56
|
+
const { style, size, defaultSize, maxSize, children, paneStyle, pane1Style, pane2Style, className, paneClassName, pane1ClassName, pane2ClassName, onDragStarted, onDragFinished, step, onChange, onResizerClick, onResizerDoubleClick, } = props;
|
|
57
|
+
// honor same defaults as react-split-pane
|
|
58
|
+
const allowResize = React.useMemo(() => undefined !== props.allowResize ? props.allowResize : true, [props.allowResize]);
|
|
59
|
+
const minSize = React.useMemo(() => undefined !== props.minSize ? props.minSize : 50, [props.minSize]);
|
|
60
|
+
const primary = React.useMemo(() => undefined !== props.primary ? props.primary : "first", [props.primary]);
|
|
61
|
+
const split = React.useMemo(() => undefined !== props.split ? props.split : "vertical", [props.split]);
|
|
62
|
+
const initialSize = size !== undefined ? size : getDefaultSize(defaultSize, minSize, maxSize);
|
|
63
|
+
const [position, setPosition] = React.useState(0);
|
|
64
|
+
const [draggedSize, setDraggedSize] = React.useState();
|
|
65
|
+
const [active, setActive] = React.useState(false);
|
|
66
|
+
const [pane1Size, setPane1Size] = React.useState(() => primary === "first" ? initialSize : undefined);
|
|
67
|
+
const [pane2Size, setPane2Size] = React.useState(() => primary === "second" ? initialSize : undefined);
|
|
68
|
+
const splitPane = React.useRef(null);
|
|
69
|
+
const pane1 = React.useRef(null);
|
|
70
|
+
const pane2 = React.useRef(null);
|
|
71
|
+
const notNullChildren = React.useMemo(() => removeNullChildren(children), [children]);
|
|
72
|
+
React.useEffect(() => {
|
|
73
|
+
primary === "first" ? setPane1Size(initialSize) : setPane2Size(initialSize);
|
|
74
|
+
primary === "first" ? setPane2Size(undefined) : setPane1Size(undefined);
|
|
75
|
+
}, [initialSize, primary]);
|
|
76
|
+
const splitPaneStyle = React.useMemo(() => {
|
|
77
|
+
const directionSpecificParts = (split === "vertical") ? {
|
|
78
|
+
flexDirection: "row",
|
|
79
|
+
left: 0,
|
|
80
|
+
right: 0,
|
|
81
|
+
} : {
|
|
82
|
+
bottom: 0,
|
|
83
|
+
flexDirection: "column",
|
|
84
|
+
minHeight: "100%",
|
|
85
|
+
top: 0,
|
|
86
|
+
width: "100%",
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
display: "flex",
|
|
90
|
+
flex: 1,
|
|
91
|
+
height: "100%",
|
|
92
|
+
position: "absolute",
|
|
93
|
+
outline: "none",
|
|
94
|
+
overflow: "hidden",
|
|
95
|
+
MozUserSelect: "text",
|
|
96
|
+
WebkitUserSelect: "text",
|
|
97
|
+
msUserSelect: "text",
|
|
98
|
+
userSelect: "text",
|
|
99
|
+
...style,
|
|
100
|
+
...directionSpecificParts,
|
|
101
|
+
};
|
|
102
|
+
}, [split, style]);
|
|
103
|
+
const pane1DivStyle = { ...paneStyle, ...pane1Style };
|
|
104
|
+
const pane2DivStyle = { ...paneStyle, ...pane2Style };
|
|
105
|
+
const resizerStyle = React.useMemo(() => { var _a; return (_a = props.resizerStyle) !== null && _a !== void 0 ? _a : {}; }, [props.resizerStyle]);
|
|
106
|
+
const resizerClasses = React.useMemo(() => (0, classnames_1.default)("Resizer", !allowResize && "disabled"), [allowResize]);
|
|
107
|
+
const splitPaneClasses = React.useMemo(() => (0, classnames_1.default)("SplitPane", className, split, !allowResize && "disabled"), [className, split, allowResize]);
|
|
108
|
+
const pane1Classes = React.useMemo(() => (0, classnames_1.default)("Pane1", paneClassName, pane1ClassName), [paneClassName, pane1ClassName]);
|
|
109
|
+
const pane2Classes = React.useMemo(() => (0, classnames_1.default)("Pane2", paneClassName, pane2ClassName), [paneClassName, pane2ClassName]);
|
|
110
|
+
const initializeDrag = React.useCallback((x, y) => {
|
|
111
|
+
var _a;
|
|
112
|
+
// istanbul ignore next
|
|
113
|
+
unFocus((_a = splitPane.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
|
|
114
|
+
const newPosition = split === "vertical" ? x : y;
|
|
115
|
+
onDragStarted && onDragStarted();
|
|
116
|
+
setActive(true);
|
|
117
|
+
setPosition(newPosition);
|
|
118
|
+
}, [onDragStarted, split]);
|
|
119
|
+
const onTouchStart = React.useCallback((event) => {
|
|
120
|
+
// istanbul ignore else
|
|
121
|
+
if (allowResize) {
|
|
122
|
+
initializeDrag(event.touches[0].clientX, event.touches[0].clientY);
|
|
123
|
+
}
|
|
124
|
+
}, [allowResize, initializeDrag]);
|
|
125
|
+
const processMove = React.useCallback((x, y) => {
|
|
126
|
+
var _a, _b, _c, _d, _f, _g, _h;
|
|
127
|
+
// istanbul ignore next
|
|
128
|
+
unFocus((_a = splitPane.current) === null || _a === void 0 ? void 0 : _a.ownerDocument);
|
|
129
|
+
const isPrimaryFirst = primary === "first";
|
|
130
|
+
const ref = isPrimaryFirst ? pane1.current : pane2.current;
|
|
131
|
+
const ref2 = isPrimaryFirst ? pane2.current : pane1.current;
|
|
132
|
+
const splitPaneDiv = splitPane.current;
|
|
133
|
+
// istanbul ignore else
|
|
134
|
+
if (ref && ref2 && splitPaneDiv) {
|
|
135
|
+
const node = ref;
|
|
136
|
+
const node2 = ref2;
|
|
137
|
+
// istanbul ignore else
|
|
138
|
+
if (node.getBoundingClientRect) {
|
|
139
|
+
const width = node.getBoundingClientRect().width;
|
|
140
|
+
const height = node.getBoundingClientRect().height;
|
|
141
|
+
// istanbul ignore next
|
|
142
|
+
const current = split === "vertical" ? x : y;
|
|
143
|
+
// istanbul ignore next
|
|
144
|
+
const oldSize = split === "vertical" ? width : height;
|
|
145
|
+
let positionDelta = position - current;
|
|
146
|
+
if (step) {
|
|
147
|
+
// istanbul ignore next
|
|
148
|
+
if (Math.abs(positionDelta) < step) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Integer division
|
|
152
|
+
// eslint-disable-next-line no-bitwise
|
|
153
|
+
positionDelta = ~~(positionDelta / step) * step;
|
|
154
|
+
}
|
|
155
|
+
let sizeDelta = isPrimaryFirst ? positionDelta : -positionDelta;
|
|
156
|
+
// istanbul ignore next
|
|
157
|
+
const pane1Order = parseInt((_d = (_c = (_b = node.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.getComputedStyle(node).order) !== null && _d !== void 0 ? _d : "0", 10);
|
|
158
|
+
// istanbul ignore next
|
|
159
|
+
const pane2Order = parseInt((_h = (_g = (_f = node2.ownerDocument) === null || _f === void 0 ? void 0 : _f.defaultView) === null || _g === void 0 ? void 0 : _g.getComputedStyle(node2).order) !== null && _h !== void 0 ? _h : "0", 10);
|
|
160
|
+
// istanbul ignore next
|
|
161
|
+
if (pane1Order > pane2Order) {
|
|
162
|
+
sizeDelta = -sizeDelta;
|
|
163
|
+
}
|
|
164
|
+
let newMaxSize = maxSize;
|
|
165
|
+
// istanbul ignore next
|
|
166
|
+
if (typeof maxSize === "number" && maxSize !== undefined && maxSize <= 0) {
|
|
167
|
+
if (split === "vertical") {
|
|
168
|
+
newMaxSize = splitPaneDiv.getBoundingClientRect().width + maxSize;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
newMaxSize = splitPaneDiv.getBoundingClientRect().height + maxSize;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
let newSize = oldSize - sizeDelta;
|
|
175
|
+
const newPosition = position - positionDelta;
|
|
176
|
+
// istanbul ignore next
|
|
177
|
+
if (typeof minSize === "number" && newSize < minSize) {
|
|
178
|
+
newSize = minSize;
|
|
179
|
+
}
|
|
180
|
+
else if (typeof newMaxSize === "number" && newMaxSize !== undefined && newSize > newMaxSize) {
|
|
181
|
+
newSize = newMaxSize;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
setPosition(newPosition);
|
|
185
|
+
}
|
|
186
|
+
onChange && onChange(newSize);
|
|
187
|
+
setDraggedSize(newSize);
|
|
188
|
+
isPrimaryFirst ? setPane1Size(newSize) : setPane2Size(newSize);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}, [maxSize, minSize, onChange, position, primary, split, step]);
|
|
192
|
+
const onTouchMove = React.useCallback((event) => {
|
|
193
|
+
// istanbul ignore next
|
|
194
|
+
if (!allowResize || !active)
|
|
195
|
+
return;
|
|
196
|
+
processMove(event.touches[0].clientX, event.touches[0].clientY);
|
|
197
|
+
}, [active, allowResize, processMove]);
|
|
198
|
+
const onMouseMove = React.useCallback((event) => {
|
|
199
|
+
if (!allowResize || !active)
|
|
200
|
+
return;
|
|
201
|
+
processMove(event.clientX, event.clientY);
|
|
202
|
+
}, [active, allowResize, processMove]);
|
|
203
|
+
const onMouseDown = React.useCallback((event) => {
|
|
204
|
+
// istanbul ignore else
|
|
205
|
+
if (allowResize) {
|
|
206
|
+
event.preventDefault();
|
|
207
|
+
initializeDrag(event.clientX, event.clientY);
|
|
208
|
+
}
|
|
209
|
+
}, [allowResize, initializeDrag]);
|
|
210
|
+
const processResizeFinished = React.useCallback(() => {
|
|
211
|
+
// istanbul ignore else
|
|
212
|
+
if (undefined !== draggedSize && allowResize && active) {
|
|
213
|
+
onDragFinished && onDragFinished(draggedSize);
|
|
214
|
+
}
|
|
215
|
+
setActive(false);
|
|
216
|
+
}, [draggedSize, allowResize, active, onDragFinished]);
|
|
217
|
+
const onMouseUp = React.useCallback((event) => {
|
|
218
|
+
event.preventDefault();
|
|
219
|
+
processResizeFinished();
|
|
220
|
+
}, [processResizeFinished]);
|
|
221
|
+
React.useEffect(() => {
|
|
222
|
+
var _a;
|
|
223
|
+
// istanbul ignore next
|
|
224
|
+
const ownerDoc = (_a = splitPane.current) === null || _a === void 0 ? void 0 : _a.ownerDocument;
|
|
225
|
+
// istanbul ignore next
|
|
226
|
+
if (!ownerDoc)
|
|
227
|
+
return;
|
|
228
|
+
ownerDoc.addEventListener("mouseup", onMouseUp);
|
|
229
|
+
ownerDoc.addEventListener("mousemove", onMouseMove);
|
|
230
|
+
ownerDoc.addEventListener("touchmove", onTouchMove);
|
|
231
|
+
return () => {
|
|
232
|
+
ownerDoc.removeEventListener("mouseup", onMouseUp);
|
|
233
|
+
ownerDoc.removeEventListener("mousemove", onMouseMove);
|
|
234
|
+
ownerDoc.removeEventListener("touchmove", onTouchMove);
|
|
235
|
+
};
|
|
236
|
+
}, [onMouseMove, onMouseUp, onTouchMove]);
|
|
237
|
+
return (React.createElement("div", { className: splitPaneClasses, ref: splitPane, style: splitPaneStyle },
|
|
238
|
+
React.createElement(Pane_1.Pane, { className: pane1Classes, key: "pane1", eleRef: pane1, size: pane1Size, split: split, style: pane1DivStyle }, notNullChildren[0]),
|
|
239
|
+
React.createElement(Resizer_1.Resizer, { className: resizerClasses, onClick: onResizerClick, onDoubleClick: onResizerDoubleClick, onMouseDown: onMouseDown, onTouchStart: onTouchStart, onTouchEnd: processResizeFinished, key: "resizer", split: split, style: resizerStyle }),
|
|
240
|
+
React.createElement(Pane_1.Pane, { className: pane2Classes, key: "pane2", eleRef: pane2, size: pane2Size, split: split, style: pane2DivStyle }, notNullChildren[1])));
|
|
241
|
+
}
|
|
242
|
+
exports.SplitPane = SplitPane;
|
|
243
|
+
//# sourceMappingURL=SplitPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitPane.js","sourceRoot":"","sources":["../../../../../src/appui-react/content/split-pane/SplitPane.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport classnames from \"classnames\";\r\nimport { Pane } from \"./Pane\";\r\nimport { Resizer } from \"./Resizer\";\r\n\r\n/**\r\n * Props for [[SplitPane]] component\r\n * @public\r\n */\r\nexport interface SplitPaneProps {\r\n /** Pass false to disable resizing */\r\n allowResize?: boolean;\r\n /** The array of two react nodes, one for each pane. */\r\n children: React.ReactNode[];\r\n /** Determines which pane maintains its size when browser window is resized.*/\r\n primary?: \"first\" | \"second\";\r\n\r\n minSize?: string | number;\r\n /** You can limit the maximal size of the 'fixed' pane using the maxSize parameter with a positive value\r\n * (measured in pixels but state just a number). If you wrap the SplitPane into a container component\r\n * (yes you can, just remember the container has to have the relative or absolute positioning), then you'll need to limit\r\n * the movement of the splitter (resizer) at the end of the SplitPane (otherwise it can be dragged outside the SplitPane\r\n * and you don't catch it never more). For this purpose use the maxSize parameter with value 0. When dragged the splitter/resizer\r\n * will stop at the border of the SplitPane component and think this you'll be able to pick it again and drag it back then.\r\n * And more: if you set the maxSize to negative value (e.g. -200), then the splitter stops 200px before the border\r\n * (in other words it sets the minimal size of the 'resizable' pane in this case). This can be useful also in the\r\n * full-screen case of use. */\r\n maxSize?: string | number;\r\n /** Default initial size of primary pane */\r\n defaultSize?: string | number;\r\n /** Size of primary pane */\r\n size?: string | number;\r\n /** You can use the step prop to only allow resizing in fixed increments. */\r\n step?: number;\r\n split?: \"vertical\" | \"horizontal\";\r\n /** This callback is invoked when a drag start. */\r\n onDragStarted?: () => void;\r\n /** This callback is invoked when a drag ends. */\r\n onDragFinished?: (newSize: number) => void;\r\n /** Callback is invoked with the current drag during a drag event.*/\r\n onChange?: (newSize: number) => void;\r\n /** Callback is invoked if user clicks on Resizer. */\r\n onResizerClick?: (event: MouseEvent) => void;\r\n /** Callback is invoked if user double clicks on Resizer. */\r\n onResizerDoubleClick?: (event: MouseEvent) => void;\r\n /** Styling to be applied to the main container */\r\n style?: React.CSSProperties;\r\n /** Styling to be applied to both panes */\r\n paneStyle?: React.CSSProperties;\r\n /** Styling to be applied to the first pane, with precedence over paneStyle */\r\n pane1Style?: React.CSSProperties;\r\n /** Styling to be applied to the second pane, with precedence over paneStyle */\r\n pane2Style?: React.CSSProperties;\r\n /** Styling to be applied to the resizer bar */\r\n resizerStyle?: React.CSSProperties;\r\n /** Class name to be added to the SplitPane div */\r\n className?: string;\r\n /** Class name to be added to each Pane's div */\r\n paneClassName?: string;\r\n /** Class name to be added to Pane1's div */\r\n pane1ClassName?: string;\r\n /** Class name to be added to Pane2's div */\r\n pane2ClassName?: string;\r\n}\r\n\r\nfunction unFocus(ownerDoc: Document | undefined) {\r\n // istanbul ignore next\r\n if (!ownerDoc)\r\n return;\r\n\r\n const docSelection = ownerDoc.getSelection();\r\n // istanbul ignore else\r\n if (docSelection) {\r\n docSelection.empty();\r\n } else {\r\n // istanbul ignore next\r\n try {\r\n const winSelection = ownerDoc.defaultView?.getSelection();\r\n winSelection?.removeAllRanges();\r\n } catch (_e) { }\r\n }\r\n}\r\n\r\nfunction getDefaultSize(defaultSize?: number | string, minSize?: string | number, maxSize?: string | number, draggedSize?: number) {\r\n // istanbul ignore next\r\n if (typeof draggedSize === \"number\") {\r\n const min = typeof minSize === \"number\" ? minSize : 0;\r\n const max =\r\n typeof maxSize === \"number\" && maxSize >= 0 ? maxSize : Infinity;\r\n return Math.max(min, Math.min(max, draggedSize));\r\n }\r\n if (defaultSize !== undefined) {\r\n return defaultSize;\r\n }\r\n return minSize;\r\n}\r\n\r\nfunction removeNullChildren(children: React.ReactNode[]) {\r\n return React.Children.toArray(children).filter((c) => c);\r\n}\r\n\r\n/**\r\n * Local TypeScript implementation of `SplitPane` from `react-split-pane` package since that\r\n * package is not regularly maintained.\r\n * See https://github.com/tomkp/react-split-pane/blob/master/LICENSE.\r\n * @public\r\n */\r\nexport function SplitPane(props: SplitPaneProps) {\r\n const { style, size, defaultSize, maxSize, children,\r\n paneStyle, pane1Style, pane2Style, className,\r\n paneClassName, pane1ClassName, pane2ClassName,\r\n onDragStarted, onDragFinished, step, onChange,\r\n onResizerClick, onResizerDoubleClick,\r\n } = props;\r\n\r\n // honor same defaults as react-split-pane\r\n const allowResize = React.useMemo(() => undefined !== props.allowResize ? props.allowResize : true, [props.allowResize]);\r\n const minSize = React.useMemo(() => undefined !== props.minSize ? props.minSize : 50, [props.minSize]);\r\n const primary = React.useMemo(() => undefined !== props.primary ? props.primary : \"first\", [props.primary]);\r\n const split = React.useMemo(() => undefined !== props.split ? props.split : \"vertical\", [props.split]);\r\n const initialSize = size !== undefined ? size : getDefaultSize(defaultSize, minSize, maxSize);\r\n\r\n const [position, setPosition] = React.useState(0);\r\n const [draggedSize, setDraggedSize] = React.useState<number | undefined>();\r\n const [active, setActive] = React.useState(false);\r\n const [pane1Size, setPane1Size] = React.useState(() => primary === \"first\" ? initialSize : undefined);\r\n const [pane2Size, setPane2Size] = React.useState(() => primary === \"second\" ? initialSize : undefined);\r\n const splitPane = React.useRef<HTMLDivElement>(null);\r\n const pane1 = React.useRef<HTMLDivElement>(null);\r\n const pane2 = React.useRef<HTMLDivElement>(null);\r\n const notNullChildren = React.useMemo(() => removeNullChildren(children), [children]);\r\n\r\n React.useEffect(() => {\r\n primary === \"first\" ? setPane1Size(initialSize) : setPane2Size(initialSize);\r\n primary === \"first\" ? setPane2Size(undefined) : setPane1Size(undefined);\r\n }, [initialSize, primary]);\r\n\r\n const splitPaneStyle = React.useMemo(() => {\r\n const directionSpecificParts = (split === \"vertical\") ? {\r\n flexDirection: \"row\",\r\n left: 0,\r\n right: 0,\r\n } : {\r\n bottom: 0,\r\n flexDirection: \"column\",\r\n minHeight: \"100%\",\r\n top: 0,\r\n width: \"100%\",\r\n };\r\n\r\n return {\r\n display: \"flex\",\r\n flex: 1,\r\n height: \"100%\",\r\n position: \"absolute\",\r\n outline: \"none\",\r\n overflow: \"hidden\",\r\n MozUserSelect: \"text\",\r\n WebkitUserSelect: \"text\",\r\n msUserSelect: \"text\",\r\n userSelect: \"text\",\r\n ...style,\r\n ...directionSpecificParts,\r\n } as React.CSSProperties;\r\n }, [split, style]);\r\n\r\n const pane1DivStyle = { ...paneStyle, ...pane1Style };\r\n const pane2DivStyle = { ...paneStyle, ...pane2Style };\r\n const resizerStyle = React.useMemo(() => props.resizerStyle ?? {}, [props.resizerStyle]);\r\n const resizerClasses = React.useMemo(() => classnames(\"Resizer\", !allowResize && \"disabled\"), [allowResize]);\r\n const splitPaneClasses = React.useMemo(() => classnames(\"SplitPane\", className, split, !allowResize && \"disabled\"), [className, split, allowResize]);\r\n const pane1Classes = React.useMemo(() => classnames(\"Pane1\", paneClassName, pane1ClassName), [paneClassName, pane1ClassName]);\r\n const pane2Classes = React.useMemo(() => classnames(\"Pane2\", paneClassName, pane2ClassName), [paneClassName, pane2ClassName]);\r\n\r\n const initializeDrag = React.useCallback((x: number, y: number) => {\r\n // istanbul ignore next\r\n unFocus(splitPane.current?.ownerDocument);\r\n const newPosition = split === \"vertical\" ? x : y;\r\n onDragStarted && onDragStarted();\r\n setActive(true);\r\n setPosition(newPosition);\r\n }, [onDragStarted, split]);\r\n\r\n const onTouchStart = React.useCallback((event: TouchEvent) => {\r\n // istanbul ignore else\r\n if (allowResize) {\r\n initializeDrag(event.touches[0].clientX, event.touches[0].clientY);\r\n }\r\n }, [allowResize, initializeDrag]);\r\n\r\n const processMove = React.useCallback((x: number, y: number) => {\r\n // istanbul ignore next\r\n unFocus(splitPane.current?.ownerDocument);\r\n const isPrimaryFirst = primary === \"first\";\r\n const ref = isPrimaryFirst ? pane1.current : pane2.current;\r\n const ref2 = isPrimaryFirst ? pane2.current : pane1.current;\r\n const splitPaneDiv = splitPane.current;\r\n\r\n // istanbul ignore else\r\n if (ref && ref2 && splitPaneDiv) {\r\n const node = ref;\r\n const node2 = ref2;\r\n // istanbul ignore else\r\n if (node.getBoundingClientRect) {\r\n const width = node.getBoundingClientRect().width;\r\n const height = node.getBoundingClientRect().height;\r\n // istanbul ignore next\r\n const current = split === \"vertical\" ? x : y;\r\n // istanbul ignore next\r\n const oldSize = split === \"vertical\" ? width : height;\r\n let positionDelta = position - current;\r\n if (step) {\r\n // istanbul ignore next\r\n if (Math.abs(positionDelta) < step) {\r\n return;\r\n }\r\n // Integer division\r\n // eslint-disable-next-line no-bitwise\r\n positionDelta = ~~(positionDelta / step) * step;\r\n }\r\n let sizeDelta = isPrimaryFirst ? positionDelta : -positionDelta;\r\n\r\n // istanbul ignore next\r\n const pane1Order = parseInt(node.ownerDocument?.defaultView?.getComputedStyle(node).order ?? \"0\", 10);\r\n // istanbul ignore next\r\n const pane2Order = parseInt(node2.ownerDocument?.defaultView?.getComputedStyle(node2).order ?? \"0\", 10);\r\n // istanbul ignore next\r\n if (pane1Order > pane2Order) {\r\n sizeDelta = -sizeDelta;\r\n }\r\n\r\n let newMaxSize = maxSize;\r\n // istanbul ignore next\r\n if (typeof maxSize === \"number\" && maxSize !== undefined && maxSize <= 0) {\r\n if (split === \"vertical\") {\r\n newMaxSize = splitPaneDiv.getBoundingClientRect().width + maxSize;\r\n } else {\r\n newMaxSize = splitPaneDiv.getBoundingClientRect().height + maxSize;\r\n }\r\n }\r\n\r\n let newSize = oldSize - sizeDelta;\r\n const newPosition = position - positionDelta;\r\n\r\n // istanbul ignore next\r\n if (typeof minSize === \"number\" && newSize < minSize) {\r\n newSize = minSize;\r\n } else if (typeof newMaxSize === \"number\" && newMaxSize !== undefined && newSize > newMaxSize) {\r\n newSize = newMaxSize;\r\n } else {\r\n setPosition(newPosition);\r\n }\r\n\r\n onChange && onChange(newSize);\r\n setDraggedSize(newSize);\r\n isPrimaryFirst ? setPane1Size(newSize) : setPane2Size(newSize);\r\n }\r\n }\r\n }, [maxSize, minSize, onChange, position, primary, split, step]);\r\n\r\n const onTouchMove = React.useCallback((event: TouchEvent) => {\r\n // istanbul ignore next\r\n if (!allowResize || !active)\r\n return;\r\n processMove(event.touches[0].clientX, event.touches[0].clientY);\r\n }, [active, allowResize, processMove]);\r\n\r\n const onMouseMove = React.useCallback((event: MouseEvent) => {\r\n if (!allowResize || !active)\r\n return;\r\n processMove(event.clientX, event.clientY);\r\n }, [active, allowResize, processMove]);\r\n\r\n const onMouseDown = React.useCallback((event: MouseEvent) => {\r\n // istanbul ignore else\r\n if (allowResize) {\r\n event.preventDefault();\r\n initializeDrag(event.clientX, event.clientY);\r\n }\r\n }, [allowResize, initializeDrag]);\r\n\r\n const processResizeFinished = React.useCallback(() => {\r\n // istanbul ignore else\r\n if (undefined !== draggedSize && allowResize && active) {\r\n onDragFinished && onDragFinished(draggedSize);\r\n }\r\n setActive(false);\r\n }, [draggedSize, allowResize, active, onDragFinished]);\r\n\r\n const onMouseUp = React.useCallback((event: MouseEvent) => {\r\n event.preventDefault();\r\n processResizeFinished();\r\n }, [processResizeFinished]);\r\n\r\n React.useEffect(() => {\r\n // istanbul ignore next\r\n const ownerDoc = splitPane.current?.ownerDocument;\r\n // istanbul ignore next\r\n if (!ownerDoc)\r\n return;\r\n\r\n ownerDoc.addEventListener(\"mouseup\", onMouseUp);\r\n ownerDoc.addEventListener(\"mousemove\", onMouseMove);\r\n ownerDoc.addEventListener(\"touchmove\", onTouchMove);\r\n return () => {\r\n ownerDoc.removeEventListener(\"mouseup\", onMouseUp);\r\n ownerDoc.removeEventListener(\"mousemove\", onMouseMove);\r\n ownerDoc.removeEventListener(\"touchmove\", onTouchMove);\r\n };\r\n }, [onMouseMove, onMouseUp, onTouchMove]);\r\n\r\n return (\r\n <div\r\n className={splitPaneClasses}\r\n ref={splitPane}\r\n style={splitPaneStyle}\r\n >\r\n <Pane\r\n className={pane1Classes}\r\n key=\"pane1\"\r\n eleRef={pane1}\r\n size={pane1Size}\r\n split={split}\r\n style={pane1DivStyle}\r\n >\r\n {notNullChildren[0]}\r\n </Pane>\r\n <Resizer\r\n className={resizerClasses}\r\n onClick={onResizerClick}\r\n onDoubleClick={onResizerDoubleClick}\r\n onMouseDown={onMouseDown}\r\n onTouchStart={onTouchStart}\r\n onTouchEnd={processResizeFinished}\r\n key=\"resizer\"\r\n split={split}\r\n style={resizerStyle}\r\n />\r\n <Pane\r\n className={pane2Classes}\r\n key=\"pane2\"\r\n eleRef={pane2}\r\n size={pane2Size}\r\n split={split}\r\n style={pane2DivStyle}\r\n >\r\n {notNullChildren[1]}\r\n </Pane>\r\n </div>\r\n );\r\n}\r\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module Cursor
|
|
3
3
|
*/
|
|
4
|
-
import { PointProps, RelativePosition } from "@itwin/appui-abstract";
|
|
5
|
-
import { UiEvent } from "@itwin/core-react";
|
|
4
|
+
import { PointProps, RelativePosition, UiEvent } from "@itwin/appui-abstract";
|
|
6
5
|
/** Enum for Cursor Direction parts
|
|
7
6
|
* @public
|
|
8
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorInformation.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/CursorInformation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"CursorInformation.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/CursorInformation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAG9E;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,GAAG,OAAS;IACZ,IAAI,MAAS;IACb,KAAK,KAAS;IACd,MAAM,IAAS;CAChB;AAED;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,IAAI;IACR,GAAG,OAA2B;IAC9B,IAAI,MAA4B;IAChC,KAAK,KAA6B;IAClC,MAAM,IAA8B;IACpC,OAAO,OAAuD;IAC9D,QAAQ,OAAwD;IAChE,UAAU,MAA0D;IACpE,WAAW,KAA2D;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,OAAO,CAAC,sBAAsB,CAAC;CAAI;AAE3E;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAsB;IACpD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAgD;IAE/E,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAgC;IAEhE,2BAA2B;IAC3B,WAAkB,cAAc,IAAI,UAAU,CAAiC;IAC/E,WAAkB,cAAc,CAAC,EAAE,EAAE,UAAU,EAA8C;IAE7F,kCAAkC;IAClC,WAAkB,OAAO,IAAI,MAAM,CAAmC;IACtE,kCAAkC;IAClC,WAAkB,OAAO,IAAI,MAAM,CAAmC;IAEtE,kDAAkD;IAClD,WAAkB,eAAe,IAAI,eAAe,CAAkC;IAEtF,uCAAuC;IACvC,gBAAuB,oBAAoB,qBAA4B;IAEvE,0GAA0G;WAC5F,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAUtD,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAQ9C,OAAO,CAAC,MAAM,CAAC,aAAa;IAwB5B,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAkBxC,gEAAgE;WAClD,sCAAsC,CAAC,eAAe,EAAE,eAAe,GAAG,gBAAgB;IAiCxG,8BAA8B;WAChB,qBAAqB,IAAI,IAAI;CAG5C"}
|
|
@@ -38,7 +38,7 @@ var CursorDirection;
|
|
|
38
38
|
/** Cursor Updated Event class.
|
|
39
39
|
* @public
|
|
40
40
|
*/
|
|
41
|
-
class CursorUpdatedEvent extends
|
|
41
|
+
class CursorUpdatedEvent extends appui_abstract_1.UiEvent {
|
|
42
42
|
}
|
|
43
43
|
exports.CursorUpdatedEvent = CursorUpdatedEvent;
|
|
44
44
|
/** Cursor Information class
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorInformation.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/CursorInformation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Cursor\r\n */\r\n\r\nimport { PointProps, RelativePosition } from \"@itwin/appui-abstract\";\r\nimport { Point, UiEvent } from \"@itwin/core-react\";\r\n\r\n/** Enum for Cursor Direction parts\r\n * @public\r\n */\r\nexport enum CursorDirectionParts {\r\n Top = 0x1000,\r\n Left = 0x0100,\r\n Right = 0x0010,\r\n Bottom = 0x0001,\r\n}\r\n\r\n/** Enum for Cursor Direction\r\n * @public\r\n */\r\nexport enum CursorDirection {\r\n None = 0,\r\n Top = CursorDirectionParts.Top,\r\n Left = CursorDirectionParts.Left,\r\n Right = CursorDirectionParts.Right,\r\n Bottom = CursorDirectionParts.Bottom,\r\n TopLeft = CursorDirectionParts.Top | CursorDirectionParts.Left,\r\n TopRight = CursorDirectionParts.Top | CursorDirectionParts.Right,\r\n BottomLeft = CursorDirectionParts.Bottom | CursorDirectionParts.Left,\r\n BottomRight = CursorDirectionParts.Bottom | CursorDirectionParts.Right,\r\n}\r\n\r\n/** Cursor Updated Event Args interface.\r\n * @public\r\n */\r\nexport interface CursorUpdatedEventArgs {\r\n oldPt: PointProps;\r\n newPt: PointProps;\r\n direction: CursorDirection;\r\n}\r\n\r\n/** Cursor Updated Event class.\r\n * @public\r\n */\r\nexport class CursorUpdatedEvent extends UiEvent<CursorUpdatedEventArgs> { }\r\n\r\n/** Cursor Information class\r\n * @public\r\n */\r\nexport class CursorInformation {\r\n private static _cursorPosition: Point = new Point();\r\n private static _cursorDirection: CursorDirection = CursorDirection.BottomRight;\r\n\r\n private static _cursorDirections = new Array<CursorDirection>();\r\n\r\n /** The cursor position. */\r\n public static get cursorPosition(): PointProps { return this._cursorPosition; }\r\n public static set cursorPosition(pt: PointProps) { this._cursorPosition = Point.create(pt); }\r\n\r\n /** Gets the cursor X position. */\r\n public static get cursorX(): number { return this._cursorPosition.x; }\r\n /** Gets the cursor Y position. */\r\n public static get cursorY(): number { return this._cursorPosition.y; }\r\n\r\n /** Gets the general cursor movement direction. */\r\n public static get cursorDirection(): CursorDirection { return this._cursorDirection; }\r\n\r\n /** Gets the [[CursorUpdatedEvent]]. */\r\n public static readonly onCursorUpdatedEvent = new CursorUpdatedEvent();\r\n\r\n /** Handles the mouse movement. Sets the cursor position and direction and emits onCursorUpdatedEvent. */\r\n public static handleMouseMove(point: PointProps): void {\r\n const oldPt = CursorInformation.cursorPosition;\r\n const direction = this._determineMostFrequentDirection(this._cursorDirections, this._cursorPosition, Point.create(point));\r\n\r\n this.cursorPosition = point;\r\n this._cursorDirection = direction;\r\n\r\n this.onCursorUpdatedEvent.emit({ oldPt, newPt: point, direction });\r\n }\r\n\r\n private static _determineMostFrequentDirection(cursorDirections: CursorDirection[], oldPt: Point, newPt: Point): CursorDirection {\r\n const cursorDirection = this._determineCursorDirection(oldPt, newPt);\r\n cursorDirections.push(cursorDirection);\r\n if (cursorDirections.length > 10)\r\n cursorDirections.shift();\r\n return this._mostFrequent(cursorDirections);\r\n }\r\n\r\n private static _mostFrequent(array: CursorDirection[]): CursorDirection {\r\n const hashMap = new Map<CursorDirection, number>();\r\n let maxCount = 0, mostFrequent = CursorDirection.None;\r\n\r\n array.forEach((value: CursorDirection) => {\r\n const key = value;\r\n let frequency = hashMap.get(key);\r\n\r\n if (frequency !== undefined)\r\n frequency++;\r\n else\r\n frequency = 1;\r\n\r\n hashMap.set(key, frequency);\r\n\r\n if (frequency > maxCount) {\r\n mostFrequent = key;\r\n maxCount = frequency;\r\n }\r\n });\r\n\r\n return mostFrequent;\r\n }\r\n\r\n private static _determineCursorDirection(oldPt: Point, newPt: Point): CursorDirection {\r\n let directionParts: number = 0;\r\n\r\n if (newPt.x < oldPt.x)\r\n directionParts |= CursorDirectionParts.Left;\r\n else if (newPt.x > oldPt.x)\r\n directionParts |= CursorDirectionParts.Right;\r\n\r\n if (newPt.y < oldPt.y)\r\n directionParts |= CursorDirectionParts.Top;\r\n else if (newPt.y > oldPt.y)\r\n directionParts |= CursorDirectionParts.Bottom;\r\n\r\n const direction = directionParts as CursorDirection;\r\n\r\n return direction;\r\n }\r\n\r\n /** Gets the relative position based on the cursor direction. */\r\n public static getRelativePositionFromCursorDirection(cursorDirection: CursorDirection): RelativePosition {\r\n let relativePosition: RelativePosition = RelativePosition.BottomRight;\r\n\r\n switch (cursorDirection) {\r\n case CursorDirection.Top:\r\n relativePosition = RelativePosition.Top;\r\n break;\r\n case CursorDirection.Left:\r\n relativePosition = RelativePosition.Left;\r\n break;\r\n case CursorDirection.Right:\r\n relativePosition = RelativePosition.Right;\r\n break;\r\n case CursorDirection.Bottom:\r\n relativePosition = RelativePosition.Bottom;\r\n break;\r\n case CursorDirection.TopLeft:\r\n relativePosition = RelativePosition.TopLeft;\r\n break;\r\n case CursorDirection.TopRight:\r\n relativePosition = RelativePosition.TopRight;\r\n break;\r\n case CursorDirection.BottomLeft:\r\n relativePosition = RelativePosition.BottomLeft;\r\n break;\r\n case CursorDirection.BottomRight:\r\n relativePosition = RelativePosition.BottomRight;\r\n break;\r\n }\r\n\r\n return relativePosition;\r\n }\r\n\r\n /** @internal - for testing */\r\n public static clearCursorDirections(): void {\r\n this._cursorDirections.length = 0;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CursorInformation.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/CursorInformation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,0DAA8E;AAC9E,kDAA0C;AAE1C;;GAEG;AACH,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,gEAAY,CAAA;IACZ,iEAAa,CAAA;IACb,kEAAc,CAAA;IACd,mEAAe,CAAA;AACjB,CAAC,EALW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAK/B;AAED;;GAEG;AACH,IAAY,eAUX;AAVD,WAAY,eAAe;IACzB,qDAAQ,CAAA;IACR,sDAA8B,CAAA;IAC9B,uDAAgC,CAAA;IAChC,wDAAkC,CAAA;IAClC,yDAAoC,CAAA;IACpC,8DAA8D,CAAA;IAC9D,gEAAgE,CAAA;IAChE,mEAAoE,CAAA;IACpE,oEAAsE,CAAA;AACxE,CAAC,EAVW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAU1B;AAWD;;GAEG;AACH,MAAa,kBAAmB,SAAQ,wBAA+B;CAAI;AAA3E,gDAA2E;AAE3E;;GAEG;AACH,MAAa,iBAAiB;IAM5B,2BAA2B;IACpB,MAAM,KAAK,cAAc,KAAiB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,cAAc,CAAC,EAAc,IAAI,IAAI,CAAC,eAAe,GAAG,kBAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7F,kCAAkC;IAC3B,MAAM,KAAK,OAAO,KAAa,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,kCAAkC;IAC3B,MAAM,KAAK,OAAO,KAAa,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,kDAAkD;IAC3C,MAAM,KAAK,eAAe,KAAsB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAKtF,0GAA0G;IACnG,MAAM,CAAC,eAAe,CAAC,KAAiB;QAC7C,MAAM,KAAK,GAAG,iBAAiB,CAAC,cAAc,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,kBAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE1H,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,CAAC;IAEO,MAAM,CAAC,+BAA+B,CAAC,gBAAmC,EAAE,KAAY,EAAE,KAAY;QAC5G,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrE,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,IAAI,gBAAgB,CAAC,MAAM,GAAG,EAAE;YAC9B,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,KAAwB;QACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;QACnD,IAAI,QAAQ,GAAG,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC;QAEtD,KAAK,CAAC,OAAO,CAAC,CAAC,KAAsB,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,KAAK,CAAC;YAClB,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEjC,IAAI,SAAS,KAAK,SAAS;gBACzB,SAAS,EAAE,CAAC;;gBAEZ,SAAS,GAAG,CAAC,CAAC;YAEhB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAE5B,IAAI,SAAS,GAAG,QAAQ,EAAE;gBACxB,YAAY,GAAG,GAAG,CAAC;gBACnB,QAAQ,GAAG,SAAS,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,KAAY,EAAE,KAAY;QACjE,IAAI,cAAc,GAAW,CAAC,CAAC;QAE/B,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,cAAc,IAAI,oBAAoB,CAAC,IAAI,CAAC;aACzC,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACxB,cAAc,IAAI,oBAAoB,CAAC,KAAK,CAAC;QAE/C,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACnB,cAAc,IAAI,oBAAoB,CAAC,GAAG,CAAC;aACxC,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACxB,cAAc,IAAI,oBAAoB,CAAC,MAAM,CAAC;QAEhD,MAAM,SAAS,GAAG,cAAiC,CAAC;QAEpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gEAAgE;IACzD,MAAM,CAAC,sCAAsC,CAAC,eAAgC;QACnF,IAAI,gBAAgB,GAAqB,iCAAgB,CAAC,WAAW,CAAC;QAEtE,QAAQ,eAAe,EAAE;YACvB,KAAK,eAAe,CAAC,GAAG;gBACtB,gBAAgB,GAAG,iCAAgB,CAAC,GAAG,CAAC;gBACxC,MAAM;YACR,KAAK,eAAe,CAAC,IAAI;gBACvB,gBAAgB,GAAG,iCAAgB,CAAC,IAAI,CAAC;gBACzC,MAAM;YACR,KAAK,eAAe,CAAC,KAAK;gBACxB,gBAAgB,GAAG,iCAAgB,CAAC,KAAK,CAAC;gBAC1C,MAAM;YACR,KAAK,eAAe,CAAC,MAAM;gBACzB,gBAAgB,GAAG,iCAAgB,CAAC,MAAM,CAAC;gBAC3C,MAAM;YACR,KAAK,eAAe,CAAC,OAAO;gBAC1B,gBAAgB,GAAG,iCAAgB,CAAC,OAAO,CAAC;gBAC5C,MAAM;YACR,KAAK,eAAe,CAAC,QAAQ;gBAC3B,gBAAgB,GAAG,iCAAgB,CAAC,QAAQ,CAAC;gBAC7C,MAAM;YACR,KAAK,eAAe,CAAC,UAAU;gBAC7B,gBAAgB,GAAG,iCAAgB,CAAC,UAAU,CAAC;gBAC/C,MAAM;YACR,KAAK,eAAe,CAAC,WAAW;gBAC9B,gBAAgB,GAAG,iCAAgB,CAAC,WAAW,CAAC;gBAChD,MAAM;SACT;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,8BAA8B;IACvB,MAAM,CAAC,qBAAqB;QACjC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;;AAvHH,8CAwHC;AAvHgB,iCAAe,GAAU,IAAI,kBAAK,EAAE,CAAC;AACrC,kCAAgB,GAAoB,eAAe,CAAC,WAAW,CAAC;AAEhE,mCAAiB,GAAG,IAAI,KAAK,EAAmB,CAAC;AAchE,uCAAuC;AAChB,sCAAoB,GAAG,IAAI,kBAAkB,EAAE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Cursor\r\n */\r\n\r\nimport { PointProps, RelativePosition, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { Point } from \"@itwin/core-react\";\r\n\r\n/** Enum for Cursor Direction parts\r\n * @public\r\n */\r\nexport enum CursorDirectionParts {\r\n Top = 0x1000,\r\n Left = 0x0100,\r\n Right = 0x0010,\r\n Bottom = 0x0001,\r\n}\r\n\r\n/** Enum for Cursor Direction\r\n * @public\r\n */\r\nexport enum CursorDirection {\r\n None = 0,\r\n Top = CursorDirectionParts.Top,\r\n Left = CursorDirectionParts.Left,\r\n Right = CursorDirectionParts.Right,\r\n Bottom = CursorDirectionParts.Bottom,\r\n TopLeft = CursorDirectionParts.Top | CursorDirectionParts.Left,\r\n TopRight = CursorDirectionParts.Top | CursorDirectionParts.Right,\r\n BottomLeft = CursorDirectionParts.Bottom | CursorDirectionParts.Left,\r\n BottomRight = CursorDirectionParts.Bottom | CursorDirectionParts.Right,\r\n}\r\n\r\n/** Cursor Updated Event Args interface.\r\n * @public\r\n */\r\nexport interface CursorUpdatedEventArgs {\r\n oldPt: PointProps;\r\n newPt: PointProps;\r\n direction: CursorDirection;\r\n}\r\n\r\n/** Cursor Updated Event class.\r\n * @public\r\n */\r\nexport class CursorUpdatedEvent extends UiEvent<CursorUpdatedEventArgs> { }\r\n\r\n/** Cursor Information class\r\n * @public\r\n */\r\nexport class CursorInformation {\r\n private static _cursorPosition: Point = new Point();\r\n private static _cursorDirection: CursorDirection = CursorDirection.BottomRight;\r\n\r\n private static _cursorDirections = new Array<CursorDirection>();\r\n\r\n /** The cursor position. */\r\n public static get cursorPosition(): PointProps { return this._cursorPosition; }\r\n public static set cursorPosition(pt: PointProps) { this._cursorPosition = Point.create(pt); }\r\n\r\n /** Gets the cursor X position. */\r\n public static get cursorX(): number { return this._cursorPosition.x; }\r\n /** Gets the cursor Y position. */\r\n public static get cursorY(): number { return this._cursorPosition.y; }\r\n\r\n /** Gets the general cursor movement direction. */\r\n public static get cursorDirection(): CursorDirection { return this._cursorDirection; }\r\n\r\n /** Gets the [[CursorUpdatedEvent]]. */\r\n public static readonly onCursorUpdatedEvent = new CursorUpdatedEvent();\r\n\r\n /** Handles the mouse movement. Sets the cursor position and direction and emits onCursorUpdatedEvent. */\r\n public static handleMouseMove(point: PointProps): void {\r\n const oldPt = CursorInformation.cursorPosition;\r\n const direction = this._determineMostFrequentDirection(this._cursorDirections, this._cursorPosition, Point.create(point));\r\n\r\n this.cursorPosition = point;\r\n this._cursorDirection = direction;\r\n\r\n this.onCursorUpdatedEvent.emit({ oldPt, newPt: point, direction });\r\n }\r\n\r\n private static _determineMostFrequentDirection(cursorDirections: CursorDirection[], oldPt: Point, newPt: Point): CursorDirection {\r\n const cursorDirection = this._determineCursorDirection(oldPt, newPt);\r\n cursorDirections.push(cursorDirection);\r\n if (cursorDirections.length > 10)\r\n cursorDirections.shift();\r\n return this._mostFrequent(cursorDirections);\r\n }\r\n\r\n private static _mostFrequent(array: CursorDirection[]): CursorDirection {\r\n const hashMap = new Map<CursorDirection, number>();\r\n let maxCount = 0, mostFrequent = CursorDirection.None;\r\n\r\n array.forEach((value: CursorDirection) => {\r\n const key = value;\r\n let frequency = hashMap.get(key);\r\n\r\n if (frequency !== undefined)\r\n frequency++;\r\n else\r\n frequency = 1;\r\n\r\n hashMap.set(key, frequency);\r\n\r\n if (frequency > maxCount) {\r\n mostFrequent = key;\r\n maxCount = frequency;\r\n }\r\n });\r\n\r\n return mostFrequent;\r\n }\r\n\r\n private static _determineCursorDirection(oldPt: Point, newPt: Point): CursorDirection {\r\n let directionParts: number = 0;\r\n\r\n if (newPt.x < oldPt.x)\r\n directionParts |= CursorDirectionParts.Left;\r\n else if (newPt.x > oldPt.x)\r\n directionParts |= CursorDirectionParts.Right;\r\n\r\n if (newPt.y < oldPt.y)\r\n directionParts |= CursorDirectionParts.Top;\r\n else if (newPt.y > oldPt.y)\r\n directionParts |= CursorDirectionParts.Bottom;\r\n\r\n const direction = directionParts as CursorDirection;\r\n\r\n return direction;\r\n }\r\n\r\n /** Gets the relative position based on the cursor direction. */\r\n public static getRelativePositionFromCursorDirection(cursorDirection: CursorDirection): RelativePosition {\r\n let relativePosition: RelativePosition = RelativePosition.BottomRight;\r\n\r\n switch (cursorDirection) {\r\n case CursorDirection.Top:\r\n relativePosition = RelativePosition.Top;\r\n break;\r\n case CursorDirection.Left:\r\n relativePosition = RelativePosition.Left;\r\n break;\r\n case CursorDirection.Right:\r\n relativePosition = RelativePosition.Right;\r\n break;\r\n case CursorDirection.Bottom:\r\n relativePosition = RelativePosition.Bottom;\r\n break;\r\n case CursorDirection.TopLeft:\r\n relativePosition = RelativePosition.TopLeft;\r\n break;\r\n case CursorDirection.TopRight:\r\n relativePosition = RelativePosition.TopRight;\r\n break;\r\n case CursorDirection.BottomLeft:\r\n relativePosition = RelativePosition.BottomLeft;\r\n break;\r\n case CursorDirection.BottomRight:\r\n relativePosition = RelativePosition.BottomRight;\r\n break;\r\n }\r\n\r\n return relativePosition;\r\n }\r\n\r\n /** @internal - for testing */\r\n public static clearCursorDirections(): void {\r\n this._cursorDirections.length = 0;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorMenu.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CursorMenu.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAqB,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAmB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKvE;;GAEG;AACH,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;CACzB;AAED;;GAEG;AAEH,qBAAa,eAAgB,SAAQ,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,oBAAoB,CAAC;IACzF,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,gBAAgB;IAChB,SAAyB,KAAK,EAAE,oBAAoB,CAKlD;IAEF,OAAO,CAAC,kBAAkB,CAcxB;IAEc,iBAAiB;IAIjB,oBAAoB;IAKpC,OAAO,CAAC,aAAa,CAKnB;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IA0BzC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,WAAW,CAEjB;CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,+BAA+B;
|
|
1
|
+
{"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Cursor\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { UiSyncEventArgs } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, GlobalContextMenu } from \"@itwin/core-react\"; // ContextSubMenu,\r\nimport { SessionStateActionId } from \"../../redux/SessionState\";\r\nimport { MenuItemHelpers, MenuItemProps } from \"../../shared/MenuItem\";\r\nimport { SyncUiEventDispatcher } from \"../../syncui/SyncUiEventDispatcher\";\r\nimport { UiFramework } from \"../../UiFramework\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\n\r\n/** State for [[CursorPopupMenu]] component\r\n * @alpha\r\n */\r\ninterface CursorPopupMenuState {\r\n menuX: number;\r\n menuY: number;\r\n menuVisible: boolean;\r\n items?: MenuItemProps[];\r\n}\r\n\r\n/** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.\r\n * @alpha\r\n */\r\n// istanbul ignore next\r\nexport class CursorPopupMenu extends React.PureComponent<CommonProps, CursorPopupMenuState> {\r\n private _componentUnmounting = false; // used to ensure _handleSyncUiEvent callback is not processed after componentWillUnmount is called\r\n private _hostChildWindowId?: string;\r\n\r\n /** @internal */\r\n public override readonly state: CursorPopupMenuState = {\r\n menuX: 0,\r\n menuY: 0,\r\n menuVisible: false,\r\n items: undefined,\r\n };\r\n\r\n private _handleSyncUiEvent = (args: UiSyncEventArgs): void => {\r\n /* istanbul ignore next */\r\n if (this._componentUnmounting)\r\n return;\r\n\r\n /* istanbul ignore else */\r\n if (SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [SessionStateActionId.UpdateCursorMenu])) {\r\n const menuData = UiFramework.getCursorMenuData();\r\n if (menuData && this._hostChildWindowId === menuData.childWindowId) {\r\n this.setState({ menuVisible: menuData.items && menuData.items.length > 0, items: menuData.items, menuX: menuData.position.x, menuY: menuData.position.y });\r\n } else {\r\n this.setState({ menuVisible: false, items: undefined });\r\n }\r\n }\r\n };\r\n\r\n public override componentDidMount() {\r\n SyncUiEventDispatcher.onSyncUiEvent.addListener(this._handleSyncUiEvent);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n this._componentUnmounting = true;\r\n SyncUiEventDispatcher.onSyncUiEvent.removeListener(this._handleSyncUiEvent);\r\n }\r\n\r\n private _handleRefSet = (popupDiv: HTMLElement | null) => {\r\n const parentWindow = popupDiv?.ownerDocument.defaultView ?? undefined;\r\n // if the window is not a pop out set to undefined\r\n this._hostChildWindowId = UiFramework.childWindowManager.findChildWindowId(parentWindow);\r\n Logger.logInfo(UiFramework.loggerCategory(UiFramework), `Cursor Menu for ${this._hostChildWindowId ?? \"main\"} window`);\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n const { menuX, menuY, items, menuVisible } = this.state;\r\n const onClose = this._hideContextMenu;\r\n\r\n return (\r\n <div className=\"uifw-cursor-menu-container-div\" ref={this._handleRefSet}>\r\n {items && items.length > 0 && menuVisible &&\r\n <GlobalContextMenu\r\n className={this.props.className}\r\n style={this.props.style}\r\n identifier=\"cursor-popup-menu\"\r\n x={menuX}\r\n y={menuY}\r\n opened={menuVisible}\r\n onEsc={onClose}\r\n onOutsideClick={onClose}\r\n edgeLimit={false}\r\n autoflip={true}\r\n >\r\n {MenuItemHelpers.createMenuItemNodes(MenuItemHelpers.createMenuItems(items, this._itemPicked))}\r\n </GlobalContextMenu>\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n private _hideContextMenu = () => {\r\n this.setState({ menuVisible: false });\r\n };\r\n\r\n private _itemPicked = (): void => {\r\n this._hideContextMenu();\r\n };\r\n}\r\n"]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* @module Cursor
|
|
3
3
|
*/
|
|
4
4
|
import * as React from "react";
|
|
5
|
-
import { PointProps, RelativePosition } from "@itwin/appui-abstract";
|
|
6
|
-
import { Point, Size
|
|
5
|
+
import { PointProps, RelativePosition, UiEvent } from "@itwin/appui-abstract";
|
|
6
|
+
import { Point, Size } from "@itwin/core-react";
|
|
7
7
|
/** Options for the [[CursorPopupManager]] open method
|
|
8
8
|
* @public
|
|
9
9
|
*/
|
|
@@ -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;AAE/B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"CursorPopupManager.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,19 +17,19 @@ const CursorPopup_1 = require("./CursorPopup");
|
|
|
17
17
|
/** CursorPopup Update Position Event class.
|
|
18
18
|
* @internal
|
|
19
19
|
*/
|
|
20
|
-
class CursorPopupUpdatePositionEvent extends
|
|
20
|
+
class CursorPopupUpdatePositionEvent extends appui_abstract_1.UiEvent {
|
|
21
21
|
}
|
|
22
22
|
exports.CursorPopupUpdatePositionEvent = CursorPopupUpdatePositionEvent;
|
|
23
23
|
/** CursorPopup FadeOut Event class.
|
|
24
24
|
* @internal
|
|
25
25
|
*/
|
|
26
|
-
class CursorPopupFadeOutEvent extends
|
|
26
|
+
class CursorPopupFadeOutEvent extends appui_abstract_1.UiEvent {
|
|
27
27
|
}
|
|
28
28
|
exports.CursorPopupFadeOutEvent = CursorPopupFadeOutEvent;
|
|
29
29
|
/** Cursor Popups Changed Event class.
|
|
30
30
|
* @internal
|
|
31
31
|
*/
|
|
32
|
-
class CursorPopupsChangedEvent extends
|
|
32
|
+
class CursorPopupsChangedEvent extends appui_abstract_1.UiEvent {
|
|
33
33
|
}
|
|
34
34
|
/** CursorPopup component
|
|
35
35
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CursorPopupManager.js","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Cursor\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { PointProps, RelativePosition } from \"@itwin/appui-abstract\";\r\nimport { Point, RectangleProps, Size, SizeProps, UiEvent } from \"@itwin/core-react\";\r\nimport { UiFramework } from \"../../UiFramework\";\r\nimport { CursorPopup } from \"./CursorPopup\";\r\n\r\n/** Options for the [[CursorPopupManager]] open method\r\n * @public\r\n */\r\nexport interface CursorPopupOptions {\r\n /** Title of the popup */\r\n title?: string;\r\n /** Called on popup close */\r\n onClose?: () => void;\r\n /** Callback to apply changes */\r\n onApply?: () => void;\r\n /** Draw shadow */\r\n shadow?: boolean;\r\n}\r\n\r\n/** CursorPopup Update Position Event Args interface.\r\n * @internal\r\n */\r\nexport interface CursorPopupUpdatePositionEventArgs {\r\n pt: PointProps;\r\n}\r\n\r\n/** CursorPopup Update Position Event class.\r\n * @internal\r\n */\r\nexport class CursorPopupUpdatePositionEvent extends UiEvent<CursorPopupUpdatePositionEventArgs> { }\r\n\r\n/** CursorPopup FadeOut Event Args interface.\r\n * @internal\r\n */\r\nexport interface CursorPopupFadeOutEventArgs {\r\n id: string;\r\n}\r\n\r\n/** CursorPopup FadeOut Event class.\r\n * @internal\r\n */\r\nexport class CursorPopupFadeOutEvent extends UiEvent<CursorPopupFadeOutEventArgs> { }\r\n\r\n/** Information maintained by CursorPopupManager about a CursorPopup\r\n * @internal\r\n */\r\ninterface CursorPopupInfo {\r\n id: string;\r\n content: React.ReactNode;\r\n relativePosition: RelativePosition;\r\n offset: Point;\r\n priority: number;\r\n options?: CursorPopupOptions;\r\n\r\n renderRelativePosition: RelativePosition;\r\n popupSize?: Size;\r\n}\r\n\r\n/** Cursor Popups Changed Event class.\r\n * @internal\r\n */\r\nclass CursorPopupsChangedEvent extends UiEvent<{}> { }\r\n\r\n/** CursorPopup component\r\n * @public\r\n */\r\nexport class CursorPopupManager {\r\n private static _popups: CursorPopupInfo[] = new Array<CursorPopupInfo>();\r\n\r\n /** @internal */\r\n public static readonly onCursorPopupUpdatePositionEvent = new CursorPopupUpdatePositionEvent();\r\n /** @internal */\r\n public static readonly onCursorPopupFadeOutEvent = new CursorPopupFadeOutEvent();\r\n /** @internal */\r\n public static readonly onCursorPopupsChangedEvent = new CursorPopupsChangedEvent();\r\n /** @internal */\r\n public static clearPopups() {\r\n this._popups.length = 0;\r\n CursorPopupManager._emitPopupsChangedEvent();\r\n }\r\n\r\n public static get popups() { return this._popups; }\r\n\r\n public static get popupCount() { return this._popups.length; }\r\n\r\n private static _emitPopupsChangedEvent(): void {\r\n CursorPopupManager.onCursorPopupsChangedEvent.emit({});\r\n }\r\n\r\n private static pushPopup(popupInfo: CursorPopupInfo): void {\r\n CursorPopupManager._popups.push(popupInfo);\r\n CursorPopupManager._emitPopupsChangedEvent();\r\n }\r\n\r\n /** Called to open popup with a new set of properties\r\n */\r\n public static open(id: string, content: React.ReactNode, pt: PointProps, offset: PointProps, relativePosition: RelativePosition, priority: number = 0, options?: CursorPopupOptions) {\r\n const popupInfo = CursorPopupManager._popups.find((info: CursorPopupInfo) => id === info.id);\r\n if (popupInfo) {\r\n popupInfo.content = content;\r\n popupInfo.offset = Point.create(offset);\r\n popupInfo.relativePosition = relativePosition;\r\n popupInfo.renderRelativePosition = relativePosition;\r\n popupInfo.priority = priority;\r\n popupInfo.options = options;\r\n } else {\r\n const newPopupInfo: CursorPopupInfo = { id, content, offset: Point.create(offset), relativePosition, options, renderRelativePosition: relativePosition, priority };\r\n CursorPopupManager.pushPopup(newPopupInfo);\r\n }\r\n\r\n CursorPopupManager.updatePosition(pt);\r\n }\r\n\r\n /** Called to update popup with a new set of properties\r\n */\r\n public static update(id: string, content: React.ReactNode, pt: PointProps, offset: PointProps, relativePosition: RelativePosition, priority: number = 0) {\r\n const popupInfo = CursorPopupManager._popups.find((info: CursorPopupInfo) => id === info.id);\r\n if (popupInfo) {\r\n popupInfo.content = content;\r\n popupInfo.offset = Point.create(offset);\r\n popupInfo.relativePosition = relativePosition;\r\n popupInfo.renderRelativePosition = relativePosition;\r\n popupInfo.priority = priority;\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `update: Could not find popup with id of '${id}'`);\r\n }\r\n\r\n CursorPopupManager.updatePosition(pt);\r\n }\r\n\r\n /** Called to move the open popup to new location\r\n */\r\n public static updatePosition(pt: PointProps) {\r\n CursorPopupManager.resetPopupsRenderRelativePosition(Point.create(pt));\r\n CursorPopupManager.onCursorPopupUpdatePositionEvent.emit({ pt });\r\n }\r\n\r\n /** Called when tool wants to close the popup\r\n */\r\n public static close(id: string, apply: boolean, fadeOut?: boolean) {\r\n const popupInfo = CursorPopupManager._popups.find((info: CursorPopupInfo) => id === info.id);\r\n\r\n if (popupInfo) {\r\n if (popupInfo.options) {\r\n if (apply && popupInfo.options.onApply)\r\n popupInfo.options.onApply();\r\n\r\n if (popupInfo.options.onClose)\r\n popupInfo.options.onClose();\r\n }\r\n\r\n if (fadeOut) {\r\n CursorPopupManager.onCursorPopupFadeOutEvent.emit({ id });\r\n setTimeout(() => {\r\n CursorPopupManager.removePopup(id);\r\n }, CursorPopup.fadeOutTime);\r\n\r\n } else {\r\n CursorPopupManager.removePopup(id);\r\n }\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `close: Could not find popup with id of '${id}'`);\r\n }\r\n }\r\n\r\n private static removePopup(id: string): void {\r\n const index = CursorPopupManager._popups.findIndex((popupInfo: CursorPopupInfo) => id === popupInfo.id);\r\n // istanbul ignore else\r\n if (index >= 0) {\r\n CursorPopupManager._popups.splice(index, 1);\r\n CursorPopupManager._emitPopupsChangedEvent();\r\n }\r\n }\r\n\r\n private static resetPopupsRenderRelativePosition(pt: Point) {\r\n CursorPopupManager.popups.forEach((popupInfo: CursorPopupInfo) => {\r\n popupInfo.renderRelativePosition = popupInfo.relativePosition;\r\n\r\n const flipped = CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);\r\n\r\n // If flipped, call again to validate again.\r\n if (flipped) {\r\n CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);\r\n }\r\n });\r\n }\r\n\r\n private static validateRenderRelativePosition(pt: Point, popupInfo: CursorPopupInfo): boolean {\r\n const popupRect = CursorPopup.getPopupRect(pt, Point.create(popupInfo.offset), popupInfo.popupSize, popupInfo.renderRelativePosition);\r\n const { outPos, flipped } = CursorPopupManager.autoFlip(popupInfo.renderRelativePosition, popupRect, window.innerWidth, window.innerHeight);\r\n\r\n if (flipped)\r\n popupInfo.renderRelativePosition = outPos;\r\n\r\n return flipped;\r\n }\r\n\r\n private static autoFlip(inPos: RelativePosition, rect: RectangleProps, windowWidth: number, windowHeight: number): { outPos: RelativePosition, flipped: boolean } {\r\n let flipped = false;\r\n let outPos = inPos;\r\n\r\n if (rect.right > windowWidth) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Top:\r\n case RelativePosition.TopRight:\r\n outPos = RelativePosition.TopLeft;\r\n break;\r\n case RelativePosition.Right:\r\n outPos = RelativePosition.Left;\r\n break;\r\n case RelativePosition.Bottom:\r\n case RelativePosition.BottomRight:\r\n outPos = RelativePosition.BottomLeft;\r\n break;\r\n }\r\n }\r\n\r\n if (rect.left < 0) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Top:\r\n case RelativePosition.TopLeft:\r\n outPos = RelativePosition.TopRight;\r\n break;\r\n case RelativePosition.Left:\r\n outPos = RelativePosition.Right;\r\n break;\r\n case RelativePosition.Bottom:\r\n case RelativePosition.BottomLeft:\r\n outPos = RelativePosition.BottomRight;\r\n break;\r\n }\r\n }\r\n\r\n if (rect.bottom > windowHeight) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Left:\r\n case RelativePosition.BottomLeft:\r\n outPos = RelativePosition.TopLeft;\r\n break;\r\n case RelativePosition.Bottom:\r\n outPos = RelativePosition.Top;\r\n break;\r\n case RelativePosition.Right:\r\n case RelativePosition.BottomRight:\r\n outPos = RelativePosition.TopRight;\r\n break;\r\n }\r\n }\r\n\r\n if (rect.top < 0) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Left:\r\n case RelativePosition.TopLeft:\r\n outPos = RelativePosition.BottomLeft;\r\n break;\r\n case RelativePosition.Top:\r\n outPos = RelativePosition.Bottom;\r\n break;\r\n case RelativePosition.Right:\r\n case RelativePosition.TopRight:\r\n outPos = RelativePosition.BottomRight;\r\n break;\r\n }\r\n }\r\n\r\n return { outPos, flipped };\r\n }\r\n\r\n}\r\n\r\n/** State for the [[CursorPopupRenderer]] React component */\r\ninterface CursorPopupRendererState {\r\n pt: Point;\r\n}\r\n\r\n/** CursorPopupRenderer React component.\r\n * @public\r\n */\r\nexport class CursorPopupRenderer extends React.Component<any, CursorPopupRendererState> {\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n pt: new Point(),\r\n };\r\n }\r\n\r\n public override render(): React.ReactNode {\r\n if (CursorPopupManager.popupCount <= 0)\r\n return null;\r\n\r\n return (\r\n <>\r\n {this.renderPositions()}\r\n </>\r\n );\r\n }\r\n\r\n private _handleSizeKnown(popupInfo: CursorPopupInfo, size: SizeProps) {\r\n popupInfo.popupSize = Size.create(size);\r\n }\r\n\r\n private renderPositions(): React.ReactNode[] {\r\n const positions = new Array<React.ReactNode>();\r\n let renderedPosition: React.ReactNode;\r\n const begin = RelativePosition.Left;\r\n const end = RelativePosition.BottomRight;\r\n\r\n for (let position = begin; position <= end; position++) {\r\n renderedPosition = this.renderRelativePosition(position);\r\n if (renderedPosition)\r\n positions.push(renderedPosition);\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n private renderRelativePosition(relativePosition: RelativePosition): React.ReactNode {\r\n const filteredInfo = CursorPopupManager.popups.filter((popupInfo: CursorPopupInfo) => popupInfo.renderRelativePosition === relativePosition);\r\n\r\n if (filteredInfo.length > 0) {\r\n let totalDimension = 0;\r\n const ascending =\r\n relativePosition === RelativePosition.Right ||\r\n relativePosition === RelativePosition.BottomRight ||\r\n relativePosition === RelativePosition.Bottom ||\r\n relativePosition === RelativePosition.BottomLeft;\r\n\r\n const positionPopups = filteredInfo\r\n .sort((a: CursorPopupInfo, b: CursorPopupInfo): number => ascending ? a.priority - b.priority : b.priority - a.priority)\r\n .map((popupInfo: CursorPopupInfo, index: number) => {\r\n\r\n const title = (popupInfo.options !== undefined) ? popupInfo.options.title : \"\";\r\n const shadow = (popupInfo.options !== undefined) ? popupInfo.options.shadow : false;\r\n let offset = popupInfo.offset;\r\n\r\n if (index > 0)\r\n offset = this.adjustOffset(offset, popupInfo.renderRelativePosition, totalDimension);\r\n\r\n if (popupInfo.popupSize)\r\n totalDimension += this.getDimension(popupInfo.popupSize, relativePosition);\r\n\r\n return (\r\n <CursorPopup key={popupInfo.id}\r\n id={popupInfo.id}\r\n content={popupInfo.content}\r\n pt={this.state.pt}\r\n offset={offset}\r\n relativePosition={popupInfo.renderRelativePosition}\r\n title={title}\r\n shadow={shadow}\r\n onSizeKnown={(size: SizeProps) => this._handleSizeKnown(popupInfo, size)} />\r\n );\r\n });\r\n\r\n return (\r\n <React.Fragment key={relativePosition.toString()}>\r\n {positionPopups}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getDimension(popupSize: Size, relativePosition: RelativePosition): number {\r\n let dimension = 0;\r\n\r\n switch (relativePosition) {\r\n case RelativePosition.Top:\r\n case RelativePosition.Bottom:\r\n case RelativePosition.TopLeft:\r\n case RelativePosition.TopRight:\r\n case RelativePosition.BottomLeft:\r\n case RelativePosition.BottomRight:\r\n dimension = popupSize.height;\r\n break;\r\n case RelativePosition.Left:\r\n case RelativePosition.Right:\r\n dimension = popupSize.width;\r\n break;\r\n }\r\n\r\n return dimension;\r\n }\r\n\r\n private adjustOffset(offset: Point, relativePosition: RelativePosition, dimension: number): Point {\r\n let outOffset = Point.create(offset.toProps());\r\n\r\n switch (relativePosition) {\r\n case RelativePosition.Top:\r\n case RelativePosition.Bottom:\r\n case RelativePosition.TopLeft:\r\n case RelativePosition.TopRight:\r\n case RelativePosition.BottomLeft:\r\n case RelativePosition.BottomRight:\r\n outOffset = Point.create({ x: offset.x, y: offset.y + dimension });\r\n break;\r\n case RelativePosition.Left:\r\n case RelativePosition.Right:\r\n outOffset = Point.create({ x: offset.x + dimension, y: offset.y });\r\n break;\r\n }\r\n\r\n return outOffset;\r\n }\r\n\r\n public override componentDidMount(): void {\r\n CursorPopupManager.onCursorPopupsChangedEvent.addListener(this._handlePopupChangedEvent);\r\n CursorPopupManager.onCursorPopupUpdatePositionEvent.addListener(this._handleCursorPopupUpdatePositionEvent);\r\n }\r\n\r\n public override componentWillUnmount(): void {\r\n CursorPopupManager.onCursorPopupsChangedEvent.removeListener(this._handlePopupChangedEvent);\r\n CursorPopupManager.onCursorPopupUpdatePositionEvent.removeListener(this._handleCursorPopupUpdatePositionEvent);\r\n }\r\n\r\n private _handlePopupChangedEvent = (_args: any) => {\r\n this.forceUpdate();\r\n };\r\n\r\n private _handleCursorPopupUpdatePositionEvent = (args: CursorPopupUpdatePositionEventArgs) => {\r\n this.setState({ pt: Point.create(args.pt) });\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CursorPopupManager.js","sourceRoot":"","sources":["../../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Cursor\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { PointProps, RelativePosition, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { Point, RectangleProps, Size, SizeProps } from \"@itwin/core-react\";\r\nimport { UiFramework } from \"../../UiFramework\";\r\nimport { CursorPopup } from \"./CursorPopup\";\r\n\r\n/** Options for the [[CursorPopupManager]] open method\r\n * @public\r\n */\r\nexport interface CursorPopupOptions {\r\n /** Title of the popup */\r\n title?: string;\r\n /** Called on popup close */\r\n onClose?: () => void;\r\n /** Callback to apply changes */\r\n onApply?: () => void;\r\n /** Draw shadow */\r\n shadow?: boolean;\r\n}\r\n\r\n/** CursorPopup Update Position Event Args interface.\r\n * @internal\r\n */\r\nexport interface CursorPopupUpdatePositionEventArgs {\r\n pt: PointProps;\r\n}\r\n\r\n/** CursorPopup Update Position Event class.\r\n * @internal\r\n */\r\nexport class CursorPopupUpdatePositionEvent extends UiEvent<CursorPopupUpdatePositionEventArgs> { }\r\n\r\n/** CursorPopup FadeOut Event Args interface.\r\n * @internal\r\n */\r\nexport interface CursorPopupFadeOutEventArgs {\r\n id: string;\r\n}\r\n\r\n/** CursorPopup FadeOut Event class.\r\n * @internal\r\n */\r\nexport class CursorPopupFadeOutEvent extends UiEvent<CursorPopupFadeOutEventArgs> { }\r\n\r\n/** Information maintained by CursorPopupManager about a CursorPopup\r\n * @internal\r\n */\r\ninterface CursorPopupInfo {\r\n id: string;\r\n content: React.ReactNode;\r\n relativePosition: RelativePosition;\r\n offset: Point;\r\n priority: number;\r\n options?: CursorPopupOptions;\r\n\r\n renderRelativePosition: RelativePosition;\r\n popupSize?: Size;\r\n}\r\n\r\n/** Cursor Popups Changed Event class.\r\n * @internal\r\n */\r\nclass CursorPopupsChangedEvent extends UiEvent<{}> { }\r\n\r\n/** CursorPopup component\r\n * @public\r\n */\r\nexport class CursorPopupManager {\r\n private static _popups: CursorPopupInfo[] = new Array<CursorPopupInfo>();\r\n\r\n /** @internal */\r\n public static readonly onCursorPopupUpdatePositionEvent = new CursorPopupUpdatePositionEvent();\r\n /** @internal */\r\n public static readonly onCursorPopupFadeOutEvent = new CursorPopupFadeOutEvent();\r\n /** @internal */\r\n public static readonly onCursorPopupsChangedEvent = new CursorPopupsChangedEvent();\r\n /** @internal */\r\n public static clearPopups() {\r\n this._popups.length = 0;\r\n CursorPopupManager._emitPopupsChangedEvent();\r\n }\r\n\r\n public static get popups() { return this._popups; }\r\n\r\n public static get popupCount() { return this._popups.length; }\r\n\r\n private static _emitPopupsChangedEvent(): void {\r\n CursorPopupManager.onCursorPopupsChangedEvent.emit({});\r\n }\r\n\r\n private static pushPopup(popupInfo: CursorPopupInfo): void {\r\n CursorPopupManager._popups.push(popupInfo);\r\n CursorPopupManager._emitPopupsChangedEvent();\r\n }\r\n\r\n /** Called to open popup with a new set of properties\r\n */\r\n public static open(id: string, content: React.ReactNode, pt: PointProps, offset: PointProps, relativePosition: RelativePosition, priority: number = 0, options?: CursorPopupOptions) {\r\n const popupInfo = CursorPopupManager._popups.find((info: CursorPopupInfo) => id === info.id);\r\n if (popupInfo) {\r\n popupInfo.content = content;\r\n popupInfo.offset = Point.create(offset);\r\n popupInfo.relativePosition = relativePosition;\r\n popupInfo.renderRelativePosition = relativePosition;\r\n popupInfo.priority = priority;\r\n popupInfo.options = options;\r\n } else {\r\n const newPopupInfo: CursorPopupInfo = { id, content, offset: Point.create(offset), relativePosition, options, renderRelativePosition: relativePosition, priority };\r\n CursorPopupManager.pushPopup(newPopupInfo);\r\n }\r\n\r\n CursorPopupManager.updatePosition(pt);\r\n }\r\n\r\n /** Called to update popup with a new set of properties\r\n */\r\n public static update(id: string, content: React.ReactNode, pt: PointProps, offset: PointProps, relativePosition: RelativePosition, priority: number = 0) {\r\n const popupInfo = CursorPopupManager._popups.find((info: CursorPopupInfo) => id === info.id);\r\n if (popupInfo) {\r\n popupInfo.content = content;\r\n popupInfo.offset = Point.create(offset);\r\n popupInfo.relativePosition = relativePosition;\r\n popupInfo.renderRelativePosition = relativePosition;\r\n popupInfo.priority = priority;\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `update: Could not find popup with id of '${id}'`);\r\n }\r\n\r\n CursorPopupManager.updatePosition(pt);\r\n }\r\n\r\n /** Called to move the open popup to new location\r\n */\r\n public static updatePosition(pt: PointProps) {\r\n CursorPopupManager.resetPopupsRenderRelativePosition(Point.create(pt));\r\n CursorPopupManager.onCursorPopupUpdatePositionEvent.emit({ pt });\r\n }\r\n\r\n /** Called when tool wants to close the popup\r\n */\r\n public static close(id: string, apply: boolean, fadeOut?: boolean) {\r\n const popupInfo = CursorPopupManager._popups.find((info: CursorPopupInfo) => id === info.id);\r\n\r\n if (popupInfo) {\r\n if (popupInfo.options) {\r\n if (apply && popupInfo.options.onApply)\r\n popupInfo.options.onApply();\r\n\r\n if (popupInfo.options.onClose)\r\n popupInfo.options.onClose();\r\n }\r\n\r\n if (fadeOut) {\r\n CursorPopupManager.onCursorPopupFadeOutEvent.emit({ id });\r\n setTimeout(() => {\r\n CursorPopupManager.removePopup(id);\r\n }, CursorPopup.fadeOutTime);\r\n\r\n } else {\r\n CursorPopupManager.removePopup(id);\r\n }\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `close: Could not find popup with id of '${id}'`);\r\n }\r\n }\r\n\r\n private static removePopup(id: string): void {\r\n const index = CursorPopupManager._popups.findIndex((popupInfo: CursorPopupInfo) => id === popupInfo.id);\r\n // istanbul ignore else\r\n if (index >= 0) {\r\n CursorPopupManager._popups.splice(index, 1);\r\n CursorPopupManager._emitPopupsChangedEvent();\r\n }\r\n }\r\n\r\n private static resetPopupsRenderRelativePosition(pt: Point) {\r\n CursorPopupManager.popups.forEach((popupInfo: CursorPopupInfo) => {\r\n popupInfo.renderRelativePosition = popupInfo.relativePosition;\r\n\r\n const flipped = CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);\r\n\r\n // If flipped, call again to validate again.\r\n if (flipped) {\r\n CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);\r\n }\r\n });\r\n }\r\n\r\n private static validateRenderRelativePosition(pt: Point, popupInfo: CursorPopupInfo): boolean {\r\n const popupRect = CursorPopup.getPopupRect(pt, Point.create(popupInfo.offset), popupInfo.popupSize, popupInfo.renderRelativePosition);\r\n const { outPos, flipped } = CursorPopupManager.autoFlip(popupInfo.renderRelativePosition, popupRect, window.innerWidth, window.innerHeight);\r\n\r\n if (flipped)\r\n popupInfo.renderRelativePosition = outPos;\r\n\r\n return flipped;\r\n }\r\n\r\n private static autoFlip(inPos: RelativePosition, rect: RectangleProps, windowWidth: number, windowHeight: number): { outPos: RelativePosition, flipped: boolean } {\r\n let flipped = false;\r\n let outPos = inPos;\r\n\r\n if (rect.right > windowWidth) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Top:\r\n case RelativePosition.TopRight:\r\n outPos = RelativePosition.TopLeft;\r\n break;\r\n case RelativePosition.Right:\r\n outPos = RelativePosition.Left;\r\n break;\r\n case RelativePosition.Bottom:\r\n case RelativePosition.BottomRight:\r\n outPos = RelativePosition.BottomLeft;\r\n break;\r\n }\r\n }\r\n\r\n if (rect.left < 0) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Top:\r\n case RelativePosition.TopLeft:\r\n outPos = RelativePosition.TopRight;\r\n break;\r\n case RelativePosition.Left:\r\n outPos = RelativePosition.Right;\r\n break;\r\n case RelativePosition.Bottom:\r\n case RelativePosition.BottomLeft:\r\n outPos = RelativePosition.BottomRight;\r\n break;\r\n }\r\n }\r\n\r\n if (rect.bottom > windowHeight) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Left:\r\n case RelativePosition.BottomLeft:\r\n outPos = RelativePosition.TopLeft;\r\n break;\r\n case RelativePosition.Bottom:\r\n outPos = RelativePosition.Top;\r\n break;\r\n case RelativePosition.Right:\r\n case RelativePosition.BottomRight:\r\n outPos = RelativePosition.TopRight;\r\n break;\r\n }\r\n }\r\n\r\n if (rect.top < 0) {\r\n flipped = true;\r\n switch (inPos) {\r\n case RelativePosition.Left:\r\n case RelativePosition.TopLeft:\r\n outPos = RelativePosition.BottomLeft;\r\n break;\r\n case RelativePosition.Top:\r\n outPos = RelativePosition.Bottom;\r\n break;\r\n case RelativePosition.Right:\r\n case RelativePosition.TopRight:\r\n outPos = RelativePosition.BottomRight;\r\n break;\r\n }\r\n }\r\n\r\n return { outPos, flipped };\r\n }\r\n\r\n}\r\n\r\n/** State for the [[CursorPopupRenderer]] React component */\r\ninterface CursorPopupRendererState {\r\n pt: Point;\r\n}\r\n\r\n/** CursorPopupRenderer React component.\r\n * @public\r\n */\r\nexport class CursorPopupRenderer extends React.Component<any, CursorPopupRendererState> {\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n pt: new Point(),\r\n };\r\n }\r\n\r\n public override render(): React.ReactNode {\r\n if (CursorPopupManager.popupCount <= 0)\r\n return null;\r\n\r\n return (\r\n <>\r\n {this.renderPositions()}\r\n </>\r\n );\r\n }\r\n\r\n private _handleSizeKnown(popupInfo: CursorPopupInfo, size: SizeProps) {\r\n popupInfo.popupSize = Size.create(size);\r\n }\r\n\r\n private renderPositions(): React.ReactNode[] {\r\n const positions = new Array<React.ReactNode>();\r\n let renderedPosition: React.ReactNode;\r\n const begin = RelativePosition.Left;\r\n const end = RelativePosition.BottomRight;\r\n\r\n for (let position = begin; position <= end; position++) {\r\n renderedPosition = this.renderRelativePosition(position);\r\n if (renderedPosition)\r\n positions.push(renderedPosition);\r\n }\r\n\r\n return positions;\r\n }\r\n\r\n private renderRelativePosition(relativePosition: RelativePosition): React.ReactNode {\r\n const filteredInfo = CursorPopupManager.popups.filter((popupInfo: CursorPopupInfo) => popupInfo.renderRelativePosition === relativePosition);\r\n\r\n if (filteredInfo.length > 0) {\r\n let totalDimension = 0;\r\n const ascending =\r\n relativePosition === RelativePosition.Right ||\r\n relativePosition === RelativePosition.BottomRight ||\r\n relativePosition === RelativePosition.Bottom ||\r\n relativePosition === RelativePosition.BottomLeft;\r\n\r\n const positionPopups = filteredInfo\r\n .sort((a: CursorPopupInfo, b: CursorPopupInfo): number => ascending ? a.priority - b.priority : b.priority - a.priority)\r\n .map((popupInfo: CursorPopupInfo, index: number) => {\r\n\r\n const title = (popupInfo.options !== undefined) ? popupInfo.options.title : \"\";\r\n const shadow = (popupInfo.options !== undefined) ? popupInfo.options.shadow : false;\r\n let offset = popupInfo.offset;\r\n\r\n if (index > 0)\r\n offset = this.adjustOffset(offset, popupInfo.renderRelativePosition, totalDimension);\r\n\r\n if (popupInfo.popupSize)\r\n totalDimension += this.getDimension(popupInfo.popupSize, relativePosition);\r\n\r\n return (\r\n <CursorPopup key={popupInfo.id}\r\n id={popupInfo.id}\r\n content={popupInfo.content}\r\n pt={this.state.pt}\r\n offset={offset}\r\n relativePosition={popupInfo.renderRelativePosition}\r\n title={title}\r\n shadow={shadow}\r\n onSizeKnown={(size: SizeProps) => this._handleSizeKnown(popupInfo, size)} />\r\n );\r\n });\r\n\r\n return (\r\n <React.Fragment key={relativePosition.toString()}>\r\n {positionPopups}\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getDimension(popupSize: Size, relativePosition: RelativePosition): number {\r\n let dimension = 0;\r\n\r\n switch (relativePosition) {\r\n case RelativePosition.Top:\r\n case RelativePosition.Bottom:\r\n case RelativePosition.TopLeft:\r\n case RelativePosition.TopRight:\r\n case RelativePosition.BottomLeft:\r\n case RelativePosition.BottomRight:\r\n dimension = popupSize.height;\r\n break;\r\n case RelativePosition.Left:\r\n case RelativePosition.Right:\r\n dimension = popupSize.width;\r\n break;\r\n }\r\n\r\n return dimension;\r\n }\r\n\r\n private adjustOffset(offset: Point, relativePosition: RelativePosition, dimension: number): Point {\r\n let outOffset = Point.create(offset.toProps());\r\n\r\n switch (relativePosition) {\r\n case RelativePosition.Top:\r\n case RelativePosition.Bottom:\r\n case RelativePosition.TopLeft:\r\n case RelativePosition.TopRight:\r\n case RelativePosition.BottomLeft:\r\n case RelativePosition.BottomRight:\r\n outOffset = Point.create({ x: offset.x, y: offset.y + dimension });\r\n break;\r\n case RelativePosition.Left:\r\n case RelativePosition.Right:\r\n outOffset = Point.create({ x: offset.x + dimension, y: offset.y });\r\n break;\r\n }\r\n\r\n return outOffset;\r\n }\r\n\r\n public override componentDidMount(): void {\r\n CursorPopupManager.onCursorPopupsChangedEvent.addListener(this._handlePopupChangedEvent);\r\n CursorPopupManager.onCursorPopupUpdatePositionEvent.addListener(this._handleCursorPopupUpdatePositionEvent);\r\n }\r\n\r\n public override componentWillUnmount(): void {\r\n CursorPopupManager.onCursorPopupsChangedEvent.removeListener(this._handlePopupChangedEvent);\r\n CursorPopupManager.onCursorPopupUpdatePositionEvent.removeListener(this._handleCursorPopupUpdatePositionEvent);\r\n }\r\n\r\n private _handlePopupChangedEvent = (_args: any) => {\r\n this.forceUpdate();\r\n };\r\n\r\n private _handleCursorPopupUpdatePositionEvent = (args: CursorPopupUpdatePositionEventArgs) => {\r\n this.setState({ pt: Point.create(args.pt) });\r\n };\r\n}\r\n"]}
|