@itwin/appui-react 5.19.0 → 5.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/lib/appui-react/UiFramework.js +20 -13
  3. package/lib/appui-react/UiFramework.js.map +1 -1
  4. package/lib/appui-react/accudraw/AccuDrawPopupManager.js +1 -1
  5. package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  6. package/lib/appui-react/accudraw/AccuDrawWidget.js +1 -1
  7. package/lib/appui-react/accudraw/AccuDrawWidget.js.map +1 -1
  8. package/lib/appui-react/accudraw/Calculator.js +92 -98
  9. package/lib/appui-react/accudraw/Calculator.js.map +1 -1
  10. package/lib/appui-react/accudraw/CalculatorEngine.js +130 -129
  11. package/lib/appui-react/accudraw/CalculatorEngine.js.map +1 -1
  12. package/lib/appui-react/accudraw/CalculatorPopup.js +9 -12
  13. package/lib/appui-react/accudraw/CalculatorPopup.js.map +1 -1
  14. package/lib/appui-react/accudraw/FrameworkAccuDraw.js +39 -38
  15. package/lib/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
  16. package/lib/appui-react/accudraw/MenuButton.js +20 -20
  17. package/lib/appui-react/accudraw/MenuButton.js.map +1 -1
  18. package/lib/appui-react/accudraw/MenuButtonPopup.js +9 -12
  19. package/lib/appui-react/accudraw/MenuButtonPopup.js.map +1 -1
  20. package/lib/appui-react/backstage/BackstageItemsManager.js +5 -5
  21. package/lib/appui-react/backstage/BackstageItemsManager.js.map +1 -1
  22. package/lib/appui-react/backstage/BackstageManager.js +1 -3
  23. package/lib/appui-react/backstage/BackstageManager.js.map +1 -1
  24. package/lib/appui-react/backstage/InternalBackstageManager.js +3 -5
  25. package/lib/appui-react/backstage/InternalBackstageManager.js.map +1 -1
  26. package/lib/appui-react/childwindow/InternalChildWindowManager.js +30 -32
  27. package/lib/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  28. package/lib/appui-react/configurableui/ActivityTracker.js +33 -33
  29. package/lib/appui-react/configurableui/ActivityTracker.js.map +1 -1
  30. package/lib/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
  31. package/lib/appui-react/configurableui/ConfigurableUiControl.js +8 -0
  32. package/lib/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
  33. package/lib/appui-react/configurableui/InternalConfigurableUiManager.js +8 -8
  34. package/lib/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  35. package/lib/appui-react/configurableui/TimeTracker.js +25 -27
  36. package/lib/appui-react/configurableui/TimeTracker.js.map +1 -1
  37. package/lib/appui-react/content/ContentControl.js +2 -1
  38. package/lib/appui-react/content/ContentControl.js.map +1 -1
  39. package/lib/appui-react/content/ContentGroup.js +8 -4
  40. package/lib/appui-react/content/ContentGroup.js.map +1 -1
  41. package/lib/appui-react/content/ContentLayout.js +47 -38
  42. package/lib/appui-react/content/ContentLayout.js.map +1 -1
  43. package/lib/appui-react/content/IModelViewport.js +28 -23
  44. package/lib/appui-react/content/IModelViewport.js.map +1 -1
  45. package/lib/appui-react/content/InternalContentLayoutManager.js +1 -1
  46. package/lib/appui-react/content/InternalContentLayoutManager.js.map +1 -1
  47. package/lib/appui-react/content/InternalContentViewManager.js +9 -8
  48. package/lib/appui-react/content/InternalContentViewManager.js.map +1 -1
  49. package/lib/appui-react/content/StandardContentLayouts.js +141 -141
  50. package/lib/appui-react/content/StandardContentLayouts.js.map +1 -1
  51. package/lib/appui-react/content/ViewportContentControl.js +25 -22
  52. package/lib/appui-react/content/ViewportContentControl.js.map +1 -1
  53. package/lib/appui-react/cursor/CursorInformation.js +7 -6
  54. package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
  55. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js +9 -9
  56. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  57. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +7 -7
  58. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  59. package/lib/appui-react/dialog/DialogManagerBase.js +18 -19
  60. package/lib/appui-react/dialog/DialogManagerBase.js.map +1 -1
  61. package/lib/appui-react/dialog/InternalContentDialogManager.js +7 -7
  62. package/lib/appui-react/dialog/InternalContentDialogManager.js.map +1 -1
  63. package/lib/appui-react/dialog/InternalModalDialogManager.js +4 -4
  64. package/lib/appui-react/dialog/InternalModalDialogManager.js.map +1 -1
  65. package/lib/appui-react/dialog/InternalModelessDialogManager.js +6 -6
  66. package/lib/appui-react/dialog/InternalModelessDialogManager.js.map +1 -1
  67. package/lib/appui-react/dialog/ModelessDialog.js +3 -3
  68. package/lib/appui-react/dialog/ModelessDialog.js.map +1 -1
  69. package/lib/appui-react/feedback/ElementTooltip.js +3 -1
  70. package/lib/appui-react/feedback/ElementTooltip.js.map +1 -1
  71. package/lib/appui-react/feedback/ValidationTextbox.js +25 -25
  72. package/lib/appui-react/feedback/ValidationTextbox.js.map +1 -1
  73. package/lib/appui-react/framework/FrameworkFrontstages.d.ts +3 -2
  74. package/lib/appui-react/framework/FrameworkFrontstages.d.ts.map +1 -1
  75. package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
  76. package/lib/appui-react/frontstage/FrontstageDef.js +28 -10
  77. package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
  78. package/lib/appui-react/frontstage/InternalFrontstageManager.js +96 -96
  79. package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  80. package/lib/appui-react/frontstage/ModalFrontstage.js +5 -5
  81. package/lib/appui-react/frontstage/ModalFrontstage.js.map +1 -1
  82. package/lib/appui-react/frontstage/ModalSettingsStage.js +5 -4
  83. package/lib/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  84. package/lib/appui-react/frontstage/StandardFrontstageProvider.js +1 -0
  85. package/lib/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  86. package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js +22 -22
  87. package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
  88. package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js +11 -9
  89. package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
  90. package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js +17 -20
  91. package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
  92. package/lib/appui-react/layout/backstage/Backstage.js +11 -14
  93. package/lib/appui-react/layout/backstage/Backstage.js.map +1 -1
  94. package/lib/appui-react/layout/base/DragManager.js +6 -7
  95. package/lib/appui-react/layout/base/DragManager.js.map +1 -1
  96. package/lib/appui-react/layout/base/SafeAreaInsets.js +8 -8
  97. package/lib/appui-react/layout/base/SafeAreaInsets.js.map +1 -1
  98. package/lib/appui-react/layout/popup/Tooltip.js +8 -11
  99. package/lib/appui-react/layout/popup/Tooltip.js.map +1 -1
  100. package/lib/appui-react/layout/widget/MenuTab.d.ts +3 -4
  101. package/lib/appui-react/layout/widget/MenuTab.d.ts.map +1 -1
  102. package/lib/appui-react/layout/widget/MenuTab.js +5 -7
  103. package/lib/appui-react/layout/widget/MenuTab.js.map +1 -1
  104. package/lib/appui-react/layout/widget/MenuTab.scss +4 -51
  105. package/lib/appui-react/layout/widget/Overflow.d.ts +2 -3
  106. package/lib/appui-react/layout/widget/Overflow.d.ts.map +1 -1
  107. package/lib/appui-react/layout/widget/Overflow.js +2 -2
  108. package/lib/appui-react/layout/widget/Overflow.js.map +1 -1
  109. package/lib/appui-react/layout/widget/Overflow.scss +0 -4
  110. package/lib/appui-react/layout/widget/Tab.d.ts +3 -6
  111. package/lib/appui-react/layout/widget/Tab.d.ts.map +1 -1
  112. package/lib/appui-react/layout/widget/Tab.js +8 -6
  113. package/lib/appui-react/layout/widget/Tab.js.map +1 -1
  114. package/lib/appui-react/layout/widget/Tabs.js +4 -3
  115. package/lib/appui-react/layout/widget/Tabs.js.map +1 -1
  116. package/lib/appui-react/messages/InputField.js +21 -24
  117. package/lib/appui-react/messages/InputField.js.map +1 -1
  118. package/lib/appui-react/messages/MessageManager.js +39 -38
  119. package/lib/appui-react/messages/MessageManager.js.map +1 -1
  120. package/lib/appui-react/messages/Pointer.js +38 -38
  121. package/lib/appui-react/messages/Pointer.js.map +1 -1
  122. package/lib/appui-react/messages/ReactNotifyMessageDetails.js +6 -0
  123. package/lib/appui-react/messages/ReactNotifyMessageDetails.js.map +1 -1
  124. package/lib/appui-react/messages/StatusMessageManager.js +2 -4
  125. package/lib/appui-react/messages/StatusMessageManager.js.map +1 -1
  126. package/lib/appui-react/navigationaids/CubeNavigationAidControl.js +1 -1
  127. package/lib/appui-react/navigationaids/CubeNavigationAidControl.js.map +1 -1
  128. package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js +1 -1
  129. package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js.map +1 -1
  130. package/lib/appui-react/navigationaids/NavigationAidControl.js +1 -0
  131. package/lib/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
  132. package/lib/appui-react/navigationaids/SheetNavigationAid.js +55 -54
  133. package/lib/appui-react/navigationaids/SheetNavigationAid.js.map +1 -1
  134. package/lib/appui-react/navigationaids/SheetsModalFrontstage.js +22 -20
  135. package/lib/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
  136. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js +15 -14
  137. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js.map +1 -1
  138. package/lib/appui-react/pickers/ListPicker.js +28 -28
  139. package/lib/appui-react/pickers/ListPicker.js.map +1 -1
  140. package/lib/appui-react/pickers/ViewSelector.js +87 -86
  141. package/lib/appui-react/pickers/ViewSelector.js.map +1 -1
  142. package/lib/appui-react/popup/CardPopup.js +18 -21
  143. package/lib/appui-react/popup/CardPopup.js.map +1 -1
  144. package/lib/appui-react/popup/HTMLElementPopup.js +9 -12
  145. package/lib/appui-react/popup/HTMLElementPopup.js.map +1 -1
  146. package/lib/appui-react/popup/InputEditorPopup.js +18 -20
  147. package/lib/appui-react/popup/InputEditorPopup.js.map +1 -1
  148. package/lib/appui-react/popup/PopupManager.js +22 -25
  149. package/lib/appui-react/popup/PopupManager.js.map +1 -1
  150. package/lib/appui-react/popup/ToolSettingsPopup.js +17 -17
  151. package/lib/appui-react/popup/ToolSettingsPopup.js.map +1 -1
  152. package/lib/appui-react/popup/ToolbarPopup.js +18 -21
  153. package/lib/appui-react/popup/ToolbarPopup.js.map +1 -1
  154. package/lib/appui-react/redux/ReducerRegistry.js +2 -0
  155. package/lib/appui-react/redux/ReducerRegistry.js.map +1 -1
  156. package/lib/appui-react/redux/StateManager.js +4 -1
  157. package/lib/appui-react/redux/StateManager.js.map +1 -1
  158. package/lib/appui-react/selection/HideIsolateEmphasizeManager.js +7 -3
  159. package/lib/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
  160. package/lib/appui-react/shared/ActionButtonItemDef.js +13 -6
  161. package/lib/appui-react/shared/ActionButtonItemDef.js.map +1 -1
  162. package/lib/appui-react/shared/CommandItemDef.js +3 -3
  163. package/lib/appui-react/shared/CommandItemDef.js.map +1 -1
  164. package/lib/appui-react/shared/CustomItemDef.js +4 -2
  165. package/lib/appui-react/shared/CustomItemDef.js.map +1 -1
  166. package/lib/appui-react/shared/ItemDefBase.js +13 -5
  167. package/lib/appui-react/shared/ItemDefBase.js.map +1 -1
  168. package/lib/appui-react/shared/MenuItem.js +6 -1
  169. package/lib/appui-react/shared/MenuItem.js.map +1 -1
  170. package/lib/appui-react/shared/ToolItemDef.js +1 -1
  171. package/lib/appui-react/shared/ToolItemDef.js.map +1 -1
  172. package/lib/appui-react/stagepanels/StagePanelDef.js +4 -3
  173. package/lib/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  174. package/lib/appui-react/statusbar/StatusBarItemsManager.js +5 -5
  175. package/lib/appui-react/statusbar/StatusBarItemsManager.js.map +1 -1
  176. package/lib/appui-react/statusfields/ViewAttributes.js +16 -16
  177. package/lib/appui-react/statusfields/ViewAttributes.js.map +1 -1
  178. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js +35 -33
  179. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
  180. package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js +7 -0
  181. package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -1
  182. package/lib/appui-react/syncui/SyncUiEventDispatcher.js +4 -3
  183. package/lib/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  184. package/lib/appui-react/timeline/AnalysisAnimationProvider.js +9 -8
  185. package/lib/appui-react/timeline/AnalysisAnimationProvider.js.map +1 -1
  186. package/lib/appui-react/timeline/ScheduleAnimationProvider.js +13 -12
  187. package/lib/appui-react/timeline/ScheduleAnimationProvider.js.map +1 -1
  188. package/lib/appui-react/timeline/SolarTimelineDataProvider.js +6 -5
  189. package/lib/appui-react/timeline/SolarTimelineDataProvider.js.map +1 -1
  190. package/lib/appui-react/toolbar/GroupItem.js +11 -5
  191. package/lib/appui-react/toolbar/GroupItem.js.map +1 -1
  192. package/lib/appui-react/toolbar/ToolbarItemsManager.js +7 -7
  193. package/lib/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
  194. package/lib/appui-react/tools/FrameworkToolAdmin.js +5 -1
  195. package/lib/appui-react/tools/FrameworkToolAdmin.js.map +1 -1
  196. package/lib/appui-react/tools/KeyinPaletteTools.js +2 -2
  197. package/lib/appui-react/tools/KeyinPaletteTools.js.map +1 -1
  198. package/lib/appui-react/tools/OpenSettingsTool.js +2 -2
  199. package/lib/appui-react/tools/OpenSettingsTool.js.map +1 -1
  200. package/lib/appui-react/tools/RestoreLayoutTool.js +4 -4
  201. package/lib/appui-react/tools/RestoreLayoutTool.js.map +1 -1
  202. package/lib/appui-react/tools/ToolSettingsTools.js +2 -2
  203. package/lib/appui-react/tools/ToolSettingsTools.js.map +1 -1
  204. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js +15 -18
  205. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  206. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js +8 -8
  207. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js.map +1 -1
  208. package/lib/appui-react/toolsettings/ToolInformation.js +2 -0
  209. package/lib/appui-react/toolsettings/ToolInformation.js.map +1 -1
  210. package/lib/appui-react/toolsettings/ToolUiProvider.js +3 -0
  211. package/lib/appui-react/toolsettings/ToolUiProvider.js.map +1 -1
  212. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js +1 -0
  213. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  214. package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js +2 -0
  215. package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js.map +1 -1
  216. package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js +1 -0
  217. package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js.map +1 -1
  218. package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +1 -0
  219. package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
  220. package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js +1 -0
  221. package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js.map +1 -1
  222. package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js +1 -0
  223. package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js.map +1 -1
  224. package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +1 -0
  225. package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  226. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -0
  227. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  228. package/lib/appui-react/ui-items-provider/UiItemsManager.js +3 -3
  229. package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  230. package/lib/appui-react/uiadmin/FrameworkUiAdmin.js +1 -4
  231. package/lib/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  232. package/lib/appui-react/uiprovider/ComponentGenerator.js +2 -0
  233. package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  234. package/lib/appui-react/uistate/AppUiSettings.js +41 -33
  235. package/lib/appui-react/uistate/AppUiSettings.js.map +1 -1
  236. package/lib/appui-react/utils/InternalUiShowHideManager.js +13 -14
  237. package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  238. package/lib/appui-react/widget-panels/Tab.d.ts.map +1 -1
  239. package/lib/appui-react/widget-panels/Tab.js +2 -1
  240. package/lib/appui-react/widget-panels/Tab.js.map +1 -1
  241. package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js +2 -5
  242. package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js.map +1 -1
  243. package/lib/appui-react/widgets/WidgetControl.js +2 -0
  244. package/lib/appui-react/widgets/WidgetControl.js.map +1 -1
  245. package/lib/appui-react/widgets/WidgetDef.js +28 -7
  246. package/lib/appui-react/widgets/WidgetDef.js.map +1 -1
  247. package/lib/appui-react/widgets/WidgetHost.js +4 -4
  248. package/lib/appui-react/widgets/WidgetHost.js.map +1 -1
  249. package/lib/appui-react/widgets/WidgetManager.js +5 -7
  250. package/lib/appui-react/widgets/WidgetManager.js.map +1 -1
  251. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
  252. package/lib/cjs/appui-react/layout/widget/MenuTab.scss +4 -51
  253. package/lib/cjs/appui-react/layout/widget/Overflow.scss +0 -4
  254. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
  255. package/lib/esm/appui-react/layout/widget/MenuTab.scss +4 -51
  256. package/lib/esm/appui-react/layout/widget/Overflow.scss +0 -4
  257. package/package.json +9 -9
@@ -19,30 +19,22 @@ export class KeyboardShortcutMenuEvent extends UiEvent {
19
19
  * @deprecated in 4.15.0. Component used internally to display keyboard shortcuts in a context menu.
20
20
  */
21
21
  export class KeyboardShortcutMenu extends React.PureComponent {
22
- constructor() {
23
- super(...arguments);
24
- this.state = {
25
- menuVisible: false,
26
- menuX: 0,
27
- menuY: 0,
28
- };
29
- this._handleKeyboardShortcutMenuEvent = (state) => {
30
- this.setState(state);
31
- };
32
- this._hideContextMenu = () => {
33
- this.setState({ menuVisible: false, shortcuts: undefined });
34
- };
35
- this._itemPicked = (shortcut) => {
36
- this._hideContextMenu();
37
- shortcut.itemPicked();
38
- };
39
- }
22
+ state = {
23
+ menuVisible: false,
24
+ menuX: 0,
25
+ menuY: 0,
26
+ };
27
+ /** Get KeyboardShortcut Menu Event. */
28
+ static onKeyboardShortcutMenuEvent = new KeyboardShortcutMenuEvent();
40
29
  componentDidMount() {
41
30
  KeyboardShortcutMenu.onKeyboardShortcutMenuEvent.addListener(this._handleKeyboardShortcutMenuEvent);
42
31
  }
43
32
  componentWillUnmount() {
44
33
  KeyboardShortcutMenu.onKeyboardShortcutMenuEvent.removeListener(this._handleKeyboardShortcutMenuEvent);
45
34
  }
35
+ _handleKeyboardShortcutMenuEvent = (state) => {
36
+ this.setState(state);
37
+ };
46
38
  render() {
47
39
  const { shortcuts, menuX, menuY, menuVisible } = this.state;
48
40
  const onClose = this._hideContextMenu;
@@ -87,7 +79,12 @@ export class KeyboardShortcutMenu extends React.PureComponent {
87
79
  }
88
80
  return node;
89
81
  }
82
+ _hideContextMenu = () => {
83
+ this.setState({ menuVisible: false, shortcuts: undefined });
84
+ };
85
+ _itemPicked = (shortcut) => {
86
+ this._hideContextMenu();
87
+ shortcut.itemPicked();
88
+ };
90
89
  }
91
- /** Get KeyboardShortcut Menu Event. */
92
- KeyboardShortcutMenu.onKeyboardShortcutMenuEvent = new KeyboardShortcutMenuEvent();
93
90
  //# sourceMappingURL=KeyboardShortcutMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardShortcutMenu.js","sourceRoot":"","sources":["../../../src/appui-react/keyboardshortcut/KeyboardShortcutMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module KeyboardShortcut\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport {\n ContextMenuItem,\n ContextSubMenu,\n GlobalContextMenu,\n} from \"@itwin/core-react\";\nimport type { KeyboardShortcut } from \"./KeyboardShortcut.js\";\nimport { ConditionalBooleanValue, UiEvent } from \"@itwin/appui-abstract\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\n/** State of a [[KeyboardShortcutMenuEvent]] and [[KeyboardShortcutMenu]] component\n * @public\n * @deprecated in 4.15.0. Used internally by {@link KeyboardShortcutMenu} component.\n */\nexport interface KeyboardShortcutMenuState {\n menuVisible: boolean;\n menuX: number;\n menuY: number;\n shortcuts?: KeyboardShortcut[];\n}\n\n/** KeyboardShortcut Menu Event class.\n * @public\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\nexport class KeyboardShortcutMenuEvent extends UiEvent<KeyboardShortcutMenuState> {}\n\n/** React component that displays a context menu at the cursor containing keyboard shortcuts.\n * @public\n * @deprecated in 4.15.0. Component used internally to display keyboard shortcuts in a context menu.\n */\nexport class KeyboardShortcutMenu extends React.PureComponent<\n CommonProps,\n KeyboardShortcutMenuState\n> {\n public override readonly state: KeyboardShortcutMenuState = {\n menuVisible: false,\n menuX: 0,\n menuY: 0,\n };\n\n /** Get KeyboardShortcut Menu Event. */\n public static readonly onKeyboardShortcutMenuEvent =\n new KeyboardShortcutMenuEvent();\n\n public override componentDidMount() {\n KeyboardShortcutMenu.onKeyboardShortcutMenuEvent.addListener(\n this._handleKeyboardShortcutMenuEvent\n );\n }\n\n public override componentWillUnmount() {\n KeyboardShortcutMenu.onKeyboardShortcutMenuEvent.removeListener(\n this._handleKeyboardShortcutMenuEvent\n );\n }\n\n private _handleKeyboardShortcutMenuEvent: ListenerType<\n typeof KeyboardShortcutMenu.onKeyboardShortcutMenuEvent\n > = (state) => {\n this.setState(state);\n };\n\n public override render(): React.ReactNode {\n const { shortcuts, menuX, menuY, menuVisible } = this.state;\n const onClose = this._hideContextMenu;\n\n if (menuVisible) {\n const items = this.getShortcutMenuItems(shortcuts);\n\n return (\n <GlobalContextMenu\n className={this.props.className}\n style={this.props.style}\n identifier=\"keyboard-shortcuts\"\n x={menuX}\n y={menuY}\n opened={menuVisible}\n onEsc={onClose}\n onOutsideClick={onClose}\n edgeLimit={false}\n autoflip={true}\n ignoreNextKeyUp={true} // Executing the shortcut on the keydown, so ignore the keyup in the menu\n offset={12}\n >\n {items}\n </GlobalContextMenu>\n );\n }\n\n return null;\n }\n\n private getShortcutMenuItems(\n shortcuts?: KeyboardShortcut[]\n ): React.ReactNode[] {\n const items: React.ReactNode[] = [];\n\n if (shortcuts) {\n shortcuts.forEach((shortcut: KeyboardShortcut, index: number) => {\n const item = this.getShortcutMenuItem(shortcut, index);\n if (item) items.push(item);\n });\n }\n\n return items;\n }\n\n private getShortcutMenuItem(\n shortcut: KeyboardShortcut,\n index: number\n ): React.ReactNode {\n const shortcutKey = shortcut.key;\n const isHidden = ConditionalBooleanValue.getValue(shortcut.isHidden);\n\n // Only pure characters go into the context menu\n if (\n shortcutKey !== shortcut.keyMapKey ||\n shortcut.isFunctionKey ||\n shortcut.isSpecialKey ||\n isHidden\n )\n return null;\n\n let node: React.ReactNode = null;\n let label = shortcut.label;\n const iconSpec = shortcut.iconSpec;\n\n label = `~${shortcutKey.toLocaleUpperCase()} ${label}`;\n\n if (shortcut.shortcutContainer.areKeyboardShortcutsAvailable()) {\n const shortcuts =\n shortcut.shortcutContainer.getAvailableKeyboardShortcuts();\n const items = this.getShortcutMenuItems(shortcuts);\n\n node = (\n <ContextSubMenu\n key={index}\n icon={iconSpec}\n label={label}\n disabled={shortcut.isDisabled}\n badgeType={shortcut.badgeType}\n badgeKind={shortcut.badgeKind}\n >\n {items}\n </ContextSubMenu>\n );\n } else {\n const sel = () => this._itemPicked(shortcut);\n node = (\n <ContextMenuItem\n key={index}\n onSelect={sel}\n icon={iconSpec}\n disabled={shortcut.isDisabled}\n badgeType={shortcut.badgeType}\n badgeKind={shortcut.badgeKind}\n >\n {label}\n </ContextMenuItem>\n );\n }\n\n return node;\n }\n\n private _hideContextMenu = () => {\n this.setState({ menuVisible: false, shortcuts: undefined });\n };\n\n private _itemPicked = (shortcut: KeyboardShortcut): void => {\n this._hideContextMenu();\n shortcut.itemPicked();\n };\n}\n"]}
1
+ {"version":3,"file":"KeyboardShortcutMenu.js","sourceRoot":"","sources":["../../../src/appui-react/keyboardshortcut/KeyboardShortcutMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module KeyboardShortcut\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport {\n ContextMenuItem,\n ContextSubMenu,\n GlobalContextMenu,\n} from \"@itwin/core-react\";\nimport type { KeyboardShortcut } from \"./KeyboardShortcut.js\";\nimport { ConditionalBooleanValue, UiEvent } from \"@itwin/appui-abstract\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\n/** State of a [[KeyboardShortcutMenuEvent]] and [[KeyboardShortcutMenu]] component\n * @public\n * @deprecated in 4.15.0. Used internally by {@link KeyboardShortcutMenu} component.\n */\nexport interface KeyboardShortcutMenuState {\n menuVisible: boolean;\n menuX: number;\n menuY: number;\n shortcuts?: KeyboardShortcut[];\n}\n\n/** KeyboardShortcut Menu Event class.\n * @public\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\nexport class KeyboardShortcutMenuEvent extends UiEvent<KeyboardShortcutMenuState> {}\n\n/** React component that displays a context menu at the cursor containing keyboard shortcuts.\n * @public\n * @deprecated in 4.15.0. Component used internally to display keyboard shortcuts in a context menu.\n */\nexport class KeyboardShortcutMenu extends React.PureComponent<\n CommonProps,\n KeyboardShortcutMenuState\n> {\n public override readonly state: KeyboardShortcutMenuState = {\n menuVisible: false,\n menuX: 0,\n menuY: 0,\n };\n\n /** Get KeyboardShortcut Menu Event. */\n public static readonly onKeyboardShortcutMenuEvent =\n new KeyboardShortcutMenuEvent();\n\n public override componentDidMount() {\n KeyboardShortcutMenu.onKeyboardShortcutMenuEvent.addListener(\n this._handleKeyboardShortcutMenuEvent\n );\n }\n\n public override componentWillUnmount() {\n KeyboardShortcutMenu.onKeyboardShortcutMenuEvent.removeListener(\n this._handleKeyboardShortcutMenuEvent\n );\n }\n\n private _handleKeyboardShortcutMenuEvent: ListenerType<\n typeof KeyboardShortcutMenu.onKeyboardShortcutMenuEvent\n > = (state) => {\n this.setState(state);\n };\n\n public override render(): React.ReactNode {\n const { shortcuts, menuX, menuY, menuVisible } = this.state;\n const onClose = this._hideContextMenu;\n\n if (menuVisible) {\n const items = this.getShortcutMenuItems(shortcuts);\n\n return (\n <GlobalContextMenu\n className={this.props.className}\n style={this.props.style}\n identifier=\"keyboard-shortcuts\"\n x={menuX}\n y={menuY}\n opened={menuVisible}\n onEsc={onClose}\n onOutsideClick={onClose}\n edgeLimit={false}\n autoflip={true}\n ignoreNextKeyUp={true} // Executing the shortcut on the keydown, so ignore the keyup in the menu\n offset={12}\n >\n {items}\n </GlobalContextMenu>\n );\n }\n\n return null;\n }\n\n private getShortcutMenuItems(\n shortcuts?: KeyboardShortcut[]\n ): React.ReactNode[] {\n const items: React.ReactNode[] = [];\n\n if (shortcuts) {\n shortcuts.forEach((shortcut: KeyboardShortcut, index: number) => {\n const item = this.getShortcutMenuItem(shortcut, index);\n if (item) items.push(item);\n });\n }\n\n return items;\n }\n\n private getShortcutMenuItem(\n shortcut: KeyboardShortcut,\n index: number\n ): React.ReactNode {\n const shortcutKey = shortcut.key;\n const isHidden = ConditionalBooleanValue.getValue(shortcut.isHidden);\n\n // Only pure characters go into the context menu\n if (\n shortcutKey !== shortcut.keyMapKey ||\n shortcut.isFunctionKey ||\n shortcut.isSpecialKey ||\n isHidden\n )\n return null;\n\n let node: React.ReactNode = null;\n let label = shortcut.label;\n const iconSpec = shortcut.iconSpec;\n\n label = `~${shortcutKey.toLocaleUpperCase()} ${label}`;\n\n if (shortcut.shortcutContainer.areKeyboardShortcutsAvailable()) {\n const shortcuts =\n shortcut.shortcutContainer.getAvailableKeyboardShortcuts();\n const items = this.getShortcutMenuItems(shortcuts);\n\n node = (\n <ContextSubMenu\n key={index}\n icon={iconSpec}\n label={label}\n disabled={shortcut.isDisabled}\n badgeType={shortcut.badgeType}\n badgeKind={shortcut.badgeKind}\n >\n {items}\n </ContextSubMenu>\n );\n } else {\n const sel = () => this._itemPicked(shortcut);\n node = (\n <ContextMenuItem\n key={index}\n onSelect={sel}\n icon={iconSpec}\n disabled={shortcut.isDisabled}\n badgeType={shortcut.badgeType}\n badgeKind={shortcut.badgeKind}\n >\n {label}\n </ContextMenuItem>\n );\n }\n\n return node;\n }\n\n private _hideContextMenu = () => {\n this.setState({ menuVisible: false, shortcuts: undefined });\n };\n\n private _itemPicked = (shortcut: KeyboardShortcut): void => {\n this._hideContextMenu();\n shortcut.itemPicked();\n };\n}\n"]}
@@ -14,17 +14,9 @@ import "./Backstage.scss";
14
14
  * @internal
15
15
  */
16
16
  export class Backstage extends React.PureComponent {
17
- constructor() {
18
- super(...arguments);
19
- this._onClose = () => {
20
- this.props.onClose && this.props.onClose();
21
- };
22
- this._onEsc = (event) => {
23
- if (this.props.isOpen && event.key === Key.Escape.valueOf()) {
24
- this._onClose();
25
- }
26
- };
27
- }
17
+ static defaultProps = {
18
+ showOverlay: true,
19
+ };
28
20
  componentDidMount() {
29
21
  document.addEventListener("keydown", this._onEsc, false);
30
22
  }
@@ -42,8 +34,13 @@ export class Backstage extends React.PureComponent {
42
34
  React.createElement("ul", { role: "menu" }, this.props.children),
43
35
  this.props.footer && (React.createElement("div", { className: "nz-footer" }, this.props.footer)))));
44
36
  }
37
+ _onClose = () => {
38
+ this.props.onClose && this.props.onClose();
39
+ };
40
+ _onEsc = (event) => {
41
+ if (this.props.isOpen && event.key === Key.Escape.valueOf()) {
42
+ this._onClose();
43
+ }
44
+ };
45
45
  }
46
- Backstage.defaultProps = {
47
- showOverlay: true,
48
- };
49
46
  //# sourceMappingURL=Backstage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Backstage.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/backstage/Backstage.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,kBAAkB,CAAC;AA4B1B;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK,CAAC,aAA6B;IAAlE;;QA8CU,aAAQ,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC,CAAC;QAEM,WAAM,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAlDiB,iBAAiB;QAC/B,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEe,oBAAoB;QAClC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAEe,MAAM;QACpB,MAAM,gBAAgB,GAAG,UAAU,CACjC,gCAAgC,EAChC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,EAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,YAAY,CACvC,CAAC;QACF,MAAM,kBAAkB,GAAG,UAAU,CACnC,wBAAwB,EACxB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,EAC9B,IAAI,CAAC,KAAK,CAAC,cAAc;YACvB,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EACnE,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB,CAAC;QACF,OAAO,CACL;YACE,6BACE,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,IAAI,EAAC,cAAc,GACnB;YACF,6BAAK,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CACpB,6BAAK,SAAS,EAAC,WAAW,IAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO,CACrD;gBACD,4BAAI,IAAI,EAAC,MAAM,IAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;gBACzC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CACpB,6BAAK,SAAS,EAAC,WAAW,IAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO,CACrD,CACG,CACL,CACJ,CAAC;IACJ,CAAC;;AA3CsB,sBAAY,GAA0B;IAC3D,WAAW,EAAE,IAAI;CAClB,AAFkC,CAEjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Backstage\n */\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport type { SafeAreaInsets } from \"../../safearea/SafeAreaInsets.js\";\nimport { SafeAreaInsetsHelpers } from \"../base/SafeAreaInsets.js\";\nimport \"./Backstage.scss\";\n\n/** Properties of [[Backstage]] component.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface BackstageProps extends CommonProps {\n /** Backstage items and separators. I.e. [[BackstageItem]], [[BackstageSeparator]] */\n children?: React.ReactNode;\n /** Optional footer content. */\n footer?: React.ReactNode;\n /** Optional header content. I.e. [[UserProfile]] */\n header?: React.ReactNode;\n /** Describes if the backstage is open. */\n isOpen?: boolean;\n /** Function called when backstage is closed. */\n onClose?: () => void;\n /** Describes respected safe area insets. */\n safeAreaInsets?: SafeAreaInsets;\n /** Describes if a ghosting overlay is shown. */\n showOverlay: boolean;\n}\n\n/** Default properties of [[Backstage]] component.\n * @internal\n */\nexport type BackstageDefaultProps = Pick<BackstageProps, \"showOverlay\">;\n\n/** Backstage component of 9-Zone UI app.\n * @internal\n */\nexport class Backstage extends React.PureComponent<BackstageProps> {\n public static readonly defaultProps: BackstageDefaultProps = {\n showOverlay: true,\n };\n\n public override componentDidMount(): void {\n document.addEventListener(\"keydown\", this._onEsc, false);\n }\n\n public override componentWillUnmount() {\n document.removeEventListener(\"keydown\", this._onEsc, false);\n }\n\n public override render() {\n const overlayClassName = classnames(\n \"nz-backstage-backstage_overlay\",\n this.props.isOpen && \"nz-open\",\n this.props.showOverlay && \"nz-overlay\"\n );\n const backstageClassName = classnames(\n \"nz-backstage-backstage\",\n this.props.isOpen && \"nz-open\",\n this.props.safeAreaInsets &&\n SafeAreaInsetsHelpers.getCssClassNames(this.props.safeAreaInsets),\n this.props.className\n );\n return (\n <>\n <div\n className={overlayClassName}\n onClick={this._onClose}\n role=\"presentation\"\n />\n <div className={backstageClassName} style={this.props.style}>\n {this.props.header && (\n <div className=\"nz-header\">{this.props.header}</div>\n )}\n <ul role=\"menu\">{this.props.children}</ul>\n {this.props.footer && (\n <div className=\"nz-footer\">{this.props.footer}</div>\n )}\n </div>\n </>\n );\n }\n\n private _onClose = () => {\n this.props.onClose && this.props.onClose();\n };\n\n private _onEsc = (event: KeyboardEvent): void => {\n if (this.props.isOpen && event.key === Key.Escape.valueOf()) {\n this._onClose();\n }\n };\n}\n"]}
1
+ {"version":3,"file":"Backstage.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/backstage/Backstage.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,kBAAkB,CAAC;AA4B1B;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK,CAAC,aAA6B;IACzD,MAAM,CAAU,YAAY,GAA0B;QAC3D,WAAW,EAAE,IAAI;KAClB,CAAC;IAEc,iBAAiB;QAC/B,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEe,oBAAoB;QAClC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAEe,MAAM;QACpB,MAAM,gBAAgB,GAAG,UAAU,CACjC,gCAAgC,EAChC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,EAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,YAAY,CACvC,CAAC;QACF,MAAM,kBAAkB,GAAG,UAAU,CACnC,wBAAwB,EACxB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,EAC9B,IAAI,CAAC,KAAK,CAAC,cAAc;YACvB,qBAAqB,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EACnE,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB,CAAC;QACF,OAAO,CACL;YACE,6BACE,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,IAAI,EAAC,cAAc,GACnB;YACF,6BAAK,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;gBACxD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CACpB,6BAAK,SAAS,EAAC,WAAW,IAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO,CACrD;gBACD,4BAAI,IAAI,EAAC,MAAM,IAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM;gBACzC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CACpB,6BAAK,SAAS,EAAC,WAAW,IAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAO,CACrD,CACG,CACL,CACJ,CAAC;IACJ,CAAC;IAEO,QAAQ,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7C,CAAC,CAAC;IAEM,MAAM,GAAG,CAAC,KAAoB,EAAQ,EAAE;QAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Backstage\n */\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport type { SafeAreaInsets } from \"../../safearea/SafeAreaInsets.js\";\nimport { SafeAreaInsetsHelpers } from \"../base/SafeAreaInsets.js\";\nimport \"./Backstage.scss\";\n\n/** Properties of [[Backstage]] component.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface BackstageProps extends CommonProps {\n /** Backstage items and separators. I.e. [[BackstageItem]], [[BackstageSeparator]] */\n children?: React.ReactNode;\n /** Optional footer content. */\n footer?: React.ReactNode;\n /** Optional header content. I.e. [[UserProfile]] */\n header?: React.ReactNode;\n /** Describes if the backstage is open. */\n isOpen?: boolean;\n /** Function called when backstage is closed. */\n onClose?: () => void;\n /** Describes respected safe area insets. */\n safeAreaInsets?: SafeAreaInsets;\n /** Describes if a ghosting overlay is shown. */\n showOverlay: boolean;\n}\n\n/** Default properties of [[Backstage]] component.\n * @internal\n */\nexport type BackstageDefaultProps = Pick<BackstageProps, \"showOverlay\">;\n\n/** Backstage component of 9-Zone UI app.\n * @internal\n */\nexport class Backstage extends React.PureComponent<BackstageProps> {\n public static readonly defaultProps: BackstageDefaultProps = {\n showOverlay: true,\n };\n\n public override componentDidMount(): void {\n document.addEventListener(\"keydown\", this._onEsc, false);\n }\n\n public override componentWillUnmount() {\n document.removeEventListener(\"keydown\", this._onEsc, false);\n }\n\n public override render() {\n const overlayClassName = classnames(\n \"nz-backstage-backstage_overlay\",\n this.props.isOpen && \"nz-open\",\n this.props.showOverlay && \"nz-overlay\"\n );\n const backstageClassName = classnames(\n \"nz-backstage-backstage\",\n this.props.isOpen && \"nz-open\",\n this.props.safeAreaInsets &&\n SafeAreaInsetsHelpers.getCssClassNames(this.props.safeAreaInsets),\n this.props.className\n );\n return (\n <>\n <div\n className={overlayClassName}\n onClick={this._onClose}\n role=\"presentation\"\n />\n <div className={backstageClassName} style={this.props.style}>\n {this.props.header && (\n <div className=\"nz-header\">{this.props.header}</div>\n )}\n <ul role=\"menu\">{this.props.children}</ul>\n {this.props.footer && (\n <div className=\"nz-footer\">{this.props.footer}</div>\n )}\n </div>\n </>\n );\n }\n\n private _onClose = () => {\n this.props.onClose && this.props.onClose();\n };\n\n private _onEsc = (event: KeyboardEvent): void => {\n if (this.props.isOpen && event.key === Key.Escape.valueOf()) {\n this._onClose();\n }\n };\n}\n"]}
@@ -374,13 +374,12 @@ function isResizeHandleDragItem(item) {
374
374
  }
375
375
  /** @internal */
376
376
  export class DragManager {
377
- constructor() {
378
- this._onDragStartEmitter = new BeEvent();
379
- this._onDragUpdateEmitter = new BeEvent();
380
- this._onDragEmitter = new BeEvent();
381
- this._onDragEndEmitter = new BeEvent();
382
- this._onTargetChangedEmitter = new BeEvent();
383
- }
377
+ _dragged;
378
+ _onDragStartEmitter = new BeEvent();
379
+ _onDragUpdateEmitter = new BeEvent();
380
+ _onDragEmitter = new BeEvent();
381
+ _onDragEndEmitter = new BeEvent();
382
+ _onTargetChangedEmitter = new BeEvent();
384
383
  get draggedItem() {
385
384
  return this._dragged;
386
385
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DragManager.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/base/DragManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Base\n */\nimport * as React from \"react\";\nimport isEqual from \"lodash/isEqual.js\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport type { PanelSide } from \"../widget-panels/PanelTypes.js\";\nimport type { FloatingWidgetResizeHandle } from \"../widget/FloatingWidget.js\";\nimport type { WidgetState } from \"../state/WidgetState.js\";\nimport type { TabState } from \"../state/TabState.js\";\nimport { getUniqueId } from \"./NineZone.js\";\nimport type { XAndY } from \"../state/internal/NineZoneStateHelpers.js\";\nimport type {\n DropTargetState,\n PanelDropTargetState,\n TabDragDropTargetState,\n TabDropTargetState,\n WidgetDragDropTargetState,\n} from \"../state/DropTargetState.js\";\nimport {\n isTabDragDropTargetState,\n isWidgetDragDropTargetState,\n} from \"../state/DropTargetState.js\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\n\n/** @internal */\nexport interface DragStartArgs {\n initialPointerPosition: Point;\n pointerPosition: Point;\n}\n\n/** @internal */\nexport interface TabDragStartArgs extends DragStartArgs {\n widgetSize: SizeProps;\n}\n\n/** @internal */\nexport interface UseDragTabArgs {\n tabId: TabState[\"id\"];\n onDrag?: (dragBy: XAndY) => void;\n onDragEnd?: (target: TabDragDropTargetState) => void;\n}\n\n/** @internal */\nexport function useDragTab(args: UseDragTabArgs) {\n const { tabId, onDrag, onDragEnd } = args;\n const item = React.useMemo<TabDragItem>(() => {\n return {\n type: \"tab\",\n id: tabId,\n };\n }, [tabId]);\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n const dragBy = info.lastPointerPosition.getOffsetTo(info.pointerPosition);\n onDrag && onDrag(dragBy);\n },\n [onDrag]\n );\n const handleDragEnd = React.useCallback<DragEventHandler>(\n (_item, info, target) => {\n if (!onDragEnd) return;\n\n let tabTarget: TabDragDropTargetState;\n if (target && isTabDragDropTargetState(target)) {\n tabTarget = target;\n } else {\n const tabInfo = info as TabDragInfo;\n const newFloatingWidgetId = getUniqueId();\n const size = tabInfo.widgetSize;\n tabTarget = {\n type: \"floatingWidget\",\n newFloatingWidgetId,\n size,\n };\n }\n onDragEnd(tabTarget);\n },\n [onDragEnd]\n );\n const onDragStart = useDragItem({\n item,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n });\n const handleDragStart = React.useCallback(\n ({\n initialPointerPosition,\n pointerPosition,\n widgetSize,\n }: TabDragStartArgs) => {\n onDragStart({\n initialPointerPosition,\n pointerPosition,\n lastPointerPosition: initialPointerPosition,\n widgetSize,\n });\n },\n [onDragStart]\n );\n return handleDragStart;\n}\n\ntype UpdateWidgetDragItemFn = (id: WidgetDragItem[\"id\"]) => void;\n\n/** @internal */\nexport interface UseDragWidgetArgs {\n widgetId: WidgetState[\"id\"];\n onDragStart?: (\n updateWidget: UpdateWidgetDragItemFn,\n initialPointerPosition: Point,\n pointerPosition: Point\n ) => void;\n onDrag?: (dragBy: Point) => void;\n onDragEnd?: (target: WidgetDragDropTargetState) => void;\n}\n\n/** @internal */\nexport function useDragWidget(args: UseDragWidgetArgs) {\n const { widgetId, onDragStart, onDrag, onDragEnd } = args;\n const dragManager = React.useContext(DragManagerContext);\n const widgetItem = React.useMemo<WidgetDragItem>(() => {\n return {\n type: \"widget\",\n id: widgetId,\n };\n }, [widgetId]);\n const handleDragStart = React.useCallback<DragEventHandler>(\n (_item, info) => {\n onDragStart &&\n onDragStart(\n (id) => {\n dragManager.handleDragUpdate({\n type: \"widget\",\n id,\n });\n },\n info.initialPointerPosition,\n info.pointerPosition\n );\n },\n [dragManager, onDragStart]\n );\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n const dragBy = info.lastPointerPosition.getOffsetTo(info.pointerPosition);\n onDrag && onDrag(dragBy);\n },\n [onDrag]\n );\n const handleDragEnd = React.useCallback<DragEventHandler>(\n (_item, _info, target) => {\n if (!onDragEnd) return;\n\n let widgetTarget: WidgetDragDropTargetState;\n if (target && isWidgetDragDropTargetState(target)) {\n widgetTarget = target;\n } else {\n widgetTarget = {\n type: \"window\",\n };\n }\n onDragEnd(widgetTarget);\n },\n [onDragEnd]\n );\n const isDragItem = React.useCallback<\n NonNullable<UseDragItemArgs<WidgetDragItem>[\"isDragItem\"]>\n >((item, dragged) => {\n return !!item && defaultIsDragItem(item, dragged);\n }, []);\n const onItemDragStart = useDragItem({\n item: widgetItem,\n isDragItem,\n onDragStart: handleDragStart,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n });\n const handleWidgetDragStart = React.useCallback(\n ({ initialPointerPosition, pointerPosition }: DragStartArgs) => {\n onItemDragStart({\n initialPointerPosition,\n pointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onItemDragStart]\n );\n return handleWidgetDragStart;\n}\n\n/** @internal */\nexport interface UseDragPanelGripArgs {\n side: PanelSide;\n onDrag?: (pointerPosition: Point, lastPointerPosition: Point) => void;\n onDragEnd?: () => void;\n}\n\n/** @internal */\nexport function useDragPanelGrip(args: UseDragPanelGripArgs) {\n const { side, onDrag, onDragEnd } = args;\n const gripItem = React.useMemo<PanelGripDragItem>(() => {\n return {\n type: \"panelGrip\",\n id: side,\n };\n }, [side]);\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n onDrag && onDrag(info.pointerPosition, info.lastPointerPosition);\n },\n [onDrag]\n );\n const handleDragEnd = React.useCallback<DragEventHandler>(() => {\n onDragEnd && onDragEnd();\n }, [onDragEnd]);\n const onItemDragStart = useDragItem({\n item: gripItem,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n });\n const handleDragStart = React.useCallback(\n ({ initialPointerPosition }: DragStartArgs) => {\n onItemDragStart({\n initialPointerPosition,\n pointerPosition: initialPointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onItemDragStart]\n );\n return handleDragStart;\n}\n\n/** @internal */\nexport interface UseDragResizeHandleArgs {\n widgetId: WidgetState[\"id\"];\n handle: FloatingWidgetResizeHandle;\n onDrag?: (pointerPosition: Point) => void;\n}\n\n/** @internal */\nexport function useDragResizeHandle(args: UseDragResizeHandleArgs) {\n const { handle, onDrag, widgetId } = args;\n const resizeHandleItem = React.useMemo<ResizeHandleDragItem>(() => {\n return {\n type: \"resizeHandle\",\n id: handle,\n widgetId,\n };\n }, [handle, widgetId]);\n const isDragItem = React.useCallback<\n NonNullable<UseDragItemArgs<ResizeHandleDragItem>[\"isDragItem\"]>\n >((item, draggedItem) => {\n return (\n !!item &&\n isResizeHandleDragItem(draggedItem) &&\n defaultIsDragItem(item, draggedItem) &&\n item.widgetId === draggedItem.widgetId\n );\n }, []);\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n onDrag && onDrag(info.pointerPosition);\n },\n [onDrag]\n );\n const onItemDragStart = useDragItem<ResizeHandleDragItem>({\n item: resizeHandleItem,\n isDragItem,\n onDrag: handleDrag,\n });\n const handleDragStart = React.useCallback(\n ({ initialPointerPosition }: DragStartArgs) => {\n onItemDragStart({\n initialPointerPosition,\n pointerPosition: initialPointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onItemDragStart]\n );\n return handleDragStart;\n}\n\n/** @internal */\nexport interface UseDragToolSettingsArgs {\n newFloatingWidgetId: WidgetDragItem[\"id\"];\n}\n\n/** @internal */\nexport function useDragToolSettings(args: UseDragToolSettingsArgs) {\n const { newFloatingWidgetId } = args;\n const item = React.useMemo<WidgetDragItem>(() => {\n return {\n type: \"widget\",\n id: newFloatingWidgetId,\n };\n }, [newFloatingWidgetId]);\n const onDragStart = useDragItem({\n item,\n });\n const handleDragStart = React.useCallback(\n ({ initialPointerPosition }: DragStartArgs) => {\n onDragStart({\n initialPointerPosition,\n pointerPosition: initialPointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onDragStart]\n );\n return handleDragStart;\n}\n\n/** @internal */\nexport function useTarget<T extends Element>(\n target: DropTargetState\n): [\n React.Ref<T>,\n boolean // targeted\n] {\n const dragManager = React.useContext(DragManagerContext);\n const [targeted, setTargeted] = React.useState(false);\n const targetedRef = React.useRef(false);\n const onTargeted = React.useCallback(\n (doTarget: boolean) => {\n const isTargeted = dragManager.isTargeted(target);\n if (doTarget && !isTargeted) {\n dragManager.handleTargetChanged(target);\n } else if (!doTarget && isTargeted) {\n dragManager.handleTargetChanged(undefined);\n }\n setTargeted(doTarget);\n },\n [dragManager, target]\n );\n const ref = React.useRef<T>(null);\n React.useEffect(() => {\n return dragManager.onDrag.addListener((_item, info) => {\n const targetedElement = document.elementFromPoint(\n info.pointerPosition.x,\n info.pointerPosition.y\n );\n const newTargeted = targetedElement === ref.current;\n newTargeted !== targetedRef.current && onTargeted(newTargeted);\n targetedRef.current = newTargeted;\n });\n }, [onTargeted, dragManager]);\n React.useEffect(() => {\n return dragManager.onDragEnd.addListener(() => {\n targetedRef.current && onTargeted(false);\n targetedRef.current = false;\n });\n }, [onTargeted, dragManager]);\n return [ref, targeted];\n}\n\n/** @internal */\nexport interface UseTabTargetArgs {\n widgetId: WidgetState[\"id\"];\n tabIndex: number;\n}\n\n/** @internal */\nexport function useTabTarget<T extends Element>(\n args: UseTabTargetArgs\n): [\n React.Ref<T>,\n boolean // targeted\n] {\n const { tabIndex, widgetId } = args;\n const target = React.useMemo<TabDropTargetState>(\n () => ({\n type: \"tab\",\n tabIndex,\n widgetId,\n }),\n [tabIndex, widgetId]\n );\n return useTarget(target);\n}\n\n/** @internal */\nexport interface UsePanelTargetArgs {\n side: PanelSide;\n newWidgetId: WidgetState[\"id\"];\n}\n\n/** @internal */\nexport function usePanelTarget<T extends Element>(\n args: UsePanelTargetArgs\n): [\n React.Ref<T>,\n boolean // targeted\n] {\n const { side, newWidgetId } = args;\n const target = React.useMemo<PanelDropTargetState>(\n () => ({\n type: \"panel\",\n side,\n newWidgetId,\n }),\n [side, newWidgetId]\n );\n return useTarget(target);\n}\n\n/** @internal */\nexport interface UseDragItemArgs<T extends DragItem> {\n item: T;\n isDragItem?: (item: T | undefined, dragged: DragItem) => boolean;\n onDragStart?: DragEventHandler;\n onDrag?: DragEventHandler;\n onDragEnd?: DragEventHandler;\n}\n\nfunction defaultIsDragItem(item: DragItem, dragged: DragItem) {\n return dragged.type === item.type && dragged.id === item.id;\n}\n\n/** @internal */\nexport function useDragItem<T extends DragItem>(args: UseDragItemArgs<T>) {\n const dragManager = React.useContext(DragManagerContext);\n const { item, isDragItem, onDragStart, onDrag, onDragEnd } = args;\n const handleDragStart = React.useCallback(\n (info: DragInfo) => {\n item &&\n dragManager.handleDragStart({\n item,\n info,\n });\n },\n [dragManager, item]\n );\n React.useEffect(() => {\n return dragManager.onDragStart.addListener((draggedItem, info, target) => {\n const handleEvent = isDragItem\n ? isDragItem(item, draggedItem)\n : defaultIsDragItem(item, draggedItem);\n if (!handleEvent) return;\n onDragStart && onDragStart(draggedItem, info, target);\n });\n }, [dragManager, onDragStart, item, isDragItem]);\n React.useEffect(() => {\n return dragManager.onDrag.addListener((draggedItem, info, target) => {\n const handleEvent = isDragItem\n ? isDragItem(item, draggedItem)\n : defaultIsDragItem(item, draggedItem);\n if (!handleEvent) return;\n onDrag && onDrag(draggedItem, info, target);\n });\n }, [dragManager, onDrag, item, isDragItem]);\n React.useEffect(() => {\n return dragManager.onDragEnd.addListener((draggedItem, info, target) => {\n const handleEvent = isDragItem\n ? isDragItem(item, draggedItem)\n : defaultIsDragItem(item, draggedItem);\n if (!handleEvent) return;\n onDragEnd && onDragEnd(draggedItem, info, target);\n });\n }, [dragManager, onDragEnd, item, isDragItem]);\n return handleDragStart;\n}\n\n/** @internal */\nexport function useDraggedItem() {\n const dragManager = React.useContext(DragManagerContext);\n const subscribe = React.useCallback(\n (onStoreChange: () => void) => {\n const listeners = [\n dragManager.onDragStart.addListener(onStoreChange),\n dragManager.onDragUpdate.addListener(onStoreChange),\n dragManager.onDragEnd.addListener(onStoreChange),\n ];\n return () => listeners.forEach((l) => l());\n },\n [dragManager]\n );\n const getSnapshot = React.useCallback(() => {\n return dragManager.draggedItem?.item;\n }, [dragManager]);\n return React.useSyncExternalStore(subscribe, getSnapshot);\n}\n\n/** @internal */\nexport function useIsDraggedItem(item: DragItem) {\n const draggedItem = useDraggedItem();\n return (\n !!draggedItem &&\n draggedItem.id === item.id &&\n draggedItem.type === item.type\n );\n}\n\n/** @internal */\nexport function useIsDraggedType(type: DragItem[\"type\"]) {\n const draggedItem = useDraggedItem();\n return !!draggedItem && draggedItem.type === type;\n}\n\n/** @internal */\nexport function useDraggedItemId<T extends DragItem>(\n type: T[\"type\"]\n): T[\"id\"] | undefined {\n const draggedItem = useDraggedItem();\n\n if (draggedItem && draggedItem.type === type) {\n return draggedItem.id;\n }\n return undefined;\n}\n\n/** @internal */\nexport interface DragProviderProps {\n children?: React.ReactNode;\n}\n\n/** @internal */\nexport function DragProvider(props: DragProviderProps) {\n const dragManager = React.useRef(new DragManager());\n React.useEffect(() => {\n const mouseMove = (e: MouseEvent) => {\n dragManager.current.handleDrag(e.clientX, e.clientY);\n };\n document.addEventListener(\"mousemove\", mouseMove);\n return () => {\n document.removeEventListener(\"mousemove\", mouseMove);\n };\n }, []);\n React.useEffect(() => {\n const mouseUp = () => {\n dragManager.current.handleDragEnd();\n };\n document.addEventListener(\"mouseup\", mouseUp);\n return () => {\n document.removeEventListener(\"mouseup\", mouseUp);\n };\n }, []);\n return (\n <DragManagerContext.Provider value={dragManager.current}>\n <DraggedWidgetIdProvider>\n <DraggedPanelSideProvider>\n <DraggedResizeHandleProvider>\n {props.children}\n </DraggedResizeHandleProvider>\n </DraggedPanelSideProvider>\n </DraggedWidgetIdProvider>\n </DragManagerContext.Provider>\n );\n}\n\nfunction DraggedWidgetIdProvider(props: { children?: React.ReactNode }) {\n const draggedWidgetId = useDraggedItemId<WidgetDragItem>(\"widget\");\n return (\n <DraggedWidgetIdContext.Provider value={draggedWidgetId}>\n {props.children}\n </DraggedWidgetIdContext.Provider>\n );\n}\n\nfunction DraggedPanelSideProvider(props: { children?: React.ReactNode }) {\n const draggedSide = useDraggedItemId<PanelGripDragItem>(\"panelGrip\");\n return (\n <DraggedPanelSideContext.Provider value={draggedSide}>\n {props.children}\n </DraggedPanelSideContext.Provider>\n );\n}\n\nfunction DraggedResizeHandleProvider(props: { children?: React.ReactNode }) {\n const draggedHandle = useDraggedItemId<ResizeHandleDragItem>(\"resizeHandle\");\n return (\n <DraggedResizeHandleContext.Provider value={draggedHandle}>\n {props.children}\n </DraggedResizeHandleContext.Provider>\n );\n}\n\ninterface TabDragItem {\n type: \"tab\";\n id: TabState[\"id\"];\n}\n\ninterface WidgetDragItem {\n type: \"widget\";\n id: WidgetState[\"id\"];\n}\n\ninterface PanelGripDragItem {\n type: \"panelGrip\";\n id: PanelSide;\n}\n\ninterface ResizeHandleDragItem {\n type: \"resizeHandle\";\n id: FloatingWidgetResizeHandle;\n widgetId: WidgetState[\"id\"];\n}\n\n/** @internal */\nexport type DragItem =\n | TabDragItem\n | WidgetDragItem\n | PanelGripDragItem\n | ResizeHandleDragItem;\n\nfunction isResizeHandleDragItem(item: DragItem): item is ResizeHandleDragItem {\n return item.type === \"resizeHandle\";\n}\n\ninterface BaseDragInfo {\n initialPointerPosition: Point;\n lastPointerPosition: Point;\n pointerPosition: Point;\n}\n\ninterface TabDragInfo extends BaseDragInfo {\n widgetSize: SizeProps;\n}\n\ntype DragInfo = BaseDragInfo | TabDragInfo;\n\ninterface HandleDragStartArgs {\n item: DragItem;\n info: DragInfo;\n}\n\ninterface Dragged {\n item: DragItem;\n info: DragInfo;\n target: DropTargetState | undefined;\n}\n\ntype DragEventHandler = (\n item: DragItem,\n info: DragInfo,\n target: DropTargetState | undefined\n) => void;\ntype DropTargetChangedEventHandler = (\n target: DropTargetState | undefined\n) => void;\n\n/** @internal */\nexport class DragManager {\n private _dragged: Dragged | undefined;\n private _onDragStartEmitter = new BeEvent<DragEventHandler>();\n private _onDragUpdateEmitter = new BeEvent<DragEventHandler>();\n private _onDragEmitter = new BeEvent<DragEventHandler>();\n private _onDragEndEmitter = new BeEvent<DragEventHandler>();\n private _onTargetChangedEmitter =\n new BeEvent<DropTargetChangedEventHandler>();\n\n public get draggedItem() {\n return this._dragged;\n }\n\n public isTargeted(target: DropTargetState) {\n if (!this._dragged) return false;\n\n if (!this._dragged.target) return false;\n\n return isEqual(this._dragged.target, target);\n }\n\n public get onDragStart() {\n return this._onDragStartEmitter;\n }\n\n public get onDragUpdate() {\n return this._onDragUpdateEmitter;\n }\n\n public get onDrag() {\n return this._onDragEmitter;\n }\n\n public get onDragEnd() {\n return this._onDragEndEmitter;\n }\n\n public get onTargetChanged() {\n return this._onTargetChangedEmitter;\n }\n\n public handleDragStart({ item, info }: HandleDragStartArgs) {\n this._dragged = {\n item,\n info,\n target: undefined,\n };\n this._onDragStartEmitter.raiseEvent(\n this._dragged.item,\n this._dragged.info,\n this._dragged.target\n );\n }\n\n public handleDragUpdate(item: DragItem) {\n if (!this._dragged) return;\n\n this._dragged.item = item;\n this._onDragUpdateEmitter.raiseEvent(\n this._dragged.item,\n this._dragged.info,\n this._dragged.target\n );\n }\n\n public handleDrag(x: number, y: number) {\n if (!this._dragged) return;\n\n this._dragged.info.lastPointerPosition = this._dragged.info.pointerPosition;\n this._dragged.info.pointerPosition = new Point(x, y);\n\n this._onDragEmitter.raiseEvent(\n this._dragged.item,\n this._dragged.info,\n this._dragged.target\n );\n }\n\n public handleDragEnd() {\n if (!this._dragged) return;\n\n const item = this._dragged.item;\n const info = this._dragged.info;\n const target = this._dragged.target;\n this._dragged = undefined;\n this._onDragEndEmitter.raiseEvent(item, info, target);\n target && this._onTargetChangedEmitter.raiseEvent(undefined);\n }\n\n public handleTargetChanged(target: DropTargetState | undefined) {\n if (!this._dragged) return;\n this._dragged.target = target;\n this._onTargetChangedEmitter.raiseEvent(target);\n }\n}\n\n/** @internal */\nexport const DragManagerContext = React.createContext<DragManager>(null!);\nDragManagerContext.displayName = \"nz:DragManagerContext\";\n\n/** @internal */\nexport const DraggedWidgetIdContext = React.createContext<\n WidgetState[\"id\"] | undefined\n>(undefined);\nDraggedWidgetIdContext.displayName = \"nz:DraggedWidgetIdContext\";\n\n/** @internal */\nexport const DraggedPanelSideContext = React.createContext<\n PanelSide | undefined\n>(undefined);\nDraggedPanelSideContext.displayName = \"nz:DraggedPanelSideContext\";\n\n/** @internal */\nexport const DraggedResizeHandleContext = React.createContext<\n FloatingWidgetResizeHandle | undefined\n>(undefined);\nDraggedResizeHandleContext.displayName = \"nz:DraggedResizeHandleContext\";\n\n/** @internal */\nexport function useTargeted() {\n const dragManager = React.useContext(DragManagerContext);\n const [targeted, setTargeted] = React.useState<DropTargetState>();\n React.useEffect(() => {\n return dragManager.onTargetChanged.addListener((t) => {\n setTargeted(t);\n });\n }, [dragManager]);\n return targeted;\n}\n"]}
1
+ {"version":3,"file":"DragManager.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/base/DragManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Base\n */\nimport * as React from \"react\";\nimport isEqual from \"lodash/isEqual.js\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport type { PanelSide } from \"../widget-panels/PanelTypes.js\";\nimport type { FloatingWidgetResizeHandle } from \"../widget/FloatingWidget.js\";\nimport type { WidgetState } from \"../state/WidgetState.js\";\nimport type { TabState } from \"../state/TabState.js\";\nimport { getUniqueId } from \"./NineZone.js\";\nimport type { XAndY } from \"../state/internal/NineZoneStateHelpers.js\";\nimport type {\n DropTargetState,\n PanelDropTargetState,\n TabDragDropTargetState,\n TabDropTargetState,\n WidgetDragDropTargetState,\n} from \"../state/DropTargetState.js\";\nimport {\n isTabDragDropTargetState,\n isWidgetDragDropTargetState,\n} from \"../state/DropTargetState.js\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\n\n/** @internal */\nexport interface DragStartArgs {\n initialPointerPosition: Point;\n pointerPosition: Point;\n}\n\n/** @internal */\nexport interface TabDragStartArgs extends DragStartArgs {\n widgetSize: SizeProps;\n}\n\n/** @internal */\nexport interface UseDragTabArgs {\n tabId: TabState[\"id\"];\n onDrag?: (dragBy: XAndY) => void;\n onDragEnd?: (target: TabDragDropTargetState) => void;\n}\n\n/** @internal */\nexport function useDragTab(args: UseDragTabArgs) {\n const { tabId, onDrag, onDragEnd } = args;\n const item = React.useMemo<TabDragItem>(() => {\n return {\n type: \"tab\",\n id: tabId,\n };\n }, [tabId]);\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n const dragBy = info.lastPointerPosition.getOffsetTo(info.pointerPosition);\n onDrag && onDrag(dragBy);\n },\n [onDrag]\n );\n const handleDragEnd = React.useCallback<DragEventHandler>(\n (_item, info, target) => {\n if (!onDragEnd) return;\n\n let tabTarget: TabDragDropTargetState;\n if (target && isTabDragDropTargetState(target)) {\n tabTarget = target;\n } else {\n const tabInfo = info as TabDragInfo;\n const newFloatingWidgetId = getUniqueId();\n const size = tabInfo.widgetSize;\n tabTarget = {\n type: \"floatingWidget\",\n newFloatingWidgetId,\n size,\n };\n }\n onDragEnd(tabTarget);\n },\n [onDragEnd]\n );\n const onDragStart = useDragItem({\n item,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n });\n const handleDragStart = React.useCallback(\n ({\n initialPointerPosition,\n pointerPosition,\n widgetSize,\n }: TabDragStartArgs) => {\n onDragStart({\n initialPointerPosition,\n pointerPosition,\n lastPointerPosition: initialPointerPosition,\n widgetSize,\n });\n },\n [onDragStart]\n );\n return handleDragStart;\n}\n\ntype UpdateWidgetDragItemFn = (id: WidgetDragItem[\"id\"]) => void;\n\n/** @internal */\nexport interface UseDragWidgetArgs {\n widgetId: WidgetState[\"id\"];\n onDragStart?: (\n updateWidget: UpdateWidgetDragItemFn,\n initialPointerPosition: Point,\n pointerPosition: Point\n ) => void;\n onDrag?: (dragBy: Point) => void;\n onDragEnd?: (target: WidgetDragDropTargetState) => void;\n}\n\n/** @internal */\nexport function useDragWidget(args: UseDragWidgetArgs) {\n const { widgetId, onDragStart, onDrag, onDragEnd } = args;\n const dragManager = React.useContext(DragManagerContext);\n const widgetItem = React.useMemo<WidgetDragItem>(() => {\n return {\n type: \"widget\",\n id: widgetId,\n };\n }, [widgetId]);\n const handleDragStart = React.useCallback<DragEventHandler>(\n (_item, info) => {\n onDragStart &&\n onDragStart(\n (id) => {\n dragManager.handleDragUpdate({\n type: \"widget\",\n id,\n });\n },\n info.initialPointerPosition,\n info.pointerPosition\n );\n },\n [dragManager, onDragStart]\n );\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n const dragBy = info.lastPointerPosition.getOffsetTo(info.pointerPosition);\n onDrag && onDrag(dragBy);\n },\n [onDrag]\n );\n const handleDragEnd = React.useCallback<DragEventHandler>(\n (_item, _info, target) => {\n if (!onDragEnd) return;\n\n let widgetTarget: WidgetDragDropTargetState;\n if (target && isWidgetDragDropTargetState(target)) {\n widgetTarget = target;\n } else {\n widgetTarget = {\n type: \"window\",\n };\n }\n onDragEnd(widgetTarget);\n },\n [onDragEnd]\n );\n const isDragItem = React.useCallback<\n NonNullable<UseDragItemArgs<WidgetDragItem>[\"isDragItem\"]>\n >((item, dragged) => {\n return !!item && defaultIsDragItem(item, dragged);\n }, []);\n const onItemDragStart = useDragItem({\n item: widgetItem,\n isDragItem,\n onDragStart: handleDragStart,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n });\n const handleWidgetDragStart = React.useCallback(\n ({ initialPointerPosition, pointerPosition }: DragStartArgs) => {\n onItemDragStart({\n initialPointerPosition,\n pointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onItemDragStart]\n );\n return handleWidgetDragStart;\n}\n\n/** @internal */\nexport interface UseDragPanelGripArgs {\n side: PanelSide;\n onDrag?: (pointerPosition: Point, lastPointerPosition: Point) => void;\n onDragEnd?: () => void;\n}\n\n/** @internal */\nexport function useDragPanelGrip(args: UseDragPanelGripArgs) {\n const { side, onDrag, onDragEnd } = args;\n const gripItem = React.useMemo<PanelGripDragItem>(() => {\n return {\n type: \"panelGrip\",\n id: side,\n };\n }, [side]);\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n onDrag && onDrag(info.pointerPosition, info.lastPointerPosition);\n },\n [onDrag]\n );\n const handleDragEnd = React.useCallback<DragEventHandler>(() => {\n onDragEnd && onDragEnd();\n }, [onDragEnd]);\n const onItemDragStart = useDragItem({\n item: gripItem,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n });\n const handleDragStart = React.useCallback(\n ({ initialPointerPosition }: DragStartArgs) => {\n onItemDragStart({\n initialPointerPosition,\n pointerPosition: initialPointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onItemDragStart]\n );\n return handleDragStart;\n}\n\n/** @internal */\nexport interface UseDragResizeHandleArgs {\n widgetId: WidgetState[\"id\"];\n handle: FloatingWidgetResizeHandle;\n onDrag?: (pointerPosition: Point) => void;\n}\n\n/** @internal */\nexport function useDragResizeHandle(args: UseDragResizeHandleArgs) {\n const { handle, onDrag, widgetId } = args;\n const resizeHandleItem = React.useMemo<ResizeHandleDragItem>(() => {\n return {\n type: \"resizeHandle\",\n id: handle,\n widgetId,\n };\n }, [handle, widgetId]);\n const isDragItem = React.useCallback<\n NonNullable<UseDragItemArgs<ResizeHandleDragItem>[\"isDragItem\"]>\n >((item, draggedItem) => {\n return (\n !!item &&\n isResizeHandleDragItem(draggedItem) &&\n defaultIsDragItem(item, draggedItem) &&\n item.widgetId === draggedItem.widgetId\n );\n }, []);\n const handleDrag = React.useCallback<DragEventHandler>(\n (_item, info) => {\n onDrag && onDrag(info.pointerPosition);\n },\n [onDrag]\n );\n const onItemDragStart = useDragItem<ResizeHandleDragItem>({\n item: resizeHandleItem,\n isDragItem,\n onDrag: handleDrag,\n });\n const handleDragStart = React.useCallback(\n ({ initialPointerPosition }: DragStartArgs) => {\n onItemDragStart({\n initialPointerPosition,\n pointerPosition: initialPointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onItemDragStart]\n );\n return handleDragStart;\n}\n\n/** @internal */\nexport interface UseDragToolSettingsArgs {\n newFloatingWidgetId: WidgetDragItem[\"id\"];\n}\n\n/** @internal */\nexport function useDragToolSettings(args: UseDragToolSettingsArgs) {\n const { newFloatingWidgetId } = args;\n const item = React.useMemo<WidgetDragItem>(() => {\n return {\n type: \"widget\",\n id: newFloatingWidgetId,\n };\n }, [newFloatingWidgetId]);\n const onDragStart = useDragItem({\n item,\n });\n const handleDragStart = React.useCallback(\n ({ initialPointerPosition }: DragStartArgs) => {\n onDragStart({\n initialPointerPosition,\n pointerPosition: initialPointerPosition,\n lastPointerPosition: initialPointerPosition,\n });\n },\n [onDragStart]\n );\n return handleDragStart;\n}\n\n/** @internal */\nexport function useTarget<T extends Element>(\n target: DropTargetState\n): [\n React.Ref<T>,\n boolean // targeted\n] {\n const dragManager = React.useContext(DragManagerContext);\n const [targeted, setTargeted] = React.useState(false);\n const targetedRef = React.useRef(false);\n const onTargeted = React.useCallback(\n (doTarget: boolean) => {\n const isTargeted = dragManager.isTargeted(target);\n if (doTarget && !isTargeted) {\n dragManager.handleTargetChanged(target);\n } else if (!doTarget && isTargeted) {\n dragManager.handleTargetChanged(undefined);\n }\n setTargeted(doTarget);\n },\n [dragManager, target]\n );\n const ref = React.useRef<T>(null);\n React.useEffect(() => {\n return dragManager.onDrag.addListener((_item, info) => {\n const targetedElement = document.elementFromPoint(\n info.pointerPosition.x,\n info.pointerPosition.y\n );\n const newTargeted = targetedElement === ref.current;\n newTargeted !== targetedRef.current && onTargeted(newTargeted);\n targetedRef.current = newTargeted;\n });\n }, [onTargeted, dragManager]);\n React.useEffect(() => {\n return dragManager.onDragEnd.addListener(() => {\n targetedRef.current && onTargeted(false);\n targetedRef.current = false;\n });\n }, [onTargeted, dragManager]);\n return [ref, targeted];\n}\n\n/** @internal */\nexport interface UseTabTargetArgs {\n widgetId: WidgetState[\"id\"];\n tabIndex: number;\n}\n\n/** @internal */\nexport function useTabTarget<T extends Element>(\n args: UseTabTargetArgs\n): [\n React.Ref<T>,\n boolean // targeted\n] {\n const { tabIndex, widgetId } = args;\n const target = React.useMemo<TabDropTargetState>(\n () => ({\n type: \"tab\",\n tabIndex,\n widgetId,\n }),\n [tabIndex, widgetId]\n );\n return useTarget(target);\n}\n\n/** @internal */\nexport interface UsePanelTargetArgs {\n side: PanelSide;\n newWidgetId: WidgetState[\"id\"];\n}\n\n/** @internal */\nexport function usePanelTarget<T extends Element>(\n args: UsePanelTargetArgs\n): [\n React.Ref<T>,\n boolean // targeted\n] {\n const { side, newWidgetId } = args;\n const target = React.useMemo<PanelDropTargetState>(\n () => ({\n type: \"panel\",\n side,\n newWidgetId,\n }),\n [side, newWidgetId]\n );\n return useTarget(target);\n}\n\n/** @internal */\nexport interface UseDragItemArgs<T extends DragItem> {\n item: T;\n isDragItem?: (item: T | undefined, dragged: DragItem) => boolean;\n onDragStart?: DragEventHandler;\n onDrag?: DragEventHandler;\n onDragEnd?: DragEventHandler;\n}\n\nfunction defaultIsDragItem(item: DragItem, dragged: DragItem) {\n return dragged.type === item.type && dragged.id === item.id;\n}\n\n/** @internal */\nexport function useDragItem<T extends DragItem>(args: UseDragItemArgs<T>) {\n const dragManager = React.useContext(DragManagerContext);\n const { item, isDragItem, onDragStart, onDrag, onDragEnd } = args;\n const handleDragStart = React.useCallback(\n (info: DragInfo) => {\n item &&\n dragManager.handleDragStart({\n item,\n info,\n });\n },\n [dragManager, item]\n );\n React.useEffect(() => {\n return dragManager.onDragStart.addListener((draggedItem, info, target) => {\n const handleEvent = isDragItem\n ? isDragItem(item, draggedItem)\n : defaultIsDragItem(item, draggedItem);\n if (!handleEvent) return;\n onDragStart && onDragStart(draggedItem, info, target);\n });\n }, [dragManager, onDragStart, item, isDragItem]);\n React.useEffect(() => {\n return dragManager.onDrag.addListener((draggedItem, info, target) => {\n const handleEvent = isDragItem\n ? isDragItem(item, draggedItem)\n : defaultIsDragItem(item, draggedItem);\n if (!handleEvent) return;\n onDrag && onDrag(draggedItem, info, target);\n });\n }, [dragManager, onDrag, item, isDragItem]);\n React.useEffect(() => {\n return dragManager.onDragEnd.addListener((draggedItem, info, target) => {\n const handleEvent = isDragItem\n ? isDragItem(item, draggedItem)\n : defaultIsDragItem(item, draggedItem);\n if (!handleEvent) return;\n onDragEnd && onDragEnd(draggedItem, info, target);\n });\n }, [dragManager, onDragEnd, item, isDragItem]);\n return handleDragStart;\n}\n\n/** @internal */\nexport function useDraggedItem() {\n const dragManager = React.useContext(DragManagerContext);\n const subscribe = React.useCallback(\n (onStoreChange: () => void) => {\n const listeners = [\n dragManager.onDragStart.addListener(onStoreChange),\n dragManager.onDragUpdate.addListener(onStoreChange),\n dragManager.onDragEnd.addListener(onStoreChange),\n ];\n return () => listeners.forEach((l) => l());\n },\n [dragManager]\n );\n const getSnapshot = React.useCallback(() => {\n return dragManager.draggedItem?.item;\n }, [dragManager]);\n return React.useSyncExternalStore(subscribe, getSnapshot);\n}\n\n/** @internal */\nexport function useIsDraggedItem(item: DragItem) {\n const draggedItem = useDraggedItem();\n return (\n !!draggedItem &&\n draggedItem.id === item.id &&\n draggedItem.type === item.type\n );\n}\n\n/** @internal */\nexport function useIsDraggedType(type: DragItem[\"type\"]) {\n const draggedItem = useDraggedItem();\n return !!draggedItem && draggedItem.type === type;\n}\n\n/** @internal */\nexport function useDraggedItemId<T extends DragItem>(\n type: T[\"type\"]\n): T[\"id\"] | undefined {\n const draggedItem = useDraggedItem();\n\n if (draggedItem && draggedItem.type === type) {\n return draggedItem.id;\n }\n return undefined;\n}\n\n/** @internal */\nexport interface DragProviderProps {\n children?: React.ReactNode;\n}\n\n/** @internal */\nexport function DragProvider(props: DragProviderProps) {\n const dragManager = React.useRef(new DragManager());\n React.useEffect(() => {\n const mouseMove = (e: MouseEvent) => {\n dragManager.current.handleDrag(e.clientX, e.clientY);\n };\n document.addEventListener(\"mousemove\", mouseMove);\n return () => {\n document.removeEventListener(\"mousemove\", mouseMove);\n };\n }, []);\n React.useEffect(() => {\n const mouseUp = () => {\n dragManager.current.handleDragEnd();\n };\n document.addEventListener(\"mouseup\", mouseUp);\n return () => {\n document.removeEventListener(\"mouseup\", mouseUp);\n };\n }, []);\n return (\n <DragManagerContext.Provider value={dragManager.current}>\n <DraggedWidgetIdProvider>\n <DraggedPanelSideProvider>\n <DraggedResizeHandleProvider>\n {props.children}\n </DraggedResizeHandleProvider>\n </DraggedPanelSideProvider>\n </DraggedWidgetIdProvider>\n </DragManagerContext.Provider>\n );\n}\n\nfunction DraggedWidgetIdProvider(props: { children?: React.ReactNode }) {\n const draggedWidgetId = useDraggedItemId<WidgetDragItem>(\"widget\");\n return (\n <DraggedWidgetIdContext.Provider value={draggedWidgetId}>\n {props.children}\n </DraggedWidgetIdContext.Provider>\n );\n}\n\nfunction DraggedPanelSideProvider(props: { children?: React.ReactNode }) {\n const draggedSide = useDraggedItemId<PanelGripDragItem>(\"panelGrip\");\n return (\n <DraggedPanelSideContext.Provider value={draggedSide}>\n {props.children}\n </DraggedPanelSideContext.Provider>\n );\n}\n\nfunction DraggedResizeHandleProvider(props: { children?: React.ReactNode }) {\n const draggedHandle = useDraggedItemId<ResizeHandleDragItem>(\"resizeHandle\");\n return (\n <DraggedResizeHandleContext.Provider value={draggedHandle}>\n {props.children}\n </DraggedResizeHandleContext.Provider>\n );\n}\n\ninterface TabDragItem {\n type: \"tab\";\n id: TabState[\"id\"];\n}\n\ninterface WidgetDragItem {\n type: \"widget\";\n id: WidgetState[\"id\"];\n}\n\ninterface PanelGripDragItem {\n type: \"panelGrip\";\n id: PanelSide;\n}\n\ninterface ResizeHandleDragItem {\n type: \"resizeHandle\";\n id: FloatingWidgetResizeHandle;\n widgetId: WidgetState[\"id\"];\n}\n\n/** @internal */\nexport type DragItem =\n | TabDragItem\n | WidgetDragItem\n | PanelGripDragItem\n | ResizeHandleDragItem;\n\nfunction isResizeHandleDragItem(item: DragItem): item is ResizeHandleDragItem {\n return item.type === \"resizeHandle\";\n}\n\ninterface BaseDragInfo {\n initialPointerPosition: Point;\n lastPointerPosition: Point;\n pointerPosition: Point;\n}\n\ninterface TabDragInfo extends BaseDragInfo {\n widgetSize: SizeProps;\n}\n\ntype DragInfo = BaseDragInfo | TabDragInfo;\n\ninterface HandleDragStartArgs {\n item: DragItem;\n info: DragInfo;\n}\n\ninterface Dragged {\n item: DragItem;\n info: DragInfo;\n target: DropTargetState | undefined;\n}\n\ntype DragEventHandler = (\n item: DragItem,\n info: DragInfo,\n target: DropTargetState | undefined\n) => void;\ntype DropTargetChangedEventHandler = (\n target: DropTargetState | undefined\n) => void;\n\n/** @internal */\nexport class DragManager {\n private _dragged: Dragged | undefined;\n private _onDragStartEmitter = new BeEvent<DragEventHandler>();\n private _onDragUpdateEmitter = new BeEvent<DragEventHandler>();\n private _onDragEmitter = new BeEvent<DragEventHandler>();\n private _onDragEndEmitter = new BeEvent<DragEventHandler>();\n private _onTargetChangedEmitter =\n new BeEvent<DropTargetChangedEventHandler>();\n\n public get draggedItem() {\n return this._dragged;\n }\n\n public isTargeted(target: DropTargetState) {\n if (!this._dragged) return false;\n\n if (!this._dragged.target) return false;\n\n return isEqual(this._dragged.target, target);\n }\n\n public get onDragStart() {\n return this._onDragStartEmitter;\n }\n\n public get onDragUpdate() {\n return this._onDragUpdateEmitter;\n }\n\n public get onDrag() {\n return this._onDragEmitter;\n }\n\n public get onDragEnd() {\n return this._onDragEndEmitter;\n }\n\n public get onTargetChanged() {\n return this._onTargetChangedEmitter;\n }\n\n public handleDragStart({ item, info }: HandleDragStartArgs) {\n this._dragged = {\n item,\n info,\n target: undefined,\n };\n this._onDragStartEmitter.raiseEvent(\n this._dragged.item,\n this._dragged.info,\n this._dragged.target\n );\n }\n\n public handleDragUpdate(item: DragItem) {\n if (!this._dragged) return;\n\n this._dragged.item = item;\n this._onDragUpdateEmitter.raiseEvent(\n this._dragged.item,\n this._dragged.info,\n this._dragged.target\n );\n }\n\n public handleDrag(x: number, y: number) {\n if (!this._dragged) return;\n\n this._dragged.info.lastPointerPosition = this._dragged.info.pointerPosition;\n this._dragged.info.pointerPosition = new Point(x, y);\n\n this._onDragEmitter.raiseEvent(\n this._dragged.item,\n this._dragged.info,\n this._dragged.target\n );\n }\n\n public handleDragEnd() {\n if (!this._dragged) return;\n\n const item = this._dragged.item;\n const info = this._dragged.info;\n const target = this._dragged.target;\n this._dragged = undefined;\n this._onDragEndEmitter.raiseEvent(item, info, target);\n target && this._onTargetChangedEmitter.raiseEvent(undefined);\n }\n\n public handleTargetChanged(target: DropTargetState | undefined) {\n if (!this._dragged) return;\n this._dragged.target = target;\n this._onTargetChangedEmitter.raiseEvent(target);\n }\n}\n\n/** @internal */\nexport const DragManagerContext = React.createContext<DragManager>(null!);\nDragManagerContext.displayName = \"nz:DragManagerContext\";\n\n/** @internal */\nexport const DraggedWidgetIdContext = React.createContext<\n WidgetState[\"id\"] | undefined\n>(undefined);\nDraggedWidgetIdContext.displayName = \"nz:DraggedWidgetIdContext\";\n\n/** @internal */\nexport const DraggedPanelSideContext = React.createContext<\n PanelSide | undefined\n>(undefined);\nDraggedPanelSideContext.displayName = \"nz:DraggedPanelSideContext\";\n\n/** @internal */\nexport const DraggedResizeHandleContext = React.createContext<\n FloatingWidgetResizeHandle | undefined\n>(undefined);\nDraggedResizeHandleContext.displayName = \"nz:DraggedResizeHandleContext\";\n\n/** @internal */\nexport function useTargeted() {\n const dragManager = React.useContext(DragManagerContext);\n const [targeted, setTargeted] = React.useState<DropTargetState>();\n React.useEffect(() => {\n return dragManager.onTargetChanged.addListener((t) => {\n setTargeted(t);\n });\n }, [dragManager]);\n return targeted;\n}\n"]}
@@ -20,13 +20,13 @@ export class SafeAreaInsetsHelpers {
20
20
  static isTop(flags) {
21
21
  return SafeAreaInsets.Top.valueOf() === (flags & SafeAreaInsets.Top);
22
22
  }
23
- }
24
- SafeAreaInsetsHelpers.getCssClassNames = (flags) => {
25
- return {
26
- "nz-safe-area-bottom": SafeAreaInsetsHelpers.isBottom(flags),
27
- "nz-safe-area-left": SafeAreaInsetsHelpers.isLeft(flags),
28
- "nz-safe-area-right": SafeAreaInsetsHelpers.isRight(flags),
29
- "nz-safe-area-top": SafeAreaInsetsHelpers.isTop(flags),
23
+ static getCssClassNames = (flags) => {
24
+ return {
25
+ "nz-safe-area-bottom": SafeAreaInsetsHelpers.isBottom(flags),
26
+ "nz-safe-area-left": SafeAreaInsetsHelpers.isLeft(flags),
27
+ "nz-safe-area-right": SafeAreaInsetsHelpers.isRight(flags),
28
+ "nz-safe-area-top": SafeAreaInsetsHelpers.isTop(flags),
29
+ };
30
30
  };
31
- };
31
+ }
32
32
  //# sourceMappingURL=SafeAreaInsets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SafeAreaInsets.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/base/SafeAreaInsets.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;IACzB,MAAM,CAAC,QAAQ,CAAC,KAAqB;QAC1C,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAqB;QACxC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,KAAqB;QACzC,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAqB;QACvC,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;;AAEa,sCAAgB,GAAG,CAAC,KAAqB,EAAE,EAAE;IACzD,OAAO;QACL,qBAAqB,EAAE,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5D,mBAAmB,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC;QACxD,oBAAoB,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1D,kBAAkB,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC;KACvD,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\nimport { SafeAreaInsets } from \"../../safearea/SafeAreaInsets.js\";\n\n/** @internal */\nexport class SafeAreaInsetsHelpers {\n public static isBottom(flags: SafeAreaInsets) {\n return SafeAreaInsets.Bottom.valueOf() === (flags & SafeAreaInsets.Bottom);\n }\n\n public static isLeft(flags: SafeAreaInsets) {\n return SafeAreaInsets.Left.valueOf() === (flags & SafeAreaInsets.Left);\n }\n\n public static isRight(flags: SafeAreaInsets) {\n return SafeAreaInsets.Right.valueOf() === (flags & SafeAreaInsets.Right);\n }\n\n public static isTop(flags: SafeAreaInsets) {\n return SafeAreaInsets.Top.valueOf() === (flags & SafeAreaInsets.Top);\n }\n\n public static getCssClassNames = (flags: SafeAreaInsets) => {\n return {\n \"nz-safe-area-bottom\": SafeAreaInsetsHelpers.isBottom(flags),\n \"nz-safe-area-left\": SafeAreaInsetsHelpers.isLeft(flags),\n \"nz-safe-area-right\": SafeAreaInsetsHelpers.isRight(flags),\n \"nz-safe-area-top\": SafeAreaInsetsHelpers.isTop(flags),\n };\n };\n}\n"]}
1
+ {"version":3,"file":"SafeAreaInsets.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/base/SafeAreaInsets.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,gBAAgB;AAChB,MAAM,OAAO,qBAAqB;IACzB,MAAM,CAAC,QAAQ,CAAC,KAAqB;QAC1C,OAAO,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAqB;QACxC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,KAAqB;QACzC,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAqB;QACvC,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,CAAC,gBAAgB,GAAG,CAAC,KAAqB,EAAE,EAAE;QACzD,OAAO;YACL,qBAAqB,EAAE,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5D,mBAAmB,EAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC;YACxD,oBAAoB,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;YAC1D,kBAAkB,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC;SACvD,CAAC;IACJ,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\nimport { SafeAreaInsets } from \"../../safearea/SafeAreaInsets.js\";\n\n/** @internal */\nexport class SafeAreaInsetsHelpers {\n public static isBottom(flags: SafeAreaInsets) {\n return SafeAreaInsets.Bottom.valueOf() === (flags & SafeAreaInsets.Bottom);\n }\n\n public static isLeft(flags: SafeAreaInsets) {\n return SafeAreaInsets.Left.valueOf() === (flags & SafeAreaInsets.Left);\n }\n\n public static isRight(flags: SafeAreaInsets) {\n return SafeAreaInsets.Right.valueOf() === (flags & SafeAreaInsets.Right);\n }\n\n public static isTop(flags: SafeAreaInsets) {\n return SafeAreaInsets.Top.valueOf() === (flags & SafeAreaInsets.Top);\n }\n\n public static getCssClassNames = (flags: SafeAreaInsets) => {\n return {\n \"nz-safe-area-bottom\": SafeAreaInsetsHelpers.isBottom(flags),\n \"nz-safe-area-left\": SafeAreaInsetsHelpers.isLeft(flags),\n \"nz-safe-area-right\": SafeAreaInsetsHelpers.isRight(flags),\n \"nz-safe-area-top\": SafeAreaInsetsHelpers.isTop(flags),\n };\n };\n}\n"]}
@@ -13,11 +13,14 @@ import { Point, Rectangle } from "@itwin/core-react/internal";
13
13
  * @internal
14
14
  */
15
15
  export class Tooltip extends React.PureComponent {
16
- constructor() {
17
- super(...arguments);
18
- this._lastSize = { width: 0, height: 0 };
19
- this._tooltip = React.createRef();
20
- }
16
+ static defaultProps = {
17
+ position: {
18
+ x: 0,
19
+ y: 0,
20
+ },
21
+ };
22
+ _lastSize = { width: 0, height: 0 };
23
+ _tooltip = React.createRef();
21
24
  render() {
22
25
  const className = classnames("nz-popup-tooltip", this.props.className);
23
26
  const style = {
@@ -49,12 +52,6 @@ export class Tooltip extends React.PureComponent {
49
52
  this.props.onSizeChanged && this.props.onSizeChanged(size);
50
53
  }
51
54
  }
52
- Tooltip.defaultProps = {
53
- position: {
54
- x: 0,
55
- y: 0,
56
- },
57
- };
58
55
  /** Function to apply offset and contain tooltip bounds in container.
59
56
  * @internal
60
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/popup/Tooltip.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,gBAAgB,CAAC;AACxB,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAyB9D;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,KAAK,CAAC,aAA2B;IAA9D;;QAQU,cAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpC,aAAQ,GAAG,KAAK,CAAC,SAAS,EAAkB,CAAC;IA+CvD,CAAC;IA7CiB,MAAM;QACpB,MAAM,SAAS,GAAG,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvE,MAAM,KAAK,GAAwB;YACjC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC3B,CAAC;QAEF,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK;YACxD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAC/B,iCAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAO,CAC7B,CAAC,CAAC,CAAC,SAAS;YACb,6BAAK,SAAS,EAAC,YAAY,IAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAO,CACnD,CACP,CAAC;IACJ,CAAC;IAEe,iBAAiB;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEe,kBAAkB;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAQ,CAAC;QAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QAEF,IACE,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YACnC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAErC,OAAO;QAET,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;;AAtDsB,oBAAY,GAAwB;IACzD,QAAQ,EAAE;QACR,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACL;CACF,AALkC,CAKjC;AAoDJ;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,aAA6B,EAC7B,aAAwB,EACxB,SAAgB,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAC1B,EAAE;IACT,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAChE,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;IAEpE,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACjD,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport \"./Tooltip.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Point, Rectangle } from \"@itwin/core-react/internal\";\nimport type { XAndY } from \"../state/internal/NineZoneStateHelpers.js\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\nimport type { RectangleProps } from \"../../utils/RectangleProps.js\";\n\n/** Properties of [[Tooltip]] component.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface TooltipProps extends CommonProps {\n /** Tooltip content. */\n children?: React.ReactNode;\n /** Tooltip icon. */\n icon?: React.ReactNode;\n /** Function called when the bounds of the tooltip changes. */\n onSizeChanged?: (size: SizeProps) => void;\n /** Position of the tooltip. */\n position: XAndY;\n}\n\n/** Default properties of [[Tooltip]] component.\n * @internal\n */\nexport type TooltipDefaultProps = Pick<TooltipProps, \"position\">;\n\n/** Positionable tooltip component.\n * @internal\n */\nexport class Tooltip extends React.PureComponent<TooltipProps> {\n public static readonly defaultProps: TooltipDefaultProps = {\n position: {\n x: 0,\n y: 0,\n },\n };\n\n private _lastSize = { width: 0, height: 0 };\n private _tooltip = React.createRef<HTMLDivElement>();\n\n public override render() {\n const className = classnames(\"nz-popup-tooltip\", this.props.className);\n\n const style: React.CSSProperties = {\n ...this.props.style,\n left: this.props.position.x,\n top: this.props.position.y,\n };\n\n return (\n <div className={className} ref={this._tooltip} style={style}>\n {this.props.icon !== undefined ? (\n <div>{this.props.icon}</div>\n ) : undefined}\n <div className=\"nz-content\">{this.props.children}</div>\n </div>\n );\n }\n\n public override componentDidMount() {\n this.onSizeChanged();\n }\n\n public override componentDidUpdate(): void {\n this.onSizeChanged();\n }\n\n private onSizeChanged() {\n const tooltip = this._tooltip.current!;\n\n const rect = tooltip.getBoundingClientRect();\n const size = {\n height: rect.height,\n width: rect.width,\n };\n\n if (\n this._lastSize.width === size.width &&\n this._lastSize.height === size.height\n )\n return;\n\n this._lastSize = size;\n this.props.onSizeChanged && this.props.onSizeChanged(size);\n }\n}\n\n/** Function to apply offset and contain tooltip bounds in container.\n * @internal\n */\nexport const offsetAndContainInContainer = (\n tooltipBounds: RectangleProps,\n containerSize: SizeProps,\n offset: XAndY = new Point(20, 20)\n): Point => {\n let newBounds = Rectangle.create(tooltipBounds).offset(offset);\n const containerBounds = Rectangle.createFromSize(containerSize);\n if (containerBounds.contains(newBounds)) return newBounds.topLeft();\n\n newBounds = newBounds.containIn(containerBounds);\n return newBounds.topLeft();\n};\n"]}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/popup/Tooltip.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,gBAAgB,CAAC;AACxB,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAyB9D;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,KAAK,CAAC,aAA2B;IACrD,MAAM,CAAU,YAAY,GAAwB;QACzD,QAAQ,EAAE;YACR,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL;KACF,CAAC;IAEM,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACpC,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAkB,CAAC;IAErC,MAAM;QACpB,MAAM,SAAS,GAAG,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvE,MAAM,KAAK,GAAwB;YACjC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC3B,CAAC;QAEF,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK;YACxD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAC/B,iCAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAO,CAC7B,CAAC,CAAC,CAAC,SAAS;YACb,6BAAK,SAAS,EAAC,YAAY,IAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAO,CACnD,CACP,CAAC;IACJ,CAAC;IAEe,iBAAiB;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEe,kBAAkB;QAChC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAQ,CAAC;QAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QAEF,IACE,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YACnC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAErC,OAAO;QAET,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,aAA6B,EAC7B,aAAwB,EACxB,SAAgB,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAC1B,EAAE;IACT,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAChE,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;IAEpE,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACjD,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Popup\n */\n\nimport \"./Tooltip.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Point, Rectangle } from \"@itwin/core-react/internal\";\nimport type { XAndY } from \"../state/internal/NineZoneStateHelpers.js\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\nimport type { RectangleProps } from \"../../utils/RectangleProps.js\";\n\n/** Properties of [[Tooltip]] component.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface TooltipProps extends CommonProps {\n /** Tooltip content. */\n children?: React.ReactNode;\n /** Tooltip icon. */\n icon?: React.ReactNode;\n /** Function called when the bounds of the tooltip changes. */\n onSizeChanged?: (size: SizeProps) => void;\n /** Position of the tooltip. */\n position: XAndY;\n}\n\n/** Default properties of [[Tooltip]] component.\n * @internal\n */\nexport type TooltipDefaultProps = Pick<TooltipProps, \"position\">;\n\n/** Positionable tooltip component.\n * @internal\n */\nexport class Tooltip extends React.PureComponent<TooltipProps> {\n public static readonly defaultProps: TooltipDefaultProps = {\n position: {\n x: 0,\n y: 0,\n },\n };\n\n private _lastSize = { width: 0, height: 0 };\n private _tooltip = React.createRef<HTMLDivElement>();\n\n public override render() {\n const className = classnames(\"nz-popup-tooltip\", this.props.className);\n\n const style: React.CSSProperties = {\n ...this.props.style,\n left: this.props.position.x,\n top: this.props.position.y,\n };\n\n return (\n <div className={className} ref={this._tooltip} style={style}>\n {this.props.icon !== undefined ? (\n <div>{this.props.icon}</div>\n ) : undefined}\n <div className=\"nz-content\">{this.props.children}</div>\n </div>\n );\n }\n\n public override componentDidMount() {\n this.onSizeChanged();\n }\n\n public override componentDidUpdate(): void {\n this.onSizeChanged();\n }\n\n private onSizeChanged() {\n const tooltip = this._tooltip.current!;\n\n const rect = tooltip.getBoundingClientRect();\n const size = {\n height: rect.height,\n width: rect.width,\n };\n\n if (\n this._lastSize.width === size.width &&\n this._lastSize.height === size.height\n )\n return;\n\n this._lastSize = size;\n this.props.onSizeChanged && this.props.onSizeChanged(size);\n }\n}\n\n/** Function to apply offset and contain tooltip bounds in container.\n * @internal\n */\nexport const offsetAndContainInContainer = (\n tooltipBounds: RectangleProps,\n containerSize: SizeProps,\n offset: XAndY = new Point(20, 20)\n): Point => {\n let newBounds = Rectangle.create(tooltipBounds).offset(offset);\n const containerBounds = Rectangle.createFromSize(containerSize);\n if (containerBounds.contains(newBounds)) return newBounds.topLeft();\n\n newBounds = newBounds.containIn(containerBounds);\n return newBounds.topLeft();\n};\n"]}
@@ -3,12 +3,11 @@
3
3
  */
4
4
  import "./MenuTab.scss";
5
5
  import * as React from "react";
6
- import type { CommonProps } from "@itwin/core-react";
7
- /** @internal */
8
- export interface WidgetMenuTabProps extends CommonProps {
6
+ interface WidgetMenuTabProps {
9
7
  badge?: React.ReactNode;
10
- icon?: React.ReactNode;
8
+ icon?: React.ReactElement;
11
9
  }
12
10
  /** @internal */
13
11
  export declare function WidgetMenuTab(props: WidgetMenuTabProps): React.JSX.Element;
12
+ export {};
14
13
  //# sourceMappingURL=MenuTab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuTab.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/MenuTab.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,gBAAgB,CAAC;AAExB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD,gBAAgB;AAEhB,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,qBAkCtD"}
1
+ {"version":3,"file":"MenuTab.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/MenuTab.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,gBAAgB,CAAC;AACxB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAC3B;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,qBAsCtD"}
@@ -6,9 +6,10 @@
6
6
  * @module Widget
7
7
  */
8
8
  import "./MenuTab.scss";
9
- import classnames from "classnames";
10
9
  import * as React from "react";
11
10
  import { assert } from "@itwin/core-bentley";
11
+ import { SvgCheckmark } from "@itwin/itwinui-icons-react";
12
+ import { MenuItem } from "@itwin/itwinui-react";
12
13
  import { useTabInteractions } from "./Tab.js";
13
14
  import { useActiveTabId } from "./Widget.js";
14
15
  import { WidgetOverflowContext } from "./Overflow.js";
@@ -36,11 +37,8 @@ export function WidgetMenuTab(props) {
36
37
  });
37
38
  const activeTabId = useActiveTabId();
38
39
  const active = activeTabId === id;
39
- const className = classnames("nz-widget-menuTab", !showWidgetIcon && "nz-no-icon", props.className);
40
- return (React.createElement("div", { className: className, ref: ref, title: label },
41
- props.badge && React.createElement("div", { className: "nz-badge" }, props.badge),
42
- showWidgetIcon && React.createElement("div", { className: "nz-icon" }, props.icon),
43
- React.createElement("span", null, label),
44
- React.createElement("div", { className: classnames("nz-checkmark", !active && "nz-hidden") })));
40
+ return (React.createElement(MenuItem, { role: "menuitemcheckbox", ref: ref, title: label, startIcon: showWidgetIcon ? props.icon : undefined, endIcon: active ? React.createElement(SvgCheckmark, null) : React.createElement(React.Fragment, null), "aria-checked": active, isSelected: active, "aria-selected": undefined },
41
+ props.badge && (React.createElement("div", { className: "nz-widget-menuTab_badge" }, props.badge)),
42
+ label));
45
43
  }
46
44
  //# sourceMappingURL=MenuTab.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuTab.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/MenuTab.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,gBAAgB,CAAC;AACxB,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AASpD,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEb,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC3C,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,kBAAkB,CAAC;QAC7B,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,aAAa;QACtB,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,WAAW,KAAK,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,UAAU,CAC1B,mBAAmB,EACnB,CAAC,cAAc,IAAI,YAAY,EAC/B,KAAK,CAAC,SAAS,CAChB,CAAC;IACF,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK;QAC9C,KAAK,CAAC,KAAK,IAAI,6BAAK,SAAS,EAAC,UAAU,IAAE,KAAK,CAAC,KAAK,CAAO;QAC5D,cAAc,IAAI,6BAAK,SAAS,EAAC,SAAS,IAAE,KAAK,CAAC,IAAI,CAAO;QAC9D,kCAAO,KAAK,CAAQ;QACpB,6BAAK,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC,MAAM,IAAI,WAAW,CAAC,GAAI,CAClE,CACP,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport \"./MenuTab.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { useTabInteractions } from \"./Tab.js\";\nimport { useActiveTabId } from \"./Widget.js\";\nimport { WidgetOverflowContext } from \"./Overflow.js\";\nimport { ShowWidgetIconContext } from \"../base/NineZone.js\";\nimport { useLayout } from \"../base/LayoutStore.js\";\nimport { TabIdContext } from \"./ContentRenderer.js\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface WidgetMenuTabProps extends CommonProps {\n badge?: React.ReactNode;\n icon?: React.ReactNode;\n}\n\n/** @internal */\nexport function WidgetMenuTab(props: WidgetMenuTabProps) {\n const id = React.useContext(TabIdContext);\n const overflowContext = React.useContext(WidgetOverflowContext);\n const showWidgetIcon = React.useContext(ShowWidgetIconContext);\n assert(!!id);\n\n const label = useLayout((state) => {\n const tab = state.tabs[id];\n return tab.label;\n });\n assert(!!overflowContext);\n const closeOverflow = React.useCallback(() => {\n overflowContext.close();\n }, [overflowContext]);\n const ref = useTabInteractions({\n onDragStart: closeOverflow,\n onClick: closeOverflow,\n onDoubleClick: closeOverflow,\n });\n const activeTabId = useActiveTabId();\n const active = activeTabId === id;\n const className = classnames(\n \"nz-widget-menuTab\",\n !showWidgetIcon && \"nz-no-icon\",\n props.className\n );\n return (\n <div className={className} ref={ref} title={label}>\n {props.badge && <div className=\"nz-badge\">{props.badge}</div>}\n {showWidgetIcon && <div className=\"nz-icon\">{props.icon}</div>}\n <span>{label}</span>\n <div className={classnames(\"nz-checkmark\", !active && \"nz-hidden\")} />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"MenuTab.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/MenuTab.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,gBAAgB,CAAC;AACxB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOpD,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEb,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC3C,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,kBAAkB,CAAC;QAC7B,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,aAAa;QACtB,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,WAAW,KAAK,EAAE,CAAC;IAClC,OAAO,CACL,oBAAC,QAAQ,IACP,IAAI,EAAC,kBAAkB,EACvB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAClD,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAC,YAAY,OAAG,CAAC,CAAC,CAAC,yCAAK,kBAC5B,MAAM,EACpB,UAAU,EAAE,MAAM,mBACH,SAAS;QAEvB,KAAK,CAAC,KAAK,IAAI,CACd,6BAAK,SAAS,EAAC,yBAAyB,IAAE,KAAK,CAAC,KAAK,CAAO,CAC7D;QACA,KAAK,CACG,CACZ,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport \"./MenuTab.scss\";\nimport * as React from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { SvgCheckmark } from \"@itwin/itwinui-icons-react\";\nimport { MenuItem } from \"@itwin/itwinui-react\";\nimport { useTabInteractions } from \"./Tab.js\";\nimport { useActiveTabId } from \"./Widget.js\";\nimport { WidgetOverflowContext } from \"./Overflow.js\";\nimport { ShowWidgetIconContext } from \"../base/NineZone.js\";\nimport { useLayout } from \"../base/LayoutStore.js\";\nimport { TabIdContext } from \"./ContentRenderer.js\";\n\ninterface WidgetMenuTabProps {\n badge?: React.ReactNode;\n icon?: React.ReactElement;\n}\n\n/** @internal */\nexport function WidgetMenuTab(props: WidgetMenuTabProps) {\n const id = React.useContext(TabIdContext);\n const overflowContext = React.useContext(WidgetOverflowContext);\n const showWidgetIcon = React.useContext(ShowWidgetIconContext);\n assert(!!id);\n\n const label = useLayout((state) => {\n const tab = state.tabs[id];\n return tab.label;\n });\n assert(!!overflowContext);\n const closeOverflow = React.useCallback(() => {\n overflowContext.close();\n }, [overflowContext]);\n const ref = useTabInteractions({\n onDragStart: closeOverflow,\n onClick: closeOverflow,\n onDoubleClick: closeOverflow,\n });\n const activeTabId = useActiveTabId();\n const active = activeTabId === id;\n return (\n <MenuItem\n role=\"menuitemcheckbox\"\n ref={ref}\n title={label}\n startIcon={showWidgetIcon ? props.icon : undefined}\n endIcon={active ? <SvgCheckmark /> : <></>}\n aria-checked={active}\n isSelected={active}\n aria-selected={undefined} // Keep styling provided by isSelected, but handle checked state via aria-checked\n >\n {props.badge && (\n <div className=\"nz-widget-menuTab_badge\">{props.badge}</div>\n )}\n {label}\n </MenuItem>\n );\n}\n"]}