@itwin/appui-react 4.5.0 → 4.6.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 (370) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/lib/cjs/appui-react/UiFramework.js +7 -4
  3. package/lib/cjs/appui-react/UiFramework.js.map +1 -1
  4. package/lib/cjs/appui-react/accudraw/MenuButton.d.ts +2 -2
  5. package/lib/cjs/appui-react/accudraw/MenuButton.d.ts.map +1 -1
  6. package/lib/cjs/appui-react/accudraw/MenuButton.js.map +1 -1
  7. package/lib/cjs/appui-react/backstage/BackstageComposer.d.ts.map +1 -1
  8. package/lib/cjs/appui-react/backstage/BackstageComposer.js.map +1 -1
  9. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js +2 -1
  10. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  11. package/lib/cjs/appui-react/childwindow/CopyStyles.d.ts.map +1 -1
  12. package/lib/cjs/appui-react/childwindow/CopyStyles.js +3 -1
  13. package/lib/cjs/appui-react/childwindow/CopyStyles.js.map +1 -1
  14. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.d.ts.map +1 -1
  15. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js +3 -2
  16. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  17. package/lib/cjs/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
  18. package/lib/cjs/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  19. package/lib/cjs/appui-react/configurableui/TimeTracker.js +2 -1
  20. package/lib/cjs/appui-react/configurableui/TimeTracker.js.map +1 -1
  21. package/lib/cjs/appui-react/content/ContentLayout.js +12 -9
  22. package/lib/cjs/appui-react/content/ContentLayout.js.map +1 -1
  23. package/lib/cjs/appui-react/content/DefaultViewOverlay.js +4 -3
  24. package/lib/cjs/appui-react/content/DefaultViewOverlay.js.map +1 -1
  25. package/lib/cjs/appui-react/content/FloatingViewportContent.js +2 -1
  26. package/lib/cjs/appui-react/content/FloatingViewportContent.js.map +1 -1
  27. package/lib/cjs/appui-react/content/IModelViewport.js +6 -3
  28. package/lib/cjs/appui-react/content/IModelViewport.js.map +1 -1
  29. package/lib/cjs/appui-react/content/InternalContentLayoutManager.js +2 -1
  30. package/lib/cjs/appui-react/content/InternalContentLayoutManager.js.map +1 -1
  31. package/lib/cjs/appui-react/content/InternalContentViewManager.js +1 -1
  32. package/lib/cjs/appui-react/content/InternalContentViewManager.js.map +1 -1
  33. package/lib/cjs/appui-react/content/split-pane/SplitPane.js +12 -10
  34. package/lib/cjs/appui-react/content/split-pane/SplitPane.js.map +1 -1
  35. package/lib/cjs/appui-react/cursor/CursorInformation.d.ts +6 -6
  36. package/lib/cjs/appui-react/cursor/CursorInformation.d.ts.map +1 -1
  37. package/lib/cjs/appui-react/cursor/CursorInformation.js.map +1 -1
  38. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  39. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js +3 -2
  40. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  41. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.d.ts +4 -4
  42. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.d.ts.map +1 -1
  43. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  44. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +5 -5
  45. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
  46. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  47. package/lib/cjs/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +2 -2
  48. package/lib/cjs/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
  49. package/lib/cjs/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  50. package/lib/cjs/appui-react/dialog/ContentDialog.js +6 -3
  51. package/lib/cjs/appui-react/dialog/ContentDialog.js.map +1 -1
  52. package/lib/cjs/appui-react/dialog/DialogManagerBase.js +3 -2
  53. package/lib/cjs/appui-react/dialog/DialogManagerBase.js.map +1 -1
  54. package/lib/cjs/appui-react/feedback/ElementTooltip.d.ts +1 -2
  55. package/lib/cjs/appui-react/feedback/ElementTooltip.d.ts.map +1 -1
  56. package/lib/cjs/appui-react/feedback/ElementTooltip.js.map +1 -1
  57. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts +22 -26
  58. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  59. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +177 -216
  60. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  61. package/lib/cjs/appui-react/frontstage/InternalFrontstageManager.d.ts +3 -7
  62. package/lib/cjs/appui-react/frontstage/InternalFrontstageManager.d.ts.map +1 -1
  63. package/lib/cjs/appui-react/frontstage/InternalFrontstageManager.js +2 -6
  64. package/lib/cjs/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  65. package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js +3 -2
  66. package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  67. package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js +2 -1
  68. package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  69. package/lib/cjs/appui-react/hooks/useActiveIModelConnection.d.ts.map +1 -1
  70. package/lib/cjs/appui-react/hooks/useActiveIModelConnection.js.map +1 -1
  71. package/lib/cjs/appui-react/hooks/useActiveViewport.d.ts.map +1 -1
  72. package/lib/cjs/appui-react/hooks/useActiveViewport.js.map +1 -1
  73. package/lib/cjs/appui-react/hooks/useAnalysisAnimationDataProvider.js +11 -7
  74. package/lib/cjs/appui-react/hooks/useAnalysisAnimationDataProvider.js.map +1 -1
  75. package/lib/cjs/appui-react/hooks/useScheduleAnimationDataProvider.js +11 -7
  76. package/lib/cjs/appui-react/hooks/useScheduleAnimationDataProvider.js.map +1 -1
  77. package/lib/cjs/appui-react/hooks/useSolarDataProvider.js +13 -8
  78. package/lib/cjs/appui-react/hooks/useSolarDataProvider.js.map +1 -1
  79. package/lib/cjs/appui-react/keyboardshortcut/InternalKeyboardShortcut.d.ts.map +1 -1
  80. package/lib/cjs/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
  81. package/lib/cjs/appui-react/messages/ActivityMessage.js +7 -5
  82. package/lib/cjs/appui-react/messages/ActivityMessage.js.map +1 -1
  83. package/lib/cjs/appui-react/messages/MessageManager.d.ts +0 -1
  84. package/lib/cjs/appui-react/messages/MessageManager.d.ts.map +1 -1
  85. package/lib/cjs/appui-react/messages/MessageManager.js +1 -2
  86. package/lib/cjs/appui-react/messages/MessageManager.js.map +1 -1
  87. package/lib/cjs/appui-react/messages/Pointer.d.ts +1 -2
  88. package/lib/cjs/appui-react/messages/Pointer.d.ts.map +1 -1
  89. package/lib/cjs/appui-react/messages/Pointer.js +1 -1
  90. package/lib/cjs/appui-react/messages/Pointer.js.map +1 -1
  91. package/lib/cjs/appui-react/pickers/ViewSelector.js +6 -5
  92. package/lib/cjs/appui-react/pickers/ViewSelector.js.map +1 -1
  93. package/lib/cjs/appui-react/popup/KeyinPalettePanel.js +2 -1
  94. package/lib/cjs/appui-react/popup/KeyinPalettePanel.js.map +1 -1
  95. package/lib/cjs/appui-react/popup/PopupManager.js +2 -1
  96. package/lib/cjs/appui-react/popup/PopupManager.js.map +1 -1
  97. package/lib/cjs/appui-react/popup/PositionPopup.d.ts +2 -2
  98. package/lib/cjs/appui-react/popup/PositionPopup.d.ts.map +1 -1
  99. package/lib/cjs/appui-react/popup/PositionPopup.js.map +1 -1
  100. package/lib/cjs/appui-react/selection/SelectionContextItemDef.js +2 -2
  101. package/lib/cjs/appui-react/selection/SelectionContextItemDef.js.map +1 -1
  102. package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.js +1 -2
  103. package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
  104. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  105. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts +16 -20
  106. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  107. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +86 -116
  108. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  109. package/lib/cjs/appui-react/statusbar/Indicator.js +2 -1
  110. package/lib/cjs/appui-react/statusbar/Indicator.js.map +1 -1
  111. package/lib/cjs/appui-react/statusbar/StatusBar.js +5 -3
  112. package/lib/cjs/appui-react/statusbar/StatusBar.js.map +1 -1
  113. package/lib/cjs/appui-react/statusfields/MessageCenter.d.ts.map +1 -1
  114. package/lib/cjs/appui-react/statusfields/MessageCenter.js +1 -2
  115. package/lib/cjs/appui-react/statusfields/MessageCenter.js.map +1 -1
  116. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js +1 -1
  117. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  118. package/lib/cjs/appui-react/syncui/InternalSyncUiEventDispatcher.d.ts +36 -0
  119. package/lib/cjs/appui-react/syncui/InternalSyncUiEventDispatcher.d.ts.map +1 -0
  120. package/lib/cjs/appui-react/syncui/InternalSyncUiEventDispatcher.js +134 -0
  121. package/lib/cjs/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -0
  122. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts +1 -1
  123. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  124. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js +2 -2
  125. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  126. package/lib/cjs/appui-react/syncui/UiSyncEvent.d.ts +16 -0
  127. package/lib/cjs/appui-react/syncui/UiSyncEvent.d.ts.map +1 -0
  128. package/lib/cjs/appui-react/syncui/UiSyncEvent.js +18 -0
  129. package/lib/cjs/appui-react/syncui/UiSyncEvent.js.map +1 -0
  130. package/lib/cjs/appui-react/toolbar/ToolbarHelper.js +4 -6
  131. package/lib/cjs/appui-react/toolbar/ToolbarHelper.js.map +1 -1
  132. package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.js +4 -3
  133. package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
  134. package/lib/cjs/appui-react/tools/CoreToolDefinitions.js +17 -10
  135. package/lib/cjs/appui-react/tools/CoreToolDefinitions.js.map +1 -1
  136. package/lib/cjs/appui-react/toolsettings/DefaultToolSettingsProvider.js +2 -3
  137. package/lib/cjs/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  138. package/lib/cjs/appui-react/ui-items-provider/AbstractUiItemsManager.js +14 -12
  139. package/lib/cjs/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  140. package/lib/cjs/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +10 -9
  141. package/lib/cjs/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
  142. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +2 -1
  143. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  144. package/lib/cjs/appui-react/ui-items-provider/UiItemsManager.js +14 -8
  145. package/lib/cjs/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  146. package/lib/cjs/appui-react/uiadmin/FrameworkUiAdmin.js +1 -1
  147. package/lib/cjs/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  148. package/lib/cjs/appui-react/uiprovider/ComponentGenerator.js +1 -1
  149. package/lib/cjs/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  150. package/lib/cjs/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
  151. package/lib/cjs/appui-react/uistate/AppUiSettings.js.map +1 -1
  152. package/lib/cjs/appui-react/uistate/useUiStateStorage.d.ts.map +1 -1
  153. package/lib/cjs/appui-react/uistate/useUiStateStorage.js.map +1 -1
  154. package/lib/cjs/appui-react/utils/InternalUiShowHideManager.js +3 -3
  155. package/lib/cjs/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  156. package/lib/cjs/appui-react/widget-panels/Content.js +9 -8
  157. package/lib/cjs/appui-react/widget-panels/Content.js.map +1 -1
  158. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts +7 -29
  159. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  160. package/lib/cjs/appui-react/widget-panels/Frontstage.js +128 -463
  161. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  162. package/lib/cjs/appui-react/widget-panels/StatusBar.js +1 -1
  163. package/lib/cjs/appui-react/widget-panels/StatusBar.js.map +1 -1
  164. package/lib/cjs/appui-react/widget-panels/Tab.js +1 -1
  165. package/lib/cjs/appui-react/widget-panels/Tab.js.map +1 -1
  166. package/lib/cjs/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  167. package/lib/cjs/appui-react/widget-panels/ToolSettings.js +34 -15
  168. package/lib/cjs/appui-react/widget-panels/ToolSettings.js.map +1 -1
  169. package/lib/cjs/appui-react/widget-panels/Toolbars.js +3 -2
  170. package/lib/cjs/appui-react/widget-panels/Toolbars.js.map +1 -1
  171. package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js +2 -2
  172. package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  173. package/lib/cjs/appui-react/widgets/Widget.d.ts +10 -4
  174. package/lib/cjs/appui-react/widgets/Widget.d.ts.map +1 -1
  175. package/lib/cjs/appui-react/widgets/Widget.js.map +1 -1
  176. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +9 -29
  177. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  178. package/lib/cjs/appui-react/widgets/WidgetDef.js +90 -46
  179. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  180. package/lib/cjs/appui-react/widgets/WidgetHost.js +3 -2
  181. package/lib/cjs/appui-react/widgets/WidgetHost.js.map +1 -1
  182. package/lib/cjs/appui-react.d.ts +1 -0
  183. package/lib/cjs/appui-react.d.ts.map +1 -1
  184. package/lib/cjs/appui-react.js +1 -0
  185. package/lib/cjs/appui-react.js.map +1 -1
  186. package/lib/esm/appui-react/UiFramework.js +7 -4
  187. package/lib/esm/appui-react/UiFramework.js.map +1 -1
  188. package/lib/esm/appui-react/accudraw/MenuButton.d.ts +2 -2
  189. package/lib/esm/appui-react/accudraw/MenuButton.d.ts.map +1 -1
  190. package/lib/esm/appui-react/accudraw/MenuButton.js.map +1 -1
  191. package/lib/esm/appui-react/backstage/BackstageComposer.d.ts.map +1 -1
  192. package/lib/esm/appui-react/backstage/BackstageComposer.js.map +1 -1
  193. package/lib/esm/appui-react/backstage/BackstageComposerItem.js +2 -1
  194. package/lib/esm/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  195. package/lib/esm/appui-react/childwindow/CopyStyles.d.ts.map +1 -1
  196. package/lib/esm/appui-react/childwindow/CopyStyles.js +3 -1
  197. package/lib/esm/appui-react/childwindow/CopyStyles.js.map +1 -1
  198. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.d.ts.map +1 -1
  199. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js +3 -2
  200. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  201. package/lib/esm/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
  202. package/lib/esm/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  203. package/lib/esm/appui-react/configurableui/TimeTracker.js +2 -1
  204. package/lib/esm/appui-react/configurableui/TimeTracker.js.map +1 -1
  205. package/lib/esm/appui-react/content/ContentLayout.js +12 -9
  206. package/lib/esm/appui-react/content/ContentLayout.js.map +1 -1
  207. package/lib/esm/appui-react/content/DefaultViewOverlay.js +4 -3
  208. package/lib/esm/appui-react/content/DefaultViewOverlay.js.map +1 -1
  209. package/lib/esm/appui-react/content/FloatingViewportContent.js +2 -1
  210. package/lib/esm/appui-react/content/FloatingViewportContent.js.map +1 -1
  211. package/lib/esm/appui-react/content/IModelViewport.js +6 -3
  212. package/lib/esm/appui-react/content/IModelViewport.js.map +1 -1
  213. package/lib/esm/appui-react/content/InternalContentLayoutManager.js +2 -1
  214. package/lib/esm/appui-react/content/InternalContentLayoutManager.js.map +1 -1
  215. package/lib/esm/appui-react/content/InternalContentViewManager.js +1 -1
  216. package/lib/esm/appui-react/content/InternalContentViewManager.js.map +1 -1
  217. package/lib/esm/appui-react/content/split-pane/SplitPane.js +12 -10
  218. package/lib/esm/appui-react/content/split-pane/SplitPane.js.map +1 -1
  219. package/lib/esm/appui-react/cursor/CursorInformation.d.ts +6 -6
  220. package/lib/esm/appui-react/cursor/CursorInformation.d.ts.map +1 -1
  221. package/lib/esm/appui-react/cursor/CursorInformation.js.map +1 -1
  222. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  223. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js +3 -2
  224. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  225. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.d.ts +4 -4
  226. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.d.ts.map +1 -1
  227. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  228. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +5 -5
  229. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
  230. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  231. package/lib/esm/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +2 -2
  232. package/lib/esm/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
  233. package/lib/esm/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  234. package/lib/esm/appui-react/dialog/ContentDialog.js +6 -3
  235. package/lib/esm/appui-react/dialog/ContentDialog.js.map +1 -1
  236. package/lib/esm/appui-react/dialog/DialogManagerBase.js +3 -2
  237. package/lib/esm/appui-react/dialog/DialogManagerBase.js.map +1 -1
  238. package/lib/esm/appui-react/feedback/ElementTooltip.d.ts +1 -2
  239. package/lib/esm/appui-react/feedback/ElementTooltip.d.ts.map +1 -1
  240. package/lib/esm/appui-react/feedback/ElementTooltip.js.map +1 -1
  241. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts +22 -26
  242. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  243. package/lib/esm/appui-react/frontstage/FrontstageDef.js +181 -220
  244. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  245. package/lib/esm/appui-react/frontstage/InternalFrontstageManager.d.ts +3 -7
  246. package/lib/esm/appui-react/frontstage/InternalFrontstageManager.d.ts.map +1 -1
  247. package/lib/esm/appui-react/frontstage/InternalFrontstageManager.js +2 -6
  248. package/lib/esm/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  249. package/lib/esm/appui-react/frontstage/ModalSettingsStage.js +3 -2
  250. package/lib/esm/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  251. package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js +2 -1
  252. package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  253. package/lib/esm/appui-react/hooks/useActiveIModelConnection.d.ts.map +1 -1
  254. package/lib/esm/appui-react/hooks/useActiveIModelConnection.js.map +1 -1
  255. package/lib/esm/appui-react/hooks/useActiveViewport.d.ts.map +1 -1
  256. package/lib/esm/appui-react/hooks/useActiveViewport.js.map +1 -1
  257. package/lib/esm/appui-react/hooks/useAnalysisAnimationDataProvider.js +11 -7
  258. package/lib/esm/appui-react/hooks/useAnalysisAnimationDataProvider.js.map +1 -1
  259. package/lib/esm/appui-react/hooks/useScheduleAnimationDataProvider.js +11 -7
  260. package/lib/esm/appui-react/hooks/useScheduleAnimationDataProvider.js.map +1 -1
  261. package/lib/esm/appui-react/hooks/useSolarDataProvider.js +13 -8
  262. package/lib/esm/appui-react/hooks/useSolarDataProvider.js.map +1 -1
  263. package/lib/esm/appui-react/keyboardshortcut/InternalKeyboardShortcut.d.ts.map +1 -1
  264. package/lib/esm/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
  265. package/lib/esm/appui-react/messages/ActivityMessage.js +7 -5
  266. package/lib/esm/appui-react/messages/ActivityMessage.js.map +1 -1
  267. package/lib/esm/appui-react/messages/MessageManager.d.ts +0 -1
  268. package/lib/esm/appui-react/messages/MessageManager.d.ts.map +1 -1
  269. package/lib/esm/appui-react/messages/MessageManager.js +1 -2
  270. package/lib/esm/appui-react/messages/MessageManager.js.map +1 -1
  271. package/lib/esm/appui-react/messages/Pointer.d.ts +1 -2
  272. package/lib/esm/appui-react/messages/Pointer.d.ts.map +1 -1
  273. package/lib/esm/appui-react/messages/Pointer.js +1 -1
  274. package/lib/esm/appui-react/messages/Pointer.js.map +1 -1
  275. package/lib/esm/appui-react/pickers/ViewSelector.js +6 -5
  276. package/lib/esm/appui-react/pickers/ViewSelector.js.map +1 -1
  277. package/lib/esm/appui-react/popup/KeyinPalettePanel.js +2 -1
  278. package/lib/esm/appui-react/popup/KeyinPalettePanel.js.map +1 -1
  279. package/lib/esm/appui-react/popup/PopupManager.js +2 -1
  280. package/lib/esm/appui-react/popup/PopupManager.js.map +1 -1
  281. package/lib/esm/appui-react/popup/PositionPopup.d.ts +2 -2
  282. package/lib/esm/appui-react/popup/PositionPopup.d.ts.map +1 -1
  283. package/lib/esm/appui-react/popup/PositionPopup.js.map +1 -1
  284. package/lib/esm/appui-react/selection/SelectionContextItemDef.js +2 -2
  285. package/lib/esm/appui-react/selection/SelectionContextItemDef.js.map +1 -1
  286. package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.js +1 -2
  287. package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
  288. package/lib/esm/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  289. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts +16 -20
  290. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  291. package/lib/esm/appui-react/stagepanels/StagePanelDef.js +84 -115
  292. package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  293. package/lib/esm/appui-react/statusbar/Indicator.js +2 -1
  294. package/lib/esm/appui-react/statusbar/Indicator.js.map +1 -1
  295. package/lib/esm/appui-react/statusbar/StatusBar.js +5 -3
  296. package/lib/esm/appui-react/statusbar/StatusBar.js.map +1 -1
  297. package/lib/esm/appui-react/statusfields/MessageCenter.d.ts.map +1 -1
  298. package/lib/esm/appui-react/statusfields/MessageCenter.js +1 -2
  299. package/lib/esm/appui-react/statusfields/MessageCenter.js.map +1 -1
  300. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js +1 -1
  301. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  302. package/lib/esm/appui-react/syncui/InternalSyncUiEventDispatcher.d.ts +36 -0
  303. package/lib/esm/appui-react/syncui/InternalSyncUiEventDispatcher.d.ts.map +1 -0
  304. package/lib/esm/appui-react/syncui/InternalSyncUiEventDispatcher.js +130 -0
  305. package/lib/esm/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -0
  306. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts +1 -1
  307. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  308. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js +2 -2
  309. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  310. package/lib/esm/appui-react/syncui/UiSyncEvent.d.ts +16 -0
  311. package/lib/esm/appui-react/syncui/UiSyncEvent.d.ts.map +1 -0
  312. package/lib/esm/appui-react/syncui/UiSyncEvent.js +14 -0
  313. package/lib/esm/appui-react/syncui/UiSyncEvent.js.map +1 -0
  314. package/lib/esm/appui-react/toolbar/ToolbarHelper.js +4 -6
  315. package/lib/esm/appui-react/toolbar/ToolbarHelper.js.map +1 -1
  316. package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.js +4 -3
  317. package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
  318. package/lib/esm/appui-react/tools/CoreToolDefinitions.js +17 -10
  319. package/lib/esm/appui-react/tools/CoreToolDefinitions.js.map +1 -1
  320. package/lib/esm/appui-react/toolsettings/DefaultToolSettingsProvider.js +2 -3
  321. package/lib/esm/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  322. package/lib/esm/appui-react/ui-items-provider/AbstractUiItemsManager.js +14 -12
  323. package/lib/esm/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  324. package/lib/esm/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +10 -9
  325. package/lib/esm/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
  326. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +2 -1
  327. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  328. package/lib/esm/appui-react/ui-items-provider/UiItemsManager.js +14 -8
  329. package/lib/esm/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  330. package/lib/esm/appui-react/uiadmin/FrameworkUiAdmin.js +1 -1
  331. package/lib/esm/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  332. package/lib/esm/appui-react/uiprovider/ComponentGenerator.js +1 -1
  333. package/lib/esm/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  334. package/lib/esm/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
  335. package/lib/esm/appui-react/uistate/AppUiSettings.js.map +1 -1
  336. package/lib/esm/appui-react/uistate/useUiStateStorage.d.ts.map +1 -1
  337. package/lib/esm/appui-react/uistate/useUiStateStorage.js.map +1 -1
  338. package/lib/esm/appui-react/utils/InternalUiShowHideManager.js +3 -3
  339. package/lib/esm/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  340. package/lib/esm/appui-react/widget-panels/Content.js +9 -8
  341. package/lib/esm/appui-react/widget-panels/Content.js.map +1 -1
  342. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts +7 -29
  343. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  344. package/lib/esm/appui-react/widget-panels/Frontstage.js +131 -462
  345. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  346. package/lib/esm/appui-react/widget-panels/StatusBar.js +1 -1
  347. package/lib/esm/appui-react/widget-panels/StatusBar.js.map +1 -1
  348. package/lib/esm/appui-react/widget-panels/Tab.js +1 -1
  349. package/lib/esm/appui-react/widget-panels/Tab.js.map +1 -1
  350. package/lib/esm/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  351. package/lib/esm/appui-react/widget-panels/ToolSettings.js +34 -15
  352. package/lib/esm/appui-react/widget-panels/ToolSettings.js.map +1 -1
  353. package/lib/esm/appui-react/widget-panels/Toolbars.js +3 -2
  354. package/lib/esm/appui-react/widget-panels/Toolbars.js.map +1 -1
  355. package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js +2 -2
  356. package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  357. package/lib/esm/appui-react/widgets/Widget.d.ts +10 -4
  358. package/lib/esm/appui-react/widgets/Widget.d.ts.map +1 -1
  359. package/lib/esm/appui-react/widgets/Widget.js.map +1 -1
  360. package/lib/esm/appui-react/widgets/WidgetDef.d.ts +9 -29
  361. package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  362. package/lib/esm/appui-react/widgets/WidgetDef.js +90 -46
  363. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  364. package/lib/esm/appui-react/widgets/WidgetHost.js +3 -2
  365. package/lib/esm/appui-react/widgets/WidgetHost.js.map +1 -1
  366. package/lib/esm/appui-react.d.ts +1 -0
  367. package/lib/esm/appui-react.d.ts.map +1 -1
  368. package/lib/esm/appui-react.js +1 -0
  369. package/lib/esm/appui-react.js.map +1 -1
  370. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"MessageCenter.js","sourceRoot":"","sources":["../../../../src/appui-react/statusfields/MessageCenter.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 Notification\n */\n\nimport * as React from \"react\";\nimport { OutputMessagePriority } from \"@itwin/core-frontend\";\nimport {\n FooterPopup,\n MessageCenter,\n MessageCenterDialog,\n MessageCenterMessage,\n MessageCenterTab,\n} from \"@itwin/appui-layout-react\";\nimport { MessageManager } from \"../messages/MessageManager\";\nimport { MessageSpan } from \"../messages/MessageSpan\";\nimport type { NotifyMessageDetailsType } from \"../messages/ReactNotifyMessageDetails\";\nimport { UiFramework } from \"../UiFramework\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Icon } from \"@itwin/core-react\";\nimport classnames from \"classnames\";\n\n/** Enum for the [[MessageCenterField]] active tab\n * @internal\n */\nenum MessageCenterActiveTab {\n AllMessages,\n Problems,\n}\n\n/** State for the [[MessageCenterField]] React component\n * @internal\n */\ninterface MessageCenterState {\n activeTab: MessageCenterActiveTab;\n target: HTMLDivElement | null;\n messageCount: number;\n isOpen: boolean;\n}\n\n/** Message Center Field React component.\n * @public\n */\nexport class MessageCenterField extends React.Component<\n CommonProps,\n MessageCenterState\n> {\n private _indicator = React.createRef<HTMLDivElement>();\n private _title = UiFramework.translate(\"messageCenter.messages\");\n private _unloadMessagesUpdatedHandler?: () => void;\n private _removeOpenMessagesCenterHandler?: () => void;\n\n constructor(p: CommonProps) {\n super(p);\n\n this.state = {\n activeTab: MessageCenterActiveTab.AllMessages,\n target: null,\n messageCount: MessageManager.messages.length,\n isOpen: false,\n };\n }\n\n /** @internal */\n public override componentDidMount() {\n this._unloadMessagesUpdatedHandler =\n MessageManager.onMessagesUpdatedEvent.addListener(\n this._handleMessagesUpdatedEvent,\n this\n );\n this._removeOpenMessagesCenterHandler =\n MessageManager.onOpenMessageCenterEvent.addListener(\n this._handleOpenMessageCenterEvent,\n this\n );\n MessageManager.registerAnimateOutToElement(this._indicator.current);\n }\n\n /** @internal */\n public override componentWillUnmount() {\n // istanbul ignore else\n if (this._unloadMessagesUpdatedHandler) {\n this._unloadMessagesUpdatedHandler();\n this._unloadMessagesUpdatedHandler = undefined;\n }\n // istanbul ignore else\n if (this._removeOpenMessagesCenterHandler) {\n this._removeOpenMessagesCenterHandler();\n this._removeOpenMessagesCenterHandler = undefined;\n }\n }\n\n private _handleMessagesUpdatedEvent = () => {\n // istanbul ignore else\n if (this._unloadMessagesUpdatedHandler)\n this.setState({ messageCount: MessageManager.messages.length });\n };\n\n private _handleOpenMessageCenterEvent = () => {\n this.setIsOpen(true);\n };\n\n public override render(): React.ReactNode {\n const tooltip = `${this.state.messageCount} ${this._title}`;\n const divStyle = { ...this.props.style, height: \"100%\" };\n const footerMessages = (\n <>\n <div className={this.props.className} style={divStyle} title={tooltip}>\n <MessageCenter\n indicatorRef={this._indicator}\n label={this._title}\n onClick={this._handleMessageIndicatorClick}\n >\n {this.state.messageCount.toString()}\n </MessageCenter>\n </div>\n <FooterPopup\n isOpen={this.state.isOpen}\n onClose={this._handleClose}\n onOutsideClick={this._handleOutsideClick}\n target={this._indicator.current}\n >\n <MessageCenterDialog\n prompt={UiFramework.translate(\"messageCenter.prompt\")}\n tabs={\n <>\n <MessageCenterTab\n isActive={\n this.state.activeTab === MessageCenterActiveTab.AllMessages\n }\n onClick={() =>\n this._changeActiveTab(MessageCenterActiveTab.AllMessages)\n }\n >\n {UiFramework.translate(\"messageCenter.all\")}\n </MessageCenterTab>\n <MessageCenterTab\n isActive={\n this.state.activeTab === MessageCenterActiveTab.Problems\n }\n onClick={() =>\n this._changeActiveTab(MessageCenterActiveTab.Problems)\n }\n >\n {UiFramework.translate(\"messageCenter.errors\")}\n </MessageCenterTab>\n </>\n }\n title={this._title}\n >\n {this.getMessages()}\n </MessageCenterDialog>\n </FooterPopup>\n </>\n );\n\n return footerMessages;\n }\n\n private _handleClose = () => {\n this.setIsOpen(false);\n };\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (\n !this._indicator.current ||\n !(e.target instanceof Node) ||\n this._indicator.current.contains(e.target)\n )\n return;\n\n this._handleClose();\n };\n\n private _handleMessageIndicatorClick = () => {\n this.setIsOpen(!this.state.isOpen);\n };\n\n private _changeActiveTab = (tab: MessageCenterActiveTab) => {\n this.setState({ activeTab: tab });\n };\n\n private getMessages(): React.ReactChild[] {\n const messages = MessageManager.messages.slice(0).reverse();\n const tabRows: React.ReactChild[] = new Array<React.ReactChild>();\n\n messages.forEach((details: NotifyMessageDetailsType, index: number) => {\n /* istanbul ignore else */\n if (\n this.state.activeTab === MessageCenterActiveTab.AllMessages ||\n this.isProblemStatus(details.priority)\n ) {\n const iconClassName = classnames(\"icon\", \"notifymessage-icon\");\n const iconSpec = MessageManager.getIconSpecFromDetails(details);\n const message = details.briefMessage;\n\n tabRows.push(\n <MessageCenterMessage\n key={index.toString()}\n icon={<Icon iconSpec={iconSpec} className={iconClassName} />}\n >\n <MessageSpan message={message} />\n {details.detailedMessage && (\n <>\n <br />\n <MessageSpan\n className=\"iui-text-small\"\n message={details.detailedMessage}\n />\n </>\n )}\n </MessageCenterMessage>\n );\n }\n });\n\n return tabRows;\n }\n\n private isProblemStatus(priority: OutputMessagePriority): boolean {\n // See priority values in DgnPlatform defined in NotificationManager\n\n if (\n priority === OutputMessagePriority.Error ||\n priority === OutputMessagePriority.Fatal\n )\n return true;\n\n return false;\n }\n\n private setIsOpen(isOpen: boolean) {\n this.setState({ isOpen });\n }\n}\n"]}
1
+ {"version":3,"file":"MessageCenter.js","sourceRoot":"","sources":["../../../../src/appui-react/statusfields/MessageCenter.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 Notification\n */\n\nimport * as React from \"react\";\nimport { OutputMessagePriority } from \"@itwin/core-frontend\";\nimport {\n FooterPopup,\n MessageCenter,\n MessageCenterDialog,\n MessageCenterMessage,\n MessageCenterTab,\n} from \"@itwin/appui-layout-react\";\nimport { MessageManager } from \"../messages/MessageManager\";\nimport { MessageSpan } from \"../messages/MessageSpan\";\nimport type { NotifyMessageDetailsType } from \"../messages/ReactNotifyMessageDetails\";\nimport { UiFramework } from \"../UiFramework\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Icon } from \"@itwin/core-react\";\n\n/** Enum for the [[MessageCenterField]] active tab\n * @internal\n */\nenum MessageCenterActiveTab {\n AllMessages,\n Problems,\n}\n\n/** State for the [[MessageCenterField]] React component\n * @internal\n */\ninterface MessageCenterState {\n activeTab: MessageCenterActiveTab;\n target: HTMLDivElement | null;\n messageCount: number;\n isOpen: boolean;\n}\n\n/** Message Center Field React component.\n * @public\n */\nexport class MessageCenterField extends React.Component<\n CommonProps,\n MessageCenterState\n> {\n private _indicator = React.createRef<HTMLDivElement>();\n private _title = UiFramework.translate(\"messageCenter.messages\");\n private _unloadMessagesUpdatedHandler?: () => void;\n private _removeOpenMessagesCenterHandler?: () => void;\n\n constructor(p: CommonProps) {\n super(p);\n\n this.state = {\n activeTab: MessageCenterActiveTab.AllMessages,\n target: null,\n messageCount: MessageManager.messages.length,\n isOpen: false,\n };\n }\n\n /** @internal */\n public override componentDidMount() {\n this._unloadMessagesUpdatedHandler =\n MessageManager.onMessagesUpdatedEvent.addListener(\n this._handleMessagesUpdatedEvent,\n this\n );\n this._removeOpenMessagesCenterHandler =\n MessageManager.onOpenMessageCenterEvent.addListener(\n this._handleOpenMessageCenterEvent,\n this\n );\n MessageManager.registerAnimateOutToElement(this._indicator.current);\n }\n\n /** @internal */\n public override componentWillUnmount() {\n // istanbul ignore else\n if (this._unloadMessagesUpdatedHandler) {\n this._unloadMessagesUpdatedHandler();\n this._unloadMessagesUpdatedHandler = undefined;\n }\n // istanbul ignore else\n if (this._removeOpenMessagesCenterHandler) {\n this._removeOpenMessagesCenterHandler();\n this._removeOpenMessagesCenterHandler = undefined;\n }\n }\n\n private _handleMessagesUpdatedEvent = () => {\n // istanbul ignore else\n if (this._unloadMessagesUpdatedHandler)\n this.setState({ messageCount: MessageManager.messages.length });\n };\n\n private _handleOpenMessageCenterEvent = () => {\n this.setIsOpen(true);\n };\n\n public override render(): React.ReactNode {\n const tooltip = `${this.state.messageCount} ${this._title}`;\n const divStyle = { ...this.props.style, height: \"100%\" };\n const footerMessages = (\n <>\n <div className={this.props.className} style={divStyle} title={tooltip}>\n <MessageCenter\n indicatorRef={this._indicator}\n label={this._title}\n onClick={this._handleMessageIndicatorClick}\n >\n {this.state.messageCount.toString()}\n </MessageCenter>\n </div>\n <FooterPopup\n isOpen={this.state.isOpen}\n onClose={this._handleClose}\n onOutsideClick={this._handleOutsideClick}\n target={this._indicator.current}\n >\n <MessageCenterDialog\n prompt={UiFramework.translate(\"messageCenter.prompt\")}\n tabs={\n <>\n <MessageCenterTab\n isActive={\n this.state.activeTab === MessageCenterActiveTab.AllMessages\n }\n onClick={() =>\n this._changeActiveTab(MessageCenterActiveTab.AllMessages)\n }\n >\n {UiFramework.translate(\"messageCenter.all\")}\n </MessageCenterTab>\n <MessageCenterTab\n isActive={\n this.state.activeTab === MessageCenterActiveTab.Problems\n }\n onClick={() =>\n this._changeActiveTab(MessageCenterActiveTab.Problems)\n }\n >\n {UiFramework.translate(\"messageCenter.errors\")}\n </MessageCenterTab>\n </>\n }\n title={this._title}\n >\n {this.getMessages()}\n </MessageCenterDialog>\n </FooterPopup>\n </>\n );\n\n return footerMessages;\n }\n\n private _handleClose = () => {\n this.setIsOpen(false);\n };\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (\n !this._indicator.current ||\n !(e.target instanceof Node) ||\n this._indicator.current.contains(e.target)\n )\n return;\n\n this._handleClose();\n };\n\n private _handleMessageIndicatorClick = () => {\n this.setIsOpen(!this.state.isOpen);\n };\n\n private _changeActiveTab = (tab: MessageCenterActiveTab) => {\n this.setState({ activeTab: tab });\n };\n\n private getMessages(): React.ReactChild[] {\n const messages = MessageManager.messages.slice(0).reverse();\n const tabRows: React.ReactChild[] = new Array<React.ReactChild>();\n\n messages.forEach((details: NotifyMessageDetailsType, index: number) => {\n /* istanbul ignore else */\n if (\n this.state.activeTab === MessageCenterActiveTab.AllMessages ||\n this.isProblemStatus(details.priority)\n ) {\n const iconClassName = MessageManager.getIconClassName(details);\n const iconSpec = MessageManager.getIconSpecFromDetails(details);\n const message = details.briefMessage;\n\n tabRows.push(\n <MessageCenterMessage\n key={index.toString()}\n icon={<Icon iconSpec={iconSpec} className={iconClassName} />}\n >\n <MessageSpan message={message} />\n {details.detailedMessage && (\n <>\n <br />\n <MessageSpan\n className=\"iui-text-small\"\n message={details.detailedMessage}\n />\n </>\n )}\n </MessageCenterMessage>\n );\n }\n });\n\n return tabRows;\n }\n\n private isProblemStatus(priority: OutputMessagePriority): boolean {\n // See priority values in DgnPlatform defined in NotificationManager\n\n if (\n priority === OutputMessagePriority.Error ||\n priority === OutputMessagePriority.Fatal\n )\n return true;\n\n return false;\n }\n\n private setIsOpen(isOpen: boolean) {\n this.setState({ isOpen });\n }\n}\n"]}
@@ -311,7 +311,7 @@ class ToolAssistanceField extends React.Component {
311
311
  ? "uifw-toolassistance-svg"
312
312
  : "uifw-toolassistance-icon-large";
313
313
  image = (React.createElement("div", { className: className },
314
- React.createElement(Icon, { iconSpec: svgSource ?? instruction.image })));
314
+ React.createElement(Icon, { iconSpec: svgSource !== null && svgSource !== void 0 ? svgSource : instruction.image })));
315
315
  }
316
316
  }
317
317
  else if (instruction.image === ToolAssistanceImage.Keyboard) {
@@ -1 +1 @@
1
- {"version":3,"file":"ToolAssistanceField.js","sourceRoot":"","sources":["../../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.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 Notification\n */\n\nimport \"./ToolAssistanceField.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type {\n ToolAssistanceInstruction,\n ToolAssistanceInstructions,\n ToolAssistanceKeyboardInfo,\n ToolAssistanceSection,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ToolAssistanceImage,\n ToolAssistanceInputMethod,\n} from \"@itwin/core-frontend\";\nimport { IconSpecUtilities } from \"@itwin/appui-abstract\";\nimport type {\n CommonProps,\n UiStateStorage,\n UiStateStorageResult,\n} from \"@itwin/core-react\";\nimport {\n FillCentered,\n Icon,\n LocalStateStorage,\n UiCore,\n UiStateEntry,\n UiStateStorageStatus,\n} from \"@itwin/core-react\";\nimport {\n FooterPopup,\n ToolAssistanceInstruction as NZ_ToolAssistanceInstruction,\n ToolAssistance,\n ToolAssistanceDialog,\n ToolAssistanceItem,\n ToolAssistanceSeparator,\n} from \"@itwin/appui-layout-react\";\nimport { Tabs, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport { CursorPrompt } from \"../../cursor/cursorprompt/CursorPrompt\";\nimport type { ToolIconChangedEventArgs } from \"../../framework/FrameworkFrontstages\";\nimport type { ToolAssistanceChangedEventArgs } from \"../../messages/MessageManager\";\nimport { MessageManager } from \"../../messages/MessageManager\";\nimport { UiFramework } from \"../../UiFramework\";\nimport { UiStateStorageContext } from \"../../uistate/useUiStateStorage\";\n\nimport acceptPointIcon from \"./accept-point.svg\";\nimport cursorClickIcon from \"./cursor-click.svg\";\nimport oneTouchDragIcon from \"./gesture-one-finger-drag.svg\";\nimport oneTouchDoubleTapIcon from \"./gesture-one-finger-tap-double.svg\";\nimport oneTouchTapIcon from \"./gesture-one-finger-tap.svg\";\nimport twoTouchPinchIcon from \"./gesture-pinch.svg\";\nimport twoTouchDragIcon from \"./gesture-two-finger-drag.svg\";\nimport twoTouchTapIcon from \"./gesture-two-finger-tap.svg\";\nimport clickLeftDragIcon from \"./mouse-click-left-drag.svg\";\nimport clickLeftIcon from \"./mouse-click-left.svg\";\nimport clickRightDragIcon from \"./mouse-click-right-drag.svg\";\nimport clickRightIcon from \"./mouse-click-right.svg\";\nimport clickMouseWheelDragIcon from \"./mouse-click-wheel-drag.svg\";\nimport mouseWheelClickIcon from \"./mouse-click-wheel.svg\";\nimport touchCursorDragIcon from \"./touch-cursor-pan.svg\";\nimport touchCursorTapIcon from \"./touch-cursor-point.svg\";\nimport { StatusBarDialog } from \"../../statusbar/dialog/Dialog\";\nimport { SvgClose, SvgPin } from \"@itwin/itwinui-icons-react\";\n\n// cSpell:ignore cursorprompt\n\n/** Properties of [[ToolAssistanceField]] component.\n * @public\n */\nexport interface ToolAssistanceFieldProps extends CommonProps {\n /** Indicates whether to include promptAtCursor Checkbox. Defaults to true. */\n includePromptAtCursor: boolean;\n /** Optional parameter for persistent UI settings. Defaults to UiStateStorageContext.\n */\n uiStateStorage?: UiStateStorage;\n /** Cursor Prompt Timeout period. Defaults to 5000. */\n cursorPromptTimeout: number;\n /** Fade Out the Cursor Prompt when closed. */\n fadeOutCursorPrompt: boolean;\n /** Indicates whether to show promptAtCursor by default. Defaults to false. */\n defaultPromptAtCursor: boolean;\n}\n\n/** Default properties of [[ToolAssistanceField]] component.\n * @internal\n */\nexport type ToolAssistanceFieldDefaultProps = Pick<\n ToolAssistanceFieldProps,\n | \"includePromptAtCursor\"\n | \"uiStateStorage\"\n | \"cursorPromptTimeout\"\n | \"fadeOutCursorPrompt\"\n | \"defaultPromptAtCursor\"\n>;\n\n/** @internal */\ninterface ToolAssistanceFieldState {\n instructions: ToolAssistanceInstructions | undefined;\n toolIconSpec: string;\n showPromptAtCursor: boolean;\n includeMouseInstructions: boolean;\n includeTouchInstructions: boolean;\n showMouseTouchTabs: boolean;\n showMouseInstructions: boolean;\n showTouchInstructions: boolean;\n mouseTouchTabIndex: number;\n isPinned: boolean;\n isOpen: boolean;\n}\n\n/** Tool Assistance Field React component.\n * @public\n */\nexport class ToolAssistanceField extends React.Component<\n ToolAssistanceFieldProps,\n ToolAssistanceFieldState\n> {\n /** @internal */\n public static override contextType = UiStateStorageContext;\n /** @internal */\n public declare context: React.ContextType<typeof UiStateStorageContext>;\n\n private static _toolAssistanceKey = \"ToolAssistance\";\n private static _showPromptAtCursorKey = \"showPromptAtCursor\";\n private static _mouseTouchTabIndexKey = \"mouseTouchTabIndex\";\n private _showPromptAtCursorSetting: UiStateEntry<boolean>;\n private _mouseTouchTabIndexSetting: UiStateEntry<number>;\n private _target: HTMLElement | null = null;\n private _indicator = React.createRef<HTMLDivElement>();\n private _cursorPrompt: CursorPrompt;\n private _isMounted = false;\n private _uiSettingsStorage: UiStateStorage;\n\n /** @internal */\n public static readonly defaultProps: ToolAssistanceFieldDefaultProps = {\n includePromptAtCursor: true,\n cursorPromptTimeout: 5000,\n fadeOutCursorPrompt: true,\n defaultPromptAtCursor: false,\n };\n\n /** @internal */\n constructor(p: ToolAssistanceFieldProps) {\n super(p);\n\n const mobile = UiFramework.isMobile();\n\n this.state = {\n instructions: undefined,\n toolIconSpec: \"\",\n showPromptAtCursor: p.defaultPromptAtCursor,\n includeMouseInstructions: !mobile,\n includeTouchInstructions: true,\n showMouseTouchTabs: false,\n showMouseInstructions: false,\n showTouchInstructions: false,\n mouseTouchTabIndex: 0,\n isPinned: false,\n isOpen: false,\n };\n\n this._uiSettingsStorage = new LocalStateStorage();\n this._cursorPrompt = new CursorPrompt(\n this.props.cursorPromptTimeout,\n this.props.fadeOutCursorPrompt\n );\n this._showPromptAtCursorSetting = new UiStateEntry(\n ToolAssistanceField._toolAssistanceKey,\n ToolAssistanceField._showPromptAtCursorKey,\n () => this.state.showPromptAtCursor\n );\n this._mouseTouchTabIndexSetting = new UiStateEntry(\n ToolAssistanceField._toolAssistanceKey,\n ToolAssistanceField._mouseTouchTabIndexKey,\n () => this.state.mouseTouchTabIndex\n );\n }\n\n /** @internal */\n public override async componentDidMount() {\n this._isMounted = true;\n MessageManager.onToolAssistanceChangedEvent.addListener(\n this._handleToolAssistanceChangedEvent\n );\n UiFramework.frontstages.onToolIconChangedEvent.addListener(\n this._handleToolIconChangedEvent\n );\n\n // istanbul ignore else\n if (this.props.uiStateStorage)\n this._uiSettingsStorage = this.props.uiStateStorage;\n else if (this.context) this._uiSettingsStorage = this.context;\n\n await this.restoreSettings();\n }\n\n /** @internal */\n public override componentWillUnmount() {\n this._isMounted = false;\n MessageManager.onToolAssistanceChangedEvent.removeListener(\n this._handleToolAssistanceChangedEvent\n );\n UiFramework.frontstages.onToolIconChangedEvent.removeListener(\n this._handleToolIconChangedEvent\n );\n }\n\n private async restoreSettings() {\n let getShowPromptAtCursor: Promise<UiStateStorageResult> | undefined;\n // istanbul ignore else\n if (this.props.includePromptAtCursor) {\n getShowPromptAtCursor = this._showPromptAtCursorSetting.getSetting(\n this._uiSettingsStorage\n );\n }\n const getMouseTouchTabIndex = this._mouseTouchTabIndexSetting.getSetting(\n this._uiSettingsStorage\n );\n const [showPromptAtCursorResult, mouseTouchTabIndexResult] =\n await Promise.all([getShowPromptAtCursor, getMouseTouchTabIndex]);\n\n // istanbul ignore else\n if (\n showPromptAtCursorResult !== undefined &&\n showPromptAtCursorResult.status === UiStateStorageStatus.Success\n ) {\n // istanbul ignore else\n if (this._isMounted)\n this.setState({ showPromptAtCursor: showPromptAtCursorResult.setting });\n }\n\n // istanbul ignore else\n if (mouseTouchTabIndexResult.status === UiStateStorageStatus.Success) {\n // istanbul ignore else\n if (this._isMounted)\n this.setState({ mouseTouchTabIndex: mouseTouchTabIndexResult.setting });\n }\n }\n\n private _handleToolAssistanceChangedEvent = (\n args: ToolAssistanceChangedEventArgs\n ): void => {\n let showMouseTouchTabs = false;\n let showMouseInstructions = false;\n let showTouchInstructions = false;\n\n if (args.instructions && args.instructions.sections) {\n const hasMouseInstructions = args.instructions.sections.some(\n (section: ToolAssistanceSection) => {\n return section.instructions.some(\n (instruction: ToolAssistanceInstruction) =>\n this._isMouseInstruction(instruction)\n );\n }\n );\n const hasTouchInstructions = args.instructions.sections.some(\n (section: ToolAssistanceSection) => {\n return section.instructions.some(\n (instruction: ToolAssistanceInstruction) =>\n this._isTouchInstruction(instruction)\n );\n }\n );\n\n if (\n this.state.includeMouseInstructions &&\n this.state.includeTouchInstructions &&\n hasMouseInstructions &&\n hasTouchInstructions\n ) {\n showMouseTouchTabs = true;\n showMouseInstructions = this.state.mouseTouchTabIndex === 0;\n showTouchInstructions = this.state.mouseTouchTabIndex === 1;\n } else {\n if (this.state.includeMouseInstructions && hasMouseInstructions)\n showMouseInstructions = true;\n else if (this.state.includeTouchInstructions && hasTouchInstructions)\n showTouchInstructions = true;\n }\n }\n\n // istanbul ignore else\n if (this._isMounted)\n this.setState(\n {\n instructions: args.instructions,\n showMouseTouchTabs,\n showMouseInstructions,\n showTouchInstructions,\n },\n () => {\n this._showCursorPrompt();\n }\n );\n };\n\n private _isBothInstruction = (instruction: ToolAssistanceInstruction) => {\n return (\n instruction.inputMethod === undefined ||\n instruction.inputMethod === ToolAssistanceInputMethod.Both\n );\n };\n\n private _isMouseInstruction = (instruction: ToolAssistanceInstruction) =>\n instruction.inputMethod === ToolAssistanceInputMethod.Mouse;\n\n private _isTouchInstruction = (instruction: ToolAssistanceInstruction) =>\n instruction.inputMethod === ToolAssistanceInputMethod.Touch;\n\n private _handleToolIconChangedEvent = (\n args: ToolIconChangedEventArgs\n ): void => {\n // istanbul ignore else\n if (this._isMounted)\n this.setState({ toolIconSpec: args.iconSpec }, () => {\n this._showCursorPrompt();\n });\n };\n\n private _showCursorPrompt() {\n if (this.state.showPromptAtCursor && this.state.instructions)\n this._cursorPrompt.display(\n this.state.toolIconSpec,\n this.state.instructions.mainInstruction\n );\n }\n\n private _sectionHasDisplayableInstructions(\n section: ToolAssistanceSection\n ): boolean {\n const displayableInstructions = this._getDisplayableInstructions(section);\n return displayableInstructions.length > 0;\n }\n\n private _getDisplayableInstructions(\n section: ToolAssistanceSection\n ): ToolAssistanceInstruction[] {\n const displayableInstructions = section.instructions.filter(\n (instruction: ToolAssistanceInstruction) => {\n return (\n this._isBothInstruction(instruction) ||\n (this.state.showMouseInstructions &&\n this._isMouseInstruction(instruction)) ||\n (this.state.showTouchInstructions &&\n this._isTouchInstruction(instruction))\n );\n }\n );\n return displayableInstructions;\n }\n\n private _handleMouseTouchTab = async (index: number) => {\n const showMouseInstructions = index === 0;\n const showTouchInstructions = index === 1;\n\n // istanbul ignore else\n if (this._isMounted)\n this.setState(\n {\n mouseTouchTabIndex: index,\n showMouseInstructions,\n showTouchInstructions,\n },\n async () => {\n await this._mouseTouchTabIndexSetting.saveSetting(\n this._uiSettingsStorage\n );\n }\n );\n };\n\n /** @internal */\n public override render(): React.ReactNode {\n const { instructions } = this.state;\n const dialogTitle = IModelApp.toolAdmin.activeTool\n ? /* istanbul ignore next */ IModelApp.toolAdmin.activeTool.flyover\n : UiFramework.translate(\"toolAssistance.title\");\n const mouseLabel = UiFramework.translate(\"toolAssistance.mouse\");\n const touchLabel = UiFramework.translate(\"toolAssistance.touch\");\n let prompt = \"\";\n let tooltip = \"\";\n let toolIcon: React.ReactNode;\n let dialogContent: React.ReactNode;\n\n if (instructions) {\n prompt = instructions.mainInstruction.text;\n toolIcon = <Icon iconSpec={this.state.toolIconSpec} />;\n\n let displayableSections: ToolAssistanceSection[] | undefined;\n if (instructions.sections) {\n displayableSections = instructions.sections.filter(\n (section: ToolAssistanceSection) =>\n this._sectionHasDisplayableInstructions(section)\n );\n }\n\n dialogContent = (\n <div>\n {this.state.showMouseTouchTabs && (\n <Tabs\n orientation=\"horizontal\"\n tabsClassName=\"uifw-toolAssistance-tabs\"\n labels={[mouseLabel, touchLabel]}\n activeIndex={this.state.mouseTouchTabIndex}\n onTabSelected={this._handleMouseTouchTab}\n />\n )}\n\n <div className=\"uifw-toolAssistance-content\">\n <NZ_ToolAssistanceInstruction\n key=\"main\"\n image={ToolAssistanceField.getInstructionImage(\n instructions.mainInstruction\n )}\n text={instructions.mainInstruction.text}\n isNew={instructions.mainInstruction.isNew}\n />\n\n {displayableSections &&\n displayableSections.map(\n (section: ToolAssistanceSection, index1: number) => {\n return (\n <React.Fragment key={index1.toString()}>\n <ToolAssistanceSeparator key={index1.toString()}>\n {section.label}\n </ToolAssistanceSeparator>\n {this._getDisplayableInstructions(section).map(\n (\n instruction: ToolAssistanceInstruction,\n index2: number\n ) => {\n return (\n <NZ_ToolAssistanceInstruction\n key={`${index1.toString()}-${index2.toString()}`}\n image={ToolAssistanceField.getInstructionImage(\n instruction\n )}\n text={instruction.text}\n isNew={instruction.isNew}\n />\n );\n }\n )}\n </React.Fragment>\n );\n }\n )}\n\n {this.props.includePromptAtCursor && (\n <>\n <ToolAssistanceSeparator key=\"prompt-sep\" />\n <ToolAssistanceItem key=\"prompt-item\">\n <ToggleSwitch\n label={UiFramework.translate(\n \"toolAssistance.promptAtCursor\"\n )}\n labelPosition=\"right\"\n checked={this.state.showPromptAtCursor}\n onChange={this._onPromptAtCursorChange}\n />\n </ToolAssistanceItem>\n </>\n )}\n </div>\n </div>\n );\n }\n\n if (prompt) tooltip = prompt;\n\n // istanbul ignore next\n if (IModelApp.toolAdmin.activeTool)\n tooltip = `${IModelApp.toolAdmin.activeTool.flyover} > ${tooltip} `;\n\n if (tooltip) {\n const lineBreak = \"\\u000d\\u000a\";\n tooltip = tooltip + lineBreak;\n }\n\n tooltip += UiFramework.translate(\"toolAssistance.moreInfo\");\n\n return (\n <>\n <div style={{ height: \"100%\" }} ref={this._handleTargetRef}>\n <ToolAssistance\n icons={<>{toolIcon}</>}\n indicatorRef={this._indicator}\n className={classnames(\n \"uifw-statusFields-toolassistance\",\n this.props.className\n )}\n style={this.props.style}\n onClick={this._handleToolAssistanceIndicatorClick}\n title={tooltip}\n >\n {prompt}\n </ToolAssistance>\n </div>\n <FooterPopup\n isOpen={this.state.isOpen}\n onClose={this._handleClose}\n onOutsideClick={this._handleOutsideClick}\n target={this._target}\n isPinned={this.state.isPinned}\n >\n <ToolAssistanceDialog\n buttons={\n <>\n {!this.state.isPinned && (\n <StatusBarDialog.TitleBarButton\n onClick={this._handlePinButtonClick}\n title={UiFramework.translate(\"toolAssistance.pin\")}\n >\n <Icon iconSpec={<SvgPin />} />\n </StatusBarDialog.TitleBarButton>\n )}\n {this.state.isPinned && (\n <StatusBarDialog.TitleBarButton\n onClick={this._handleCloseButtonClick}\n title={UiCore.translate(\"dialog.close\")}\n >\n <Icon iconSpec={<SvgClose />} />\n </StatusBarDialog.TitleBarButton>\n )}\n </>\n }\n title={dialogTitle}\n >\n {dialogContent}\n </ToolAssistanceDialog>\n </FooterPopup>\n </>\n );\n }\n\n private _handleTargetRef = (target: HTMLElement | null) => {\n this._target = target;\n };\n\n private _onPromptAtCursorChange = async (\n e: React.ChangeEvent<HTMLInputElement>\n ) => {\n // istanbul ignore else\n if (this._isMounted)\n this.setState(\n {\n showPromptAtCursor: e.target.checked,\n },\n async () => {\n await this._showPromptAtCursorSetting.saveSetting(\n this._uiSettingsStorage\n );\n }\n );\n };\n\n private _handleClose = () => {\n this.setIsOpen(false);\n };\n\n private _handleOutsideClick = (e: MouseEvent) => {\n // istanbul ignore if\n if (\n !this._indicator.current ||\n !(e.target instanceof Node) ||\n this._indicator.current.contains(e.target)\n )\n return;\n\n this._handleClose();\n };\n\n private _handleToolAssistanceIndicatorClick = () => {\n this.setIsOpen(!this.state.isOpen);\n };\n\n private _handlePinButtonClick = () => {\n // istanbul ignore else\n if (this._isMounted) this.setState({ isPinned: true });\n };\n\n private _handleCloseButtonClick = () => {\n this._handleClose();\n };\n\n private setIsOpen(isOpen: boolean) {\n let newState = {\n isOpen,\n };\n if (!isOpen && this.state.isPinned && this._isMounted) {\n newState = { ...newState, ...{ isPinned: false } };\n }\n this.setState(newState);\n }\n\n /** @internal */\n public static getInstructionImage(\n instruction: ToolAssistanceInstruction\n ): React.ReactNode {\n let image: React.ReactNode;\n\n if (\n (typeof instruction.image === \"string\" ||\n instruction.image !== ToolAssistanceImage.Keyboard) &&\n instruction.keyboardInfo\n ) {\n if (\n instruction.keyboardInfo.keys.length === 1 &&\n !instruction.keyboardInfo.bottomKeys\n ) {\n const key = instruction.keyboardInfo.keys[0];\n const rightImage =\n typeof instruction.image === \"string\" ? (\n <div className=\"uifw-toolassistance-icon-medium\">\n <Icon iconSpec={instruction.image} />\n </div>\n ) : (\n this.getInstructionSvgImage(instruction, true)\n );\n\n image = (\n <FillCentered>\n {ToolAssistanceField.getKeyNode(\n key,\n 0,\n \"uifw-toolassistance-key-modifier\"\n )}\n {rightImage}\n </FillCentered>\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(this),\n `getInstructionImage: Invalid keyboardInfo provided with image`\n );\n }\n } else if (typeof instruction.image === \"string\") {\n if (instruction.image.length > 0) {\n const svgSource = IconSpecUtilities.getWebComponentSource(\n instruction.image\n );\n const className =\n svgSource !== undefined\n ? \"uifw-toolassistance-svg\"\n : \"uifw-toolassistance-icon-large\";\n image = (\n <div className={className}>\n <Icon iconSpec={svgSource ?? instruction.image} />\n </div>\n );\n }\n } else if (instruction.image === ToolAssistanceImage.Keyboard) {\n if (instruction.keyboardInfo) {\n image = ToolAssistanceField.getInstructionKeyboardImage(\n instruction.keyboardInfo\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(this),\n `getInstructionImage: ToolAssistanceImage.Keyboard specified but no keyboardInfo provided`\n );\n }\n } else {\n image = this.getInstructionSvgImage(instruction, false);\n }\n\n return image;\n }\n\n private static getInstructionSvgImage(\n instruction: ToolAssistanceInstruction,\n mediumSize: boolean\n ): React.ReactNode {\n let image: React.ReactNode;\n let className = mediumSize\n ? \"uifw-toolassistance-svg-medium\"\n : \"uifw-toolassistance-svg\";\n\n // istanbul ignore else\n if (\n typeof instruction.image !== \"string\" &&\n instruction.image !== ToolAssistanceImage.Keyboard\n ) {\n const toolAssistanceImage: ToolAssistanceImage = instruction.image;\n let svgImage = \"\";\n\n switch (toolAssistanceImage) {\n case ToolAssistanceImage.AcceptPoint:\n svgImage = acceptPointIcon;\n break;\n case ToolAssistanceImage.CursorClick:\n svgImage = cursorClickIcon;\n break;\n case ToolAssistanceImage.LeftClick:\n svgImage = clickLeftIcon;\n break;\n case ToolAssistanceImage.RightClick:\n svgImage = clickRightIcon;\n break;\n case ToolAssistanceImage.MouseWheel:\n svgImage = mouseWheelClickIcon;\n break;\n case ToolAssistanceImage.LeftClickDrag:\n svgImage = clickLeftDragIcon;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.RightClickDrag:\n svgImage = clickRightDragIcon;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.MouseWheelClickDrag:\n svgImage = clickMouseWheelDragIcon;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.OneTouchTap:\n svgImage = oneTouchTapIcon;\n break;\n case ToolAssistanceImage.OneTouchDoubleTap:\n svgImage = oneTouchDoubleTapIcon;\n break;\n case ToolAssistanceImage.OneTouchDrag:\n svgImage = oneTouchDragIcon;\n break;\n case ToolAssistanceImage.TwoTouchTap:\n svgImage = twoTouchTapIcon;\n break;\n case ToolAssistanceImage.TwoTouchDrag:\n svgImage = twoTouchDragIcon;\n break;\n case ToolAssistanceImage.TwoTouchPinch:\n svgImage = twoTouchPinchIcon;\n break;\n case ToolAssistanceImage.TouchCursorTap:\n svgImage = touchCursorTapIcon;\n break;\n case ToolAssistanceImage.TouchCursorDrag:\n svgImage = touchCursorDragIcon;\n className = mediumSize\n ? /* istanbul ignore next */ \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n }\n const iconSpec = IconSpecUtilities.createWebComponentIconSpec(svgImage);\n image = (\n <div className={className}>\n {svgImage && (\n // istanbul ignore next\n <Icon iconSpec={iconSpec} />\n )}\n </div>\n );\n }\n\n return image;\n }\n\n private static getInstructionKeyboardImage(\n keyboardInfo: ToolAssistanceKeyboardInfo\n ): React.ReactNode {\n let image: React.ReactNode;\n\n if (keyboardInfo.bottomKeys !== undefined) {\n image = (\n <div className=\"uifw-toolassistance-key-group\">\n <span className=\"row1\">\n {keyboardInfo.keys.map((key: string, index1: number) => {\n return ToolAssistanceField.getKeyNode(\n key,\n index1,\n \"uifw-toolassistance-key-small\"\n );\n })}\n </span>\n <br />\n <span className=\"row2\">\n {keyboardInfo.bottomKeys.map((key: string, index2: number) => {\n return ToolAssistanceField.getKeyNode(\n key,\n index2,\n \"uifw-toolassistance-key-small\"\n );\n })}\n </span>\n </div>\n );\n } else if (keyboardInfo.keys.length === 2) {\n image = (\n <FillCentered>\n {keyboardInfo.keys.map((key: string, index3: number) => {\n let className = \"uifw-toolassistance-key-medium\";\n if (key.length > 1) className = \"uifw-toolassistance-key-modifier\";\n return ToolAssistanceField.getKeyNode(key, index3, className);\n })}\n </FillCentered>\n );\n } else if (keyboardInfo.keys[0]) {\n if (keyboardInfo.keys[0].length > 1)\n image = ToolAssistanceField.getKeyNode(\n keyboardInfo.keys[0],\n 0,\n \"uifw-toolassistance-key-large\"\n );\n else image = ToolAssistanceField.getKeyNode(keyboardInfo.keys[0], 0);\n } else {\n Logger.logError(\n UiFramework.loggerCategory(this),\n `ToolAssistanceImage.Keyboard specified but ToolAssistanceKeyboardInfo not valid`\n );\n }\n\n return image;\n }\n\n private static getKeyNode(\n key: string,\n index: number,\n className?: string\n ): React.ReactNode {\n return (\n <div\n key={index.toString()}\n className={classnames(\"uifw-toolassistance-key\", className)}\n >\n <FillCentered>{key}</FillCentered>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ToolAssistanceField.js","sourceRoot":"","sources":["../../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.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 Notification\n */\n\nimport \"./ToolAssistanceField.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type {\n ToolAssistanceInstruction,\n ToolAssistanceInstructions,\n ToolAssistanceKeyboardInfo,\n ToolAssistanceSection,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ToolAssistanceImage,\n ToolAssistanceInputMethod,\n} from \"@itwin/core-frontend\";\nimport { IconSpecUtilities } from \"@itwin/appui-abstract\";\nimport type {\n CommonProps,\n UiStateStorage,\n UiStateStorageResult,\n} from \"@itwin/core-react\";\nimport {\n FillCentered,\n Icon,\n LocalStateStorage,\n UiCore,\n UiStateEntry,\n UiStateStorageStatus,\n} from \"@itwin/core-react\";\nimport {\n FooterPopup,\n ToolAssistanceInstruction as NZ_ToolAssistanceInstruction,\n ToolAssistance,\n ToolAssistanceDialog,\n ToolAssistanceItem,\n ToolAssistanceSeparator,\n} from \"@itwin/appui-layout-react\";\nimport { Tabs, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport { CursorPrompt } from \"../../cursor/cursorprompt/CursorPrompt\";\nimport type { ToolIconChangedEventArgs } from \"../../framework/FrameworkFrontstages\";\nimport type { ToolAssistanceChangedEventArgs } from \"../../messages/MessageManager\";\nimport { MessageManager } from \"../../messages/MessageManager\";\nimport { UiFramework } from \"../../UiFramework\";\nimport { UiStateStorageContext } from \"../../uistate/useUiStateStorage\";\n\nimport acceptPointIcon from \"./accept-point.svg\";\nimport cursorClickIcon from \"./cursor-click.svg\";\nimport oneTouchDragIcon from \"./gesture-one-finger-drag.svg\";\nimport oneTouchDoubleTapIcon from \"./gesture-one-finger-tap-double.svg\";\nimport oneTouchTapIcon from \"./gesture-one-finger-tap.svg\";\nimport twoTouchPinchIcon from \"./gesture-pinch.svg\";\nimport twoTouchDragIcon from \"./gesture-two-finger-drag.svg\";\nimport twoTouchTapIcon from \"./gesture-two-finger-tap.svg\";\nimport clickLeftDragIcon from \"./mouse-click-left-drag.svg\";\nimport clickLeftIcon from \"./mouse-click-left.svg\";\nimport clickRightDragIcon from \"./mouse-click-right-drag.svg\";\nimport clickRightIcon from \"./mouse-click-right.svg\";\nimport clickMouseWheelDragIcon from \"./mouse-click-wheel-drag.svg\";\nimport mouseWheelClickIcon from \"./mouse-click-wheel.svg\";\nimport touchCursorDragIcon from \"./touch-cursor-pan.svg\";\nimport touchCursorTapIcon from \"./touch-cursor-point.svg\";\nimport { StatusBarDialog } from \"../../statusbar/dialog/Dialog\";\nimport { SvgClose, SvgPin } from \"@itwin/itwinui-icons-react\";\n\n// cSpell:ignore cursorprompt\n\n/** Properties of [[ToolAssistanceField]] component.\n * @public\n */\nexport interface ToolAssistanceFieldProps extends CommonProps {\n /** Indicates whether to include promptAtCursor Checkbox. Defaults to true. */\n includePromptAtCursor: boolean;\n /** Optional parameter for persistent UI settings. Defaults to UiStateStorageContext.\n */\n uiStateStorage?: UiStateStorage;\n /** Cursor Prompt Timeout period. Defaults to 5000. */\n cursorPromptTimeout: number;\n /** Fade Out the Cursor Prompt when closed. */\n fadeOutCursorPrompt: boolean;\n /** Indicates whether to show promptAtCursor by default. Defaults to false. */\n defaultPromptAtCursor: boolean;\n}\n\n/** Default properties of [[ToolAssistanceField]] component.\n * @internal\n */\nexport type ToolAssistanceFieldDefaultProps = Pick<\n ToolAssistanceFieldProps,\n | \"includePromptAtCursor\"\n | \"uiStateStorage\"\n | \"cursorPromptTimeout\"\n | \"fadeOutCursorPrompt\"\n | \"defaultPromptAtCursor\"\n>;\n\n/** @internal */\ninterface ToolAssistanceFieldState {\n instructions: ToolAssistanceInstructions | undefined;\n toolIconSpec: string;\n showPromptAtCursor: boolean;\n includeMouseInstructions: boolean;\n includeTouchInstructions: boolean;\n showMouseTouchTabs: boolean;\n showMouseInstructions: boolean;\n showTouchInstructions: boolean;\n mouseTouchTabIndex: number;\n isPinned: boolean;\n isOpen: boolean;\n}\n\n/** Tool Assistance Field React component.\n * @public\n */\nexport class ToolAssistanceField extends React.Component<\n ToolAssistanceFieldProps,\n ToolAssistanceFieldState\n> {\n /** @internal */\n public static override contextType = UiStateStorageContext;\n /** @internal */\n public declare context: React.ContextType<typeof UiStateStorageContext>;\n\n private static _toolAssistanceKey = \"ToolAssistance\";\n private static _showPromptAtCursorKey = \"showPromptAtCursor\";\n private static _mouseTouchTabIndexKey = \"mouseTouchTabIndex\";\n private _showPromptAtCursorSetting: UiStateEntry<boolean>;\n private _mouseTouchTabIndexSetting: UiStateEntry<number>;\n private _target: HTMLElement | null = null;\n private _indicator = React.createRef<HTMLDivElement>();\n private _cursorPrompt: CursorPrompt;\n private _isMounted = false;\n private _uiSettingsStorage: UiStateStorage;\n\n /** @internal */\n public static readonly defaultProps: ToolAssistanceFieldDefaultProps = {\n includePromptAtCursor: true,\n cursorPromptTimeout: 5000,\n fadeOutCursorPrompt: true,\n defaultPromptAtCursor: false,\n };\n\n /** @internal */\n constructor(p: ToolAssistanceFieldProps) {\n super(p);\n\n const mobile = UiFramework.isMobile();\n\n this.state = {\n instructions: undefined,\n toolIconSpec: \"\",\n showPromptAtCursor: p.defaultPromptAtCursor,\n includeMouseInstructions: !mobile,\n includeTouchInstructions: true,\n showMouseTouchTabs: false,\n showMouseInstructions: false,\n showTouchInstructions: false,\n mouseTouchTabIndex: 0,\n isPinned: false,\n isOpen: false,\n };\n\n this._uiSettingsStorage = new LocalStateStorage();\n this._cursorPrompt = new CursorPrompt(\n this.props.cursorPromptTimeout,\n this.props.fadeOutCursorPrompt\n );\n this._showPromptAtCursorSetting = new UiStateEntry(\n ToolAssistanceField._toolAssistanceKey,\n ToolAssistanceField._showPromptAtCursorKey,\n () => this.state.showPromptAtCursor\n );\n this._mouseTouchTabIndexSetting = new UiStateEntry(\n ToolAssistanceField._toolAssistanceKey,\n ToolAssistanceField._mouseTouchTabIndexKey,\n () => this.state.mouseTouchTabIndex\n );\n }\n\n /** @internal */\n public override async componentDidMount() {\n this._isMounted = true;\n MessageManager.onToolAssistanceChangedEvent.addListener(\n this._handleToolAssistanceChangedEvent\n );\n UiFramework.frontstages.onToolIconChangedEvent.addListener(\n this._handleToolIconChangedEvent\n );\n\n // istanbul ignore else\n if (this.props.uiStateStorage)\n this._uiSettingsStorage = this.props.uiStateStorage;\n else if (this.context) this._uiSettingsStorage = this.context;\n\n await this.restoreSettings();\n }\n\n /** @internal */\n public override componentWillUnmount() {\n this._isMounted = false;\n MessageManager.onToolAssistanceChangedEvent.removeListener(\n this._handleToolAssistanceChangedEvent\n );\n UiFramework.frontstages.onToolIconChangedEvent.removeListener(\n this._handleToolIconChangedEvent\n );\n }\n\n private async restoreSettings() {\n let getShowPromptAtCursor: Promise<UiStateStorageResult> | undefined;\n // istanbul ignore else\n if (this.props.includePromptAtCursor) {\n getShowPromptAtCursor = this._showPromptAtCursorSetting.getSetting(\n this._uiSettingsStorage\n );\n }\n const getMouseTouchTabIndex = this._mouseTouchTabIndexSetting.getSetting(\n this._uiSettingsStorage\n );\n const [showPromptAtCursorResult, mouseTouchTabIndexResult] =\n await Promise.all([getShowPromptAtCursor, getMouseTouchTabIndex]);\n\n // istanbul ignore else\n if (\n showPromptAtCursorResult !== undefined &&\n showPromptAtCursorResult.status === UiStateStorageStatus.Success\n ) {\n // istanbul ignore else\n if (this._isMounted)\n this.setState({ showPromptAtCursor: showPromptAtCursorResult.setting });\n }\n\n // istanbul ignore else\n if (mouseTouchTabIndexResult.status === UiStateStorageStatus.Success) {\n // istanbul ignore else\n if (this._isMounted)\n this.setState({ mouseTouchTabIndex: mouseTouchTabIndexResult.setting });\n }\n }\n\n private _handleToolAssistanceChangedEvent = (\n args: ToolAssistanceChangedEventArgs\n ): void => {\n let showMouseTouchTabs = false;\n let showMouseInstructions = false;\n let showTouchInstructions = false;\n\n if (args.instructions && args.instructions.sections) {\n const hasMouseInstructions = args.instructions.sections.some(\n (section: ToolAssistanceSection) => {\n return section.instructions.some(\n (instruction: ToolAssistanceInstruction) =>\n this._isMouseInstruction(instruction)\n );\n }\n );\n const hasTouchInstructions = args.instructions.sections.some(\n (section: ToolAssistanceSection) => {\n return section.instructions.some(\n (instruction: ToolAssistanceInstruction) =>\n this._isTouchInstruction(instruction)\n );\n }\n );\n\n if (\n this.state.includeMouseInstructions &&\n this.state.includeTouchInstructions &&\n hasMouseInstructions &&\n hasTouchInstructions\n ) {\n showMouseTouchTabs = true;\n showMouseInstructions = this.state.mouseTouchTabIndex === 0;\n showTouchInstructions = this.state.mouseTouchTabIndex === 1;\n } else {\n if (this.state.includeMouseInstructions && hasMouseInstructions)\n showMouseInstructions = true;\n else if (this.state.includeTouchInstructions && hasTouchInstructions)\n showTouchInstructions = true;\n }\n }\n\n // istanbul ignore else\n if (this._isMounted)\n this.setState(\n {\n instructions: args.instructions,\n showMouseTouchTabs,\n showMouseInstructions,\n showTouchInstructions,\n },\n () => {\n this._showCursorPrompt();\n }\n );\n };\n\n private _isBothInstruction = (instruction: ToolAssistanceInstruction) => {\n return (\n instruction.inputMethod === undefined ||\n instruction.inputMethod === ToolAssistanceInputMethod.Both\n );\n };\n\n private _isMouseInstruction = (instruction: ToolAssistanceInstruction) =>\n instruction.inputMethod === ToolAssistanceInputMethod.Mouse;\n\n private _isTouchInstruction = (instruction: ToolAssistanceInstruction) =>\n instruction.inputMethod === ToolAssistanceInputMethod.Touch;\n\n private _handleToolIconChangedEvent = (\n args: ToolIconChangedEventArgs\n ): void => {\n // istanbul ignore else\n if (this._isMounted)\n this.setState({ toolIconSpec: args.iconSpec }, () => {\n this._showCursorPrompt();\n });\n };\n\n private _showCursorPrompt() {\n if (this.state.showPromptAtCursor && this.state.instructions)\n this._cursorPrompt.display(\n this.state.toolIconSpec,\n this.state.instructions.mainInstruction\n );\n }\n\n private _sectionHasDisplayableInstructions(\n section: ToolAssistanceSection\n ): boolean {\n const displayableInstructions = this._getDisplayableInstructions(section);\n return displayableInstructions.length > 0;\n }\n\n private _getDisplayableInstructions(\n section: ToolAssistanceSection\n ): ToolAssistanceInstruction[] {\n const displayableInstructions = section.instructions.filter(\n (instruction: ToolAssistanceInstruction) => {\n return (\n this._isBothInstruction(instruction) ||\n (this.state.showMouseInstructions &&\n this._isMouseInstruction(instruction)) ||\n (this.state.showTouchInstructions &&\n this._isTouchInstruction(instruction))\n );\n }\n );\n return displayableInstructions;\n }\n\n private _handleMouseTouchTab = async (index: number) => {\n const showMouseInstructions = index === 0;\n const showTouchInstructions = index === 1;\n\n // istanbul ignore else\n if (this._isMounted)\n this.setState(\n {\n mouseTouchTabIndex: index,\n showMouseInstructions,\n showTouchInstructions,\n },\n async () => {\n await this._mouseTouchTabIndexSetting.saveSetting(\n this._uiSettingsStorage\n );\n }\n );\n };\n\n /** @internal */\n public override render(): React.ReactNode {\n const { instructions } = this.state;\n const dialogTitle = IModelApp.toolAdmin.activeTool\n ? /* istanbul ignore next */ IModelApp.toolAdmin.activeTool.flyover\n : UiFramework.translate(\"toolAssistance.title\");\n const mouseLabel = UiFramework.translate(\"toolAssistance.mouse\");\n const touchLabel = UiFramework.translate(\"toolAssistance.touch\");\n let prompt = \"\";\n let tooltip = \"\";\n let toolIcon: React.ReactNode;\n let dialogContent: React.ReactNode;\n\n if (instructions) {\n prompt = instructions.mainInstruction.text;\n toolIcon = <Icon iconSpec={this.state.toolIconSpec} />;\n\n let displayableSections: ToolAssistanceSection[] | undefined;\n if (instructions.sections) {\n displayableSections = instructions.sections.filter(\n (section: ToolAssistanceSection) =>\n this._sectionHasDisplayableInstructions(section)\n );\n }\n\n dialogContent = (\n <div>\n {this.state.showMouseTouchTabs && (\n <Tabs\n orientation=\"horizontal\"\n tabsClassName=\"uifw-toolAssistance-tabs\"\n labels={[mouseLabel, touchLabel]}\n activeIndex={this.state.mouseTouchTabIndex}\n onTabSelected={this._handleMouseTouchTab}\n />\n )}\n\n <div className=\"uifw-toolAssistance-content\">\n <NZ_ToolAssistanceInstruction\n key=\"main\"\n image={ToolAssistanceField.getInstructionImage(\n instructions.mainInstruction\n )}\n text={instructions.mainInstruction.text}\n isNew={instructions.mainInstruction.isNew}\n />\n\n {displayableSections &&\n displayableSections.map(\n (section: ToolAssistanceSection, index1: number) => {\n return (\n <React.Fragment key={index1.toString()}>\n <ToolAssistanceSeparator key={index1.toString()}>\n {section.label}\n </ToolAssistanceSeparator>\n {this._getDisplayableInstructions(section).map(\n (\n instruction: ToolAssistanceInstruction,\n index2: number\n ) => {\n return (\n <NZ_ToolAssistanceInstruction\n key={`${index1.toString()}-${index2.toString()}`}\n image={ToolAssistanceField.getInstructionImage(\n instruction\n )}\n text={instruction.text}\n isNew={instruction.isNew}\n />\n );\n }\n )}\n </React.Fragment>\n );\n }\n )}\n\n {this.props.includePromptAtCursor && (\n <>\n <ToolAssistanceSeparator key=\"prompt-sep\" />\n <ToolAssistanceItem key=\"prompt-item\">\n <ToggleSwitch\n label={UiFramework.translate(\n \"toolAssistance.promptAtCursor\"\n )}\n labelPosition=\"right\"\n checked={this.state.showPromptAtCursor}\n onChange={this._onPromptAtCursorChange}\n />\n </ToolAssistanceItem>\n </>\n )}\n </div>\n </div>\n );\n }\n\n if (prompt) tooltip = prompt;\n\n // istanbul ignore next\n if (IModelApp.toolAdmin.activeTool)\n tooltip = `${IModelApp.toolAdmin.activeTool.flyover} > ${tooltip} `;\n\n if (tooltip) {\n const lineBreak = \"\\u000d\\u000a\";\n tooltip = tooltip + lineBreak;\n }\n\n tooltip += UiFramework.translate(\"toolAssistance.moreInfo\");\n\n return (\n <>\n <div style={{ height: \"100%\" }} ref={this._handleTargetRef}>\n <ToolAssistance\n icons={<>{toolIcon}</>}\n indicatorRef={this._indicator}\n className={classnames(\n \"uifw-statusFields-toolassistance\",\n this.props.className\n )}\n style={this.props.style}\n onClick={this._handleToolAssistanceIndicatorClick}\n title={tooltip}\n >\n {prompt}\n </ToolAssistance>\n </div>\n <FooterPopup\n isOpen={this.state.isOpen}\n onClose={this._handleClose}\n onOutsideClick={this._handleOutsideClick}\n target={this._target}\n isPinned={this.state.isPinned}\n >\n <ToolAssistanceDialog\n buttons={\n <>\n {!this.state.isPinned && (\n <StatusBarDialog.TitleBarButton\n onClick={this._handlePinButtonClick}\n title={UiFramework.translate(\"toolAssistance.pin\")}\n >\n <Icon iconSpec={<SvgPin />} />\n </StatusBarDialog.TitleBarButton>\n )}\n {this.state.isPinned && (\n <StatusBarDialog.TitleBarButton\n onClick={this._handleCloseButtonClick}\n title={UiCore.translate(\"dialog.close\")}\n >\n <Icon iconSpec={<SvgClose />} />\n </StatusBarDialog.TitleBarButton>\n )}\n </>\n }\n title={dialogTitle}\n >\n {dialogContent}\n </ToolAssistanceDialog>\n </FooterPopup>\n </>\n );\n }\n\n private _handleTargetRef = (target: HTMLElement | null) => {\n this._target = target;\n };\n\n private _onPromptAtCursorChange = async (\n e: React.ChangeEvent<HTMLInputElement>\n ) => {\n // istanbul ignore else\n if (this._isMounted)\n this.setState(\n {\n showPromptAtCursor: e.target.checked,\n },\n async () => {\n await this._showPromptAtCursorSetting.saveSetting(\n this._uiSettingsStorage\n );\n }\n );\n };\n\n private _handleClose = () => {\n this.setIsOpen(false);\n };\n\n private _handleOutsideClick = (e: MouseEvent) => {\n // istanbul ignore if\n if (\n !this._indicator.current ||\n !(e.target instanceof Node) ||\n this._indicator.current.contains(e.target)\n )\n return;\n\n this._handleClose();\n };\n\n private _handleToolAssistanceIndicatorClick = () => {\n this.setIsOpen(!this.state.isOpen);\n };\n\n private _handlePinButtonClick = () => {\n // istanbul ignore else\n if (this._isMounted) this.setState({ isPinned: true });\n };\n\n private _handleCloseButtonClick = () => {\n this._handleClose();\n };\n\n private setIsOpen(isOpen: boolean) {\n let newState = {\n isOpen,\n };\n if (!isOpen && this.state.isPinned && this._isMounted) {\n newState = { ...newState, ...{ isPinned: false } };\n }\n this.setState(newState);\n }\n\n /** @internal */\n public static getInstructionImage(\n instruction: ToolAssistanceInstruction\n ): React.ReactNode {\n let image: React.ReactNode;\n\n if (\n (typeof instruction.image === \"string\" ||\n instruction.image !== ToolAssistanceImage.Keyboard) &&\n instruction.keyboardInfo\n ) {\n if (\n instruction.keyboardInfo.keys.length === 1 &&\n !instruction.keyboardInfo.bottomKeys\n ) {\n const key = instruction.keyboardInfo.keys[0];\n const rightImage =\n typeof instruction.image === \"string\" ? (\n <div className=\"uifw-toolassistance-icon-medium\">\n <Icon iconSpec={instruction.image} />\n </div>\n ) : (\n this.getInstructionSvgImage(instruction, true)\n );\n\n image = (\n <FillCentered>\n {ToolAssistanceField.getKeyNode(\n key,\n 0,\n \"uifw-toolassistance-key-modifier\"\n )}\n {rightImage}\n </FillCentered>\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(this),\n `getInstructionImage: Invalid keyboardInfo provided with image`\n );\n }\n } else if (typeof instruction.image === \"string\") {\n if (instruction.image.length > 0) {\n const svgSource = IconSpecUtilities.getWebComponentSource(\n instruction.image\n );\n const className =\n svgSource !== undefined\n ? \"uifw-toolassistance-svg\"\n : \"uifw-toolassistance-icon-large\";\n image = (\n <div className={className}>\n <Icon iconSpec={svgSource ?? instruction.image} />\n </div>\n );\n }\n } else if (instruction.image === ToolAssistanceImage.Keyboard) {\n if (instruction.keyboardInfo) {\n image = ToolAssistanceField.getInstructionKeyboardImage(\n instruction.keyboardInfo\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(this),\n `getInstructionImage: ToolAssistanceImage.Keyboard specified but no keyboardInfo provided`\n );\n }\n } else {\n image = this.getInstructionSvgImage(instruction, false);\n }\n\n return image;\n }\n\n private static getInstructionSvgImage(\n instruction: ToolAssistanceInstruction,\n mediumSize: boolean\n ): React.ReactNode {\n let image: React.ReactNode;\n let className = mediumSize\n ? \"uifw-toolassistance-svg-medium\"\n : \"uifw-toolassistance-svg\";\n\n // istanbul ignore else\n if (\n typeof instruction.image !== \"string\" &&\n instruction.image !== ToolAssistanceImage.Keyboard\n ) {\n const toolAssistanceImage: ToolAssistanceImage = instruction.image;\n let svgImage = \"\";\n\n switch (toolAssistanceImage) {\n case ToolAssistanceImage.AcceptPoint:\n svgImage = acceptPointIcon;\n break;\n case ToolAssistanceImage.CursorClick:\n svgImage = cursorClickIcon;\n break;\n case ToolAssistanceImage.LeftClick:\n svgImage = clickLeftIcon;\n break;\n case ToolAssistanceImage.RightClick:\n svgImage = clickRightIcon;\n break;\n case ToolAssistanceImage.MouseWheel:\n svgImage = mouseWheelClickIcon;\n break;\n case ToolAssistanceImage.LeftClickDrag:\n svgImage = clickLeftDragIcon;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.RightClickDrag:\n svgImage = clickRightDragIcon;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.MouseWheelClickDrag:\n svgImage = clickMouseWheelDragIcon;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.OneTouchTap:\n svgImage = oneTouchTapIcon;\n break;\n case ToolAssistanceImage.OneTouchDoubleTap:\n svgImage = oneTouchDoubleTapIcon;\n break;\n case ToolAssistanceImage.OneTouchDrag:\n svgImage = oneTouchDragIcon;\n break;\n case ToolAssistanceImage.TwoTouchTap:\n svgImage = twoTouchTapIcon;\n break;\n case ToolAssistanceImage.TwoTouchDrag:\n svgImage = twoTouchDragIcon;\n break;\n case ToolAssistanceImage.TwoTouchPinch:\n svgImage = twoTouchPinchIcon;\n break;\n case ToolAssistanceImage.TouchCursorTap:\n svgImage = touchCursorTapIcon;\n break;\n case ToolAssistanceImage.TouchCursorDrag:\n svgImage = touchCursorDragIcon;\n className = mediumSize\n ? /* istanbul ignore next */ \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n }\n const iconSpec = IconSpecUtilities.createWebComponentIconSpec(svgImage);\n image = (\n <div className={className}>\n {svgImage && (\n // istanbul ignore next\n <Icon iconSpec={iconSpec} />\n )}\n </div>\n );\n }\n\n return image;\n }\n\n private static getInstructionKeyboardImage(\n keyboardInfo: ToolAssistanceKeyboardInfo\n ): React.ReactNode {\n let image: React.ReactNode;\n\n if (keyboardInfo.bottomKeys !== undefined) {\n image = (\n <div className=\"uifw-toolassistance-key-group\">\n <span className=\"row1\">\n {keyboardInfo.keys.map((key: string, index1: number) => {\n return ToolAssistanceField.getKeyNode(\n key,\n index1,\n \"uifw-toolassistance-key-small\"\n );\n })}\n </span>\n <br />\n <span className=\"row2\">\n {keyboardInfo.bottomKeys.map((key: string, index2: number) => {\n return ToolAssistanceField.getKeyNode(\n key,\n index2,\n \"uifw-toolassistance-key-small\"\n );\n })}\n </span>\n </div>\n );\n } else if (keyboardInfo.keys.length === 2) {\n image = (\n <FillCentered>\n {keyboardInfo.keys.map((key: string, index3: number) => {\n let className = \"uifw-toolassistance-key-medium\";\n if (key.length > 1) className = \"uifw-toolassistance-key-modifier\";\n return ToolAssistanceField.getKeyNode(key, index3, className);\n })}\n </FillCentered>\n );\n } else if (keyboardInfo.keys[0]) {\n if (keyboardInfo.keys[0].length > 1)\n image = ToolAssistanceField.getKeyNode(\n keyboardInfo.keys[0],\n 0,\n \"uifw-toolassistance-key-large\"\n );\n else image = ToolAssistanceField.getKeyNode(keyboardInfo.keys[0], 0);\n } else {\n Logger.logError(\n UiFramework.loggerCategory(this),\n `ToolAssistanceImage.Keyboard specified but ToolAssistanceKeyboardInfo not valid`\n );\n }\n\n return image;\n }\n\n private static getKeyNode(\n key: string,\n index: number,\n className?: string\n ): React.ReactNode {\n return (\n <div\n key={index.toString()}\n className={classnames(\"uifw-toolassistance-key\", className)}\n >\n <FillCentered>{key}</FillCentered>\n </div>\n );\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ /** @packageDocumentation
2
+ * @module SyncUi
3
+ */
4
+ import { UiSyncEvent } from "./UiSyncEvent";
5
+ /** This class is used to send eventIds to interested UI components so the component can determine if it needs
6
+ * to refresh its display by calling setState on itself.
7
+ * @internal
8
+ */
9
+ export declare class InternalSyncUiEventDispatcher {
10
+ private _syncEventTimerId;
11
+ private _eventIds;
12
+ private _eventIdAdded;
13
+ private _uiSyncEvent;
14
+ private _timeoutPeriod;
15
+ private _secondaryTimeoutPeriod;
16
+ constructor();
17
+ /** @internal - used for testing only */
18
+ setTimeoutPeriod(period: number): void;
19
+ /** The current timeout period */
20
+ get timeoutPeriod(): number;
21
+ /** Return set of event ids that will be sent to listeners/. */
22
+ get syncEventIds(): Set<string>;
23
+ /** Return UiSyncEvent so callers can register an event callback. */
24
+ get onSyncUiEvent(): UiSyncEvent;
25
+ /** Immediately trigger sync event processing. */
26
+ dispatchImmediateSyncUiEvent(eventId: string): void;
27
+ /** Save eventId in Set for processing. */
28
+ dispatchSyncUiEvent(eventId: string): void;
29
+ /** Save multiple eventIds in Set for processing. */
30
+ dispatchSyncUiEvents(eventIds: string[]): void;
31
+ /** Trigger registered event processing when timer has expired and no addition eventId are added. */
32
+ checkForAdditionalIds(): void;
33
+ /** Checks to see if an eventId of interest is contained in the set of eventIds */
34
+ hasEventOfInterest(eventIds: Set<string>, idsOfInterest: string[]): boolean;
35
+ }
36
+ //# sourceMappingURL=InternalSyncUiEventDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalSyncUiEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/syncui/InternalSyncUiEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,qBAAa,6BAA6B;IACxC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,uBAAuB,CAAC;;IAUhC,wCAAwC;IAEjC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa7C,iCAAiC;IACjC,IAAW,aAAa,IAAI,MAAM,CAEjC;IACD,+DAA+D;IAC/D,IAAW,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAErC;IAED,oEAAoE;IACpE,IAAW,aAAa,IAAI,WAAW,CAEtC;IAED,iDAAiD;IAC1C,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM1D,0CAA0C;IACnC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAiBjD,oDAAoD;IAC7C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBrD,oGAAoG;IAC7F,qBAAqB;IAiC5B,kFAAkF;IAC3E,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE;CAWzE"}
@@ -0,0 +1,130 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module SyncUi
7
+ */
8
+ import { UiSyncEvent } from "./UiSyncEvent";
9
+ /** This class is used to send eventIds to interested UI components so the component can determine if it needs
10
+ * to refresh its display by calling setState on itself.
11
+ * @internal
12
+ */
13
+ export class InternalSyncUiEventDispatcher {
14
+ constructor() {
15
+ this._eventIds = new Set();
16
+ this._eventIdAdded = false;
17
+ this._uiSyncEvent = new UiSyncEvent();
18
+ this._timeoutPeriod = 100;
19
+ this._secondaryTimeoutPeriod = this._timeoutPeriod / 2;
20
+ }
21
+ /** @internal - used for testing only */
22
+ /* istanbul ignore next */
23
+ setTimeoutPeriod(period) {
24
+ this._timeoutPeriod = period;
25
+ this._secondaryTimeoutPeriod = Math.floor(this._timeoutPeriod / 2);
26
+ if (this._secondaryTimeoutPeriod < 1)
27
+ this._secondaryTimeoutPeriod = 1;
28
+ if (this._syncEventTimerId) {
29
+ window.clearTimeout(this._syncEventTimerId);
30
+ this._syncEventTimerId = undefined;
31
+ }
32
+ if (this._eventIds)
33
+ this._eventIds.clear();
34
+ this._eventIdAdded = false;
35
+ }
36
+ /** The current timeout period */
37
+ get timeoutPeriod() {
38
+ return this._timeoutPeriod;
39
+ }
40
+ /** Return set of event ids that will be sent to listeners/. */
41
+ get syncEventIds() {
42
+ return this._eventIds;
43
+ }
44
+ /** Return UiSyncEvent so callers can register an event callback. */
45
+ get onSyncUiEvent() {
46
+ return this._uiSyncEvent;
47
+ }
48
+ /** Immediately trigger sync event processing. */
49
+ dispatchImmediateSyncUiEvent(eventId) {
50
+ const eventIds = new Set();
51
+ eventIds.add(eventId.toLowerCase());
52
+ this.onSyncUiEvent.emit({ eventIds });
53
+ }
54
+ /** Save eventId in Set for processing. */
55
+ dispatchSyncUiEvent(eventId) {
56
+ // istanbul ignore if
57
+ if (0 === this._timeoutPeriod) {
58
+ return;
59
+ }
60
+ this.syncEventIds.add(eventId.toLowerCase());
61
+ if (!this._syncEventTimerId) {
62
+ // if there is not a timer active, create one
63
+ this._syncEventTimerId = window.setTimeout(() => {
64
+ this.checkForAdditionalIds();
65
+ }, this._timeoutPeriod);
66
+ }
67
+ else {
68
+ this._eventIdAdded = true;
69
+ }
70
+ }
71
+ /** Save multiple eventIds in Set for processing. */
72
+ dispatchSyncUiEvents(eventIds) {
73
+ // istanbul ignore if
74
+ if (0 === this._timeoutPeriod) {
75
+ return;
76
+ }
77
+ eventIds.forEach((id) => this.syncEventIds.add(id.toLowerCase()));
78
+ // istanbul ignore else
79
+ if (!this._syncEventTimerId) {
80
+ // if there is not a timer active, create one
81
+ this._syncEventTimerId = window.setTimeout(() => {
82
+ this.checkForAdditionalIds();
83
+ }, this._timeoutPeriod);
84
+ }
85
+ else {
86
+ this._eventIdAdded = true;
87
+ }
88
+ }
89
+ /** Trigger registered event processing when timer has expired and no addition eventId are added. */
90
+ checkForAdditionalIds() {
91
+ /* istanbul ignore else */
92
+ if (!this._eventIdAdded) {
93
+ // istanbul ignore else
94
+ if (this._syncEventTimerId) {
95
+ window.clearTimeout(this._syncEventTimerId);
96
+ this._syncEventTimerId = undefined;
97
+ }
98
+ this._eventIdAdded = false;
99
+ // istanbul ignore else
100
+ if (this.syncEventIds.size > 0) {
101
+ const eventIds = new Set();
102
+ this.syncEventIds.forEach((value) => eventIds.add(value));
103
+ this._eventIds.clear();
104
+ this.onSyncUiEvent.emit({ eventIds });
105
+ }
106
+ return;
107
+ }
108
+ // istanbul ignore next
109
+ if (this._syncEventTimerId) {
110
+ window.clearTimeout(this._syncEventTimerId);
111
+ this._syncEventTimerId = undefined;
112
+ }
113
+ // istanbul ignore next
114
+ this._eventIdAdded = false;
115
+ // if events have been added before the initial timer expired wait half that time to see if events are still being added.
116
+ // istanbul ignore next
117
+ this._syncEventTimerId = window.setTimeout(() => {
118
+ this.checkForAdditionalIds();
119
+ }, this._secondaryTimeoutPeriod);
120
+ }
121
+ /** Checks to see if an eventId of interest is contained in the set of eventIds */
122
+ hasEventOfInterest(eventIds, idsOfInterest) {
123
+ /* istanbul ignore else */
124
+ if (idsOfInterest.length > 0 &&
125
+ idsOfInterest.some((value) => eventIds.has(value.toLowerCase())))
126
+ return true;
127
+ return false;
128
+ }
129
+ }
130
+ //# sourceMappingURL=InternalSyncUiEventDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalSyncUiEventDispatcher.js","sourceRoot":"","sources":["../../../../src/appui-react/syncui/InternalSyncUiEventDispatcher.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 SyncUi\n */\n\nimport { UiSyncEvent } from \"./UiSyncEvent\";\n\n/** This class is used to send eventIds to interested UI components so the component can determine if it needs\n * to refresh its display by calling setState on itself.\n * @internal\n */\nexport class InternalSyncUiEventDispatcher {\n private _syncEventTimerId: number | undefined;\n private _eventIds: Set<string>;\n private _eventIdAdded;\n private _uiSyncEvent: UiSyncEvent;\n private _timeoutPeriod;\n private _secondaryTimeoutPeriod;\n\n constructor() {\n this._eventIds = new Set<string>();\n this._eventIdAdded = false;\n this._uiSyncEvent = new UiSyncEvent();\n this._timeoutPeriod = 100;\n this._secondaryTimeoutPeriod = this._timeoutPeriod / 2;\n }\n\n /** @internal - used for testing only */\n /* istanbul ignore next */\n public setTimeoutPeriod(period: number): void {\n this._timeoutPeriod = period;\n this._secondaryTimeoutPeriod = Math.floor(this._timeoutPeriod / 2);\n if (this._secondaryTimeoutPeriod < 1) this._secondaryTimeoutPeriod = 1;\n if (this._syncEventTimerId) {\n window.clearTimeout(this._syncEventTimerId);\n this._syncEventTimerId = undefined;\n }\n if (this._eventIds) this._eventIds.clear();\n\n this._eventIdAdded = false;\n }\n\n /** The current timeout period */\n public get timeoutPeriod(): number {\n return this._timeoutPeriod;\n }\n /** Return set of event ids that will be sent to listeners/. */\n public get syncEventIds(): Set<string> {\n return this._eventIds;\n }\n\n /** Return UiSyncEvent so callers can register an event callback. */\n public get onSyncUiEvent(): UiSyncEvent {\n return this._uiSyncEvent;\n }\n\n /** Immediately trigger sync event processing. */\n public dispatchImmediateSyncUiEvent(eventId: string): void {\n const eventIds = new Set<string>();\n eventIds.add(eventId.toLowerCase());\n this.onSyncUiEvent.emit({ eventIds });\n }\n\n /** Save eventId in Set for processing. */\n public dispatchSyncUiEvent(eventId: string): void {\n // istanbul ignore if\n if (0 === this._timeoutPeriod) {\n return;\n }\n\n this.syncEventIds.add(eventId.toLowerCase());\n if (!this._syncEventTimerId) {\n // if there is not a timer active, create one\n this._syncEventTimerId = window.setTimeout(() => {\n this.checkForAdditionalIds();\n }, this._timeoutPeriod);\n } else {\n this._eventIdAdded = true;\n }\n }\n\n /** Save multiple eventIds in Set for processing. */\n public dispatchSyncUiEvents(eventIds: string[]): void {\n // istanbul ignore if\n if (0 === this._timeoutPeriod) {\n return;\n }\n\n eventIds.forEach((id) => this.syncEventIds.add(id.toLowerCase()));\n // istanbul ignore else\n if (!this._syncEventTimerId) {\n // if there is not a timer active, create one\n this._syncEventTimerId = window.setTimeout(() => {\n this.checkForAdditionalIds();\n }, this._timeoutPeriod);\n } else {\n this._eventIdAdded = true;\n }\n }\n\n /** Trigger registered event processing when timer has expired and no addition eventId are added. */\n public checkForAdditionalIds() {\n /* istanbul ignore else */\n if (!this._eventIdAdded) {\n // istanbul ignore else\n if (this._syncEventTimerId) {\n window.clearTimeout(this._syncEventTimerId);\n this._syncEventTimerId = undefined;\n }\n this._eventIdAdded = false;\n // istanbul ignore else\n if (this.syncEventIds.size > 0) {\n const eventIds = new Set<string>();\n this.syncEventIds.forEach((value) => eventIds.add(value));\n this._eventIds.clear();\n this.onSyncUiEvent.emit({ eventIds });\n }\n return;\n }\n\n // istanbul ignore next\n if (this._syncEventTimerId) {\n window.clearTimeout(this._syncEventTimerId);\n this._syncEventTimerId = undefined;\n }\n // istanbul ignore next\n this._eventIdAdded = false;\n // if events have been added before the initial timer expired wait half that time to see if events are still being added.\n // istanbul ignore next\n this._syncEventTimerId = window.setTimeout(() => {\n this.checkForAdditionalIds();\n }, this._secondaryTimeoutPeriod);\n }\n\n /** Checks to see if an eventId of interest is contained in the set of eventIds */\n public hasEventOfInterest(eventIds: Set<string>, idsOfInterest: string[]) {\n /* istanbul ignore else */\n if (\n idsOfInterest.length > 0 &&\n idsOfInterest.some((value: string): boolean =>\n eventIds.has(value.toLowerCase())\n )\n )\n return true;\n return false;\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  /** @packageDocumentation
2
2
  * @module SyncUi
3
3
  */
4
- import type { UiSyncEvent } from "@itwin/appui-abstract";
5
4
  import type { IModelConnection } from "@itwin/core-frontend";
5
+ import type { UiSyncEvent } from "./UiSyncEvent";
6
6
  /** Event Id used to sync UI components. Used to refresh visibility or enable state of control.
7
7
  * @public
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SyncUiEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAW7D;;GAEG;AACH,oBAAY,aAAa;IACvB,yCAAyC;IACzC,0BAA0B,+BAA+B;IACzD,qCAAqC;IACrC,uBAAuB,4BAA4B;IACnD,8EAA8E;IAC9E,oBAAoB,yBAAyB;IAC7C,iEAAiE;IACjE,qBAAqB,0BAA0B;IAC/C,kCAAkC;IAClC,cAAc,mBAAmB;IACjC,4CAA4C;IAC5C,sBAAsB,2BAA2B;IACjD,kFAAkF;IAClF,uBAAuB,4BAA4B;IACnD,kCAAkC;IAClC,oBAAoB,yBAAyB;IAC7C,yEAAyE;IACzE,eAAe,oBAAoB;IACnC,oDAAoD;IACpD,sBAAsB,2BAA2B;IACjD,gDAAgD;IAChD,kBAAkB,uBAAuB;IACzC,0CAA0C;IAC1C,sBAAsB,2BAA2B;IACjD,+DAA+D;IAC/D,aAAa,kBAAkB;IAC/B,yCAAyC;IACzC,kBAAkB,uBAAuB;IACzC,oEAAoE;IACpE,mBAAmB,wBAAwB;IAC3C,kFAAkF;IAClF,wBAAwB,6BAA6B;IACrD,mFAAmF;IACnF,gBAAgB,qBAAqB;IACrC,mEAAmE;IACnE,qBAAqB,0BAA0B;IAC/C,4BAA4B,6BAA6B;IACzD,6DAA6D;IAC7D,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;CAC5C;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA2B;IAC5D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA2B;IAC1D,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAA2B;IACpE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAmB;IAEpD,wCAAwC;WAE1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,+DAA+D;IAC/D,WAAkB,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAE5C;IAED,oEAAoE;IACpE,WAAkB,aAAa,IAAI,WAAW,CAE7C;IAED,iDAAiD;WACnC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjE,0CAA0C;WAC5B,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWxD,oDAAoD;WACtC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAW5D,kFAAkF;WACpE,kBAAkB,CAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EACrB,aAAa,EAAE,MAAM,EAAE;IASzB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAOlC,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAO9C,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAM3C,gFAAgF;WAClE,UAAU;IA2FxB,qFAAqF;WACvE,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB;IAMtE,0FAA0F;WAC5E,0BAA0B,CAAC,gBAAgB,EAAE,gBAAgB;CAoB5E"}
1
+ {"version":3,"file":"SyncUiEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AASjD;;GAEG;AACH,oBAAY,aAAa;IACvB,yCAAyC;IACzC,0BAA0B,+BAA+B;IACzD,qCAAqC;IACrC,uBAAuB,4BAA4B;IACnD,8EAA8E;IAC9E,oBAAoB,yBAAyB;IAC7C,iEAAiE;IACjE,qBAAqB,0BAA0B;IAC/C,kCAAkC;IAClC,cAAc,mBAAmB;IACjC,4CAA4C;IAC5C,sBAAsB,2BAA2B;IACjD,kFAAkF;IAClF,uBAAuB,4BAA4B;IACnD,kCAAkC;IAClC,oBAAoB,yBAAyB;IAC7C,yEAAyE;IACzE,eAAe,oBAAoB;IACnC,oDAAoD;IACpD,sBAAsB,2BAA2B;IACjD,gDAAgD;IAChD,kBAAkB,uBAAuB;IACzC,0CAA0C;IAC1C,sBAAsB,2BAA2B;IACjD,+DAA+D;IAC/D,aAAa,kBAAkB;IAC/B,yCAAyC;IACzC,kBAAkB,uBAAuB;IACzC,oEAAoE;IACpE,mBAAmB,wBAAwB;IAC3C,kFAAkF;IAClF,wBAAwB,6BAA6B;IACrD,mFAAmF;IACnF,gBAAgB,qBAAqB;IACrC,mEAAmE;IACnE,qBAAqB,0BAA0B;IAC/C,4BAA4B,6BAA6B;IACzD,6DAA6D;IAC7D,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;CAC5C;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAuC;IACxE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA2B;IAC1D,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAA2B;IACpE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAmB;IAEpD,wCAAwC;WAE1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,+DAA+D;IAC/D,WAAkB,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAE5C;IAED,oEAAoE;IACpE,WAAkB,aAAa,IAAI,WAAW,CAE7C;IAED,iDAAiD;WACnC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjE,0CAA0C;WAC5B,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWxD,oDAAoD;WACtC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAW5D,kFAAkF;WACpE,kBAAkB,CAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EACrB,aAAa,EAAE,MAAM,EAAE;IASzB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAOlC,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAO9C,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAM3C,gFAAgF;WAClE,UAAU;IA2FxB,qFAAqF;WACvE,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB;IAMtE,0FAA0F;WAC5E,0BAA0B,CAAC,gBAAgB,EAAE,gBAAgB;CAoB5E"}
@@ -5,11 +5,11 @@
5
5
  /** @packageDocumentation
6
6
  * @module SyncUi
7
7
  */
8
- import { UiEventDispatcher } from "@itwin/appui-abstract";
9
8
  import { Logger } from "@itwin/core-bentley";
10
9
  import { IModelApp } from "@itwin/core-frontend";
11
10
  import { SessionStateActionId } from "../redux/SessionState";
12
11
  import { UiFramework } from "../UiFramework";
12
+ import { InternalSyncUiEventDispatcher } from "./InternalSyncUiEventDispatcher";
13
13
  // cSpell:ignore activecontentchanged, activitymessageupdated, activitymessagecancelled, backstageevent, contentlayoutactivated, contentcontrolactivated,
14
14
  // cSpell:ignore elementtooltipchanged, frontstageactivated, inputfieldmessageadded, inputfieldmessageremoved, modalfrontstagechanged, modaldialogchanged
15
15
  // cSpell:ignore navigationaidactivated, notificationmessageadded, toolactivated, taskactivated, widgetstatechanged, workflowactivated frontstageactivating
@@ -179,7 +179,7 @@ class SyncUiEventDispatcher {
179
179
  }));
180
180
  }
181
181
  }
182
- SyncUiEventDispatcher._uiEventDispatcher = new UiEventDispatcher();
182
+ SyncUiEventDispatcher._uiEventDispatcher = new InternalSyncUiEventDispatcher();
183
183
  SyncUiEventDispatcher._unregisterFuncs = new Array();
184
184
  SyncUiEventDispatcher._connectionUnregisterFuncs = new Array();
185
185
  export { SyncUiEventDispatcher };