@itwin/appui-react 4.3.1 → 4.5.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 (302) hide show
  1. package/CHANGELOG.md +22 -4
  2. package/lib/cjs/appui-react/UiFramework.d.ts.map +1 -1
  3. package/lib/cjs/appui-react/UiFramework.js +14 -16
  4. package/lib/cjs/appui-react/UiFramework.js.map +1 -1
  5. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js +1 -2
  6. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  7. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js +1 -1
  8. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  9. package/lib/cjs/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
  10. package/lib/cjs/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  11. package/lib/cjs/appui-react/configurableui/TimeTracker.js +1 -2
  12. package/lib/cjs/appui-react/configurableui/TimeTracker.js.map +1 -1
  13. package/lib/cjs/appui-react/content/ContentLayout.js +9 -12
  14. package/lib/cjs/appui-react/content/ContentLayout.js.map +1 -1
  15. package/lib/cjs/appui-react/content/DefaultViewOverlay.js +3 -4
  16. package/lib/cjs/appui-react/content/DefaultViewOverlay.js.map +1 -1
  17. package/lib/cjs/appui-react/content/FloatingViewportContent.js +1 -2
  18. package/lib/cjs/appui-react/content/FloatingViewportContent.js.map +1 -1
  19. package/lib/cjs/appui-react/content/IModelViewport.js +3 -6
  20. package/lib/cjs/appui-react/content/IModelViewport.js.map +1 -1
  21. package/lib/cjs/appui-react/content/InternalContentLayoutManager.js +1 -2
  22. package/lib/cjs/appui-react/content/InternalContentLayoutManager.js.map +1 -1
  23. package/lib/cjs/appui-react/content/InternalContentViewManager.js +1 -1
  24. package/lib/cjs/appui-react/content/InternalContentViewManager.js.map +1 -1
  25. package/lib/cjs/appui-react/content/split-pane/SplitPane.js +10 -12
  26. package/lib/cjs/appui-react/content/split-pane/SplitPane.js.map +1 -1
  27. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.d.ts +1 -1
  28. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  29. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js +6 -6
  30. package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  31. package/lib/cjs/appui-react/dialog/ContentDialog.js +3 -6
  32. package/lib/cjs/appui-react/dialog/ContentDialog.js.map +1 -1
  33. package/lib/cjs/appui-react/dialog/DialogManagerBase.js +2 -3
  34. package/lib/cjs/appui-react/dialog/DialogManagerBase.js.map +1 -1
  35. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +5 -7
  36. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  37. package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js +2 -3
  38. package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  39. package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js +1 -2
  40. package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  41. package/lib/cjs/appui-react/hooks/useAnalysisAnimationDataProvider.js +7 -11
  42. package/lib/cjs/appui-react/hooks/useAnalysisAnimationDataProvider.js.map +1 -1
  43. package/lib/cjs/appui-react/hooks/useScheduleAnimationDataProvider.js +7 -11
  44. package/lib/cjs/appui-react/hooks/useScheduleAnimationDataProvider.js.map +1 -1
  45. package/lib/cjs/appui-react/hooks/useSolarDataProvider.js +8 -13
  46. package/lib/cjs/appui-react/hooks/useSolarDataProvider.js.map +1 -1
  47. package/lib/cjs/appui-react/messages/ActivityMessage.js +5 -7
  48. package/lib/cjs/appui-react/messages/ActivityMessage.js.map +1 -1
  49. package/lib/cjs/appui-react/pickers/ViewSelector.js +5 -6
  50. package/lib/cjs/appui-react/pickers/ViewSelector.js.map +1 -1
  51. package/lib/cjs/appui-react/popup/KeyinPalettePanel.js +1 -2
  52. package/lib/cjs/appui-react/popup/KeyinPalettePanel.js.map +1 -1
  53. package/lib/cjs/appui-react/popup/PopupManager.js +1 -2
  54. package/lib/cjs/appui-react/popup/PopupManager.js.map +1 -1
  55. package/lib/cjs/appui-react/selection/HideIsolateEmphasizeManager.d.ts.map +1 -1
  56. package/lib/cjs/appui-react/selection/HideIsolateEmphasizeManager.js +3 -0
  57. package/lib/cjs/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
  58. package/lib/cjs/appui-react/selection/SelectionContextItemDef.d.ts.map +1 -1
  59. package/lib/cjs/appui-react/selection/SelectionContextItemDef.js +12 -8
  60. package/lib/cjs/appui-react/selection/SelectionContextItemDef.js.map +1 -1
  61. package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.js +2 -1
  62. package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
  63. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +5 -7
  64. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  65. package/lib/cjs/appui-react/statusbar/Indicator.js +1 -2
  66. package/lib/cjs/appui-react/statusbar/Indicator.js.map +1 -1
  67. package/lib/cjs/appui-react/statusbar/StatusBar.js +3 -5
  68. package/lib/cjs/appui-react/statusbar/StatusBar.js.map +1 -1
  69. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js +1 -1
  70. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  71. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -4
  72. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  73. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js +49 -78
  74. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  75. package/lib/cjs/appui-react/toolbar/Toolbar.d.ts +11 -1
  76. package/lib/cjs/appui-react/toolbar/Toolbar.d.ts.map +1 -1
  77. package/lib/cjs/appui-react/toolbar/Toolbar.js +3 -2
  78. package/lib/cjs/appui-react/toolbar/Toolbar.js.map +1 -1
  79. package/lib/cjs/appui-react/toolbar/ToolbarComposer.d.ts +2 -1
  80. package/lib/cjs/appui-react/toolbar/ToolbarComposer.d.ts.map +1 -1
  81. package/lib/cjs/appui-react/toolbar/ToolbarComposer.js +45 -129
  82. package/lib/cjs/appui-react/toolbar/ToolbarComposer.js.map +1 -1
  83. package/lib/cjs/appui-react/toolbar/ToolbarHelper.d.ts +6 -3
  84. package/lib/cjs/appui-react/toolbar/ToolbarHelper.d.ts.map +1 -1
  85. package/lib/cjs/appui-react/toolbar/ToolbarHelper.js +53 -80
  86. package/lib/cjs/appui-react/toolbar/ToolbarHelper.js.map +1 -1
  87. package/lib/cjs/appui-react/toolbar/ToolbarItem.d.ts +2 -2
  88. package/lib/cjs/appui-react/toolbar/ToolbarItem.d.ts.map +1 -1
  89. package/lib/cjs/appui-react/toolbar/ToolbarItem.js +2 -2
  90. package/lib/cjs/appui-react/toolbar/ToolbarItem.js.map +1 -1
  91. package/lib/cjs/appui-react/toolbar/ToolbarItemsManager.d.ts +1 -0
  92. package/lib/cjs/appui-react/toolbar/ToolbarItemsManager.d.ts.map +1 -1
  93. package/lib/cjs/appui-react/toolbar/ToolbarItemsManager.js +12 -2
  94. package/lib/cjs/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
  95. package/lib/cjs/appui-react/toolbar/ToolbarWithOverflow.d.ts +3 -2
  96. package/lib/cjs/appui-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  97. package/lib/cjs/appui-react/toolbar/ToolbarWithOverflow.js +5 -9
  98. package/lib/cjs/appui-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  99. package/lib/cjs/appui-react/toolbar/useActiveStageProvidedToolbarItems.d.ts +11 -0
  100. package/lib/cjs/appui-react/toolbar/useActiveStageProvidedToolbarItems.d.ts.map +1 -0
  101. package/lib/cjs/appui-react/toolbar/useActiveStageProvidedToolbarItems.js +46 -0
  102. package/lib/cjs/appui-react/toolbar/useActiveStageProvidedToolbarItems.js.map +1 -0
  103. package/lib/cjs/appui-react/toolbar/useActiveToolIdSynchedItems.d.ts +25 -0
  104. package/lib/cjs/appui-react/toolbar/useActiveToolIdSynchedItems.d.ts.map +1 -0
  105. package/lib/cjs/appui-react/toolbar/useActiveToolIdSynchedItems.js +63 -0
  106. package/lib/cjs/appui-react/toolbar/useActiveToolIdSynchedItems.js.map +1 -0
  107. package/lib/cjs/appui-react/toolbar/useDefaultToolbarItems.d.ts +1 -0
  108. package/lib/cjs/appui-react/toolbar/useDefaultToolbarItems.d.ts.map +1 -1
  109. package/lib/cjs/appui-react/toolbar/useDefaultToolbarItems.js +4 -1
  110. package/lib/cjs/appui-react/toolbar/useDefaultToolbarItems.js.map +1 -1
  111. package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.d.ts +2 -1
  112. package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.d.ts.map +1 -1
  113. package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.js +12 -30
  114. package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
  115. package/lib/cjs/appui-react/tools/CoreToolDefinitions.js +10 -17
  116. package/lib/cjs/appui-react/tools/CoreToolDefinitions.js.map +1 -1
  117. package/lib/cjs/appui-react/toolsettings/DefaultToolSettingsProvider.js +3 -2
  118. package/lib/cjs/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  119. package/lib/cjs/appui-react/ui-items-provider/AbstractUiItemsManager.js +12 -14
  120. package/lib/cjs/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  121. package/lib/cjs/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +9 -10
  122. package/lib/cjs/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
  123. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -2
  124. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  125. package/lib/cjs/appui-react/ui-items-provider/UiItemsManager.js +8 -14
  126. package/lib/cjs/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  127. package/lib/cjs/appui-react/uiadmin/FrameworkUiAdmin.js +1 -1
  128. package/lib/cjs/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  129. package/lib/cjs/appui-react/uiprovider/ComponentGenerator.js +1 -1
  130. package/lib/cjs/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  131. package/lib/cjs/appui-react/utils/InternalUiShowHideManager.js +3 -3
  132. package/lib/cjs/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  133. package/lib/cjs/appui-react/widget-panels/Content.js +8 -9
  134. package/lib/cjs/appui-react/widget-panels/Content.js.map +1 -1
  135. package/lib/cjs/appui-react/widget-panels/Frontstage.js +43 -45
  136. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  137. package/lib/cjs/appui-react/widget-panels/StatusBar.js +1 -1
  138. package/lib/cjs/appui-react/widget-panels/StatusBar.js.map +1 -1
  139. package/lib/cjs/appui-react/widget-panels/Tab.js +1 -1
  140. package/lib/cjs/appui-react/widget-panels/Tab.js.map +1 -1
  141. package/lib/cjs/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  142. package/lib/cjs/appui-react/widget-panels/ToolSettings.js +21 -23
  143. package/lib/cjs/appui-react/widget-panels/ToolSettings.js.map +1 -1
  144. package/lib/cjs/appui-react/widget-panels/Toolbars.js +2 -3
  145. package/lib/cjs/appui-react/widget-panels/Toolbars.js.map +1 -1
  146. package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js +2 -2
  147. package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  148. package/lib/cjs/appui-react/widgets/WidgetDef.js +1 -1
  149. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  150. package/lib/cjs/appui-react/widgets/WidgetHost.js +2 -3
  151. package/lib/cjs/appui-react/widgets/WidgetHost.js.map +1 -1
  152. package/lib/esm/appui-react/UiFramework.d.ts.map +1 -1
  153. package/lib/esm/appui-react/UiFramework.js +14 -16
  154. package/lib/esm/appui-react/UiFramework.js.map +1 -1
  155. package/lib/esm/appui-react/backstage/BackstageComposerItem.js +1 -2
  156. package/lib/esm/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  157. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js +1 -1
  158. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  159. package/lib/esm/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
  160. package/lib/esm/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  161. package/lib/esm/appui-react/configurableui/TimeTracker.js +1 -2
  162. package/lib/esm/appui-react/configurableui/TimeTracker.js.map +1 -1
  163. package/lib/esm/appui-react/content/ContentLayout.js +9 -12
  164. package/lib/esm/appui-react/content/ContentLayout.js.map +1 -1
  165. package/lib/esm/appui-react/content/DefaultViewOverlay.js +3 -4
  166. package/lib/esm/appui-react/content/DefaultViewOverlay.js.map +1 -1
  167. package/lib/esm/appui-react/content/FloatingViewportContent.js +1 -2
  168. package/lib/esm/appui-react/content/FloatingViewportContent.js.map +1 -1
  169. package/lib/esm/appui-react/content/IModelViewport.js +3 -6
  170. package/lib/esm/appui-react/content/IModelViewport.js.map +1 -1
  171. package/lib/esm/appui-react/content/InternalContentLayoutManager.js +1 -2
  172. package/lib/esm/appui-react/content/InternalContentLayoutManager.js.map +1 -1
  173. package/lib/esm/appui-react/content/InternalContentViewManager.js +1 -1
  174. package/lib/esm/appui-react/content/InternalContentViewManager.js.map +1 -1
  175. package/lib/esm/appui-react/content/split-pane/SplitPane.js +10 -12
  176. package/lib/esm/appui-react/content/split-pane/SplitPane.js.map +1 -1
  177. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.d.ts +1 -1
  178. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  179. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js +6 -6
  180. package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  181. package/lib/esm/appui-react/dialog/ContentDialog.js +3 -6
  182. package/lib/esm/appui-react/dialog/ContentDialog.js.map +1 -1
  183. package/lib/esm/appui-react/dialog/DialogManagerBase.js +2 -3
  184. package/lib/esm/appui-react/dialog/DialogManagerBase.js.map +1 -1
  185. package/lib/esm/appui-react/frontstage/FrontstageDef.js +5 -7
  186. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  187. package/lib/esm/appui-react/frontstage/ModalSettingsStage.js +2 -3
  188. package/lib/esm/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  189. package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js +1 -2
  190. package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  191. package/lib/esm/appui-react/hooks/useAnalysisAnimationDataProvider.js +7 -11
  192. package/lib/esm/appui-react/hooks/useAnalysisAnimationDataProvider.js.map +1 -1
  193. package/lib/esm/appui-react/hooks/useScheduleAnimationDataProvider.js +7 -11
  194. package/lib/esm/appui-react/hooks/useScheduleAnimationDataProvider.js.map +1 -1
  195. package/lib/esm/appui-react/hooks/useSolarDataProvider.js +8 -13
  196. package/lib/esm/appui-react/hooks/useSolarDataProvider.js.map +1 -1
  197. package/lib/esm/appui-react/messages/ActivityMessage.js +5 -7
  198. package/lib/esm/appui-react/messages/ActivityMessage.js.map +1 -1
  199. package/lib/esm/appui-react/pickers/ViewSelector.js +5 -6
  200. package/lib/esm/appui-react/pickers/ViewSelector.js.map +1 -1
  201. package/lib/esm/appui-react/popup/KeyinPalettePanel.js +1 -2
  202. package/lib/esm/appui-react/popup/KeyinPalettePanel.js.map +1 -1
  203. package/lib/esm/appui-react/popup/PopupManager.js +1 -2
  204. package/lib/esm/appui-react/popup/PopupManager.js.map +1 -1
  205. package/lib/esm/appui-react/selection/HideIsolateEmphasizeManager.d.ts.map +1 -1
  206. package/lib/esm/appui-react/selection/HideIsolateEmphasizeManager.js +3 -0
  207. package/lib/esm/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
  208. package/lib/esm/appui-react/selection/SelectionContextItemDef.d.ts.map +1 -1
  209. package/lib/esm/appui-react/selection/SelectionContextItemDef.js +12 -8
  210. package/lib/esm/appui-react/selection/SelectionContextItemDef.js.map +1 -1
  211. package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.js +2 -1
  212. package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
  213. package/lib/esm/appui-react/stagepanels/StagePanelDef.js +5 -7
  214. package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  215. package/lib/esm/appui-react/statusbar/Indicator.js +1 -2
  216. package/lib/esm/appui-react/statusbar/Indicator.js.map +1 -1
  217. package/lib/esm/appui-react/statusbar/StatusBar.js +3 -5
  218. package/lib/esm/appui-react/statusbar/StatusBar.js.map +1 -1
  219. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js +1 -1
  220. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  221. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -4
  222. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  223. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js +49 -78
  224. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  225. package/lib/esm/appui-react/toolbar/Toolbar.d.ts +11 -1
  226. package/lib/esm/appui-react/toolbar/Toolbar.d.ts.map +1 -1
  227. package/lib/esm/appui-react/toolbar/Toolbar.js +3 -2
  228. package/lib/esm/appui-react/toolbar/Toolbar.js.map +1 -1
  229. package/lib/esm/appui-react/toolbar/ToolbarComposer.d.ts +2 -1
  230. package/lib/esm/appui-react/toolbar/ToolbarComposer.d.ts.map +1 -1
  231. package/lib/esm/appui-react/toolbar/ToolbarComposer.js +45 -129
  232. package/lib/esm/appui-react/toolbar/ToolbarComposer.js.map +1 -1
  233. package/lib/esm/appui-react/toolbar/ToolbarHelper.d.ts +6 -3
  234. package/lib/esm/appui-react/toolbar/ToolbarHelper.d.ts.map +1 -1
  235. package/lib/esm/appui-react/toolbar/ToolbarHelper.js +53 -80
  236. package/lib/esm/appui-react/toolbar/ToolbarHelper.js.map +1 -1
  237. package/lib/esm/appui-react/toolbar/ToolbarItem.d.ts +2 -2
  238. package/lib/esm/appui-react/toolbar/ToolbarItem.d.ts.map +1 -1
  239. package/lib/esm/appui-react/toolbar/ToolbarItem.js +2 -2
  240. package/lib/esm/appui-react/toolbar/ToolbarItem.js.map +1 -1
  241. package/lib/esm/appui-react/toolbar/ToolbarItemsManager.d.ts +1 -0
  242. package/lib/esm/appui-react/toolbar/ToolbarItemsManager.d.ts.map +1 -1
  243. package/lib/esm/appui-react/toolbar/ToolbarItemsManager.js +12 -2
  244. package/lib/esm/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
  245. package/lib/esm/appui-react/toolbar/ToolbarWithOverflow.d.ts +3 -2
  246. package/lib/esm/appui-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  247. package/lib/esm/appui-react/toolbar/ToolbarWithOverflow.js +5 -9
  248. package/lib/esm/appui-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  249. package/lib/esm/appui-react/toolbar/useActiveStageProvidedToolbarItems.d.ts +11 -0
  250. package/lib/esm/appui-react/toolbar/useActiveStageProvidedToolbarItems.d.ts.map +1 -0
  251. package/lib/esm/appui-react/toolbar/useActiveStageProvidedToolbarItems.js +42 -0
  252. package/lib/esm/appui-react/toolbar/useActiveStageProvidedToolbarItems.js.map +1 -0
  253. package/lib/esm/appui-react/toolbar/useActiveToolIdSynchedItems.d.ts +25 -0
  254. package/lib/esm/appui-react/toolbar/useActiveToolIdSynchedItems.d.ts.map +1 -0
  255. package/lib/esm/appui-react/toolbar/useActiveToolIdSynchedItems.js +59 -0
  256. package/lib/esm/appui-react/toolbar/useActiveToolIdSynchedItems.js.map +1 -0
  257. package/lib/esm/appui-react/toolbar/useDefaultToolbarItems.d.ts +1 -0
  258. package/lib/esm/appui-react/toolbar/useDefaultToolbarItems.d.ts.map +1 -1
  259. package/lib/esm/appui-react/toolbar/useDefaultToolbarItems.js +4 -1
  260. package/lib/esm/appui-react/toolbar/useDefaultToolbarItems.js.map +1 -1
  261. package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.d.ts +2 -1
  262. package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.d.ts.map +1 -1
  263. package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.js +12 -30
  264. package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
  265. package/lib/esm/appui-react/tools/CoreToolDefinitions.js +10 -17
  266. package/lib/esm/appui-react/tools/CoreToolDefinitions.js.map +1 -1
  267. package/lib/esm/appui-react/toolsettings/DefaultToolSettingsProvider.js +3 -2
  268. package/lib/esm/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  269. package/lib/esm/appui-react/ui-items-provider/AbstractUiItemsManager.js +12 -14
  270. package/lib/esm/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  271. package/lib/esm/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +9 -10
  272. package/lib/esm/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
  273. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -2
  274. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  275. package/lib/esm/appui-react/ui-items-provider/UiItemsManager.js +8 -14
  276. package/lib/esm/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  277. package/lib/esm/appui-react/uiadmin/FrameworkUiAdmin.js +1 -1
  278. package/lib/esm/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  279. package/lib/esm/appui-react/uiprovider/ComponentGenerator.js +1 -1
  280. package/lib/esm/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  281. package/lib/esm/appui-react/utils/InternalUiShowHideManager.js +3 -3
  282. package/lib/esm/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  283. package/lib/esm/appui-react/widget-panels/Content.js +8 -9
  284. package/lib/esm/appui-react/widget-panels/Content.js.map +1 -1
  285. package/lib/esm/appui-react/widget-panels/Frontstage.js +43 -45
  286. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  287. package/lib/esm/appui-react/widget-panels/StatusBar.js +1 -1
  288. package/lib/esm/appui-react/widget-panels/StatusBar.js.map +1 -1
  289. package/lib/esm/appui-react/widget-panels/Tab.js +1 -1
  290. package/lib/esm/appui-react/widget-panels/Tab.js.map +1 -1
  291. package/lib/esm/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  292. package/lib/esm/appui-react/widget-panels/ToolSettings.js +21 -23
  293. package/lib/esm/appui-react/widget-panels/ToolSettings.js.map +1 -1
  294. package/lib/esm/appui-react/widget-panels/Toolbars.js +2 -3
  295. package/lib/esm/appui-react/widget-panels/Toolbars.js.map +1 -1
  296. package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js +2 -2
  297. package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  298. package/lib/esm/appui-react/widgets/WidgetDef.js +1 -1
  299. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  300. package/lib/esm/appui-react/widgets/WidgetHost.js +2 -3
  301. package/lib/esm/appui-react/widgets/WidgetHost.js.map +1 -1
  302. package/package.json +14 -15
@@ -59,6 +59,7 @@ export var SyncUiEventId;
59
59
  SyncUiEventId["ShowHideManagerSettingChange"] = "show-hide-setting-change";
60
60
  /** The list of feature overrides applied has been changed */
61
61
  SyncUiEventId["FeatureOverridesChanged"] = "featureoverrideschanged";
62
+ SyncUiEventId["ViewedModelsChanged"] = "viewedmodelschanged";
62
63
  })(SyncUiEventId || (SyncUiEventId = {}));
63
64
  /** This class is used to send eventIds to interested UI components so the component can determine if it needs
64
65
  * to refresh its display by calling setState on itself.
@@ -110,106 +111,76 @@ class SyncUiEventDispatcher {
110
111
  static _dispatchFeatureOverridesChange() {
111
112
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FeatureOverridesChanged);
112
113
  }
114
+ // istanbul ignore next
115
+ static _dispatchViewedModelsChanged() {
116
+ SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ViewedModelsChanged);
117
+ }
113
118
  /** Initializes the Monitoring of Events that trigger dispatching sync events */
114
119
  static initialize() {
115
120
  // clear any registered listeners - this should only be encountered in unit test scenarios
116
- this._unregisterListenerFuncs.forEach((unregisterListenerFunc) => unregisterListenerFunc());
117
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onContentControlActivatedEvent.addListener(() => {
121
+ this._unregisterFuncs.forEach((unregister) => unregister());
122
+ this._unregisterFuncs = [];
123
+ this._unregisterFuncs.push(UiFramework.frontstages.onContentControlActivatedEvent.addListener(() => {
118
124
  SyncUiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ContentControlActivated);
119
- }));
120
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onContentLayoutActivatedEvent.addListener(() => {
125
+ }), UiFramework.frontstages.onContentLayoutActivatedEvent.addListener(() => {
121
126
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ContentLayoutActivated);
122
- }));
123
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onFrontstageActivatedEvent.addListener(() => {
127
+ }), UiFramework.frontstages.onFrontstageActivatedEvent.addListener(() => {
124
128
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FrontstageActivating);
125
- }));
126
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onFrontstageReadyEvent.addListener(() => {
129
+ }), UiFramework.frontstages.onFrontstageReadyEvent.addListener(() => {
127
130
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FrontstageReady);
128
- }));
129
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onModalFrontstageChangedEvent.addListener(() => {
131
+ }), UiFramework.frontstages.onModalFrontstageChangedEvent.addListener(() => {
130
132
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ModalFrontstageChanged);
131
- }));
132
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onNavigationAidActivatedEvent.addListener(() => {
133
+ }), UiFramework.frontstages.onNavigationAidActivatedEvent.addListener(() => {
133
134
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.NavigationAidActivated);
134
- }));
135
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onToolActivatedEvent.addListener(() => {
135
+ }), UiFramework.frontstages.onToolActivatedEvent.addListener(() => {
136
136
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ToolActivated);
137
- }));
138
- this._unregisterListenerFuncs.push(UiFramework.frontstages.onWidgetStateChangedEvent.addListener(() => {
137
+ }), UiFramework.frontstages.onWidgetStateChangedEvent.addListener(() => {
139
138
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.WidgetStateChanged);
140
- }));
141
- this._unregisterListenerFuncs.push(UiFramework.backstage.onToggled.addListener(() => {
139
+ }), UiFramework.backstage.onToggled.addListener(() => {
142
140
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.BackstageEvent);
143
- }));
144
- this._unregisterListenerFuncs.push(UiFramework.content.onActiveContentChangedEvent.addListener(() => {
141
+ }), UiFramework.content.onActiveContentChangedEvent.addListener(() => {
145
142
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveContentChanged);
143
+ }), IModelApp.viewManager.onSelectedViewportChanged.addListener((args) => {
144
+ SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveViewportChanged);
145
+ // if this is the first view being opened up start the default tool so tool admin is happy.
146
+ if (undefined === args.previous) {
147
+ void IModelApp.toolAdmin.startDefaultTool();
148
+ }
149
+ else {
150
+ args.previous.onViewChanged.removeListener(SyncUiEventDispatcher._dispatchViewChange);
151
+ args.previous.onFeatureOverridesChanged.removeListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);
152
+ args.previous.onViewedModelsChanged.removeListener(SyncUiEventDispatcher._dispatchViewedModelsChanged);
153
+ }
154
+ // istanbul ignore next
155
+ if (args.current) {
156
+ args.current.onViewChanged.addListener(SyncUiEventDispatcher._dispatchViewChange);
157
+ args.current.onFeatureOverridesChanged.addListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);
158
+ args.current.onViewedModelsChanged.addListener(SyncUiEventDispatcher._dispatchViewedModelsChanged);
159
+ }
146
160
  }));
147
- // istanbul ignore else
148
- if (IModelApp && IModelApp.viewManager) {
149
- this._unregisterListenerFuncs.push(IModelApp.viewManager.onSelectedViewportChanged.addListener((args) => {
150
- SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveViewportChanged);
151
- // if this is the first view being opened up start the default tool so tool admin is happy.
152
- if (undefined === args.previous) {
153
- void IModelApp.toolAdmin.startDefaultTool();
154
- }
155
- else {
156
- // istanbul ignore next
157
- if (args.previous.onViewChanged &&
158
- typeof args.previous.onViewChanged.removeListener === "function")
159
- // not set during unit test
160
- args.previous.onViewChanged.removeListener(SyncUiEventDispatcher._dispatchViewChange);
161
- // istanbul ignore next
162
- if (args.previous.onFeatureOverridesChanged &&
163
- typeof args.previous.onFeatureOverridesChanged
164
- .removeListener === "function")
165
- // not set during unit test
166
- args.previous.onFeatureOverridesChanged.removeListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);
167
- }
168
- // istanbul ignore next
169
- if (args.current) {
170
- if (args.current.onViewChanged &&
171
- typeof args.current.onViewChanged.addListener === "function")
172
- // not set during unit test
173
- args.current.onViewChanged.addListener(SyncUiEventDispatcher._dispatchViewChange);
174
- // istanbul ignore next
175
- if (args.current.onFeatureOverridesChanged &&
176
- typeof args.current.onFeatureOverridesChanged.addListener ===
177
- "function")
178
- // not set during unit test
179
- args.current.onFeatureOverridesChanged.addListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);
180
- }
181
- }));
182
- }
183
- }
184
- static selectionChangedHandler(_ev) {
185
- SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.SelectionSetChanged);
186
161
  }
187
162
  /** This should be called by IModelApp when the active IModelConnection is closed. */
188
163
  static clearConnectionEvents(iModelConnection) {
189
- iModelConnection.selectionSet.onChanged.removeListener(SyncUiEventDispatcher.selectionChangedHandler);
190
- SyncUiEventDispatcher._unregisterListenerFunc &&
191
- SyncUiEventDispatcher._unregisterListenerFunc();
164
+ if (this._iModelConnection !== iModelConnection)
165
+ return;
166
+ this._connectionUnregisterFuncs.forEach((unregister) => unregister());
167
+ this._connectionUnregisterFuncs = [];
192
168
  }
193
169
  /** This should be called by IModelApp when the active IModelConnection is established. */
194
170
  static initializeConnectionEvents(iModelConnection) {
195
- if (SyncUiEventDispatcher._unregisterListenerFunc)
196
- SyncUiEventDispatcher._unregisterListenerFunc();
197
- if (iModelConnection.isBlankConnection() || !iModelConnection.isOpen) {
198
- UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, 0);
199
- return;
200
- }
201
- iModelConnection.selectionSet.onChanged.removeListener(SyncUiEventDispatcher.selectionChangedHandler);
202
- iModelConnection.selectionSet.onChanged.addListener(SyncUiEventDispatcher.selectionChangedHandler);
203
- iModelConnection.iModelId &&
204
- UiFramework.setActiveIModelId(iModelConnection.iModelId);
205
- SyncUiEventDispatcher._unregisterListenerFunc =
206
- iModelConnection.selectionSet.onChanged.addListener((ev) => {
207
- const numSelected = ev.set.elements.size;
208
- UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, numSelected);
209
- });
171
+ this._iModelConnection &&
172
+ this.clearConnectionEvents(this._iModelConnection);
173
+ this._iModelConnection = iModelConnection;
174
+ this._connectionUnregisterFuncs.push(iModelConnection.selectionSet.onChanged.addListener(() => {
175
+ SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.SelectionSetChanged);
176
+ }), iModelConnection.selectionSet.onChanged.addListener((ev) => {
177
+ const numSelected = ev.set.elements.size;
178
+ UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, numSelected);
179
+ }));
210
180
  }
211
181
  }
212
182
  SyncUiEventDispatcher._uiEventDispatcher = new UiEventDispatcher();
213
- SyncUiEventDispatcher._unregisterListenerFuncs = [];
183
+ SyncUiEventDispatcher._unregisterFuncs = new Array();
184
+ SyncUiEventDispatcher._connectionUnregisterFuncs = new Array();
214
185
  export { SyncUiEventDispatcher };
215
186
  //# sourceMappingURL=SyncUiEventDispatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SyncUiEventDispatcher.js","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.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 type { UiSyncEvent } from \"@itwin/appui-abstract\";\nimport { UiEventDispatcher } from \"@itwin/appui-abstract\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type {\n IModelConnection,\n SelectedViewportChangedArgs,\n SelectionSetEvent,\n} from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { SessionStateActionId } from \"../redux/SessionState\";\nimport { UiFramework } from \"../UiFramework\";\n\n// cSpell:ignore activecontentchanged, activitymessageupdated, activitymessagecancelled, backstageevent, contentlayoutactivated, contentcontrolactivated,\n// cSpell:ignore elementtooltipchanged, frontstageactivated, inputfieldmessageadded, inputfieldmessageremoved, modalfrontstagechanged, modaldialogchanged\n// cSpell:ignore navigationaidactivated, notificationmessageadded, toolactivated, taskactivated, widgetstatechanged, workflowactivated frontstageactivating\n// cSpell:ignore frontstageready activeviewportchanged selectionsetchanged presentationselectionchanged viewstatechanged\n// cSpell:ignore accudrawcompassmodechanged accudrawfieldlockchanged accudrawrotationchanged uisettingschanged configurableui\n\n/** Event Id used to sync UI components. Used to refresh visibility or enable state of control.\n * @public\n */\nexport enum SyncUiEventId {\n /** AccuDraw compass mode has changed. */\n AccuDrawCompassModeChanged = \"accudrawcompassmodechanged\",\n /** AccuDraw rotation has changed. */\n AccuDrawRotationChanged = \"accudrawrotationchanged\",\n /** The active content as maintained by the ContentViewManager has changed. */\n ActiveContentChanged = \"activecontentchanged\",\n /** The active view maintained by the ViewManager has changed. */\n ActiveViewportChanged = \"activeviewportchanged\",\n /** Backstage has been toggled. */\n BackstageEvent = \"backstageevent\",\n /** A Content Layout has been activated. */\n ContentLayoutActivated = \"contentlayoutactivated\",\n /** A Content Control maintained by UiFramework.frontstages has been activated. */\n ContentControlActivated = \"contentcontrolactivated\",\n /** A Frontstage is activating. */\n FrontstageActivating = \"frontstageactivating\",\n /** A Frontstage has been activated and the content has been assigned. */\n FrontstageReady = \"frontstageready\",\n /** A Modal Frontstage has been opened or closed. */\n ModalFrontstageChanged = \"modalfrontstagechanged\",\n /** A Modal Dialog has been opened or closed. */\n ModalDialogChanged = \"modaldialogchanged\",\n /** A NavigationAid has been activated. */\n NavigationAidActivated = \"navigationaidactivated\",\n /** An InteractiveTool has been activated via the ToolAdmin. */\n ToolActivated = \"toolactivated\",\n /** The state of a Widget has changed. */\n WidgetStateChanged = \"widgetstatechanged\",\n /** The SelectionSet for the active IModelConnection has changed. */\n SelectionSetChanged = \"selectionsetchanged\",\n /** The list of settings providers registered with SettingsManager has changed. */\n SettingsProvidersChanged = \"settingsproviderschanged\",\n /** The current view state has changed (used by view undo/redo toolbar buttons). */\n ViewStateChanged = \"viewstatechanged\",\n /** The current object the reads and write UI State has changed. */\n UiStateStorageChanged = \"uistatestoragechanged\",\n ShowHideManagerSettingChange = \"show-hide-setting-change\",\n /** The list of feature overrides applied has been changed */\n FeatureOverridesChanged = \"featureoverrideschanged\",\n}\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 * @public\n */\nexport class SyncUiEventDispatcher {\n private static _uiEventDispatcher = new UiEventDispatcher();\n private static _unregisterListenerFunc?: () => void;\n private static _unregisterListenerFuncs: Array<() => void> = [];\n\n /** @internal - used for testing only */\n /* istanbul ignore next */\n public static setTimeoutPeriod(period: number): void {\n SyncUiEventDispatcher._uiEventDispatcher.setTimeoutPeriod(period);\n }\n\n /** Return set of event ids that will be sent to listeners/. */\n public static get syncEventIds(): Set<string> {\n return SyncUiEventDispatcher._uiEventDispatcher.syncEventIds;\n }\n\n /** Return SyncUiEvent so callers can register an event callback. */\n public static get onSyncUiEvent(): UiSyncEvent {\n return SyncUiEventDispatcher._uiEventDispatcher.onSyncUiEvent;\n }\n\n /** Immediately trigger sync event processing. */\n public static dispatchImmediateSyncUiEvent(eventId: string): void {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchImmediateSyncUiEvent(\n eventId\n );\n }\n\n /** Save eventId in Set for processing. */\n public static dispatchSyncUiEvent(eventId: string): void {\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\n Logger.logInfo(\n UiFramework.loggerCategory(this),\n `[dispatchSyncUiEvent] not processed because timeoutPeriod=0`\n );\n return;\n }\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(eventId);\n }\n\n /** Save multiple eventIds in Set for processing. */\n public static dispatchSyncUiEvents(eventIds: string[]): void {\n // istanbul ignore if\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\n Logger.logInfo(\n UiFramework.loggerCategory(this),\n `[dispatchSyncUiEvents] not processed because _timeoutPeriod=0`\n );\n }\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvents(eventIds);\n }\n\n /** Checks to see if an eventId of interest is contained in the set of eventIds */\n public static hasEventOfInterest(\n eventIds: Set<string>,\n idsOfInterest: string[]\n ) {\n return SyncUiEventDispatcher._uiEventDispatcher.hasEventOfInterest(\n eventIds,\n idsOfInterest\n );\n }\n\n // istanbul ignore next\n private static _dispatchViewChange() {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ViewStateChanged\n );\n }\n\n // istanbul ignore next\n private static _dispatchFeatureOverridesChange() {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.FeatureOverridesChanged\n );\n }\n\n /** Initializes the Monitoring of Events that trigger dispatching sync events */\n public static initialize() {\n // clear any registered listeners - this should only be encountered in unit test scenarios\n this._unregisterListenerFuncs.forEach((unregisterListenerFunc) =>\n unregisterListenerFunc()\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onContentControlActivatedEvent.addListener(() => {\n SyncUiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ContentControlActivated\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onContentLayoutActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ContentLayoutActivated\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onFrontstageActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.FrontstageActivating\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onFrontstageReadyEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.FrontstageReady\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onModalFrontstageChangedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ModalFrontstageChanged\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onNavigationAidActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.NavigationAidActivated\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onToolActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ToolActivated\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.frontstages.onWidgetStateChangedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.WidgetStateChanged\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.backstage.onToggled.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.BackstageEvent\n );\n })\n );\n\n this._unregisterListenerFuncs.push(\n UiFramework.content.onActiveContentChangedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ActiveContentChanged\n );\n })\n );\n\n // istanbul ignore else\n if (IModelApp && IModelApp.viewManager) {\n this._unregisterListenerFuncs.push(\n IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args: SelectedViewportChangedArgs) => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ActiveViewportChanged\n );\n\n // if this is the first view being opened up start the default tool so tool admin is happy.\n if (undefined === args.previous) {\n void IModelApp.toolAdmin.startDefaultTool();\n } else {\n // istanbul ignore next\n if (\n args.previous.onViewChanged &&\n typeof args.previous.onViewChanged.removeListener === \"function\"\n )\n // not set during unit test\n args.previous.onViewChanged.removeListener(\n SyncUiEventDispatcher._dispatchViewChange\n );\n // istanbul ignore next\n if (\n args.previous.onFeatureOverridesChanged &&\n typeof args.previous.onFeatureOverridesChanged\n .removeListener === \"function\"\n )\n // not set during unit test\n args.previous.onFeatureOverridesChanged.removeListener(\n SyncUiEventDispatcher._dispatchFeatureOverridesChange\n );\n }\n // istanbul ignore next\n if (args.current) {\n if (\n args.current.onViewChanged &&\n typeof args.current.onViewChanged.addListener === \"function\"\n )\n // not set during unit test\n args.current.onViewChanged.addListener(\n SyncUiEventDispatcher._dispatchViewChange\n );\n // istanbul ignore next\n if (\n args.current.onFeatureOverridesChanged &&\n typeof args.current.onFeatureOverridesChanged.addListener ===\n \"function\"\n )\n // not set during unit test\n args.current.onFeatureOverridesChanged.addListener(\n SyncUiEventDispatcher._dispatchFeatureOverridesChange\n );\n }\n }\n )\n );\n }\n }\n\n private static selectionChangedHandler(_ev: SelectionSetEvent) {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.SelectionSetChanged\n );\n }\n\n /** This should be called by IModelApp when the active IModelConnection is closed. */\n public static clearConnectionEvents(iModelConnection: IModelConnection) {\n iModelConnection.selectionSet.onChanged.removeListener(\n SyncUiEventDispatcher.selectionChangedHandler\n );\n SyncUiEventDispatcher._unregisterListenerFunc &&\n SyncUiEventDispatcher._unregisterListenerFunc();\n }\n\n /** This should be called by IModelApp when the active IModelConnection is established. */\n public static initializeConnectionEvents(iModelConnection: IModelConnection) {\n if (SyncUiEventDispatcher._unregisterListenerFunc)\n SyncUiEventDispatcher._unregisterListenerFunc();\n\n if (iModelConnection.isBlankConnection() || !iModelConnection.isOpen) {\n UiFramework.dispatchActionToStore(\n SessionStateActionId.SetNumItemsSelected,\n 0\n );\n return;\n }\n\n iModelConnection.selectionSet.onChanged.removeListener(\n SyncUiEventDispatcher.selectionChangedHandler\n );\n iModelConnection.selectionSet.onChanged.addListener(\n SyncUiEventDispatcher.selectionChangedHandler\n );\n iModelConnection.iModelId &&\n UiFramework.setActiveIModelId(iModelConnection.iModelId);\n\n SyncUiEventDispatcher._unregisterListenerFunc =\n iModelConnection.selectionSet.onChanged.addListener((ev) => {\n const numSelected = ev.set.elements.size;\n UiFramework.dispatchActionToStore(\n SessionStateActionId.SetNumItemsSelected,\n numSelected\n );\n });\n }\n}\n"]}
1
+ {"version":3,"file":"SyncUiEventDispatcher.js","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.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 type { UiSyncEvent } from \"@itwin/appui-abstract\";\nimport { UiEventDispatcher } from \"@itwin/appui-abstract\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { SessionStateActionId } from \"../redux/SessionState\";\nimport { UiFramework } from \"../UiFramework\";\n\n// cSpell:ignore activecontentchanged, activitymessageupdated, activitymessagecancelled, backstageevent, contentlayoutactivated, contentcontrolactivated,\n// cSpell:ignore elementtooltipchanged, frontstageactivated, inputfieldmessageadded, inputfieldmessageremoved, modalfrontstagechanged, modaldialogchanged\n// cSpell:ignore navigationaidactivated, notificationmessageadded, toolactivated, taskactivated, widgetstatechanged, workflowactivated frontstageactivating\n// cSpell:ignore frontstageready activeviewportchanged selectionsetchanged presentationselectionchanged viewstatechanged\n// cSpell:ignore accudrawcompassmodechanged accudrawfieldlockchanged accudrawrotationchanged uisettingschanged configurableui\n\n/** Event Id used to sync UI components. Used to refresh visibility or enable state of control.\n * @public\n */\nexport enum SyncUiEventId {\n /** AccuDraw compass mode has changed. */\n AccuDrawCompassModeChanged = \"accudrawcompassmodechanged\",\n /** AccuDraw rotation has changed. */\n AccuDrawRotationChanged = \"accudrawrotationchanged\",\n /** The active content as maintained by the ContentViewManager has changed. */\n ActiveContentChanged = \"activecontentchanged\",\n /** The active view maintained by the ViewManager has changed. */\n ActiveViewportChanged = \"activeviewportchanged\",\n /** Backstage has been toggled. */\n BackstageEvent = \"backstageevent\",\n /** A Content Layout has been activated. */\n ContentLayoutActivated = \"contentlayoutactivated\",\n /** A Content Control maintained by UiFramework.frontstages has been activated. */\n ContentControlActivated = \"contentcontrolactivated\",\n /** A Frontstage is activating. */\n FrontstageActivating = \"frontstageactivating\",\n /** A Frontstage has been activated and the content has been assigned. */\n FrontstageReady = \"frontstageready\",\n /** A Modal Frontstage has been opened or closed. */\n ModalFrontstageChanged = \"modalfrontstagechanged\",\n /** A Modal Dialog has been opened or closed. */\n ModalDialogChanged = \"modaldialogchanged\",\n /** A NavigationAid has been activated. */\n NavigationAidActivated = \"navigationaidactivated\",\n /** An InteractiveTool has been activated via the ToolAdmin. */\n ToolActivated = \"toolactivated\",\n /** The state of a Widget has changed. */\n WidgetStateChanged = \"widgetstatechanged\",\n /** The SelectionSet for the active IModelConnection has changed. */\n SelectionSetChanged = \"selectionsetchanged\",\n /** The list of settings providers registered with SettingsManager has changed. */\n SettingsProvidersChanged = \"settingsproviderschanged\",\n /** The current view state has changed (used by view undo/redo toolbar buttons). */\n ViewStateChanged = \"viewstatechanged\",\n /** The current object the reads and write UI State has changed. */\n UiStateStorageChanged = \"uistatestoragechanged\",\n ShowHideManagerSettingChange = \"show-hide-setting-change\",\n /** The list of feature overrides applied has been changed */\n FeatureOverridesChanged = \"featureoverrideschanged\",\n ViewedModelsChanged = \"viewedmodelschanged\",\n}\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 * @public\n */\nexport class SyncUiEventDispatcher {\n private static _uiEventDispatcher = new UiEventDispatcher();\n private static _unregisterFuncs = new Array<() => void>();\n private static _connectionUnregisterFuncs = new Array<() => void>();\n private static _iModelConnection?: IModelConnection;\n\n /** @internal - used for testing only */\n /* istanbul ignore next */\n public static setTimeoutPeriod(period: number): void {\n SyncUiEventDispatcher._uiEventDispatcher.setTimeoutPeriod(period);\n }\n\n /** Return set of event ids that will be sent to listeners/. */\n public static get syncEventIds(): Set<string> {\n return SyncUiEventDispatcher._uiEventDispatcher.syncEventIds;\n }\n\n /** Return SyncUiEvent so callers can register an event callback. */\n public static get onSyncUiEvent(): UiSyncEvent {\n return SyncUiEventDispatcher._uiEventDispatcher.onSyncUiEvent;\n }\n\n /** Immediately trigger sync event processing. */\n public static dispatchImmediateSyncUiEvent(eventId: string): void {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchImmediateSyncUiEvent(\n eventId\n );\n }\n\n /** Save eventId in Set for processing. */\n public static dispatchSyncUiEvent(eventId: string): void {\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\n Logger.logInfo(\n UiFramework.loggerCategory(this),\n `[dispatchSyncUiEvent] not processed because timeoutPeriod=0`\n );\n return;\n }\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(eventId);\n }\n\n /** Save multiple eventIds in Set for processing. */\n public static dispatchSyncUiEvents(eventIds: string[]): void {\n // istanbul ignore if\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\n Logger.logInfo(\n UiFramework.loggerCategory(this),\n `[dispatchSyncUiEvents] not processed because _timeoutPeriod=0`\n );\n }\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvents(eventIds);\n }\n\n /** Checks to see if an eventId of interest is contained in the set of eventIds */\n public static hasEventOfInterest(\n eventIds: Set<string>,\n idsOfInterest: string[]\n ) {\n return SyncUiEventDispatcher._uiEventDispatcher.hasEventOfInterest(\n eventIds,\n idsOfInterest\n );\n }\n\n // istanbul ignore next\n private static _dispatchViewChange() {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ViewStateChanged\n );\n }\n\n // istanbul ignore next\n private static _dispatchFeatureOverridesChange() {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.FeatureOverridesChanged\n );\n }\n\n // istanbul ignore next\n private static _dispatchViewedModelsChanged() {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ViewedModelsChanged\n );\n }\n\n /** Initializes the Monitoring of Events that trigger dispatching sync events */\n public static initialize() {\n // clear any registered listeners - this should only be encountered in unit test scenarios\n this._unregisterFuncs.forEach((unregister) => unregister());\n this._unregisterFuncs = [];\n\n this._unregisterFuncs.push(\n UiFramework.frontstages.onContentControlActivatedEvent.addListener(() => {\n SyncUiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ContentControlActivated\n );\n }),\n UiFramework.frontstages.onContentLayoutActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ContentLayoutActivated\n );\n }),\n UiFramework.frontstages.onFrontstageActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.FrontstageActivating\n );\n }),\n UiFramework.frontstages.onFrontstageReadyEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.FrontstageReady\n );\n }),\n UiFramework.frontstages.onModalFrontstageChangedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ModalFrontstageChanged\n );\n }),\n UiFramework.frontstages.onNavigationAidActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.NavigationAidActivated\n );\n }),\n UiFramework.frontstages.onToolActivatedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ToolActivated\n );\n }),\n UiFramework.frontstages.onWidgetStateChangedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.WidgetStateChanged\n );\n }),\n UiFramework.backstage.onToggled.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.BackstageEvent\n );\n }),\n UiFramework.content.onActiveContentChangedEvent.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ActiveContentChanged\n );\n }),\n IModelApp.viewManager.onSelectedViewportChanged.addListener((args) => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.ActiveViewportChanged\n );\n\n // if this is the first view being opened up start the default tool so tool admin is happy.\n if (undefined === args.previous) {\n void IModelApp.toolAdmin.startDefaultTool();\n } else {\n args.previous.onViewChanged.removeListener(\n SyncUiEventDispatcher._dispatchViewChange\n );\n args.previous.onFeatureOverridesChanged.removeListener(\n SyncUiEventDispatcher._dispatchFeatureOverridesChange\n );\n args.previous.onViewedModelsChanged.removeListener(\n SyncUiEventDispatcher._dispatchViewedModelsChanged\n );\n }\n // istanbul ignore next\n if (args.current) {\n args.current.onViewChanged.addListener(\n SyncUiEventDispatcher._dispatchViewChange\n );\n args.current.onFeatureOverridesChanged.addListener(\n SyncUiEventDispatcher._dispatchFeatureOverridesChange\n );\n args.current.onViewedModelsChanged.addListener(\n SyncUiEventDispatcher._dispatchViewedModelsChanged\n );\n }\n })\n );\n }\n\n /** This should be called by IModelApp when the active IModelConnection is closed. */\n public static clearConnectionEvents(iModelConnection: IModelConnection) {\n if (this._iModelConnection !== iModelConnection) return;\n this._connectionUnregisterFuncs.forEach((unregister) => unregister());\n this._connectionUnregisterFuncs = [];\n }\n\n /** This should be called by IModelApp when the active IModelConnection is established. */\n public static initializeConnectionEvents(iModelConnection: IModelConnection) {\n this._iModelConnection &&\n this.clearConnectionEvents(this._iModelConnection);\n this._iModelConnection = iModelConnection;\n\n this._connectionUnregisterFuncs.push(\n iModelConnection.selectionSet.onChanged.addListener(() => {\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(\n SyncUiEventId.SelectionSetChanged\n );\n }),\n iModelConnection.selectionSet.onChanged.addListener((ev) => {\n const numSelected = ev.set.elements.size;\n UiFramework.dispatchActionToStore(\n SessionStateActionId.SetNumItemsSelected,\n numSelected\n );\n })\n );\n }\n}\n"]}
@@ -6,12 +6,22 @@ import type { OnItemExecutedFunc } from "@itwin/appui-abstract";
6
6
  import type { CommonProps, NoChildrenProps } from "@itwin/core-react";
7
7
  import type { Direction, ToolbarOpacitySetting, ToolbarPanelAlignment } from "@itwin/components-react";
8
8
  import type { ToolbarItem } from "./ToolbarItem";
9
+ /**
10
+ * Properties of [[Toolbar.enableOverflow]] component.
11
+ * @beta
12
+ */
13
+ export interface OverflowToolbarOptions {
14
+ /** Describes to which direction the overflow popup panels are expanded if overflow is enabled. Defaults to: [[Direction.Right]] */
15
+ overflowExpandsTo?: Direction;
16
+ }
9
17
  /** Properties of [[Toolbar]] component.
10
18
  * @beta
11
19
  */
12
20
  export interface ToolbarProps extends CommonProps, NoChildrenProps {
13
- /** Describes to which direction the popup panels are expanded. Defaults to: [[Direction.Bottom]] */
21
+ /** Describes to which direction the popup panels are expanded, also defines the orientation of the toolbar (Top/Bottom will create an horizontal toolbar, Left/Right will create a vertical toolbar). Defaults to: [[Direction.Bottom]] */
14
22
  expandsTo?: Direction;
23
+ /** Describes if items that do not fit available space should move to an expandable panel. Defaults to: false */
24
+ enableOverflow?: boolean | OverflowToolbarOptions;
15
25
  /** Definitions for items of the toolbar. Items are expected to be already sorted by group and item. */
16
26
  items: ToolbarItem[];
17
27
  /** Describes how expanded panels are aligned. Defaults to: [[ToolbarPanelAlignment.Start]] */
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/Toolbar.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW,EAAE,eAAe;IAChE,oGAAoG;IACpG,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,uGAAuG;IACvG,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oFAAoF;IACpF,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,sDAAsD;IACtD,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,eAW1C"}
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/Toolbar.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,mIAAmI;IACnI,iBAAiB,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW,EAAE,eAAe;IAChE,2OAA2O;IAC3O,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gHAAgH;IAChH,cAAc,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAClD,uGAAuG;IACvG,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oFAAoF;IACpF,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,sDAAsD;IACtD,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,eAY1C"}
@@ -6,8 +6,9 @@
6
6
  * @module Toolbar
7
7
  */
8
8
  import * as React from "react";
9
- import { Toolbar as CR_Toolbar } from "@itwin/components-react";
9
+ import { InternalToolbarComponent as CR_Toolbar } from "@itwin/components-react";
10
10
  import { toUIAToolbarItem } from "./toUIAToolbarItem";
11
+ import { SyncUiEventDispatcher } from "../syncui/SyncUiEventDispatcher";
11
12
  /** Component that displays toolbar items.
12
13
  * @beta
13
14
  */
@@ -17,6 +18,6 @@ export function Toolbar(props) {
17
18
  return items.map((item) => toUIAToolbarItem(item));
18
19
  }, [items]);
19
20
  return (React.createElement(CR_Toolbar // eslint-disable-line deprecation/deprecation
20
- , { items: uiaItems, ...other }));
21
+ , { items: uiaItems, syncUiEvent: SyncUiEventDispatcher.onSyncUiEvent, ...other }));
21
22
  }
22
23
  //# sourceMappingURL=Toolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/Toolbar.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAsBtD;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,CACL,oBAAC,UAAU,CAAC,8CAA8C;QACxD,KAAK,EAAE,QAAQ,KACX,KAAK,GACT,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Toolbar\n */\n\nimport * as React from \"react\";\nimport type { OnItemExecutedFunc } from \"@itwin/appui-abstract\";\nimport type { CommonProps, NoChildrenProps } from \"@itwin/core-react\";\nimport type {\n Direction,\n ToolbarOpacitySetting,\n ToolbarPanelAlignment,\n} from \"@itwin/components-react\";\nimport { Toolbar as CR_Toolbar } from \"@itwin/components-react\";\nimport type { ToolbarItem } from \"./ToolbarItem\";\nimport { toUIAToolbarItem } from \"./toUIAToolbarItem\";\n\n/** Properties of [[Toolbar]] component.\n * @beta\n */\nexport interface ToolbarProps extends CommonProps, NoChildrenProps {\n /** Describes to which direction the popup panels are expanded. Defaults to: [[Direction.Bottom]] */\n expandsTo?: Direction;\n /** Definitions for items of the toolbar. Items are expected to be already sorted by group and item. */\n items: ToolbarItem[];\n /** Describes how expanded panels are aligned. Defaults to: [[ToolbarPanelAlignment.Start]] */\n panelAlignment?: ToolbarPanelAlignment;\n /** Use Drag Interaction to open popups with nest action buttons */\n useDragInteraction?: boolean;\n /** Determines whether to use mouse proximity to alter the opacity of the toolbar */\n toolbarOpacitySetting?: ToolbarOpacitySetting;\n /** Optional function to call on any item execution */\n onItemExecuted?: OnItemExecutedFunc;\n /** Optional function to call on any KeyDown events processed by toolbar */\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\n/** Component that displays toolbar items.\n * @beta\n */\nexport function Toolbar(props: ToolbarProps) {\n const { items, ...other } = props;\n const uiaItems = React.useMemo(() => {\n return items.map((item) => toUIAToolbarItem(item));\n }, [items]);\n return (\n <CR_Toolbar // eslint-disable-line deprecation/deprecation\n items={uiaItems}\n {...other}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/Toolbar.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,wBAAwB,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAiCxE;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,CACL,oBAAC,UAAU,CAAC,8CAA8C;QACxD,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,qBAAqB,CAAC,aAAa,KAC5C,KAAK,GACT,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Toolbar\n */\n\nimport * as React from \"react\";\nimport type { OnItemExecutedFunc } from \"@itwin/appui-abstract\";\nimport type { CommonProps, NoChildrenProps } from \"@itwin/core-react\";\nimport type {\n Direction,\n ToolbarOpacitySetting,\n ToolbarPanelAlignment,\n} from \"@itwin/components-react\";\nimport { InternalToolbarComponent as CR_Toolbar } from \"@itwin/components-react\";\nimport type { ToolbarItem } from \"./ToolbarItem\";\nimport { toUIAToolbarItem } from \"./toUIAToolbarItem\";\nimport { SyncUiEventDispatcher } from \"../syncui/SyncUiEventDispatcher\";\n\n/**\n * Properties of [[Toolbar.enableOverflow]] component.\n * @beta\n */\nexport interface OverflowToolbarOptions {\n /** Describes to which direction the overflow popup panels are expanded if overflow is enabled. Defaults to: [[Direction.Right]] */\n overflowExpandsTo?: Direction;\n}\n\n/** Properties of [[Toolbar]] component.\n * @beta\n */\nexport interface ToolbarProps extends CommonProps, NoChildrenProps {\n /** Describes to which direction the popup panels are expanded, also defines the orientation of the toolbar (Top/Bottom will create an horizontal toolbar, Left/Right will create a vertical toolbar). Defaults to: [[Direction.Bottom]] */\n expandsTo?: Direction;\n /** Describes if items that do not fit available space should move to an expandable panel. Defaults to: false */\n enableOverflow?: boolean | OverflowToolbarOptions;\n /** Definitions for items of the toolbar. Items are expected to be already sorted by group and item. */\n items: ToolbarItem[];\n /** Describes how expanded panels are aligned. Defaults to: [[ToolbarPanelAlignment.Start]] */\n panelAlignment?: ToolbarPanelAlignment;\n /** Use Drag Interaction to open popups with nest action buttons */\n useDragInteraction?: boolean;\n /** Determines whether to use mouse proximity to alter the opacity of the toolbar */\n toolbarOpacitySetting?: ToolbarOpacitySetting;\n /** Optional function to call on any item execution */\n onItemExecuted?: OnItemExecutedFunc;\n /** Optional function to call on any KeyDown events processed by toolbar */\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\n/** Component that displays toolbar items.\n * @beta\n */\nexport function Toolbar(props: ToolbarProps) {\n const { items, ...other } = props;\n const uiaItems = React.useMemo(() => {\n return items.map((item) => toUIAToolbarItem(item));\n }, [items]);\n return (\n <CR_Toolbar // eslint-disable-line deprecation/deprecation\n items={uiaItems}\n syncUiEvent={SyncUiEventDispatcher.onSyncUiEvent}\n {...other}\n />\n );\n}\n"]}
@@ -14,7 +14,8 @@ export interface ExtensibleToolbarProps {
14
14
  orientation: ToolbarOrientation;
15
15
  }
16
16
  /**
17
- * Toolbar that is populated and maintained by item managers.
17
+ * Toolbar that is populated and maintained by item managers, will override
18
+ * isActive property based on the active tool id.
18
19
  * @public
19
20
  */
20
21
  export declare function ToolbarComposer(props: ExtensibleToolbarProps): JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarComposer.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/ToolbarComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAgBH,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,kBAAkB,EAClB,YAAY,EACb,MAAM,eAAe,CAAC;AAoPvB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,2BAA2B;IAC3B,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,eAkE5D"}
1
+ {"version":3,"file":"ToolbarComposer.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/ToolbarComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAYH,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,kBAAkB,EAClB,YAAY,EACb,MAAM,eAAe,CAAC;AA0JvB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,2BAA2B;IAC3B,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,eA4C5D"}
@@ -6,68 +6,15 @@
6
6
  * @module Toolbar
7
7
  */
8
8
  import * as React from "react";
9
- import { ConditionalBooleanValue } from "@itwin/appui-abstract";
10
9
  import { Direction, ToolbarOpacitySetting, ToolbarPanelAlignment, } from "@itwin/components-react";
11
10
  import { Logger } from "@itwin/core-bentley";
12
11
  import { Orientation } from "@itwin/core-react";
13
- import { SyncUiEventDispatcher } from "../syncui/SyncUiEventDispatcher";
14
12
  import { UiFramework } from "../UiFramework";
15
13
  import { ToolbarDragInteractionContext } from "./DragInteraction";
16
- import { useDefaultToolbarItems } from "./useDefaultToolbarItems";
17
- import { useUiItemsProviderToolbarItems } from "./useUiItemsProviderToolbarItems";
18
14
  import { isToolbarActionItem, isToolbarGroupItem, ToolbarOrientation, ToolbarUsage, } from "./ToolbarItem";
19
- import { ToolbarItemsManager } from "./ToolbarItemsManager";
20
- import { ToolbarWithOverflow } from "./ToolbarWithOverflow";
21
- /** Private function to set up sync event monitoring of toolbar items */
22
- function useToolbarItemSyncEffect(uiDataProvider, syncIdsOfInterest) {
23
- React.useEffect(() => {
24
- return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {
25
- if (0 === syncIdsOfInterest.length)
26
- return;
27
- // istanbul ignore else
28
- if (syncIdsOfInterest.some((value) => args.eventIds.has(value.toLowerCase()))) {
29
- // process each item that has interest
30
- uiDataProvider.refreshAffectedItems(args.eventIds);
31
- }
32
- });
33
- }, [uiDataProvider, syncIdsOfInterest, uiDataProvider.items]);
34
- React.useEffect(() => {
35
- return UiFramework.frontstages.onToolActivatedEvent.addListener(({ toolId }) => {
36
- uiDataProvider.setActiveToolId(toolId);
37
- });
38
- }, [uiDataProvider, uiDataProvider.items]);
39
- }
40
- function nestedAddItemToSpecifiedParentGroup(items, groupChildren) {
41
- const outItems = [];
42
- for (const toolbarItem of items) {
43
- if (!isToolbarGroupItem(toolbarItem)) {
44
- outItems.push(toolbarItem);
45
- continue;
46
- }
47
- const newChildren = nestedAddItemToSpecifiedParentGroup(toolbarItem.items, groupChildren);
48
- const foundIndices = [];
49
- groupChildren.forEach((entry, index) => {
50
- if (entry.parentGroupItemId === toolbarItem.id) {
51
- foundIndices.push(index);
52
- }
53
- });
54
- // istanbul ignore else
55
- if (foundIndices.length) {
56
- // process in reverse order so groupChildren can be reduced as we find matches
57
- foundIndices
58
- .sort(
59
- // istanbul ignore next
60
- (a, b) => a - b)
61
- .reverse()
62
- .forEach((foundIndex) => {
63
- newChildren.push(groupChildren[foundIndex]);
64
- groupChildren.splice(foundIndex);
65
- });
66
- }
67
- outItems.push({ ...toolbarItem, items: newChildren });
68
- }
69
- return outItems;
70
- }
15
+ import { Toolbar } from "./Toolbar";
16
+ import { useActiveToolIdSynchedItems } from "./useActiveToolIdSynchedItems";
17
+ import { useActiveStageProvidedToolbarItems } from "./useActiveStageProvidedToolbarItems";
71
18
  function addItemToSpecifiedParentGroup(items, groupChildren) {
72
19
  const outItems = [];
73
20
  for (const toolbarItem of items) {
@@ -75,7 +22,7 @@ function addItemToSpecifiedParentGroup(items, groupChildren) {
75
22
  outItems.push(toolbarItem);
76
23
  continue;
77
24
  }
78
- const newChildren = nestedAddItemToSpecifiedParentGroup(toolbarItem.items, groupChildren);
25
+ const newChildren = addItemToSpecifiedParentGroup(toolbarItem.items, groupChildren);
79
26
  const foundIndices = [];
80
27
  groupChildren.forEach((entry, index) => {
81
28
  if (entry.parentGroupItemId === toolbarItem.id) {
@@ -116,76 +63,54 @@ function getItemSortValue(item) {
116
63
  : /* istanbul ignore next */ item.groupPriority;
117
64
  return groupValue * 10000 + item.itemPriority;
118
65
  }
119
- function getSortedChildren(group) {
120
- const sortedChildren = group.items
121
- .filter((item) => !ConditionalBooleanValue.getValue(item.isHidden))
66
+ function sortItems(items) {
67
+ return [...items]
122
68
  .sort((a, b) => getItemSortValue(a) - getItemSortValue(b))
123
69
  .map((i) => {
124
70
  if (isToolbarGroupItem(i)) {
125
- return { ...i, items: getSortedChildren(i) };
71
+ return { ...i, items: sortItems(i.items) };
126
72
  }
127
73
  return i;
128
74
  });
129
- return sortedChildren;
75
+ }
76
+ /**
77
+ * Create a forEach handler that will add every element of an array of ToolbarItems
78
+ * to a list of items that can then be replaced in its proper place, ensuring that
79
+ * the same item, from different list, is not added multiple times.
80
+ * @param items Output list of items
81
+ * @param groupChildren Output list of group children to redistribute.
82
+ * @returns Array<ToolbarItem>.forEach handler.
83
+ */
84
+ function addIfNotDuplicate(items, groupChildren) {
85
+ return (srcItem) => {
86
+ if (-1 === items.findIndex((item) => item.id === srcItem.id)) {
87
+ // if the default item is a group that an addon may insert into copy it so we don't mess with original
88
+ const toolbarItem = isToolbarGroupItem(srcItem)
89
+ ? cloneGroup(srcItem)
90
+ : srcItem;
91
+ if ((isToolbarGroupItem(toolbarItem) || isToolbarActionItem(toolbarItem)) &&
92
+ toolbarItem.parentGroupItemId)
93
+ groupChildren.push(toolbarItem);
94
+ else
95
+ items.push(toolbarItem);
96
+ }
97
+ };
130
98
  }
131
99
  /** local function to combine items from Stage and from Extensions */
132
100
  function combineItems(defaultItems, addonItems) {
133
101
  let items = [];
134
102
  const groupChildren = [];
135
- // istanbul ignore else
136
- if (defaultItems.length) {
137
- defaultItems.forEach((srcItem) => {
138
- if (-1 === items.findIndex((item) => item.id === srcItem.id)) {
139
- // if the default item is a group that an addon may insert into copy it so we don't mess with original
140
- const toolbarItem = isToolbarGroupItem(srcItem)
141
- ? cloneGroup(srcItem)
142
- : srcItem;
143
- if ((isToolbarGroupItem(toolbarItem) ||
144
- isToolbarActionItem(toolbarItem)) &&
145
- toolbarItem.parentGroupItemId)
146
- groupChildren.push(toolbarItem);
147
- else
148
- items.push(toolbarItem);
149
- }
150
- });
151
- }
152
- // istanbul ignore else
153
- if (addonItems.length) {
154
- addonItems.forEach((srcItem) => {
155
- if (-1 === items.findIndex((item) => item.id === srcItem.id)) {
156
- // if the default item is a group that an addon may insert into copy it so we don't mess with original
157
- const toolbarItem = isToolbarGroupItem(srcItem)
158
- ? cloneGroup(srcItem)
159
- : srcItem;
160
- if ((isToolbarGroupItem(toolbarItem) ||
161
- isToolbarActionItem(toolbarItem)) &&
162
- toolbarItem.parentGroupItemId)
163
- groupChildren.push(toolbarItem);
164
- else
165
- items.push(toolbarItem);
166
- }
167
- });
168
- }
103
+ defaultItems.forEach(addIfNotDuplicate(items, groupChildren));
104
+ addonItems.forEach(addIfNotDuplicate(items, groupChildren));
169
105
  // if an item from an addon has specified a parent group then try to find it and insert it. If no parent is found, add item at root level.
170
106
  if (groupChildren.length) {
171
107
  items = addItemToSpecifiedParentGroup(items, groupChildren);
172
- if (groupChildren.length) {
173
- groupChildren.forEach((toolbarItem) => {
174
- Logger.logWarning("ToolbarComposer", `Requested Parent Group [${toolbarItem.parentGroupItemId}] not found, so item [${toolbarItem.id}] is added directly to toolbar.`);
175
- items.push(toolbarItem);
176
- });
177
- }
108
+ groupChildren.forEach((toolbarItem) => {
109
+ Logger.logWarning("ToolbarComposer", `Requested Parent Group [${toolbarItem.parentGroupItemId}] not found, so item [${toolbarItem.id}] is added directly to toolbar.`);
110
+ items.push(toolbarItem);
111
+ });
178
112
  }
179
- const availableItems = items
180
- .filter((item) => !ConditionalBooleanValue.getValue(item.isHidden))
181
- .sort((a, b) => getItemSortValue(a) - getItemSortValue(b))
182
- .map((i) => {
183
- if (isToolbarGroupItem(i)) {
184
- return { ...i, items: getSortedChildren(i) };
185
- }
186
- return i;
187
- });
188
- return availableItems;
113
+ return sortItems(items);
189
114
  }
190
115
  const useProximityOpacitySetting = () => {
191
116
  const [proximityOpacity, setProximityOpacity] = React.useState(UiFramework.visibility.useProximityOpacity);
@@ -202,27 +127,18 @@ const useProximityOpacitySetting = () => {
202
127
  return proximityOpacity;
203
128
  };
204
129
  /**
205
- * Toolbar that is populated and maintained by item managers.
130
+ * Toolbar that is populated and maintained by item managers, will override
131
+ * isActive property based on the active tool id.
206
132
  * @public
207
133
  */
208
134
  export function ToolbarComposer(props) {
209
135
  const { usage, orientation } = props;
210
- const [defaultItemsManager, setDefaultItemsManager] = React.useState(() => new ToolbarItemsManager(props.items));
211
- React.useEffect(() => {
212
- setDefaultItemsManager(new ToolbarItemsManager(props.items));
213
- }, [props.items]);
214
- // process default items
215
- const defaultItems = useDefaultToolbarItems(defaultItemsManager);
216
- const syncIdsOfInterest = React.useMemo(() => ToolbarItemsManager.getSyncIdsOfInterest(defaultItems), [defaultItems]);
217
- useToolbarItemSyncEffect(defaultItemsManager, syncIdsOfInterest);
218
136
  // process items from addon UI providers
219
- const [addonItemsManager] = React.useState(() => new ToolbarItemsManager());
220
- const addonItems = useUiItemsProviderToolbarItems(addonItemsManager, usage, orientation);
221
- const addonSyncIdsOfInterest = React.useMemo(() => ToolbarItemsManager.getSyncIdsOfInterest(addonItems), [addonItems]);
222
- useToolbarItemSyncEffect(addonItemsManager, addonSyncIdsOfInterest);
223
- const items = React.useMemo(() => {
224
- return combineItems(defaultItems, addonItems);
225
- }, [defaultItems, addonItems]);
137
+ const addonItems = useActiveStageProvidedToolbarItems(usage, orientation);
138
+ const allItems = React.useMemo(() => {
139
+ return combineItems(props.items, addonItems);
140
+ }, [props.items, addonItems]);
141
+ const items = useActiveToolIdSynchedItems(allItems, UiFramework.frontstages);
226
142
  const toolbarOrientation = orientation === ToolbarOrientation.Horizontal
227
143
  ? Orientation.Horizontal
228
144
  : Orientation.Vertical;
@@ -237,7 +153,7 @@ export function ToolbarComposer(props) {
237
153
  : ToolbarPanelAlignment.Start;
238
154
  const isDragEnabled = React.useContext(ToolbarDragInteractionContext);
239
155
  const useProximityOpacity = useProximityOpacitySetting();
240
- return (React.createElement(ToolbarWithOverflow, { expandsTo: expandsTo, panelAlignment: panelAlignment, items: items, useDragInteraction: isDragEnabled, toolbarOpacitySetting: useProximityOpacity && !UiFramework.isMobile()
156
+ return (React.createElement(Toolbar, { enableOverflow: true, expandsTo: expandsTo, panelAlignment: panelAlignment, items: items, useDragInteraction: isDragEnabled, toolbarOpacitySetting: useProximityOpacity && !UiFramework.isMobile()
241
157
  ? ToolbarOpacitySetting.Proximity
242
158
  : /* istanbul ignore next */ ToolbarOpacitySetting.Defaults }));
243
159
  }