@itwin/appui-react 5.0.5 → 5.2.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 (530) hide show
  1. package/CHANGELOG.md +57 -38
  2. package/lib/appui-react/UiFramework.d.ts +1 -1
  3. package/lib/appui-react/UiFramework.d.ts.map +1 -1
  4. package/lib/appui-react/UiFramework.js +48 -46
  5. package/lib/appui-react/UiFramework.js.map +1 -1
  6. package/lib/appui-react/accudraw/AccuDrawCommandItems.js +1 -1
  7. package/lib/appui-react/accudraw/AccuDrawCommandItems.js.map +1 -1
  8. package/lib/appui-react/accudraw/AccuDrawDialog.js +1 -1
  9. package/lib/appui-react/accudraw/AccuDrawDialog.js.map +1 -1
  10. package/lib/appui-react/accudraw/AccuDrawFieldContainer.d.ts +2 -0
  11. package/lib/appui-react/accudraw/AccuDrawFieldContainer.d.ts.map +1 -1
  12. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js +38 -26
  13. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
  14. package/lib/appui-react/accudraw/AccuDrawInputField.d.ts +4 -2
  15. package/lib/appui-react/accudraw/AccuDrawInputField.d.ts.map +1 -1
  16. package/lib/appui-react/accudraw/AccuDrawInputField.js +45 -38
  17. package/lib/appui-react/accudraw/AccuDrawInputField.js.map +1 -1
  18. package/lib/appui-react/accudraw/AccuDrawInputField.scss +0 -15
  19. package/lib/appui-react/accudraw/AccuDrawPopupManager.js +3 -3
  20. package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  21. package/lib/appui-react/accudraw/AccuDrawUiSettings.js.map +1 -1
  22. package/lib/appui-react/accudraw/AccuDrawWidget.js +2 -2
  23. package/lib/appui-react/accudraw/AccuDrawWidget.js.map +1 -1
  24. package/lib/appui-react/accudraw/Calculator.js +1 -1
  25. package/lib/appui-react/accudraw/Calculator.js.map +1 -1
  26. package/lib/appui-react/accudraw/CalculatorPopup.js +1 -1
  27. package/lib/appui-react/accudraw/CalculatorPopup.js.map +1 -1
  28. package/lib/appui-react/accudraw/FrameworkAccuDraw.d.ts +2 -2
  29. package/lib/appui-react/accudraw/FrameworkAccuDraw.d.ts.map +1 -1
  30. package/lib/appui-react/accudraw/FrameworkAccuDraw.js +18 -15
  31. package/lib/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
  32. package/lib/appui-react/accudraw/MenuButton.js +1 -1
  33. package/lib/appui-react/accudraw/MenuButton.js.map +1 -1
  34. package/lib/appui-react/backstage/BackstageComposer.d.ts.map +1 -1
  35. package/lib/appui-react/backstage/BackstageComposer.js +2 -3
  36. package/lib/appui-react/backstage/BackstageComposer.js.map +1 -1
  37. package/lib/appui-react/backstage/BackstageComposerItem.js +6 -6
  38. package/lib/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  39. package/lib/appui-react/backstage/BackstageItem.js.map +1 -1
  40. package/lib/appui-react/backstage/BackstageItemUtilities.js.map +1 -1
  41. package/lib/appui-react/backstage/BackstageManager.js +3 -3
  42. package/lib/appui-react/backstage/BackstageManager.js.map +1 -1
  43. package/lib/appui-react/backstage/InternalBackstageManager.js +2 -2
  44. package/lib/appui-react/backstage/InternalBackstageManager.js.map +1 -1
  45. package/lib/appui-react/configurableui/ActivityTracker.d.ts.map +1 -1
  46. package/lib/appui-react/configurableui/ActivityTracker.js +0 -1
  47. package/lib/appui-react/configurableui/ActivityTracker.js.map +1 -1
  48. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +3 -1
  49. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  50. package/lib/appui-react/configurableui/ConfigurableUiContent.js +20 -12
  51. package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  52. package/lib/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
  53. package/lib/appui-react/configurableui/InternalConfigurableUiManager.d.ts +1 -1
  54. package/lib/appui-react/configurableui/InternalConfigurableUiManager.d.ts.map +1 -1
  55. package/lib/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
  56. package/lib/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  57. package/lib/appui-react/content/ContentControl.js +1 -1
  58. package/lib/appui-react/content/ContentControl.js.map +1 -1
  59. package/lib/appui-react/content/ContentGroup.js +7 -7
  60. package/lib/appui-react/content/ContentGroup.js.map +1 -1
  61. package/lib/appui-react/content/ContentLayout.d.ts.map +1 -1
  62. package/lib/appui-react/content/ContentLayout.js +16 -17
  63. package/lib/appui-react/content/ContentLayout.js.map +1 -1
  64. package/lib/appui-react/content/DefaultViewOverlay.js +1 -1
  65. package/lib/appui-react/content/DefaultViewOverlay.js.map +1 -1
  66. package/lib/appui-react/content/FloatingViewportContent.js +4 -4
  67. package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
  68. package/lib/appui-react/content/IModelViewport.d.ts +1 -1
  69. package/lib/appui-react/content/IModelViewport.d.ts.map +1 -1
  70. package/lib/appui-react/content/IModelViewport.js +1 -1
  71. package/lib/appui-react/content/IModelViewport.js.map +1 -1
  72. package/lib/appui-react/content/InternalContentViewManager.js +26 -26
  73. package/lib/appui-react/content/InternalContentViewManager.js.map +1 -1
  74. package/lib/appui-react/content/ViewportContentControl.js +1 -1
  75. package/lib/appui-react/content/ViewportContentControl.js.map +1 -1
  76. package/lib/appui-react/content/split-pane/SplitPane.js +2 -2
  77. package/lib/appui-react/content/split-pane/SplitPane.js.map +1 -1
  78. package/lib/appui-react/cursor/CursorInformation.d.ts +7 -0
  79. package/lib/appui-react/cursor/CursorInformation.d.ts.map +1 -1
  80. package/lib/appui-react/cursor/CursorInformation.js +15 -2
  81. package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
  82. package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts +1 -1
  83. package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  84. package/lib/appui-react/cursor/cursormenu/CursorMenu.js +3 -3
  85. package/lib/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  86. package/lib/appui-react/cursor/cursorpopup/CursorPopup.d.ts +1 -1
  87. package/lib/appui-react/cursor/cursorpopup/CursorPopup.d.ts.map +1 -1
  88. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js +4 -4
  89. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  90. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +4 -1
  91. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
  92. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +45 -30
  93. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  94. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +12 -15
  95. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
  96. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +47 -38
  97. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  98. package/lib/appui-react/dialog/ContentDialog.js.map +1 -1
  99. package/lib/appui-react/dialog/ContentDialogManager.js +2 -2
  100. package/lib/appui-react/dialog/ContentDialogManager.js.map +1 -1
  101. package/lib/appui-react/dialog/DialogManagerBase.js +4 -4
  102. package/lib/appui-react/dialog/DialogManagerBase.js.map +1 -1
  103. package/lib/appui-react/dialog/InternalContentDialogManager.d.ts.map +1 -1
  104. package/lib/appui-react/dialog/InternalContentDialogManager.js +2 -3
  105. package/lib/appui-react/dialog/InternalContentDialogManager.js.map +1 -1
  106. package/lib/appui-react/dialog/InternalModalDialogManager.js +1 -1
  107. package/lib/appui-react/dialog/InternalModalDialogManager.js.map +1 -1
  108. package/lib/appui-react/dialog/InternalModelessDialogManager.d.ts.map +1 -1
  109. package/lib/appui-react/dialog/InternalModelessDialogManager.js +1 -2
  110. package/lib/appui-react/dialog/InternalModelessDialogManager.js.map +1 -1
  111. package/lib/appui-react/dialog/ModalDialogManager.js +2 -2
  112. package/lib/appui-react/dialog/ModalDialogManager.js.map +1 -1
  113. package/lib/appui-react/dialog/ModelessDialog.js +1 -1
  114. package/lib/appui-react/dialog/ModelessDialog.js.map +1 -1
  115. package/lib/appui-react/dialog/ModelessDialogManager.d.ts.map +1 -1
  116. package/lib/appui-react/dialog/ModelessDialogManager.js +2 -3
  117. package/lib/appui-react/dialog/ModelessDialogManager.js.map +1 -1
  118. package/lib/appui-react/dialog/StandardMessageBox.js +1 -1
  119. package/lib/appui-react/dialog/StandardMessageBox.js.map +1 -1
  120. package/lib/appui-react/dialog/UiDataProvidedDialog.js.map +1 -1
  121. package/lib/appui-react/feedback/ElementTooltip.d.ts +1 -1
  122. package/lib/appui-react/feedback/ElementTooltip.d.ts.map +1 -1
  123. package/lib/appui-react/feedback/ElementTooltip.js.map +1 -1
  124. package/lib/appui-react/feedback/ValidationTextbox.js.map +1 -1
  125. package/lib/appui-react/framework/FrameworkBackstage.js.map +1 -1
  126. package/lib/appui-react/framework/FrameworkContent.js +3 -3
  127. package/lib/appui-react/framework/FrameworkContent.js.map +1 -1
  128. package/lib/appui-react/framework/FrameworkControls.js.map +1 -1
  129. package/lib/appui-react/framework/FrameworkDialogs.js +2 -2
  130. package/lib/appui-react/framework/FrameworkDialogs.js.map +1 -1
  131. package/lib/appui-react/framework/FrameworkFrontstages.js +8 -8
  132. package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
  133. package/lib/appui-react/framework/FrameworkKeyboardShortcuts.js.map +1 -1
  134. package/lib/appui-react/framework/FrameworkToolSettings.js +1 -1
  135. package/lib/appui-react/framework/FrameworkToolSettings.js.map +1 -1
  136. package/lib/appui-react/frontstage/Frontstage.js.map +1 -1
  137. package/lib/appui-react/frontstage/FrontstageConfig.d.ts +5 -2
  138. package/lib/appui-react/frontstage/FrontstageConfig.d.ts.map +1 -1
  139. package/lib/appui-react/frontstage/FrontstageConfig.js.map +1 -1
  140. package/lib/appui-react/frontstage/FrontstageDef.d.ts +5 -1
  141. package/lib/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  142. package/lib/appui-react/frontstage/FrontstageDef.js +22 -17
  143. package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
  144. package/lib/appui-react/frontstage/InternalFrontstageManager.js +29 -29
  145. package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  146. package/lib/appui-react/frontstage/ModalFrontstage.js.map +1 -1
  147. package/lib/appui-react/frontstage/ModalSettingsStage.d.ts.map +1 -1
  148. package/lib/appui-react/frontstage/ModalSettingsStage.js +2 -2
  149. package/lib/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  150. package/lib/appui-react/frontstage/NestedFrontstage.js +1 -1
  151. package/lib/appui-react/frontstage/NestedFrontstage.js.map +1 -1
  152. package/lib/appui-react/frontstage/StandardFrontstageProvider.js +1 -1
  153. package/lib/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  154. package/lib/appui-react/hooks/useActiveIModelConnection.js +1 -1
  155. package/lib/appui-react/hooks/useActiveIModelConnection.js.map +1 -1
  156. package/lib/appui-react/hooks/useUiVisibility.js +1 -1
  157. package/lib/appui-react/hooks/useUiVisibility.js.map +1 -1
  158. package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
  159. package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js +1 -1
  160. package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
  161. package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
  162. package/lib/appui-react/keyboardshortcut/KeyboardShortcutProps.js.map +1 -1
  163. package/lib/appui-react/layout/StandardLayout.d.ts.map +1 -1
  164. package/lib/appui-react/layout/StandardLayout.js +5 -1
  165. package/lib/appui-react/layout/StandardLayout.js.map +1 -1
  166. package/lib/appui-react/layout/backstage/Backstage.js.map +1 -1
  167. package/lib/appui-react/layout/backstage/Item.js.map +1 -1
  168. package/lib/appui-react/layout/backstage/Separator.js +1 -1
  169. package/lib/appui-react/layout/backstage/Separator.js.map +1 -1
  170. package/lib/appui-react/layout/base/usePointerCaptor.d.ts +1 -1
  171. package/lib/appui-react/layout/base/usePointerCaptor.d.ts.map +1 -1
  172. package/lib/appui-react/layout/footer/dialog/Dialog.js.map +1 -1
  173. package/lib/appui-react/layout/footer/dialog/TitleBar.js.map +1 -1
  174. package/lib/appui-react/layout/footer/snap-mode/Panel.js.map +1 -1
  175. package/lib/appui-react/layout/footer/snap-mode/Snap.js.map +1 -1
  176. package/lib/appui-react/layout/footer/tool-assistance/Dialog.js.map +1 -1
  177. package/lib/appui-react/layout/footer/tool-assistance/Instruction.js.map +1 -1
  178. package/lib/appui-react/layout/footer/tool-assistance/Item.js.map +1 -1
  179. package/lib/appui-react/layout/footer/tool-assistance/NewDot.js +1 -1
  180. package/lib/appui-react/layout/footer/tool-assistance/NewDot.js.map +1 -1
  181. package/lib/appui-react/layout/footer/tool-assistance/Separator.js.map +1 -1
  182. package/lib/appui-react/layout/outline/SectionOutline.js.map +1 -1
  183. package/lib/appui-react/layout/popup/Tooltip.js.map +1 -1
  184. package/lib/appui-react/layout/state/internal/PanelStateHelpers.js +1 -1
  185. package/lib/appui-react/layout/state/internal/PanelStateHelpers.js.map +1 -1
  186. package/lib/appui-react/layout/state/internal/TabStateHelpers.js +6 -6
  187. package/lib/appui-react/layout/state/internal/TabStateHelpers.js.map +1 -1
  188. package/lib/appui-react/layout/state/internal/ToolSettingsStateHelpers.js +6 -6
  189. package/lib/appui-react/layout/state/internal/ToolSettingsStateHelpers.js.map +1 -1
  190. package/lib/appui-react/layout/state/internal/WidgetStateHelpers.js +13 -13
  191. package/lib/appui-react/layout/state/internal/WidgetStateHelpers.js.map +1 -1
  192. package/lib/appui-react/layout/target/TargetContainer.js.map +1 -1
  193. package/lib/appui-react/layout/target/useAllowedSideTarget.js +1 -1
  194. package/lib/appui-react/layout/target/useAllowedSideTarget.js.map +1 -1
  195. package/lib/appui-react/layout/tool-settings/Docked.js +1 -1
  196. package/lib/appui-react/layout/tool-settings/Docked.js.map +1 -1
  197. package/lib/appui-react/layout/tool-settings/Handle.js.map +1 -1
  198. package/lib/appui-react/layout/tool-settings/Overflow.js.map +1 -1
  199. package/lib/appui-react/layout/tool-settings/Panel.js +1 -1
  200. package/lib/appui-react/layout/tool-settings/Panel.js.map +1 -1
  201. package/lib/appui-react/layout/tool-settings/Setting.js.map +1 -1
  202. package/lib/appui-react/layout/widget/Menu.js +1 -1
  203. package/lib/appui-react/layout/widget/Menu.js.map +1 -1
  204. package/lib/appui-react/layout/widget/MenuTab.js.map +1 -1
  205. package/lib/appui-react/layout/widget/NavigationArea.js.map +1 -1
  206. package/lib/appui-react/layout/widget/Tab.js +1 -1
  207. package/lib/appui-react/layout/widget/Tab.js.map +1 -1
  208. package/lib/appui-react/layout/widget/TabBar.js +1 -1
  209. package/lib/appui-react/layout/widget/TabBar.js.map +1 -1
  210. package/lib/appui-react/layout/widget/ToolsArea.js.map +1 -1
  211. package/lib/appui-react/layout/widget/Widget.js.map +1 -1
  212. package/lib/appui-react/layout/widget/tools/button/Button.js.map +1 -1
  213. package/lib/appui-react/layout/widget/tools/button/Expandable.js.map +1 -1
  214. package/lib/appui-react/layout/widget-panels/Expander.js +1 -1
  215. package/lib/appui-react/layout/widget-panels/Expander.js.map +1 -1
  216. package/lib/appui-react/layout/widget-panels/Grip.d.ts.map +1 -1
  217. package/lib/appui-react/layout/widget-panels/Grip.js +3 -3
  218. package/lib/appui-react/layout/widget-panels/Grip.js.map +1 -1
  219. package/lib/appui-react/layout/widget-panels/Panel.d.ts.map +1 -1
  220. package/lib/appui-react/layout/widget-panels/useAnimatePanel.d.ts.map +1 -1
  221. package/lib/appui-react/messages/InputField.js +2 -2
  222. package/lib/appui-react/messages/InputField.js.map +1 -1
  223. package/lib/appui-react/messages/MessageManager.d.ts +4 -4
  224. package/lib/appui-react/messages/MessageManager.d.ts.map +1 -1
  225. package/lib/appui-react/messages/MessageManager.js +25 -25
  226. package/lib/appui-react/messages/MessageManager.js.map +1 -1
  227. package/lib/appui-react/messages/MessageRenderer.js.map +1 -1
  228. package/lib/appui-react/messages/Pointer.d.ts.map +1 -1
  229. package/lib/appui-react/messages/Pointer.js +7 -7
  230. package/lib/appui-react/messages/Pointer.js.map +1 -1
  231. package/lib/appui-react/messages/ReactNotifyMessageDetails.d.ts +2 -2
  232. package/lib/appui-react/messages/ReactNotifyMessageDetails.d.ts.map +1 -1
  233. package/lib/appui-react/messages/ReactNotifyMessageDetails.js.map +1 -1
  234. package/lib/appui-react/navigationaids/CubeNavigationAidControl.js +2 -2
  235. package/lib/appui-react/navigationaids/CubeNavigationAidControl.js.map +1 -1
  236. package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js +2 -2
  237. package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js.map +1 -1
  238. package/lib/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
  239. package/lib/appui-react/navigationaids/SheetNavigationAid.js +2 -2
  240. package/lib/appui-react/navigationaids/SheetNavigationAid.js.map +1 -1
  241. package/lib/appui-react/navigationaids/SheetsModalFrontstage.js +8 -8
  242. package/lib/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
  243. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.d.ts +1 -1
  244. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.d.ts.map +1 -1
  245. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js +3 -3
  246. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js.map +1 -1
  247. package/lib/appui-react/pickers/ListPicker.d.ts +1 -0
  248. package/lib/appui-react/pickers/ListPicker.d.ts.map +1 -1
  249. package/lib/appui-react/pickers/ListPicker.js +11 -10
  250. package/lib/appui-react/pickers/ListPicker.js.map +1 -1
  251. package/lib/appui-react/pickers/ViewSelector.d.ts +1 -0
  252. package/lib/appui-react/pickers/ViewSelector.d.ts.map +1 -1
  253. package/lib/appui-react/pickers/ViewSelector.js +7 -6
  254. package/lib/appui-react/pickers/ViewSelector.js.map +1 -1
  255. package/lib/appui-react/popup/CardPopup.js +2 -2
  256. package/lib/appui-react/popup/CardPopup.js.map +1 -1
  257. package/lib/appui-react/popup/ComponentPopup.js.map +1 -1
  258. package/lib/appui-react/popup/HTMLElementPopup.js.map +1 -1
  259. package/lib/appui-react/popup/InputEditorPopup.js.map +1 -1
  260. package/lib/appui-react/popup/KeyinPalettePanel.d.ts.map +1 -1
  261. package/lib/appui-react/popup/KeyinPalettePanel.js +2 -3
  262. package/lib/appui-react/popup/KeyinPalettePanel.js.map +1 -1
  263. package/lib/appui-react/popup/KeyinPalettePopup.js +1 -1
  264. package/lib/appui-react/popup/KeyinPalettePopup.js.map +1 -1
  265. package/lib/appui-react/popup/PopupManager.d.ts +1 -1
  266. package/lib/appui-react/popup/PopupManager.d.ts.map +1 -1
  267. package/lib/appui-react/popup/PopupManager.js +4 -4
  268. package/lib/appui-react/popup/PopupManager.js.map +1 -1
  269. package/lib/appui-react/popup/PositionPopup.js +2 -2
  270. package/lib/appui-react/popup/PositionPopup.js.map +1 -1
  271. package/lib/appui-react/popup/ToolSettingsPopup.js.map +1 -1
  272. package/lib/appui-react/popup/ToolbarPopup.js +1 -1
  273. package/lib/appui-react/popup/ToolbarPopup.js.map +1 -1
  274. package/lib/appui-react/preview/PreviewFeatures.d.ts +3 -5
  275. package/lib/appui-react/preview/PreviewFeatures.d.ts.map +1 -1
  276. package/lib/appui-react/preview/PreviewFeatures.js +1 -2
  277. package/lib/appui-react/preview/PreviewFeatures.js.map +1 -1
  278. package/lib/appui-react/preview/allow-bearing-letters-in-accudraw-input-fields/useAllowBearingLettersInAccuDrawInputFields.d.ts +5 -0
  279. package/lib/appui-react/preview/allow-bearing-letters-in-accudraw-input-fields/useAllowBearingLettersInAccuDrawInputFields.d.ts.map +1 -0
  280. package/lib/appui-react/preview/{allow-letters-in-accudraw-input-fields/useAllowLettersInAccuDrawInputFields.js → allow-bearing-letters-in-accudraw-input-fields/useAllowBearingLettersInAccuDrawInputFields.js} +5 -5
  281. package/lib/appui-react/preview/allow-bearing-letters-in-accudraw-input-fields/useAllowBearingLettersInAccuDrawInputFields.js.map +1 -0
  282. package/lib/appui-react/preview/control-widget-visibility/NavigationWidget.d.ts +1 -1
  283. package/lib/appui-react/preview/control-widget-visibility/NavigationWidget.d.ts.map +1 -1
  284. package/lib/appui-react/preview/control-widget-visibility/NavigationWidget.js +1 -1
  285. package/lib/appui-react/preview/control-widget-visibility/NavigationWidget.js.map +1 -1
  286. package/lib/appui-react/preview/enable-maximized-widget/MaximizedWidget.d.ts +1 -1
  287. package/lib/appui-react/preview/enable-maximized-widget/MaximizedWidget.d.ts.map +1 -1
  288. package/lib/appui-react/preview/enable-maximized-widget/MaximizedWidget.js.map +1 -1
  289. package/lib/appui-react/preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.d.ts +1 -4
  290. package/lib/appui-react/preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.d.ts.map +1 -1
  291. package/lib/appui-react/preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.js +13 -13
  292. package/lib/appui-react/preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.js.map +1 -1
  293. package/lib/appui-react/preview/reparent-popout-widgets/PopoutThemeProvider.d.ts +1 -1
  294. package/lib/appui-react/preview/reparent-popout-widgets/PopoutThemeProvider.d.ts.map +1 -1
  295. package/lib/appui-react/preview/reparent-popout-widgets/PopoutThemeProvider.js +1 -1
  296. package/lib/appui-react/preview/reparent-popout-widgets/PopoutThemeProvider.js.map +1 -1
  297. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.d.ts +1 -1
  298. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.d.ts.map +1 -1
  299. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.js.map +1 -1
  300. package/lib/appui-react/redux/ConfigurableUiState.d.ts.map +1 -1
  301. package/lib/appui-react/redux/ConfigurableUiState.js +1 -1
  302. package/lib/appui-react/redux/ConfigurableUiState.js.map +1 -1
  303. package/lib/appui-react/redux/FrameworkState.d.ts +1 -1
  304. package/lib/appui-react/redux/FrameworkState.js.map +1 -1
  305. package/lib/appui-react/redux/ReducerRegistry.js +1 -1
  306. package/lib/appui-react/redux/ReducerRegistry.js.map +1 -1
  307. package/lib/appui-react/redux/SessionState.d.ts +2 -2
  308. package/lib/appui-react/redux/SessionState.d.ts.map +1 -1
  309. package/lib/appui-react/redux/SessionState.js.map +1 -1
  310. package/lib/appui-react/redux/StateManager.js +2 -2
  311. package/lib/appui-react/redux/StateManager.js.map +1 -1
  312. package/lib/appui-react/redux/connectIModel.js +1 -1
  313. package/lib/appui-react/redux/connectIModel.js.map +1 -1
  314. package/lib/appui-react/redux/redux-ts.js.map +1 -1
  315. package/lib/appui-react/selection/SelectionContextItemDef.js +2 -2
  316. package/lib/appui-react/selection/SelectionContextItemDef.js.map +1 -1
  317. package/lib/appui-react/settings/SettingsManager.js +1 -1
  318. package/lib/appui-react/settings/SettingsManager.js.map +1 -1
  319. package/lib/appui-react/settings/quantityformatting/QuantityFormat.js +3 -3
  320. package/lib/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
  321. package/lib/appui-react/settings/ui/UiSettingsPage.js +5 -5
  322. package/lib/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  323. package/lib/appui-react/shared/ActionButtonItemDef.js +1 -1
  324. package/lib/appui-react/shared/ActionButtonItemDef.js.map +1 -1
  325. package/lib/appui-react/shared/AnyItemDef.js.map +1 -1
  326. package/lib/appui-react/shared/AnyToolbarItemDef.js.map +1 -1
  327. package/lib/appui-react/shared/CommandItemDef.js +1 -1
  328. package/lib/appui-react/shared/CommandItemDef.js.map +1 -1
  329. package/lib/appui-react/shared/CustomItemDef.js +1 -1
  330. package/lib/appui-react/shared/CustomItemDef.js.map +1 -1
  331. package/lib/appui-react/shared/CustomItemProps.js.map +1 -1
  332. package/lib/appui-react/shared/GroupItemProps.js.map +1 -1
  333. package/lib/appui-react/shared/ItemDefBase.js.map +1 -1
  334. package/lib/appui-react/shared/ItemMap.js +1 -1
  335. package/lib/appui-react/shared/ItemMap.js.map +1 -1
  336. package/lib/appui-react/shared/ItemProps.js.map +1 -1
  337. package/lib/appui-react/shared/MenuItem.js +1 -1
  338. package/lib/appui-react/shared/MenuItem.js.map +1 -1
  339. package/lib/appui-react/shared/ToolItemDef.js +1 -1
  340. package/lib/appui-react/shared/ToolItemDef.js.map +1 -1
  341. package/lib/appui-react/stagepanels/StagePanelConfig.js.map +1 -1
  342. package/lib/appui-react/stagepanels/StagePanelDef.js +2 -2
  343. package/lib/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  344. package/lib/appui-react/statusbar/Field.js.map +1 -1
  345. package/lib/appui-react/statusbar/Indicator.js +2 -2
  346. package/lib/appui-react/statusbar/Indicator.js.map +1 -1
  347. package/lib/appui-react/statusbar/LabelIndicator.js +2 -2
  348. package/lib/appui-react/statusbar/LabelIndicator.js.map +1 -1
  349. package/lib/appui-react/statusbar/Overflow.js.map +1 -1
  350. package/lib/appui-react/statusbar/Separator.js +1 -1
  351. package/lib/appui-react/statusbar/Separator.js.map +1 -1
  352. package/lib/appui-react/statusbar/StatusBar.js.map +1 -1
  353. package/lib/appui-react/statusbar/StatusBarComposer.js +6 -6
  354. package/lib/appui-react/statusbar/StatusBarComposer.js.map +1 -1
  355. package/lib/appui-react/statusbar/StatusBarItem.js.map +1 -1
  356. package/lib/appui-react/statusbar/StatusBarItemUtilities.js.map +1 -1
  357. package/lib/appui-react/statusbar/StatusBarWidgetControl.js.map +1 -1
  358. package/lib/appui-react/statusbar/dialog/Button.js.map +1 -1
  359. package/lib/appui-react/statusbar/dialog/Dialog.js.map +1 -1
  360. package/lib/appui-react/statusbar/dialog/TitleBar.js.map +1 -1
  361. package/lib/appui-react/statusbar/popup/Popup.js +2 -2
  362. package/lib/appui-react/statusbar/popup/Popup.js.map +1 -1
  363. package/lib/appui-react/statusfields/ActivityCenter.js +2 -2
  364. package/lib/appui-react/statusfields/ActivityCenter.js.map +1 -1
  365. package/lib/appui-react/statusfields/SectionsField.js.map +1 -1
  366. package/lib/appui-react/statusfields/SelectionCount.js.map +1 -1
  367. package/lib/appui-react/statusfields/SelectionInfo.js +2 -2
  368. package/lib/appui-react/statusfields/SelectionInfo.js.map +1 -1
  369. package/lib/appui-react/statusfields/SelectionScope.js +3 -3
  370. package/lib/appui-react/statusfields/SelectionScope.js.map +1 -1
  371. package/lib/appui-react/statusfields/SnapMode.js +2 -2
  372. package/lib/appui-react/statusfields/SnapMode.js.map +1 -1
  373. package/lib/appui-react/statusfields/ViewAttributes.d.ts +1 -1
  374. package/lib/appui-react/statusfields/ViewAttributes.d.ts.map +1 -1
  375. package/lib/appui-react/statusfields/ViewAttributes.js +1 -1
  376. package/lib/appui-react/statusfields/ViewAttributes.js.map +1 -1
  377. package/lib/appui-react/statusfields/message-center/MessageCenterField.js +1 -1
  378. package/lib/appui-react/statusfields/message-center/MessageCenterField.js.map +1 -1
  379. package/lib/appui-react/statusfields/message-center/MessageCenterMessage.js.map +1 -1
  380. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.d.ts +1 -1
  381. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.d.ts.map +1 -1
  382. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js +1 -1
  383. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
  384. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +11 -7
  385. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  386. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js +27 -9
  387. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  388. package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js +2 -2
  389. package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -1
  390. package/lib/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  391. package/lib/appui-react/syncui/SyncUiEventDispatcher.js +3 -8
  392. package/lib/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  393. package/lib/appui-react/syncui/UiSyncEvent.js +1 -1
  394. package/lib/appui-react/syncui/UiSyncEvent.js.map +1 -1
  395. package/lib/appui-react/theme/ThemeManager.d.ts +1 -1
  396. package/lib/appui-react/theme/ThemeManager.js +2 -2
  397. package/lib/appui-react/theme/ThemeManager.js.map +1 -1
  398. package/lib/appui-react/toolbar/GroupItem.js +1 -1
  399. package/lib/appui-react/toolbar/GroupItem.js.map +1 -1
  400. package/lib/appui-react/toolbar/Toolbar.js.map +1 -1
  401. package/lib/appui-react/toolbar/ToolbarComposer.js +3 -3
  402. package/lib/appui-react/toolbar/ToolbarComposer.js.map +1 -1
  403. package/lib/appui-react/toolbar/ToolbarHelper.js +4 -4
  404. package/lib/appui-react/toolbar/ToolbarHelper.js.map +1 -1
  405. package/lib/appui-react/toolbar/ToolbarItem.js.map +1 -1
  406. package/lib/appui-react/toolbar/ToolbarItemUtilities.js +1 -1
  407. package/lib/appui-react/toolbar/ToolbarItemUtilities.js.map +1 -1
  408. package/lib/appui-react/toolbar/ToolbarItemsManager.js +10 -10
  409. package/lib/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
  410. package/lib/appui-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  411. package/lib/appui-react/toolbar/new-toolbars/Badge.d.ts +1 -1
  412. package/lib/appui-react/toolbar/new-toolbars/Badge.d.ts.map +1 -1
  413. package/lib/appui-react/toolbar/new-toolbars/Badge.js +1 -1
  414. package/lib/appui-react/toolbar/new-toolbars/Badge.js.map +1 -1
  415. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js +2 -2
  416. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js.map +1 -1
  417. package/lib/appui-react/toolbar/new-toolbars/Item.js +1 -1
  418. package/lib/appui-react/toolbar/new-toolbars/Item.js.map +1 -1
  419. package/lib/appui-react/toolbar/new-toolbars/ToolGroup.js.map +1 -1
  420. package/lib/appui-react/toolbar/new-toolbars/useOverflow.d.ts.map +1 -1
  421. package/lib/appui-react/toolbar/useDefaultToolbarItems.js +1 -1
  422. package/lib/appui-react/toolbar/useDefaultToolbarItems.js.map +1 -1
  423. package/lib/appui-react/toolbar/useUiItemsProviderToolbarItems.js +1 -1
  424. package/lib/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
  425. package/lib/appui-react/tools/CoreToolDefinitions.js +2 -2
  426. package/lib/appui-react/tools/CoreToolDefinitions.js.map +1 -1
  427. package/lib/appui-react/tools/KeyinPaletteTools.d.ts +1 -1
  428. package/lib/appui-react/tools/OpenSettingsTool.d.ts +1 -1
  429. package/lib/appui-react/tools/RestoreLayoutTool.d.ts +2 -2
  430. package/lib/appui-react/tools/ToolbarItems.js +1 -1
  431. package/lib/appui-react/tools/ToolbarItems.js.map +1 -1
  432. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.d.ts.map +1 -1
  433. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js +3 -3
  434. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  435. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js +2 -2
  436. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js.map +1 -1
  437. package/lib/appui-react/toolsettings/ToolInformation.js +1 -1
  438. package/lib/appui-react/toolsettings/ToolInformation.js.map +1 -1
  439. package/lib/appui-react/toolsettings/ToolUiProvider.js +1 -1
  440. package/lib/appui-react/toolsettings/ToolUiProvider.js.map +1 -1
  441. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.d.ts +5 -5
  442. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js +1 -1
  443. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  444. package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.d.ts.map +1 -1
  445. package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js +4 -4
  446. package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js.map +1 -1
  447. package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.d.ts.map +1 -1
  448. package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js +3 -3
  449. package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js.map +1 -1
  450. package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.d.ts.map +1 -1
  451. package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +3 -3
  452. package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  453. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.d.ts.map +1 -1
  454. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -1
  455. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  456. package/lib/appui-react/ui-items-provider/UiItemsManager.js +3 -3
  457. package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  458. package/lib/appui-react/uiadmin/FrameworkUiAdmin.js +3 -3
  459. package/lib/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  460. package/lib/appui-react/uiprovider/ComponentGenerator.d.ts.map +1 -1
  461. package/lib/appui-react/uistate/AppUiSettings.js +2 -2
  462. package/lib/appui-react/uistate/AppUiSettings.js.map +1 -1
  463. package/lib/appui-react/uistate/LocalStateStorage.js +1 -1
  464. package/lib/appui-react/uistate/LocalStateStorage.js.map +1 -1
  465. package/lib/appui-react/uistate/UiStateStorage.js +1 -1
  466. package/lib/appui-react/uistate/UiStateStorage.js.map +1 -1
  467. package/lib/appui-react/uistate/useReduxFrameworkState.js +1 -1
  468. package/lib/appui-react/uistate/useReduxFrameworkState.js.map +1 -1
  469. package/lib/appui-react/uistate/useUiStateStorage.js +1 -1
  470. package/lib/appui-react/uistate/useUiStateStorage.js.map +1 -1
  471. package/lib/appui-react/utils/PropsHelper.js +5 -5
  472. package/lib/appui-react/utils/PropsHelper.js.map +1 -1
  473. package/lib/appui-react/utils/RectangleProps.js.map +1 -1
  474. package/lib/appui-react/utils/SizeProps.js.map +1 -1
  475. package/lib/appui-react/utils/ViewUtilities.d.ts.map +1 -1
  476. package/lib/appui-react/utils/ViewUtilities.js.map +1 -1
  477. package/lib/appui-react/utils/getActiveViewport.js +1 -1
  478. package/lib/appui-react/utils/getActiveViewport.js.map +1 -1
  479. package/lib/appui-react/widget-panels/DockedBar.js.map +1 -1
  480. package/lib/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  481. package/lib/appui-react/widget-panels/Frontstage.js +9 -7
  482. package/lib/appui-react/widget-panels/Frontstage.js.map +1 -1
  483. package/lib/appui-react/widget-panels/StatusBar.js +5 -5
  484. package/lib/appui-react/widget-panels/StatusBar.js.map +1 -1
  485. package/lib/appui-react/widget-panels/Tab.js +4 -4
  486. package/lib/appui-react/widget-panels/Tab.js.map +1 -1
  487. package/lib/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  488. package/lib/appui-react/widget-panels/ToolSettings.js +8 -5
  489. package/lib/appui-react/widget-panels/ToolSettings.js.map +1 -1
  490. package/lib/appui-react/widgets/BackstageAppButton.js +2 -2
  491. package/lib/appui-react/widgets/BackstageAppButton.js.map +1 -1
  492. package/lib/appui-react/widgets/BasicNavigationWidget.js +1 -1
  493. package/lib/appui-react/widgets/BasicNavigationWidget.js.map +1 -1
  494. package/lib/appui-react/widgets/BasicToolWidget.js +1 -1
  495. package/lib/appui-react/widgets/BasicToolWidget.js.map +1 -1
  496. package/lib/appui-react/widgets/ContentToolWidgetComposer.js +1 -1
  497. package/lib/appui-react/widgets/ContentToolWidgetComposer.js.map +1 -1
  498. package/lib/appui-react/widgets/NavigationWidgetComposer.js +10 -10
  499. package/lib/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  500. package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js +1 -1
  501. package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js.map +1 -1
  502. package/lib/appui-react/widgets/ToolWidgetComposer.js +1 -1
  503. package/lib/appui-react/widgets/ToolWidgetComposer.js.map +1 -1
  504. package/lib/appui-react/widgets/ViewToolWidgetComposer.js +1 -1
  505. package/lib/appui-react/widgets/ViewToolWidgetComposer.js.map +1 -1
  506. package/lib/appui-react/widgets/Widget.d.ts +11 -2
  507. package/lib/appui-react/widgets/Widget.d.ts.map +1 -1
  508. package/lib/appui-react/widgets/Widget.js.map +1 -1
  509. package/lib/appui-react/widgets/WidgetControl.js +1 -1
  510. package/lib/appui-react/widgets/WidgetControl.js.map +1 -1
  511. package/lib/appui-react/widgets/WidgetDef.js +21 -21
  512. package/lib/appui-react/widgets/WidgetDef.js.map +1 -1
  513. package/lib/appui-react/widgets/WidgetManager.d.ts.map +1 -1
  514. package/lib/appui-react/widgets/useWidget.d.ts.map +1 -1
  515. package/lib/appui-react.js +1 -1
  516. package/lib/appui-react.js.map +1 -1
  517. package/lib/cjs/appui-react/accudraw/AccuDrawInputField.scss +0 -15
  518. package/lib/esm/appui-react/accudraw/AccuDrawInputField.scss +0 -15
  519. package/package.json +20 -21
  520. package/lib/appui-react/layout/widget/tools/button/Back.d.ts +0 -21
  521. package/lib/appui-react/layout/widget/tools/button/Back.d.ts.map +0 -1
  522. package/lib/appui-react/layout/widget/tools/button/Back.js +0 -23
  523. package/lib/appui-react/layout/widget/tools/button/Back.js.map +0 -1
  524. package/lib/appui-react/preview/allow-letters-in-accudraw-input-fields/useAllowLettersInAccuDrawInputFields.d.ts +0 -5
  525. package/lib/appui-react/preview/allow-letters-in-accudraw-input-fields/useAllowLettersInAccuDrawInputFields.d.ts.map +0 -1
  526. package/lib/appui-react/preview/allow-letters-in-accudraw-input-fields/useAllowLettersInAccuDrawInputFields.js.map +0 -1
  527. package/lib/appui-react/preview/enable-colorless-accudraw-input-fields/useEnableColorlessAccuDrawInputFields.d.ts +0 -5
  528. package/lib/appui-react/preview/enable-colorless-accudraw-input-fields/useEnableColorlessAccuDrawInputFields.d.ts.map +0 -1
  529. package/lib/appui-react/preview/enable-colorless-accudraw-input-fields/useEnableColorlessAccuDrawInputFields.js +0 -13
  530. package/lib/appui-react/preview/enable-colorless-accudraw-input-fields/useEnableColorlessAccuDrawInputFields.js.map +0 -1
@@ -5,6 +5,8 @@
5
5
  /** @packageDocumentation
6
6
  * @module Cursor
7
7
  */
8
+ import { create } from "zustand";
9
+ import { produce } from "immer";
8
10
  import { RelativePosition, UiEvent } from "@itwin/appui-abstract";
9
11
  import { Point } from "@itwin/core-react/internal";
10
12
  /** Enum for Cursor Direction parts
@@ -36,7 +38,7 @@ export var CursorDirection;
36
38
  * @public
37
39
  * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.
38
40
  */
39
- // eslint-disable-next-line deprecation/deprecation
41
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
40
42
  export class CursorUpdatedEvent extends UiEvent {
41
43
  }
42
44
  /** Cursor Information class
@@ -148,6 +150,17 @@ CursorInformation._cursorPosition = new Point();
148
150
  CursorInformation._cursorDirection = CursorDirection.BottomRight;
149
151
  CursorInformation._cursorDirections = new Array();
150
152
  /** Gets the [[CursorUpdatedEvent]]. */
151
- // eslint-disable-next-line deprecation/deprecation
153
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
152
154
  CursorInformation.onCursorUpdatedEvent = new CursorUpdatedEvent();
155
+ /** Returns additional information about cursor.
156
+ * @internal
157
+ */
158
+ export const useCursorInformationStore = create((set) => ({
159
+ contentHovered: false,
160
+ setContentHovered: (hovered) => {
161
+ set((state) => produce(state, (draft) => {
162
+ draft.contentHovered = hovered;
163
+ }));
164
+ },
165
+ }));
153
166
  //# sourceMappingURL=CursorInformation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CursorInformation.js","sourceRoot":"","sources":["../../../src/appui-react/cursor/CursorInformation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport { RelativePosition, UiEvent } from \"@itwin/appui-abstract\";\nimport { Point } from \"@itwin/core-react/internal\";\n\n/** Enum for Cursor Direction parts\n * @public\n */\nexport enum CursorDirectionParts {\n Top = 0x1000,\n Left = 0x0100,\n Right = 0x0010,\n Bottom = 0x0001,\n}\n\n/** Enum for Cursor Direction\n * @public\n */\nexport enum CursorDirection {\n None = 0,\n Top = CursorDirectionParts.Top,\n Left = CursorDirectionParts.Left,\n Right = CursorDirectionParts.Right,\n Bottom = CursorDirectionParts.Bottom,\n TopLeft = CursorDirectionParts.Top | CursorDirectionParts.Left,\n TopRight = CursorDirectionParts.Top | CursorDirectionParts.Right,\n BottomLeft = CursorDirectionParts.Bottom | CursorDirectionParts.Left,\n BottomRight = CursorDirectionParts.Bottom | CursorDirectionParts.Right,\n}\n\n/** Cursor Updated Event Args interface.\n * @public\n * @deprecated in 4.13.0. Event args are inferred from a listener. If explicit type is needed use a type helper.\n */\nexport interface CursorUpdatedEventArgs {\n oldPt: XAndY;\n newPt: XAndY;\n direction: CursorDirection;\n}\n\n/** Cursor Updated Event class.\n * @public\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\n// eslint-disable-next-line deprecation/deprecation\nexport class CursorUpdatedEvent extends UiEvent<CursorUpdatedEventArgs> {}\n\n/** Cursor Information class\n * @public\n */\nexport class CursorInformation {\n private static _cursorPosition: Point = new Point();\n private static _cursorDirection: CursorDirection =\n CursorDirection.BottomRight;\n\n private static _cursorDirections = new Array<CursorDirection>();\n\n /** The cursor position. */\n public static get cursorPosition(): XAndY {\n return this._cursorPosition;\n }\n public static set cursorPosition(pt: XAndY) {\n this._cursorPosition = Point.create(pt);\n }\n\n /** Gets the cursor X position. */\n public static get cursorX(): number {\n return this._cursorPosition.x;\n }\n /** Gets the cursor Y position. */\n public static get cursorY(): number {\n return this._cursorPosition.y;\n }\n\n /** Gets the general cursor movement direction. */\n public static get cursorDirection(): CursorDirection {\n return this._cursorDirection;\n }\n\n /** Gets the [[CursorUpdatedEvent]]. */\n // eslint-disable-next-line deprecation/deprecation\n public static readonly onCursorUpdatedEvent = new CursorUpdatedEvent();\n\n /** Handles the mouse movement. Sets the cursor position and direction and emits onCursorUpdatedEvent. */\n public static handleMouseMove(point: XAndY): void {\n const oldPt = CursorInformation.cursorPosition;\n const direction = this._determineMostFrequentDirection(\n this._cursorDirections,\n this._cursorPosition,\n Point.create(point)\n );\n\n this.cursorPosition = point;\n this._cursorDirection = direction;\n\n this.onCursorUpdatedEvent.emit({ oldPt, newPt: point, direction });\n }\n\n private static _determineMostFrequentDirection(\n cursorDirections: CursorDirection[],\n oldPt: Point,\n newPt: Point\n ): CursorDirection {\n const cursorDirection = this._determineCursorDirection(oldPt, newPt);\n cursorDirections.push(cursorDirection);\n if (cursorDirections.length > 10) cursorDirections.shift();\n return this._mostFrequent(cursorDirections);\n }\n\n private static _mostFrequent(array: CursorDirection[]): CursorDirection {\n const hashMap = new Map<CursorDirection, number>();\n let maxCount = 0,\n mostFrequent = CursorDirection.None;\n\n array.forEach((value: CursorDirection) => {\n const key = value;\n let frequency = hashMap.get(key);\n\n if (frequency !== undefined) frequency++;\n else frequency = 1;\n\n hashMap.set(key, frequency);\n\n if (frequency > maxCount) {\n mostFrequent = key;\n maxCount = frequency;\n }\n });\n\n return mostFrequent;\n }\n\n private static _determineCursorDirection(\n oldPt: Point,\n newPt: Point\n ): CursorDirection {\n let directionParts: number = 0;\n\n if (newPt.x < oldPt.x) directionParts |= CursorDirectionParts.Left;\n else if (newPt.x > oldPt.x) directionParts |= CursorDirectionParts.Right;\n\n if (newPt.y < oldPt.y) directionParts |= CursorDirectionParts.Top;\n else if (newPt.y > oldPt.y) directionParts |= CursorDirectionParts.Bottom;\n\n const direction = directionParts as CursorDirection;\n\n return direction;\n }\n\n /** Gets the relative position based on the cursor direction. */\n public static getRelativePositionFromCursorDirection(\n cursorDirection: CursorDirection\n ): RelativePosition {\n let relativePosition: RelativePosition = RelativePosition.BottomRight;\n\n switch (cursorDirection) {\n case CursorDirection.Top:\n relativePosition = RelativePosition.Top;\n break;\n case CursorDirection.Left:\n relativePosition = RelativePosition.Left;\n break;\n case CursorDirection.Right:\n relativePosition = RelativePosition.Right;\n break;\n case CursorDirection.Bottom:\n relativePosition = RelativePosition.Bottom;\n break;\n case CursorDirection.TopLeft:\n relativePosition = RelativePosition.TopLeft;\n break;\n case CursorDirection.TopRight:\n relativePosition = RelativePosition.TopRight;\n break;\n case CursorDirection.BottomLeft:\n relativePosition = RelativePosition.BottomLeft;\n break;\n case CursorDirection.BottomRight:\n relativePosition = RelativePosition.BottomRight;\n break;\n }\n\n return relativePosition;\n }\n\n /** @internal - for testing */\n public static clearCursorDirections(): void {\n this._cursorDirections.length = 0;\n }\n}\n"]}
1
+ {"version":3,"file":"CursorInformation.js","sourceRoot":"","sources":["../../../src/appui-react/cursor/CursorInformation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport { create } from \"zustand\";\nimport { produce } from \"immer\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport { RelativePosition, UiEvent } from \"@itwin/appui-abstract\";\nimport { Point } from \"@itwin/core-react/internal\";\n\n/** Enum for Cursor Direction parts\n * @public\n */\nexport enum CursorDirectionParts {\n Top = 0x1000,\n Left = 0x0100,\n Right = 0x0010,\n Bottom = 0x0001,\n}\n\n/** Enum for Cursor Direction\n * @public\n */\nexport enum CursorDirection {\n None = 0,\n Top = CursorDirectionParts.Top,\n Left = CursorDirectionParts.Left,\n Right = CursorDirectionParts.Right,\n Bottom = CursorDirectionParts.Bottom,\n TopLeft = CursorDirectionParts.Top | CursorDirectionParts.Left,\n TopRight = CursorDirectionParts.Top | CursorDirectionParts.Right,\n BottomLeft = CursorDirectionParts.Bottom | CursorDirectionParts.Left,\n BottomRight = CursorDirectionParts.Bottom | CursorDirectionParts.Right,\n}\n\n/** Cursor Updated Event Args interface.\n * @public\n * @deprecated in 4.13.0. Event args are inferred from a listener. If explicit type is needed use a type helper.\n */\nexport interface CursorUpdatedEventArgs {\n oldPt: XAndY;\n newPt: XAndY;\n direction: CursorDirection;\n}\n\n/** Cursor Updated Event class.\n * @public\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class CursorUpdatedEvent extends UiEvent<CursorUpdatedEventArgs> {}\n\n/** Cursor Information class\n * @public\n */\nexport class CursorInformation {\n private static _cursorPosition: Point = new Point();\n private static _cursorDirection: CursorDirection =\n CursorDirection.BottomRight;\n\n private static _cursorDirections = new Array<CursorDirection>();\n\n /** The cursor position. */\n public static get cursorPosition(): XAndY {\n return this._cursorPosition;\n }\n public static set cursorPosition(pt: XAndY) {\n this._cursorPosition = Point.create(pt);\n }\n\n /** Gets the cursor X position. */\n public static get cursorX(): number {\n return this._cursorPosition.x;\n }\n /** Gets the cursor Y position. */\n public static get cursorY(): number {\n return this._cursorPosition.y;\n }\n\n /** Gets the general cursor movement direction. */\n public static get cursorDirection(): CursorDirection {\n return this._cursorDirection;\n }\n\n /** Gets the [[CursorUpdatedEvent]]. */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public static readonly onCursorUpdatedEvent = new CursorUpdatedEvent();\n\n /** Handles the mouse movement. Sets the cursor position and direction and emits onCursorUpdatedEvent. */\n public static handleMouseMove(point: XAndY): void {\n const oldPt = CursorInformation.cursorPosition;\n const direction = this._determineMostFrequentDirection(\n this._cursorDirections,\n this._cursorPosition,\n Point.create(point)\n );\n\n this.cursorPosition = point;\n this._cursorDirection = direction;\n\n this.onCursorUpdatedEvent.emit({ oldPt, newPt: point, direction });\n }\n\n private static _determineMostFrequentDirection(\n cursorDirections: CursorDirection[],\n oldPt: Point,\n newPt: Point\n ): CursorDirection {\n const cursorDirection = this._determineCursorDirection(oldPt, newPt);\n cursorDirections.push(cursorDirection);\n if (cursorDirections.length > 10) cursorDirections.shift();\n return this._mostFrequent(cursorDirections);\n }\n\n private static _mostFrequent(array: CursorDirection[]): CursorDirection {\n const hashMap = new Map<CursorDirection, number>();\n let maxCount = 0,\n mostFrequent = CursorDirection.None;\n\n array.forEach((value: CursorDirection) => {\n const key = value;\n let frequency = hashMap.get(key);\n\n if (frequency !== undefined) frequency++;\n else frequency = 1;\n\n hashMap.set(key, frequency);\n\n if (frequency > maxCount) {\n mostFrequent = key;\n maxCount = frequency;\n }\n });\n\n return mostFrequent;\n }\n\n private static _determineCursorDirection(\n oldPt: Point,\n newPt: Point\n ): CursorDirection {\n let directionParts: number = 0;\n\n if (newPt.x < oldPt.x) directionParts |= CursorDirectionParts.Left;\n else if (newPt.x > oldPt.x) directionParts |= CursorDirectionParts.Right;\n\n if (newPt.y < oldPt.y) directionParts |= CursorDirectionParts.Top;\n else if (newPt.y > oldPt.y) directionParts |= CursorDirectionParts.Bottom;\n\n const direction = directionParts as CursorDirection;\n\n return direction;\n }\n\n /** Gets the relative position based on the cursor direction. */\n public static getRelativePositionFromCursorDirection(\n cursorDirection: CursorDirection\n ): RelativePosition {\n let relativePosition: RelativePosition = RelativePosition.BottomRight;\n\n switch (cursorDirection) {\n case CursorDirection.Top:\n relativePosition = RelativePosition.Top;\n break;\n case CursorDirection.Left:\n relativePosition = RelativePosition.Left;\n break;\n case CursorDirection.Right:\n relativePosition = RelativePosition.Right;\n break;\n case CursorDirection.Bottom:\n relativePosition = RelativePosition.Bottom;\n break;\n case CursorDirection.TopLeft:\n relativePosition = RelativePosition.TopLeft;\n break;\n case CursorDirection.TopRight:\n relativePosition = RelativePosition.TopRight;\n break;\n case CursorDirection.BottomLeft:\n relativePosition = RelativePosition.BottomLeft;\n break;\n case CursorDirection.BottomRight:\n relativePosition = RelativePosition.BottomRight;\n break;\n }\n\n return relativePosition;\n }\n\n /** @internal - for testing */\n public static clearCursorDirections(): void {\n this._cursorDirections.length = 0;\n }\n}\n\n/** Returns additional information about cursor.\n * @internal\n */\nexport const useCursorInformationStore = create<{\n contentHovered: boolean;\n setContentHovered: (hovered: boolean) => void;\n}>((set) => ({\n contentHovered: false,\n setContentHovered: (hovered: boolean) => {\n set((state) =>\n produce(state, (draft) => {\n draft.contentHovered = hovered;\n })\n );\n },\n}));\n"]}
@@ -16,7 +16,7 @@ interface CursorPopupMenuState {
16
16
  /** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.
17
17
  * @alpha
18
18
  */
19
- export declare class CursorPopupMenu extends React.PureComponent<CommonProps, // eslint-disable-line deprecation/deprecation
19
+ export declare class CursorPopupMenu extends React.PureComponent<CommonProps, // eslint-disable-line @typescript-eslint/no-deprecated
20
20
  CursorPopupMenuState> {
21
21
  private _isMounted;
22
22
  private _hostChildWindowId?;
@@ -1 +1 @@
1
- {"version":3,"file":"CursorMenu.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE;;GAEG;AACH,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK,CAAC,aAAa,CACtD,WAAW,EAAE,8CAA8C;AAC3D,oBAAoB,CACrB;IACC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,SAAyB,KAAK,EAAE,oBAAoB,CAKlD;IAEF,OAAO,CAAC,kBAAkB,CAuBxB;IAEc,iBAAiB;IAKjB,oBAAoB;IAKpC,OAAO,CAAC,aAAa,CAQnB;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IA+BzC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,WAAW,CAEjB;CACH"}
1
+ {"version":3,"file":"CursorMenu.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE;;GAEG;AACH,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK,CAAC,aAAa,CACtD,WAAW,EAAE,uDAAuD;AACpE,oBAAoB,CACrB;IACC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,SAAyB,KAAK,EAAE,oBAAoB,CAKlD;IAEF,OAAO,CAAC,kBAAkB,CAuBxB;IAEc,iBAAiB;IAKjB,oBAAoB;IAKpC,OAAO,CAAC,aAAa,CAQnB;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IA+BzC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,WAAW,CAEjB;CACH"}
@@ -29,7 +29,7 @@ export class CursorPopupMenu extends React.PureComponent {
29
29
  if (!this._isMounted)
30
30
  return;
31
31
  if (SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [
32
- // eslint-disable-next-line deprecation/deprecation
32
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
33
33
  SessionStateActionId.UpdateCursorMenu,
34
34
  ])) {
35
35
  const menuData = UiFramework.getCursorMenuData();
@@ -71,9 +71,9 @@ export class CursorPopupMenu extends React.PureComponent {
71
71
  const { menuX, menuY, items, menuVisible } = this.state;
72
72
  const onClose = this._hideContextMenu;
73
73
  return (React.createElement("div", { className: "uifw-cursor-menu-container-div", ref: this._handleRefSet }, items && items.length > 0 && menuVisible && (
74
- // eslint-disable-next-line deprecation/deprecation
74
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
75
75
  React.createElement(GlobalContextMenu, { className: this.props.className, style: this.props.style, identifier: "cursor-popup-menu", x: menuX, y: menuY, opened: menuVisible, onEsc: onClose, onOutsideClick: onClose, edgeLimit: false, autoflip: true }, MenuItemHelpers.createMenuItemNodes(
76
- // eslint-disable-next-line deprecation/deprecation
76
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
77
77
  MenuItemHelpers.createMenuItems(items, this._itemPicked))))));
78
78
  }
79
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { GlobalContextMenu } from \"@itwin/core-react\"; // ContextSubMenu,\nimport { SessionStateActionId } from \"../../redux/SessionState.js\";\nimport type { CursorMenuItemProps } from \"../../shared/MenuItem.js\";\nimport { MenuItemHelpers } from \"../../shared/MenuItem.js\";\nimport { SyncUiEventDispatcher } from \"../../syncui/SyncUiEventDispatcher.js\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { Logger } from \"@itwin/core-bentley\";\n\n/** State for [[CursorPopupMenu]] component\n * @alpha\n */\ninterface CursorPopupMenuState {\n menuX: number;\n menuY: number;\n menuVisible: boolean;\n items?: CursorMenuItemProps[];\n}\n\n/** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.\n * @alpha\n */\nexport class CursorPopupMenu extends React.PureComponent<\n CommonProps, // eslint-disable-line deprecation/deprecation\n CursorPopupMenuState\n> {\n private _isMounted = false; // used to ensure _handleSyncUiEvent callback is not processed after componentWillUnmount is called\n private _hostChildWindowId?: string;\n\n public override readonly state: CursorPopupMenuState = {\n menuX: 0,\n menuY: 0,\n menuVisible: false,\n items: undefined,\n };\n\n private _handleSyncUiEvent: ListenerType<\n typeof SyncUiEventDispatcher.onSyncUiEvent\n > = (args) => {\n if (!this._isMounted) return;\n\n if (\n SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [\n // eslint-disable-next-line deprecation/deprecation\n SessionStateActionId.UpdateCursorMenu,\n ])\n ) {\n const menuData = UiFramework.getCursorMenuData();\n if (menuData && this._hostChildWindowId === menuData.childWindowId) {\n this.setState({\n menuVisible: menuData.items && menuData.items.length > 0,\n items: menuData.items as CursorMenuItemProps[],\n menuX: menuData.position.x,\n menuY: menuData.position.y,\n });\n } else {\n this.setState({ menuVisible: false, items: undefined });\n }\n }\n };\n\n public override componentDidMount() {\n this._isMounted = true;\n SyncUiEventDispatcher.onSyncUiEvent.addListener(this._handleSyncUiEvent);\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n SyncUiEventDispatcher.onSyncUiEvent.removeListener(this._handleSyncUiEvent);\n }\n\n private _handleRefSet = (popupDiv: HTMLElement | null) => {\n const parentWindow = popupDiv?.ownerDocument.defaultView ?? undefined;\n // if the window is not a pop out set to undefined\n this._hostChildWindowId = UiFramework.childWindows.findId(parentWindow);\n Logger.logInfo(\n UiFramework.loggerCategory(\"UiFramework\"),\n `Cursor Menu for ${this._hostChildWindowId ?? \"main\"} window`\n );\n };\n\n public override render(): React.ReactNode {\n const { menuX, menuY, items, menuVisible } = this.state;\n const onClose = this._hideContextMenu;\n\n return (\n <div className=\"uifw-cursor-menu-container-div\" ref={this._handleRefSet}>\n {items && items.length > 0 && menuVisible && (\n // eslint-disable-next-line deprecation/deprecation\n <GlobalContextMenu\n className={this.props.className}\n style={this.props.style}\n identifier=\"cursor-popup-menu\"\n x={menuX}\n y={menuY}\n opened={menuVisible}\n onEsc={onClose}\n onOutsideClick={onClose}\n edgeLimit={false}\n autoflip={true}\n >\n {/* eslint-disable-next-line deprecation/deprecation */}\n {MenuItemHelpers.createMenuItemNodes(\n // eslint-disable-next-line deprecation/deprecation\n MenuItemHelpers.createMenuItems(items, this._itemPicked)\n )}\n </GlobalContextMenu>\n )}\n </div>\n );\n }\n\n private _hideContextMenu = () => {\n this.setState({ menuVisible: false });\n };\n\n private _itemPicked = (): void => {\n this._hideContextMenu();\n };\n}\n"]}
1
+ {"version":3,"file":"CursorMenu.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursormenu/CursorMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { GlobalContextMenu } from \"@itwin/core-react\"; // ContextSubMenu,\nimport { SessionStateActionId } from \"../../redux/SessionState.js\";\nimport type { CursorMenuItemProps } from \"../../shared/MenuItem.js\";\nimport { MenuItemHelpers } from \"../../shared/MenuItem.js\";\nimport { SyncUiEventDispatcher } from \"../../syncui/SyncUiEventDispatcher.js\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { Logger } from \"@itwin/core-bentley\";\n\n/** State for [[CursorPopupMenu]] component\n * @alpha\n */\ninterface CursorPopupMenuState {\n menuX: number;\n menuY: number;\n menuVisible: boolean;\n items?: CursorMenuItemProps[];\n}\n\n/** Popup Menu to show at cursor typically used by tools to provide a right-click context menu.\n * @alpha\n */\nexport class CursorPopupMenu extends React.PureComponent<\n CommonProps, // eslint-disable-line @typescript-eslint/no-deprecated\n CursorPopupMenuState\n> {\n private _isMounted = false; // used to ensure _handleSyncUiEvent callback is not processed after componentWillUnmount is called\n private _hostChildWindowId?: string;\n\n public override readonly state: CursorPopupMenuState = {\n menuX: 0,\n menuY: 0,\n menuVisible: false,\n items: undefined,\n };\n\n private _handleSyncUiEvent: ListenerType<\n typeof SyncUiEventDispatcher.onSyncUiEvent\n > = (args) => {\n if (!this._isMounted) return;\n\n if (\n SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, [\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n SessionStateActionId.UpdateCursorMenu,\n ])\n ) {\n const menuData = UiFramework.getCursorMenuData();\n if (menuData && this._hostChildWindowId === menuData.childWindowId) {\n this.setState({\n menuVisible: menuData.items && menuData.items.length > 0,\n items: menuData.items as CursorMenuItemProps[],\n menuX: menuData.position.x,\n menuY: menuData.position.y,\n });\n } else {\n this.setState({ menuVisible: false, items: undefined });\n }\n }\n };\n\n public override componentDidMount() {\n this._isMounted = true;\n SyncUiEventDispatcher.onSyncUiEvent.addListener(this._handleSyncUiEvent);\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n SyncUiEventDispatcher.onSyncUiEvent.removeListener(this._handleSyncUiEvent);\n }\n\n private _handleRefSet = (popupDiv: HTMLElement | null) => {\n const parentWindow = popupDiv?.ownerDocument.defaultView ?? undefined;\n // if the window is not a pop out set to undefined\n this._hostChildWindowId = UiFramework.childWindows.findId(parentWindow);\n Logger.logInfo(\n UiFramework.loggerCategory(\"UiFramework\"),\n `Cursor Menu for ${this._hostChildWindowId ?? \"main\"} window`\n );\n };\n\n public override render(): React.ReactNode {\n const { menuX, menuY, items, menuVisible } = this.state;\n const onClose = this._hideContextMenu;\n\n return (\n <div className=\"uifw-cursor-menu-container-div\" ref={this._handleRefSet}>\n {items && items.length > 0 && menuVisible && (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <GlobalContextMenu\n className={this.props.className}\n style={this.props.style}\n identifier=\"cursor-popup-menu\"\n x={menuX}\n y={menuY}\n opened={menuVisible}\n onEsc={onClose}\n onOutsideClick={onClose}\n edgeLimit={false}\n autoflip={true}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n {MenuItemHelpers.createMenuItemNodes(\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n MenuItemHelpers.createMenuItems(items, this._itemPicked)\n )}\n </GlobalContextMenu>\n )}\n </div>\n );\n }\n\n private _hideContextMenu = () => {\n this.setState({ menuVisible: false });\n };\n\n private _itemPicked = (): void => {\n this._hideContextMenu();\n };\n}\n"]}
@@ -22,7 +22,7 @@ export type CursorPopupProps = {
22
22
  shadow?: boolean;
23
23
  /** Function called when size is known. */
24
24
  onSizeKnown?: (size: SizeProps) => void;
25
- } & CommonProps & // eslint-disable-line deprecation/deprecation
25
+ } & CommonProps & // eslint-disable-line @typescript-eslint/no-deprecated
26
26
  RequireAtLeastOne<{
27
27
  /** @deprecated in 4.16.0. Use `placement` property instead. */
28
28
  relativePosition: RelativePosition;
@@ -1 +1 @@
1
- {"version":3,"file":"CursorPopup.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopup.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACzC,GAAG,WAAW,GAAG,8CAA8C;AAC9D,iBAAiB,CAAC;IAChB,+DAA+D;IAC/D,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEL;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,IAAA;IACJ,OAAO,IAAA;CACR;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAC9C,gBAAgB,EAChB,gBAAgB,CACjB;IACC,OAAO,CAAC,UAAU,CAAkB;IAEpC,gBAAgB;IAChB,OAAc,WAAW,SAAO;gBAEpB,KAAK,EAAE,gBAAgB;IASnB,iBAAiB;IAOjB,oBAAoB;IAOpC,OAAO,CAAC,8BAA8B,CAOpC;IAEF,gBAAgB;WACF,YAAY,CACxB,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAC7C,cAAc;IA8GjB,OAAO,CAAC,SAAS;IAeD,MAAM;CAqCvB;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,qBAGvD"}
1
+ {"version":3,"file":"CursorPopup.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopup.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CACzC,GAAG,WAAW,GAAG,uDAAuD;AACvE,iBAAiB,CAAC;IAChB,+DAA+D;IAC/D,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC,CAAC;AAEL;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,IAAA;IACJ,OAAO,IAAA;CACR;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAC9C,gBAAgB,EAChB,gBAAgB,CACjB;IACC,OAAO,CAAC,UAAU,CAAkB;IAEpC,gBAAgB;IAChB,OAAc,WAAW,SAAO;gBAEpB,KAAK,EAAE,gBAAgB;IASnB,iBAAiB;IAOjB,oBAAoB;IAOpC,OAAO,CAAC,8BAA8B,CAOpC;IAEF,gBAAgB;WACF,YAAY,CACxB,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAC7C,cAAc;IA8GjB,OAAO,CAAC,SAAS;IAeD,MAAM;CAqCvB;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,qBAGvD"}
@@ -30,7 +30,7 @@ export class CursorPopup extends React.Component {
30
30
  this._handleCursorPopupFadeOutEvent = (args) => {
31
31
  if (this.props.id === args.id) {
32
32
  if (this._isMounted)
33
- this.setState({ showPopup: CursorPopupShow.FadeOut });
33
+ this.setState({ showPopup: args.show ?? CursorPopupShow.FadeOut });
34
34
  }
35
35
  };
36
36
  this.state = {
@@ -167,7 +167,7 @@ export class CursorPopup extends React.Component {
167
167
  }
168
168
  render() {
169
169
  const popupRect = CursorPopup.getPopupRect(this.props.pt, this.props.offset, this.state.size,
170
- // eslint-disable-next-line deprecation/deprecation
170
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
171
171
  this.props.placement || this.props.relativePosition);
172
172
  const positioningStyle = {
173
173
  left: popupRect.left,
@@ -185,9 +185,9 @@ CursorPopup.fadeOutTime = 500;
185
185
  /** CursorPopup content with padding
186
186
  * @public
187
187
  */
188
- // eslint-disable-next-line deprecation/deprecation
188
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
189
189
  export function CursorPopupContent(props) {
190
- // eslint-disable-next-line deprecation/deprecation
190
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
191
191
  return React.createElement(Div, { ...props, mainClassName: "uifw-cursorpopup-content" });
192
192
  }
193
193
  //# sourceMappingURL=CursorPopup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CursorPopup.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopup.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport type { CommonDivProps, CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Div } from \"@itwin/core-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { StatusBarDialog } from \"../../statusbar/dialog/Dialog.js\";\nimport \"./CursorPopup.scss\";\nimport { CursorPopupManager } from \"./CursorPopupManager.js\";\nimport { type Placement } from \"../../utils/Placement.js\";\nimport type { RequireAtLeastOne } from \"@itwin/core-bentley\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\nimport type { RectangleProps } from \"../../utils/RectangleProps.js\";\n\n/** Properties for the [[CursorPopup]] React component\n * @public\n */\nexport type CursorPopupProps = {\n id: string;\n content: React.ReactNode;\n pt: XAndY;\n offset: XAndY;\n title?: string;\n shadow?: boolean;\n /** Function called when size is known. */\n onSizeKnown?: (size: SizeProps) => void;\n} & CommonProps & // eslint-disable-line deprecation/deprecation\n RequireAtLeastOne<{\n /** @deprecated in 4.16.0. Use `placement` property instead. */\n relativePosition: RelativePosition;\n placement: Placement;\n }>;\n\n/** Enum for showing CursorPopup\n * @internal - unit testing\n */\nexport enum CursorPopupShow {\n Open,\n FadeOut,\n}\n\n/** State for the [[CursorPopup]] React component\n * @internal\n */\ninterface CursorPopupState {\n showPopup: CursorPopupShow;\n size: SizeProps;\n}\n\n/** CursorPopup React component\n * @public\n */\nexport class CursorPopup extends React.Component<\n CursorPopupProps,\n CursorPopupState\n> {\n private _isMounted: boolean = false;\n\n /** @internal */\n public static fadeOutTime = 500;\n\n constructor(props: CursorPopupProps) {\n super(props);\n\n this.state = {\n showPopup: CursorPopupShow.Open,\n size: { width: -1, height: -1 },\n };\n }\n\n public override componentDidMount() {\n this._isMounted = true;\n CursorPopupManager.onCursorPopupFadeOutEvent.addListener(\n this._handleCursorPopupFadeOutEvent\n );\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n CursorPopupManager.onCursorPopupFadeOutEvent.removeListener(\n this._handleCursorPopupFadeOutEvent\n );\n }\n\n private _handleCursorPopupFadeOutEvent: ListenerType<\n typeof CursorPopupManager.onCursorPopupFadeOutEvent\n > = (args) => {\n if (this.props.id === args.id) {\n if (this._isMounted)\n this.setState({ showPopup: CursorPopupShow.FadeOut });\n }\n };\n\n /** @internal */\n public static getPopupRect(\n pt: XAndY,\n offset: XAndY,\n popupSize: SizeProps | undefined,\n relativePosition: RelativePosition | Placement\n ): RectangleProps {\n const popupRect = { top: 0, left: 0, right: 0, bottom: 0 };\n if (popupSize === undefined) return popupRect;\n\n if (typeof relativePosition === \"string\") {\n const placement = relativePosition.split(\"-\");\n const [mainPlacement, subPlacement] = placement;\n\n switch (mainPlacement) {\n case \"top\":\n popupRect.left = pt.x - popupSize.width / 2 - offset.x;\n popupRect.top = pt.y - offset.y + popupSize.height;\n break;\n case \"left\":\n popupRect.left = pt.x - popupSize.width - offset.x;\n popupRect.top = pt.y + popupSize.height / 2 - offset.y;\n break;\n case \"right\":\n popupRect.left = pt.x + offset.x;\n popupRect.top = pt.y + popupSize.height / 2 - offset.y;\n break;\n case \"bottom\":\n popupRect.left = pt.x - popupSize.width / 2 - offset.x;\n popupRect.top = pt.y + offset.y;\n break;\n }\n\n if (subPlacement === \"start\") {\n switch (mainPlacement) {\n case \"top\":\n case \"bottom\":\n popupRect.left = pt.x - offset.x;\n\n break;\n case \"left\":\n case \"right\":\n popupRect.top = pt.y - offset.y;\n break;\n }\n } else if (subPlacement === \"end\") {\n switch (mainPlacement) {\n case \"top\":\n case \"bottom\":\n popupRect.left = pt.x - popupSize.width - offset.x;\n break;\n case \"left\":\n case \"right\":\n popupRect.top = popupSize.height + pt.y - offset.y;\n break;\n }\n }\n\n popupRect.right = popupRect.left + popupSize.width;\n popupRect.bottom = popupRect.top + popupSize.height;\n } else {\n switch (relativePosition) {\n case RelativePosition.Top:\n popupRect.bottom = pt.y - offset.y;\n popupRect.left = pt.x - popupSize.width / 2;\n popupRect.top = popupRect.bottom - popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n case RelativePosition.Left:\n popupRect.right = pt.x - offset.x;\n popupRect.top = pt.y - popupSize.height / 2;\n popupRect.left = popupRect.right - popupSize.width;\n popupRect.bottom = popupRect.top + popupSize.height;\n break;\n case RelativePosition.Right:\n popupRect.left = pt.x + offset.x;\n popupRect.top = pt.y - popupSize.height / 2;\n popupRect.right = popupRect.left + popupSize.width;\n popupRect.bottom = popupRect.top + popupSize.height;\n break;\n case RelativePosition.Bottom:\n popupRect.top = pt.y + offset.y;\n popupRect.left = pt.x - popupSize.width / 2;\n popupRect.bottom = popupRect.top + popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n case RelativePosition.TopLeft:\n popupRect.bottom = pt.y - offset.y;\n popupRect.right = pt.x - offset.x;\n popupRect.top = popupRect.bottom - popupSize.height;\n popupRect.left = popupRect.right - popupSize.width;\n break;\n case RelativePosition.TopRight:\n popupRect.bottom = pt.y - offset.y;\n popupRect.left = pt.x + offset.x;\n popupRect.top = popupRect.bottom - popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n case RelativePosition.BottomLeft:\n popupRect.top = pt.y + offset.y;\n popupRect.right = pt.x - offset.x;\n popupRect.bottom = popupRect.top + popupSize.height;\n popupRect.left = popupRect.right - popupSize.width;\n break;\n case RelativePosition.BottomRight:\n popupRect.top = pt.y + offset.y;\n popupRect.left = pt.x + offset.x;\n popupRect.bottom = popupRect.top + popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n }\n }\n\n return popupRect;\n }\n\n private setDivRef(div: HTMLDivElement | null) {\n if (div) {\n const rect = div.getBoundingClientRect();\n const newSize = { width: rect.width, height: rect.height };\n if (\n newSize.height === this.state.size.height &&\n newSize.width === this.state.size.width\n )\n return;\n\n this.props.onSizeKnown?.(newSize);\n if (this._isMounted) this.setState({ size: newSize });\n }\n }\n\n public override render() {\n const popupRect = CursorPopup.getPopupRect(\n this.props.pt,\n this.props.offset,\n this.state.size,\n // eslint-disable-next-line deprecation/deprecation\n this.props.placement || this.props.relativePosition\n );\n\n const positioningStyle: React.CSSProperties = {\n left: popupRect.left,\n top: popupRect.top,\n };\n\n const classNames = classnames(\n \"uifw-cursorpopup\",\n this.props.shadow && \"core-popup-shadow\",\n this.state.showPopup === CursorPopupShow.FadeOut &&\n \"uifw-cursorpopup-fadeOut\"\n );\n\n return (\n <div\n className={classNames}\n ref={(e) => this.setDivRef(e)}\n style={positioningStyle}\n >\n {this.props.title && (\n <StatusBarDialog.TitleBar\n title={this.props.title}\n className=\"uifw-cursorpopup-title\"\n />\n )}\n {this.props.content}\n </div>\n );\n }\n}\n\n/** CursorPopup content with padding\n * @public\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function CursorPopupContent(props: CommonDivProps) {\n // eslint-disable-next-line deprecation/deprecation\n return <Div {...props} mainClassName=\"uifw-cursorpopup-content\" />;\n}\n"]}
1
+ {"version":3,"file":"CursorPopup.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopup.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport type { CommonDivProps, CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Div } from \"@itwin/core-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { StatusBarDialog } from \"../../statusbar/dialog/Dialog.js\";\nimport \"./CursorPopup.scss\";\nimport { CursorPopupManager } from \"./CursorPopupManager.js\";\nimport { type Placement } from \"../../utils/Placement.js\";\nimport type { RequireAtLeastOne } from \"@itwin/core-bentley\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\nimport type { RectangleProps } from \"../../utils/RectangleProps.js\";\n\n/** Properties for the [[CursorPopup]] React component\n * @public\n */\nexport type CursorPopupProps = {\n id: string;\n content: React.ReactNode;\n pt: XAndY;\n offset: XAndY;\n title?: string;\n shadow?: boolean;\n /** Function called when size is known. */\n onSizeKnown?: (size: SizeProps) => void;\n} & CommonProps & // eslint-disable-line @typescript-eslint/no-deprecated\n RequireAtLeastOne<{\n /** @deprecated in 4.16.0. Use `placement` property instead. */\n relativePosition: RelativePosition;\n placement: Placement;\n }>;\n\n/** Enum for showing CursorPopup\n * @internal - unit testing\n */\nexport enum CursorPopupShow {\n Open,\n FadeOut,\n}\n\n/** State for the [[CursorPopup]] React component\n * @internal\n */\ninterface CursorPopupState {\n showPopup: CursorPopupShow;\n size: SizeProps;\n}\n\n/** CursorPopup React component\n * @public\n */\nexport class CursorPopup extends React.Component<\n CursorPopupProps,\n CursorPopupState\n> {\n private _isMounted: boolean = false;\n\n /** @internal */\n public static fadeOutTime = 500;\n\n constructor(props: CursorPopupProps) {\n super(props);\n\n this.state = {\n showPopup: CursorPopupShow.Open,\n size: { width: -1, height: -1 },\n };\n }\n\n public override componentDidMount() {\n this._isMounted = true;\n CursorPopupManager.onCursorPopupFadeOutEvent.addListener(\n this._handleCursorPopupFadeOutEvent\n );\n }\n\n public override componentWillUnmount() {\n this._isMounted = false;\n CursorPopupManager.onCursorPopupFadeOutEvent.removeListener(\n this._handleCursorPopupFadeOutEvent\n );\n }\n\n private _handleCursorPopupFadeOutEvent: ListenerType<\n typeof CursorPopupManager.onCursorPopupFadeOutEvent\n > = (args) => {\n if (this.props.id === args.id) {\n if (this._isMounted)\n this.setState({ showPopup: args.show ?? CursorPopupShow.FadeOut });\n }\n };\n\n /** @internal */\n public static getPopupRect(\n pt: XAndY,\n offset: XAndY,\n popupSize: SizeProps | undefined,\n relativePosition: RelativePosition | Placement\n ): RectangleProps {\n const popupRect = { top: 0, left: 0, right: 0, bottom: 0 };\n if (popupSize === undefined) return popupRect;\n\n if (typeof relativePosition === \"string\") {\n const placement = relativePosition.split(\"-\");\n const [mainPlacement, subPlacement] = placement;\n\n switch (mainPlacement) {\n case \"top\":\n popupRect.left = pt.x - popupSize.width / 2 - offset.x;\n popupRect.top = pt.y - offset.y + popupSize.height;\n break;\n case \"left\":\n popupRect.left = pt.x - popupSize.width - offset.x;\n popupRect.top = pt.y + popupSize.height / 2 - offset.y;\n break;\n case \"right\":\n popupRect.left = pt.x + offset.x;\n popupRect.top = pt.y + popupSize.height / 2 - offset.y;\n break;\n case \"bottom\":\n popupRect.left = pt.x - popupSize.width / 2 - offset.x;\n popupRect.top = pt.y + offset.y;\n break;\n }\n\n if (subPlacement === \"start\") {\n switch (mainPlacement) {\n case \"top\":\n case \"bottom\":\n popupRect.left = pt.x - offset.x;\n\n break;\n case \"left\":\n case \"right\":\n popupRect.top = pt.y - offset.y;\n break;\n }\n } else if (subPlacement === \"end\") {\n switch (mainPlacement) {\n case \"top\":\n case \"bottom\":\n popupRect.left = pt.x - popupSize.width - offset.x;\n break;\n case \"left\":\n case \"right\":\n popupRect.top = popupSize.height + pt.y - offset.y;\n break;\n }\n }\n\n popupRect.right = popupRect.left + popupSize.width;\n popupRect.bottom = popupRect.top + popupSize.height;\n } else {\n switch (relativePosition) {\n case RelativePosition.Top:\n popupRect.bottom = pt.y - offset.y;\n popupRect.left = pt.x - popupSize.width / 2;\n popupRect.top = popupRect.bottom - popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n case RelativePosition.Left:\n popupRect.right = pt.x - offset.x;\n popupRect.top = pt.y - popupSize.height / 2;\n popupRect.left = popupRect.right - popupSize.width;\n popupRect.bottom = popupRect.top + popupSize.height;\n break;\n case RelativePosition.Right:\n popupRect.left = pt.x + offset.x;\n popupRect.top = pt.y - popupSize.height / 2;\n popupRect.right = popupRect.left + popupSize.width;\n popupRect.bottom = popupRect.top + popupSize.height;\n break;\n case RelativePosition.Bottom:\n popupRect.top = pt.y + offset.y;\n popupRect.left = pt.x - popupSize.width / 2;\n popupRect.bottom = popupRect.top + popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n case RelativePosition.TopLeft:\n popupRect.bottom = pt.y - offset.y;\n popupRect.right = pt.x - offset.x;\n popupRect.top = popupRect.bottom - popupSize.height;\n popupRect.left = popupRect.right - popupSize.width;\n break;\n case RelativePosition.TopRight:\n popupRect.bottom = pt.y - offset.y;\n popupRect.left = pt.x + offset.x;\n popupRect.top = popupRect.bottom - popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n case RelativePosition.BottomLeft:\n popupRect.top = pt.y + offset.y;\n popupRect.right = pt.x - offset.x;\n popupRect.bottom = popupRect.top + popupSize.height;\n popupRect.left = popupRect.right - popupSize.width;\n break;\n case RelativePosition.BottomRight:\n popupRect.top = pt.y + offset.y;\n popupRect.left = pt.x + offset.x;\n popupRect.bottom = popupRect.top + popupSize.height;\n popupRect.right = popupRect.left + popupSize.width;\n break;\n }\n }\n\n return popupRect;\n }\n\n private setDivRef(div: HTMLDivElement | null) {\n if (div) {\n const rect = div.getBoundingClientRect();\n const newSize = { width: rect.width, height: rect.height };\n if (\n newSize.height === this.state.size.height &&\n newSize.width === this.state.size.width\n )\n return;\n\n this.props.onSizeKnown?.(newSize);\n if (this._isMounted) this.setState({ size: newSize });\n }\n }\n\n public override render() {\n const popupRect = CursorPopup.getPopupRect(\n this.props.pt,\n this.props.offset,\n this.state.size,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.props.placement || this.props.relativePosition\n );\n\n const positioningStyle: React.CSSProperties = {\n left: popupRect.left,\n top: popupRect.top,\n };\n\n const classNames = classnames(\n \"uifw-cursorpopup\",\n this.props.shadow && \"core-popup-shadow\",\n this.state.showPopup === CursorPopupShow.FadeOut &&\n \"uifw-cursorpopup-fadeOut\"\n );\n\n return (\n <div\n className={classNames}\n ref={(e) => this.setDivRef(e)}\n style={positioningStyle}\n >\n {this.props.title && (\n <StatusBarDialog.TitleBar\n title={this.props.title}\n className=\"uifw-cursorpopup-title\"\n />\n )}\n {this.props.content}\n </div>\n );\n }\n}\n\n/** CursorPopup content with padding\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function CursorPopupContent(props: CommonDivProps) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return <Div {...props} mainClassName=\"uifw-cursorpopup-content\" />;\n}\n"]}
@@ -6,6 +6,7 @@ import { BeUiEvent } from "@itwin/core-bentley";
6
6
  import type { XAndY } from "@itwin/core-geometry";
7
7
  import { RelativePosition } from "@itwin/appui-abstract";
8
8
  import { Point } from "@itwin/core-react/internal";
9
+ import { CursorPopupShow } from "./CursorPopup.js";
9
10
  import type { SizeProps } from "../../utils/SizeProps.js";
10
11
  /** Options for the [[CursorPopupManager]] open method
11
12
  * @public
@@ -30,6 +31,7 @@ interface CursorPopupInfo {
30
31
  options?: CursorPopupOptions;
31
32
  renderRelativePosition: RelativePosition;
32
33
  popupSize?: SizeProps;
34
+ cancelFadeOut?: () => void;
33
35
  }
34
36
  /** CursorPopup component
35
37
  * @public
@@ -43,9 +45,10 @@ export declare class CursorPopupManager {
43
45
  /** @internal */
44
46
  static readonly onCursorPopupFadeOutEvent: BeUiEvent<{
45
47
  id: string;
48
+ show?: CursorPopupShow;
46
49
  }>;
47
50
  /** @internal */
48
- static readonly onCursorPopupsChangedEvent: BeUiEvent<{}>;
51
+ static readonly onCursorPopupsChangedEvent: BeUiEvent<object>;
49
52
  /** @internal */
50
53
  static clearPopups(): void;
51
54
  static get popups(): CursorPopupInfo[];
@@ -1 +1 @@
1
- {"version":3,"file":"CursorPopupManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CursorPopupManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { BeUiEvent, Logger } from "@itwin/core-bentley";
10
10
  import { RelativePosition } from "@itwin/appui-abstract";
11
11
  import { Point } from "@itwin/core-react/internal";
12
12
  import { UiFramework } from "../../UiFramework.js";
13
+ import { CursorPopupShow } from "./CursorPopup.js";
13
14
  import { CursorPopup } from "./CursorPopup.js";
14
15
  /** CursorPopup component
15
16
  * @public
@@ -38,25 +39,33 @@ export class CursorPopupManager {
38
39
  static open(id, content, pt, offset, relativePosition, priority = 0, options) {
39
40
  const popupInfo = CursorPopupManager._popups.find((info) => id === info.id);
40
41
  if (popupInfo) {
42
+ CursorPopupManager.onCursorPopupFadeOutEvent.emit({
43
+ id,
44
+ show: CursorPopupShow.Open,
45
+ });
41
46
  popupInfo.content = content;
42
47
  popupInfo.offset = Point.create(offset);
43
48
  popupInfo.relativePosition = relativePosition;
44
49
  popupInfo.renderRelativePosition = relativePosition;
45
50
  popupInfo.priority = priority;
46
51
  popupInfo.options = options;
52
+ CursorPopupManager.updatePosition(pt);
53
+ if (popupInfo.cancelFadeOut) {
54
+ popupInfo.cancelFadeOut();
55
+ popupInfo.cancelFadeOut = undefined;
56
+ }
57
+ return;
47
58
  }
48
- else {
49
- const newPopupInfo = {
50
- id,
51
- content,
52
- offset: Point.create(offset),
53
- relativePosition,
54
- options,
55
- renderRelativePosition: relativePosition,
56
- priority,
57
- };
58
- CursorPopupManager.pushPopup(newPopupInfo);
59
- }
59
+ const newPopupInfo = {
60
+ id,
61
+ content,
62
+ offset: Point.create(offset),
63
+ relativePosition,
64
+ options,
65
+ renderRelativePosition: relativePosition,
66
+ priority,
67
+ };
68
+ CursorPopupManager.pushPopup(newPopupInfo);
60
69
  CursorPopupManager.updatePosition(pt);
61
70
  }
62
71
  /** Called to update popup with a new set of properties
@@ -85,26 +94,32 @@ export class CursorPopupManager {
85
94
  */
86
95
  static close(id, apply, fadeOut) {
87
96
  const popupInfo = CursorPopupManager._popups.find((info) => id === info.id);
88
- if (popupInfo) {
89
- if (popupInfo.options) {
90
- if (apply && popupInfo.options.onApply)
91
- popupInfo.options.onApply();
92
- if (popupInfo.options.onClose)
93
- popupInfo.options.onClose();
94
- }
95
- if (fadeOut) {
96
- CursorPopupManager.onCursorPopupFadeOutEvent.emit({ id });
97
- setTimeout(() => {
98
- CursorPopupManager.removePopup(id);
99
- }, CursorPopup.fadeOutTime);
100
- }
101
- else {
102
- CursorPopupManager.removePopup(id);
103
- }
104
- }
105
- else {
97
+ if (!popupInfo) {
106
98
  Logger.logError(UiFramework.loggerCategory("CursorPopupManager"), `close: Could not find popup with id of '${id}'`);
99
+ return;
100
+ }
101
+ if (apply)
102
+ popupInfo.options?.onApply?.();
103
+ popupInfo.options?.onClose?.();
104
+ if (fadeOut) {
105
+ // Already closing
106
+ if (popupInfo.cancelFadeOut)
107
+ return;
108
+ let cancelled = false;
109
+ popupInfo.cancelFadeOut = () => {
110
+ cancelled = true;
111
+ };
112
+ CursorPopupManager.onCursorPopupFadeOutEvent.emit({ id });
113
+ setTimeout(() => {
114
+ if (cancelled)
115
+ return;
116
+ CursorPopupManager.removePopup(id);
117
+ }, CursorPopup.fadeOutTime);
118
+ return;
107
119
  }
120
+ popupInfo.cancelFadeOut?.();
121
+ popupInfo.cancelFadeOut = undefined;
122
+ CursorPopupManager.removePopup(id);
108
123
  }
109
124
  static removePopup(id) {
110
125
  const index = CursorPopupManager._popups.findIndex((popupInfo) => id === popupInfo.id);
@@ -1 +1 @@
1
- {"version":3,"file":"CursorPopupManager.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA+B/C;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAa7B,gBAAgB;IACT,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;IAC/C,CAAC;IAEM,MAAM,KAAK,MAAM;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,MAAM,KAAK,UAAU;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,uBAAuB;QACpC,kBAAkB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,SAA0B;QACjD,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;IAC/C,CAAC;IAED;OACG;IACI,MAAM,CAAC,IAAI,CAChB,EAAU,EACV,OAAwB,EACxB,EAAS,EACT,MAAa,EACb,gBAAkC,EAClC,WAAmB,CAAC,EACpB,OAA4B;QAE5B,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,IAAqB,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAC1C,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5B,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxC,SAAS,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC9C,SAAS,CAAC,sBAAsB,GAAG,gBAAgB,CAAC;YACpD,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC9B,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAoB;gBACpC,EAAE;gBACF,OAAO;gBACP,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5B,gBAAgB;gBAChB,OAAO;gBACP,sBAAsB,EAAE,gBAAgB;gBACxC,QAAQ;aACT,CAAC;YACF,kBAAkB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;OACG;IACI,MAAM,CAAC,MAAM,CAClB,EAAU,EACV,OAAwB,EACxB,EAAS,EACT,MAAa,EACb,gBAAkC,EAClC,WAAmB,CAAC;QAEpB,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,IAAqB,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAC1C,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5B,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxC,SAAS,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC9C,SAAS,CAAC,sBAAsB,GAAG,gBAAgB,CAAC;YACpD,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CACb,WAAW,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAChD,4CAA4C,EAAE,GAAG,CAClD,CAAC;QACJ,CAAC;QAED,kBAAkB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;OACG;IACI,MAAM,CAAC,cAAc,CAAC,EAAS;QACpC,kBAAkB,CAAC,iCAAiC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,kBAAkB,CAAC,gCAAgC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAED;OACG;IACI,MAAM,CAAC,KAAK,CAAC,EAAU,EAAE,KAAc,EAAE,OAAiB;QAC/D,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAC/C,CAAC,IAAqB,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAC1C,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,KAAK,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO;oBAAE,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAEpE,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO;oBAAE,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7D,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,kBAAkB,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1D,UAAU,CAAC,GAAG,EAAE;oBACd,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CACb,WAAW,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAChD,2CAA2C,EAAE,GAAG,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,EAAU;QACnC,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAChD,CAAC,SAA0B,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CACpD,CAAC;QACF,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,iCAAiC,CAAC,EAAS;QACxD,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAA0B,EAAE,EAAE;YAC/D,SAAS,CAAC,sBAAsB,GAAG,SAAS,CAAC,gBAAgB,CAAC;YAE9D,MAAM,OAAO,GAAG,kBAAkB,CAAC,8BAA8B,CAC/D,EAAE,EACF,SAAS,CACV,CAAC;YAEF,4CAA4C;YAC5C,IAAI,OAAO,EAAE,CAAC;gBACZ,kBAAkB,CAAC,8BAA8B,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAC3C,EAAS,EACT,SAA0B;QAE1B,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CACxC,EAAE,EACF,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAC9B,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,sBAAsB,CACjC,CAAC;QACF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CACrD,SAAS,CAAC,sBAAsB,EAChC,SAAS,EACT,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,WAAW,CACnB,CAAC;QAEF,IAAI,OAAO;YAAE,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC;QAEvD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,QAAQ,CACrB,KAAuB,EACvB,IAAoB,EACpB,WAAmB,EACnB,YAAoB;QAEpB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,gBAAgB,CAAC,GAAG,CAAC;gBAC1B,KAAK,gBAAgB,CAAC,QAAQ;oBAC5B,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;oBAClC,MAAM;gBACR,KAAK,gBAAgB,CAAC,KAAK;oBACzB,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC;oBAC/B,MAAM;gBACR,KAAK,gBAAgB,CAAC,MAAM,CAAC;gBAC7B,KAAK,gBAAgB,CAAC,WAAW;oBAC/B,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC;oBACrC,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,gBAAgB,CAAC,GAAG,CAAC;gBAC1B,KAAK,gBAAgB,CAAC,OAAO;oBAC3B,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC;oBACnC,MAAM;gBACR,KAAK,gBAAgB,CAAC,IAAI;oBACxB,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC;oBAChC,MAAM;gBACR,KAAK,gBAAgB,CAAC,MAAM,CAAC;gBAC7B,KAAK,gBAAgB,CAAC,UAAU;oBAC9B,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC;oBACtC,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAC/B,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,gBAAgB,CAAC,IAAI,CAAC;gBAC3B,KAAK,gBAAgB,CAAC,UAAU;oBAC9B,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;oBAClC,MAAM;gBACR,KAAK,gBAAgB,CAAC,MAAM;oBAC1B,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC;oBAC9B,MAAM;gBACR,KAAK,gBAAgB,CAAC,KAAK,CAAC;gBAC5B,KAAK,gBAAgB,CAAC,WAAW;oBAC/B,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC;oBACnC,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,KAAK,EAAE,CAAC;gBACd,KAAK,gBAAgB,CAAC,IAAI,CAAC;gBAC3B,KAAK,gBAAgB,CAAC,OAAO;oBAC3B,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC;oBACrC,MAAM;gBACR,KAAK,gBAAgB,CAAC,GAAG;oBACvB,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;oBACjC,MAAM;gBACR,KAAK,gBAAgB,CAAC,KAAK,CAAC;gBAC5B,KAAK,gBAAgB,CAAC,QAAQ;oBAC5B,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC;oBACtC,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;;AAxQc,0BAAO,GAAsB,IAAI,KAAK,EAAmB,CAAC;AAEzE,gBAAgB;AACO,mDAAgC,GAAG,IAAI,SAAS,EAEnE,CAAC;AACL,gBAAgB;AACO,4CAAyB,GAAG,IAAI,SAAS,EAE5D,CAAC;AACL,gBAAgB;AACO,6CAA0B,GAAG,IAAI,SAAS,EAAM,CAAC;AAqQ1E;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK,CAAC,SAG9C;IACC,YAAY,KAAU;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC;QAqKP,6BAAwB,GAE5B,GAAG,EAAE;YACP,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC;QAEM,0CAAqC,GAEzC,CAAC,IAAI,EAAE,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC;QA7KA,IAAI,CAAC,KAAK,GAAG;YACX,EAAE,EAAE,IAAI,KAAK,EAAE;SAChB,CAAC;IACJ,CAAC;IAEe,MAAM;QACpB,IAAI,kBAAkB,CAAC,UAAU,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAEpD,OAAO,0CAAG,IAAI,CAAC,eAAe,EAAE,CAAI,CAAC;IACvC,CAAC;IAEO,gBAAgB,CAAC,SAA0B,EAAE,IAAe;QAClE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEO,eAAe;QACrB,MAAM,SAAS,GAAG,IAAI,KAAK,EAAmB,CAAC;QAC/C,IAAI,gBAAiC,CAAC;QACtC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,CAAC;QAEzC,KAAK,IAAI,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;YACvD,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,gBAAgB;gBAAE,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,sBAAsB,CAC5B,gBAAkC;QAElC,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CACnD,CAAC,SAA0B,EAAE,EAAE,CAC7B,SAAS,CAAC,sBAAsB,KAAK,gBAAgB,CACxD,CAAC;QAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,SAAS,GACb,gBAAgB,KAAK,gBAAgB,CAAC,KAAK;gBAC3C,gBAAgB,KAAK,gBAAgB,CAAC,WAAW;gBACjD,gBAAgB,KAAK,gBAAgB,CAAC,MAAM;gBAC5C,gBAAgB,KAAK,gBAAgB,CAAC,UAAU,CAAC;YAEnD,MAAM,cAAc,GAAG,YAAY;iBAChC,IAAI,CAAC,CAAC,CAAkB,EAAE,CAAkB,EAAU,EAAE,CACvD,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAC9D;iBACA,GAAG,CAAC,CAAC,SAA0B,EAAE,KAAa,EAAE,EAAE;gBACjD,MAAM,KAAK,GACT,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,MAAM,MAAM,GACV,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBACrE,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;gBAE9B,IAAI,KAAK,GAAG,CAAC;oBACX,MAAM,GAAG,IAAI,CAAC,YAAY,CACxB,MAAM,EACN,SAAS,CAAC,sBAAsB,EAChC,cAAc,CACf,CAAC;gBAEJ,IAAI,SAAS,CAAC,SAAS;oBACrB,cAAc,IAAI,IAAI,CAAC,YAAY,CACjC,SAAS,CAAC,SAAS,EACnB,gBAAgB,CACjB,CAAC;gBAEJ,OAAO,CACL,oBAAC,WAAW,IACV,GAAG,EAAE,SAAS,CAAC,EAAE,EACjB,EAAE,EAAE,SAAS,CAAC,EAAE,EAChB,OAAO,EAAE,SAAS,CAAC,OAAO,EAC1B,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,SAAS,CAAC,sBAAsB,EAClD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,CAAC,IAAe,EAAE,EAAE,CAC/B,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAExC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEL,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAC7C,cAAc,CACA,CAClB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAClB,SAAoB,EACpB,gBAAkC;QAElC,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,QAAQ,gBAAgB,EAAE,CAAC;YACzB,KAAK,gBAAgB,CAAC,GAAG,CAAC;YAC1B,KAAK,gBAAgB,CAAC,MAAM,CAAC;YAC7B,KAAK,gBAAgB,CAAC,OAAO,CAAC;YAC9B,KAAK,gBAAgB,CAAC,QAAQ,CAAC;YAC/B,KAAK,gBAAgB,CAAC,UAAU,CAAC;YACjC,KAAK,gBAAgB,CAAC,WAAW;gBAC/B,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC7B,MAAM;YACR,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,KAAK;gBACzB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC5B,MAAM;QACV,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,YAAY,CAClB,MAAa,EACb,gBAAkC,EAClC,SAAiB;QAEjB,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAE/C,QAAQ,gBAAgB,EAAE,CAAC;YACzB,KAAK,gBAAgB,CAAC,GAAG,CAAC;YAC1B,KAAK,gBAAgB,CAAC,MAAM,CAAC;YAC7B,KAAK,gBAAgB,CAAC,OAAO,CAAC;YAC9B,KAAK,gBAAgB,CAAC,QAAQ,CAAC;YAC/B,KAAK,gBAAgB,CAAC,UAAU,CAAC;YACjC,KAAK,gBAAgB,CAAC,WAAW;gBAC/B,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;gBACnE,MAAM;YACR,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,KAAK;gBACzB,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnE,MAAM;QACV,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEe,iBAAiB;QAC/B,kBAAkB,CAAC,0BAA0B,CAAC,WAAW,CACvD,IAAI,CAAC,wBAAwB,CAC9B,CAAC;QACF,kBAAkB,CAAC,gCAAgC,CAAC,WAAW,CAC7D,IAAI,CAAC,qCAAqC,CAC3C,CAAC;IACJ,CAAC;IAEe,oBAAoB;QAClC,kBAAkB,CAAC,0BAA0B,CAAC,cAAc,CAC1D,IAAI,CAAC,wBAAwB,CAC9B,CAAC;QACF,kBAAkB,CAAC,gCAAgC,CAAC,cAAc,CAChE,IAAI,CAAC,qCAAqC,CAC3C,CAAC;IACJ,CAAC;CAaF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport * as React from \"react\";\nimport { BeUiEvent, Logger } from \"@itwin/core-bentley\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { CursorPopup } from \"./CursorPopup.js\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\nimport type { RectangleProps } from \"../../utils/RectangleProps.js\";\n\n/** Options for the [[CursorPopupManager]] open method\n * @public\n */\nexport interface CursorPopupOptions {\n /** Title of the popup */\n title?: string;\n /** Called on popup close */\n onClose?: () => void;\n /** Callback to apply changes */\n onApply?: () => void;\n /** Draw shadow */\n shadow?: boolean;\n}\n\n/** Information maintained by CursorPopupManager about a CursorPopup. */\ninterface CursorPopupInfo {\n id: string;\n content: React.ReactNode;\n relativePosition: RelativePosition;\n offset: Point;\n priority: number;\n options?: CursorPopupOptions;\n\n renderRelativePosition: RelativePosition;\n popupSize?: SizeProps;\n}\n\n/** CursorPopup component\n * @public\n */\nexport class CursorPopupManager {\n private static _popups: CursorPopupInfo[] = new Array<CursorPopupInfo>();\n\n /** @internal */\n public static readonly onCursorPopupUpdatePositionEvent = new BeUiEvent<{\n pt: XAndY;\n }>();\n /** @internal */\n public static readonly onCursorPopupFadeOutEvent = new BeUiEvent<{\n id: string;\n }>();\n /** @internal */\n public static readonly onCursorPopupsChangedEvent = new BeUiEvent<{}>();\n /** @internal */\n public static clearPopups() {\n this._popups.length = 0;\n CursorPopupManager._emitPopupsChangedEvent();\n }\n\n public static get popups() {\n return this._popups;\n }\n\n public static get popupCount() {\n return this._popups.length;\n }\n\n private static _emitPopupsChangedEvent(): void {\n CursorPopupManager.onCursorPopupsChangedEvent.emit({});\n }\n\n private static pushPopup(popupInfo: CursorPopupInfo): void {\n CursorPopupManager._popups.push(popupInfo);\n CursorPopupManager._emitPopupsChangedEvent();\n }\n\n /** Called to open popup with a new set of properties\n */\n public static open(\n id: string,\n content: React.ReactNode,\n pt: XAndY,\n offset: XAndY,\n relativePosition: RelativePosition,\n priority: number = 0,\n options?: CursorPopupOptions\n ) {\n const popupInfo = CursorPopupManager._popups.find(\n (info: CursorPopupInfo) => id === info.id\n );\n if (popupInfo) {\n popupInfo.content = content;\n popupInfo.offset = Point.create(offset);\n popupInfo.relativePosition = relativePosition;\n popupInfo.renderRelativePosition = relativePosition;\n popupInfo.priority = priority;\n popupInfo.options = options;\n } else {\n const newPopupInfo: CursorPopupInfo = {\n id,\n content,\n offset: Point.create(offset),\n relativePosition,\n options,\n renderRelativePosition: relativePosition,\n priority,\n };\n CursorPopupManager.pushPopup(newPopupInfo);\n }\n\n CursorPopupManager.updatePosition(pt);\n }\n\n /** Called to update popup with a new set of properties\n */\n public static update(\n id: string,\n content: React.ReactNode,\n pt: XAndY,\n offset: XAndY,\n relativePosition: RelativePosition,\n priority: number = 0\n ) {\n const popupInfo = CursorPopupManager._popups.find(\n (info: CursorPopupInfo) => id === info.id\n );\n if (popupInfo) {\n popupInfo.content = content;\n popupInfo.offset = Point.create(offset);\n popupInfo.relativePosition = relativePosition;\n popupInfo.renderRelativePosition = relativePosition;\n popupInfo.priority = priority;\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"CursorPopupManager\"),\n `update: Could not find popup with id of '${id}'`\n );\n }\n\n CursorPopupManager.updatePosition(pt);\n }\n\n /** Called to move the open popup to new location\n */\n public static updatePosition(pt: XAndY) {\n CursorPopupManager.resetPopupsRenderRelativePosition(Point.create(pt));\n CursorPopupManager.onCursorPopupUpdatePositionEvent.emit({ pt });\n }\n\n /** Called when tool wants to close the popup\n */\n public static close(id: string, apply: boolean, fadeOut?: boolean) {\n const popupInfo = CursorPopupManager._popups.find(\n (info: CursorPopupInfo) => id === info.id\n );\n\n if (popupInfo) {\n if (popupInfo.options) {\n if (apply && popupInfo.options.onApply) popupInfo.options.onApply();\n\n if (popupInfo.options.onClose) popupInfo.options.onClose();\n }\n\n if (fadeOut) {\n CursorPopupManager.onCursorPopupFadeOutEvent.emit({ id });\n setTimeout(() => {\n CursorPopupManager.removePopup(id);\n }, CursorPopup.fadeOutTime);\n } else {\n CursorPopupManager.removePopup(id);\n }\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"CursorPopupManager\"),\n `close: Could not find popup with id of '${id}'`\n );\n }\n }\n\n private static removePopup(id: string): void {\n const index = CursorPopupManager._popups.findIndex(\n (popupInfo: CursorPopupInfo) => id === popupInfo.id\n );\n if (index >= 0) {\n CursorPopupManager._popups.splice(index, 1);\n CursorPopupManager._emitPopupsChangedEvent();\n }\n }\n\n private static resetPopupsRenderRelativePosition(pt: Point) {\n CursorPopupManager.popups.forEach((popupInfo: CursorPopupInfo) => {\n popupInfo.renderRelativePosition = popupInfo.relativePosition;\n\n const flipped = CursorPopupManager.validateRenderRelativePosition(\n pt,\n popupInfo\n );\n\n // If flipped, call again to validate again.\n if (flipped) {\n CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);\n }\n });\n }\n\n private static validateRenderRelativePosition(\n pt: Point,\n popupInfo: CursorPopupInfo\n ): boolean {\n const popupRect = CursorPopup.getPopupRect(\n pt,\n Point.create(popupInfo.offset),\n popupInfo.popupSize,\n popupInfo.renderRelativePosition\n );\n const { outPos, flipped } = CursorPopupManager.autoFlip(\n popupInfo.renderRelativePosition,\n popupRect,\n window.innerWidth,\n window.innerHeight\n );\n\n if (flipped) popupInfo.renderRelativePosition = outPos;\n\n return flipped;\n }\n\n private static autoFlip(\n inPos: RelativePosition,\n rect: RectangleProps,\n windowWidth: number,\n windowHeight: number\n ): { outPos: RelativePosition; flipped: boolean } {\n let flipped = false;\n let outPos = inPos;\n\n if (rect.right > windowWidth) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Top:\n case RelativePosition.TopRight:\n outPos = RelativePosition.TopLeft;\n break;\n case RelativePosition.Right:\n outPos = RelativePosition.Left;\n break;\n case RelativePosition.Bottom:\n case RelativePosition.BottomRight:\n outPos = RelativePosition.BottomLeft;\n break;\n }\n }\n\n if (rect.left < 0) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Top:\n case RelativePosition.TopLeft:\n outPos = RelativePosition.TopRight;\n break;\n case RelativePosition.Left:\n outPos = RelativePosition.Right;\n break;\n case RelativePosition.Bottom:\n case RelativePosition.BottomLeft:\n outPos = RelativePosition.BottomRight;\n break;\n }\n }\n\n if (rect.bottom > windowHeight) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Left:\n case RelativePosition.BottomLeft:\n outPos = RelativePosition.TopLeft;\n break;\n case RelativePosition.Bottom:\n outPos = RelativePosition.Top;\n break;\n case RelativePosition.Right:\n case RelativePosition.BottomRight:\n outPos = RelativePosition.TopRight;\n break;\n }\n }\n\n if (rect.top < 0) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Left:\n case RelativePosition.TopLeft:\n outPos = RelativePosition.BottomLeft;\n break;\n case RelativePosition.Top:\n outPos = RelativePosition.Bottom;\n break;\n case RelativePosition.Right:\n case RelativePosition.TopRight:\n outPos = RelativePosition.BottomRight;\n break;\n }\n }\n\n return { outPos, flipped };\n }\n}\n\n/** State for the [[CursorPopupRenderer]] React component */\ninterface CursorPopupRendererState {\n pt: Point;\n}\n\n/** CursorPopupRenderer React component.\n * @public\n */\nexport class CursorPopupRenderer extends React.Component<\n any,\n CursorPopupRendererState\n> {\n constructor(props: any) {\n super(props);\n\n this.state = {\n pt: new Point(),\n };\n }\n\n public override render(): React.ReactNode {\n if (CursorPopupManager.popupCount <= 0) return null;\n\n return <>{this.renderPositions()}</>;\n }\n\n private _handleSizeKnown(popupInfo: CursorPopupInfo, size: SizeProps) {\n popupInfo.popupSize = size;\n }\n\n private renderPositions(): React.ReactNode[] {\n const positions = new Array<React.ReactNode>();\n let renderedPosition: React.ReactNode;\n const begin = RelativePosition.Left;\n const end = RelativePosition.BottomRight;\n\n for (let position = begin; position <= end; position++) {\n renderedPosition = this.renderRelativePosition(position);\n if (renderedPosition) positions.push(renderedPosition);\n }\n\n return positions;\n }\n\n private renderRelativePosition(\n relativePosition: RelativePosition\n ): React.ReactNode {\n const filteredInfo = CursorPopupManager.popups.filter(\n (popupInfo: CursorPopupInfo) =>\n popupInfo.renderRelativePosition === relativePosition\n );\n\n if (filteredInfo.length > 0) {\n let totalDimension = 0;\n const ascending =\n relativePosition === RelativePosition.Right ||\n relativePosition === RelativePosition.BottomRight ||\n relativePosition === RelativePosition.Bottom ||\n relativePosition === RelativePosition.BottomLeft;\n\n const positionPopups = filteredInfo\n .sort((a: CursorPopupInfo, b: CursorPopupInfo): number =>\n ascending ? a.priority - b.priority : b.priority - a.priority\n )\n .map((popupInfo: CursorPopupInfo, index: number) => {\n const title =\n popupInfo.options !== undefined ? popupInfo.options.title : \"\";\n const shadow =\n popupInfo.options !== undefined ? popupInfo.options.shadow : false;\n let offset = popupInfo.offset;\n\n if (index > 0)\n offset = this.adjustOffset(\n offset,\n popupInfo.renderRelativePosition,\n totalDimension\n );\n\n if (popupInfo.popupSize)\n totalDimension += this.getDimension(\n popupInfo.popupSize,\n relativePosition\n );\n\n return (\n <CursorPopup\n key={popupInfo.id}\n id={popupInfo.id}\n content={popupInfo.content}\n pt={this.state.pt}\n offset={offset}\n relativePosition={popupInfo.renderRelativePosition}\n title={title}\n shadow={shadow}\n onSizeKnown={(size: SizeProps) =>\n this._handleSizeKnown(popupInfo, size)\n }\n />\n );\n });\n\n return (\n <React.Fragment key={relativePosition.toString()}>\n {positionPopups}\n </React.Fragment>\n );\n }\n\n return null;\n }\n\n private getDimension(\n popupSize: SizeProps,\n relativePosition: RelativePosition\n ): number {\n let dimension = 0;\n\n switch (relativePosition) {\n case RelativePosition.Top:\n case RelativePosition.Bottom:\n case RelativePosition.TopLeft:\n case RelativePosition.TopRight:\n case RelativePosition.BottomLeft:\n case RelativePosition.BottomRight:\n dimension = popupSize.height;\n break;\n case RelativePosition.Left:\n case RelativePosition.Right:\n dimension = popupSize.width;\n break;\n }\n\n return dimension;\n }\n\n private adjustOffset(\n offset: Point,\n relativePosition: RelativePosition,\n dimension: number\n ): Point {\n let outOffset = Point.create(offset.toProps());\n\n switch (relativePosition) {\n case RelativePosition.Top:\n case RelativePosition.Bottom:\n case RelativePosition.TopLeft:\n case RelativePosition.TopRight:\n case RelativePosition.BottomLeft:\n case RelativePosition.BottomRight:\n outOffset = Point.create({ x: offset.x, y: offset.y + dimension });\n break;\n case RelativePosition.Left:\n case RelativePosition.Right:\n outOffset = Point.create({ x: offset.x + dimension, y: offset.y });\n break;\n }\n\n return outOffset;\n }\n\n public override componentDidMount(): void {\n CursorPopupManager.onCursorPopupsChangedEvent.addListener(\n this._handlePopupChangedEvent\n );\n CursorPopupManager.onCursorPopupUpdatePositionEvent.addListener(\n this._handleCursorPopupUpdatePositionEvent\n );\n }\n\n public override componentWillUnmount(): void {\n CursorPopupManager.onCursorPopupsChangedEvent.removeListener(\n this._handlePopupChangedEvent\n );\n CursorPopupManager.onCursorPopupUpdatePositionEvent.removeListener(\n this._handleCursorPopupUpdatePositionEvent\n );\n }\n\n private _handlePopupChangedEvent: ListenerType<\n typeof CursorPopupManager.onCursorPopupsChangedEvent\n > = () => {\n this.forceUpdate();\n };\n\n private _handleCursorPopupUpdatePositionEvent: ListenerType<\n typeof CursorPopupManager.onCursorPopupUpdatePositionEvent\n > = (args) => {\n this.setState({ pt: Point.create(args.pt) });\n };\n}\n"]}
1
+ {"version":3,"file":"CursorPopupManager.js","sourceRoot":"","sources":["../../../../src/appui-react/cursor/cursorpopup/CursorPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Cursor\n */\n\nimport * as React from \"react\";\nimport { BeUiEvent, Logger } from \"@itwin/core-bentley\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { CursorPopupShow } from \"./CursorPopup.js\";\nimport { CursorPopup } from \"./CursorPopup.js\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\nimport type { RectangleProps } from \"../../utils/RectangleProps.js\";\n\n/** Options for the [[CursorPopupManager]] open method\n * @public\n */\nexport interface CursorPopupOptions {\n /** Title of the popup */\n title?: string;\n /** Called on popup close */\n onClose?: () => void;\n /** Callback to apply changes */\n onApply?: () => void;\n /** Draw shadow */\n shadow?: boolean;\n}\n\n/** Information maintained by CursorPopupManager about a CursorPopup. */\ninterface CursorPopupInfo {\n id: string;\n content: React.ReactNode;\n relativePosition: RelativePosition;\n offset: Point;\n priority: number;\n options?: CursorPopupOptions;\n\n renderRelativePosition: RelativePosition;\n popupSize?: SizeProps;\n\n cancelFadeOut?: () => void;\n}\n\n/** CursorPopup component\n * @public\n */\nexport class CursorPopupManager {\n private static _popups: CursorPopupInfo[] = new Array<CursorPopupInfo>();\n\n /** @internal */\n public static readonly onCursorPopupUpdatePositionEvent = new BeUiEvent<{\n pt: XAndY;\n }>();\n /** @internal */\n public static readonly onCursorPopupFadeOutEvent = new BeUiEvent<{\n id: string;\n show?: CursorPopupShow;\n }>();\n /** @internal */\n public static readonly onCursorPopupsChangedEvent = new BeUiEvent<object>();\n /** @internal */\n public static clearPopups() {\n this._popups.length = 0;\n CursorPopupManager._emitPopupsChangedEvent();\n }\n\n public static get popups() {\n return this._popups;\n }\n\n public static get popupCount() {\n return this._popups.length;\n }\n\n private static _emitPopupsChangedEvent(): void {\n CursorPopupManager.onCursorPopupsChangedEvent.emit({});\n }\n\n private static pushPopup(popupInfo: CursorPopupInfo): void {\n CursorPopupManager._popups.push(popupInfo);\n CursorPopupManager._emitPopupsChangedEvent();\n }\n\n /** Called to open popup with a new set of properties\n */\n public static open(\n id: string,\n content: React.ReactNode,\n pt: XAndY,\n offset: XAndY,\n relativePosition: RelativePosition,\n priority: number = 0,\n options?: CursorPopupOptions\n ) {\n const popupInfo = CursorPopupManager._popups.find(\n (info: CursorPopupInfo) => id === info.id\n );\n if (popupInfo) {\n CursorPopupManager.onCursorPopupFadeOutEvent.emit({\n id,\n show: CursorPopupShow.Open,\n });\n\n popupInfo.content = content;\n popupInfo.offset = Point.create(offset);\n popupInfo.relativePosition = relativePosition;\n popupInfo.renderRelativePosition = relativePosition;\n popupInfo.priority = priority;\n popupInfo.options = options;\n CursorPopupManager.updatePosition(pt);\n\n if (popupInfo.cancelFadeOut) {\n popupInfo.cancelFadeOut();\n popupInfo.cancelFadeOut = undefined;\n }\n return;\n }\n\n const newPopupInfo: CursorPopupInfo = {\n id,\n content,\n offset: Point.create(offset),\n relativePosition,\n options,\n renderRelativePosition: relativePosition,\n priority,\n };\n CursorPopupManager.pushPopup(newPopupInfo);\n CursorPopupManager.updatePosition(pt);\n }\n\n /** Called to update popup with a new set of properties\n */\n public static update(\n id: string,\n content: React.ReactNode,\n pt: XAndY,\n offset: XAndY,\n relativePosition: RelativePosition,\n priority: number = 0\n ) {\n const popupInfo = CursorPopupManager._popups.find(\n (info: CursorPopupInfo) => id === info.id\n );\n if (popupInfo) {\n popupInfo.content = content;\n popupInfo.offset = Point.create(offset);\n popupInfo.relativePosition = relativePosition;\n popupInfo.renderRelativePosition = relativePosition;\n popupInfo.priority = priority;\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"CursorPopupManager\"),\n `update: Could not find popup with id of '${id}'`\n );\n }\n\n CursorPopupManager.updatePosition(pt);\n }\n\n /** Called to move the open popup to new location\n */\n public static updatePosition(pt: XAndY) {\n CursorPopupManager.resetPopupsRenderRelativePosition(Point.create(pt));\n CursorPopupManager.onCursorPopupUpdatePositionEvent.emit({ pt });\n }\n\n /** Called when tool wants to close the popup\n */\n public static close(id: string, apply: boolean, fadeOut?: boolean) {\n const popupInfo = CursorPopupManager._popups.find(\n (info: CursorPopupInfo) => id === info.id\n );\n if (!popupInfo) {\n Logger.logError(\n UiFramework.loggerCategory(\"CursorPopupManager\"),\n `close: Could not find popup with id of '${id}'`\n );\n return;\n }\n\n if (apply) popupInfo.options?.onApply?.();\n popupInfo.options?.onClose?.();\n\n if (fadeOut) {\n // Already closing\n if (popupInfo.cancelFadeOut) return;\n\n let cancelled = false;\n popupInfo.cancelFadeOut = () => {\n cancelled = true;\n };\n CursorPopupManager.onCursorPopupFadeOutEvent.emit({ id });\n\n setTimeout(() => {\n if (cancelled) return;\n CursorPopupManager.removePopup(id);\n }, CursorPopup.fadeOutTime);\n return;\n }\n\n popupInfo.cancelFadeOut?.();\n popupInfo.cancelFadeOut = undefined;\n CursorPopupManager.removePopup(id);\n }\n\n private static removePopup(id: string): void {\n const index = CursorPopupManager._popups.findIndex(\n (popupInfo: CursorPopupInfo) => id === popupInfo.id\n );\n if (index >= 0) {\n CursorPopupManager._popups.splice(index, 1);\n CursorPopupManager._emitPopupsChangedEvent();\n }\n }\n\n private static resetPopupsRenderRelativePosition(pt: Point) {\n CursorPopupManager.popups.forEach((popupInfo: CursorPopupInfo) => {\n popupInfo.renderRelativePosition = popupInfo.relativePosition;\n\n const flipped = CursorPopupManager.validateRenderRelativePosition(\n pt,\n popupInfo\n );\n\n // If flipped, call again to validate again.\n if (flipped) {\n CursorPopupManager.validateRenderRelativePosition(pt, popupInfo);\n }\n });\n }\n\n private static validateRenderRelativePosition(\n pt: Point,\n popupInfo: CursorPopupInfo\n ): boolean {\n const popupRect = CursorPopup.getPopupRect(\n pt,\n Point.create(popupInfo.offset),\n popupInfo.popupSize,\n popupInfo.renderRelativePosition\n );\n const { outPos, flipped } = CursorPopupManager.autoFlip(\n popupInfo.renderRelativePosition,\n popupRect,\n window.innerWidth,\n window.innerHeight\n );\n\n if (flipped) popupInfo.renderRelativePosition = outPos;\n\n return flipped;\n }\n\n private static autoFlip(\n inPos: RelativePosition,\n rect: RectangleProps,\n windowWidth: number,\n windowHeight: number\n ): { outPos: RelativePosition; flipped: boolean } {\n let flipped = false;\n let outPos = inPos;\n\n if (rect.right > windowWidth) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Top:\n case RelativePosition.TopRight:\n outPos = RelativePosition.TopLeft;\n break;\n case RelativePosition.Right:\n outPos = RelativePosition.Left;\n break;\n case RelativePosition.Bottom:\n case RelativePosition.BottomRight:\n outPos = RelativePosition.BottomLeft;\n break;\n }\n }\n\n if (rect.left < 0) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Top:\n case RelativePosition.TopLeft:\n outPos = RelativePosition.TopRight;\n break;\n case RelativePosition.Left:\n outPos = RelativePosition.Right;\n break;\n case RelativePosition.Bottom:\n case RelativePosition.BottomLeft:\n outPos = RelativePosition.BottomRight;\n break;\n }\n }\n\n if (rect.bottom > windowHeight) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Left:\n case RelativePosition.BottomLeft:\n outPos = RelativePosition.TopLeft;\n break;\n case RelativePosition.Bottom:\n outPos = RelativePosition.Top;\n break;\n case RelativePosition.Right:\n case RelativePosition.BottomRight:\n outPos = RelativePosition.TopRight;\n break;\n }\n }\n\n if (rect.top < 0) {\n flipped = true;\n switch (inPos) {\n case RelativePosition.Left:\n case RelativePosition.TopLeft:\n outPos = RelativePosition.BottomLeft;\n break;\n case RelativePosition.Top:\n outPos = RelativePosition.Bottom;\n break;\n case RelativePosition.Right:\n case RelativePosition.TopRight:\n outPos = RelativePosition.BottomRight;\n break;\n }\n }\n\n return { outPos, flipped };\n }\n}\n\n/** State for the [[CursorPopupRenderer]] React component */\ninterface CursorPopupRendererState {\n pt: Point;\n}\n\n/** CursorPopupRenderer React component.\n * @public\n */\nexport class CursorPopupRenderer extends React.Component<\n any,\n CursorPopupRendererState\n> {\n constructor(props: any) {\n super(props);\n\n this.state = {\n pt: new Point(),\n };\n }\n\n public override render(): React.ReactNode {\n if (CursorPopupManager.popupCount <= 0) return null;\n\n return <>{this.renderPositions()}</>;\n }\n\n private _handleSizeKnown(popupInfo: CursorPopupInfo, size: SizeProps) {\n popupInfo.popupSize = size;\n }\n\n private renderPositions(): React.ReactNode[] {\n const positions = new Array<React.ReactNode>();\n let renderedPosition: React.ReactNode;\n const begin = RelativePosition.Left;\n const end = RelativePosition.BottomRight;\n\n for (let position = begin; position <= end; position++) {\n renderedPosition = this.renderRelativePosition(position);\n if (renderedPosition) positions.push(renderedPosition);\n }\n\n return positions;\n }\n\n private renderRelativePosition(\n relativePosition: RelativePosition\n ): React.ReactNode {\n const filteredInfo = CursorPopupManager.popups.filter(\n (popupInfo: CursorPopupInfo) =>\n popupInfo.renderRelativePosition === relativePosition\n );\n\n if (filteredInfo.length > 0) {\n let totalDimension = 0;\n const ascending =\n relativePosition === RelativePosition.Right ||\n relativePosition === RelativePosition.BottomRight ||\n relativePosition === RelativePosition.Bottom ||\n relativePosition === RelativePosition.BottomLeft;\n\n const positionPopups = filteredInfo\n .sort((a: CursorPopupInfo, b: CursorPopupInfo): number =>\n ascending ? a.priority - b.priority : b.priority - a.priority\n )\n .map((popupInfo: CursorPopupInfo, index: number) => {\n const title =\n popupInfo.options !== undefined ? popupInfo.options.title : \"\";\n const shadow =\n popupInfo.options !== undefined ? popupInfo.options.shadow : false;\n let offset = popupInfo.offset;\n\n if (index > 0)\n offset = this.adjustOffset(\n offset,\n popupInfo.renderRelativePosition,\n totalDimension\n );\n\n if (popupInfo.popupSize)\n totalDimension += this.getDimension(\n popupInfo.popupSize,\n relativePosition\n );\n\n return (\n <CursorPopup\n key={popupInfo.id}\n id={popupInfo.id}\n content={popupInfo.content}\n pt={this.state.pt}\n offset={offset}\n relativePosition={popupInfo.renderRelativePosition}\n title={title}\n shadow={shadow}\n onSizeKnown={(size: SizeProps) =>\n this._handleSizeKnown(popupInfo, size)\n }\n />\n );\n });\n\n return (\n <React.Fragment key={relativePosition.toString()}>\n {positionPopups}\n </React.Fragment>\n );\n }\n\n return null;\n }\n\n private getDimension(\n popupSize: SizeProps,\n relativePosition: RelativePosition\n ): number {\n let dimension = 0;\n\n switch (relativePosition) {\n case RelativePosition.Top:\n case RelativePosition.Bottom:\n case RelativePosition.TopLeft:\n case RelativePosition.TopRight:\n case RelativePosition.BottomLeft:\n case RelativePosition.BottomRight:\n dimension = popupSize.height;\n break;\n case RelativePosition.Left:\n case RelativePosition.Right:\n dimension = popupSize.width;\n break;\n }\n\n return dimension;\n }\n\n private adjustOffset(\n offset: Point,\n relativePosition: RelativePosition,\n dimension: number\n ): Point {\n let outOffset = Point.create(offset.toProps());\n\n switch (relativePosition) {\n case RelativePosition.Top:\n case RelativePosition.Bottom:\n case RelativePosition.TopLeft:\n case RelativePosition.TopRight:\n case RelativePosition.BottomLeft:\n case RelativePosition.BottomRight:\n outOffset = Point.create({ x: offset.x, y: offset.y + dimension });\n break;\n case RelativePosition.Left:\n case RelativePosition.Right:\n outOffset = Point.create({ x: offset.x + dimension, y: offset.y });\n break;\n }\n\n return outOffset;\n }\n\n public override componentDidMount(): void {\n CursorPopupManager.onCursorPopupsChangedEvent.addListener(\n this._handlePopupChangedEvent\n );\n CursorPopupManager.onCursorPopupUpdatePositionEvent.addListener(\n this._handleCursorPopupUpdatePositionEvent\n );\n }\n\n public override componentWillUnmount(): void {\n CursorPopupManager.onCursorPopupsChangedEvent.removeListener(\n this._handlePopupChangedEvent\n );\n CursorPopupManager.onCursorPopupUpdatePositionEvent.removeListener(\n this._handleCursorPopupUpdatePositionEvent\n );\n }\n\n private _handlePopupChangedEvent: ListenerType<\n typeof CursorPopupManager.onCursorPopupsChangedEvent\n > = () => {\n this.forceUpdate();\n };\n\n private _handleCursorPopupUpdatePositionEvent: ListenerType<\n typeof CursorPopupManager.onCursorPopupUpdatePositionEvent\n > = (args) => {\n this.setState({ pt: Point.create(args.pt) });\n };\n}\n"]}