@itwin/appui-react 3.5.0-dev.8 → 3.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 (489) hide show
  1. package/CHANGELOG.md +90 -1
  2. package/lib/cjs/appui-react/UiFramework.d.ts +11 -1
  3. package/lib/cjs/appui-react/UiFramework.d.ts.map +1 -1
  4. package/lib/cjs/appui-react/UiFramework.js +18 -3
  5. package/lib/cjs/appui-react/UiFramework.js.map +1 -1
  6. package/lib/cjs/appui-react/accudraw/FrameworkAccuDraw.js +2 -2
  7. package/lib/cjs/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
  8. package/lib/cjs/appui-react/backstage/Backstage.d.ts +3 -0
  9. package/lib/cjs/appui-react/backstage/Backstage.d.ts.map +1 -1
  10. package/lib/cjs/appui-react/backstage/Backstage.js +3 -1
  11. package/lib/cjs/appui-react/backstage/Backstage.js.map +1 -1
  12. package/lib/cjs/appui-react/backstage/CommandLaunch.js +1 -1
  13. package/lib/cjs/appui-react/backstage/CommandLaunch.js.map +1 -1
  14. package/lib/cjs/appui-react/childwindow/ChildWindowManager.js +1 -0
  15. package/lib/cjs/appui-react/childwindow/ChildWindowManager.js.map +1 -1
  16. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.js +1 -1
  17. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  18. package/lib/cjs/appui-react/configurableui/state.d.ts +4 -1
  19. package/lib/cjs/appui-react/configurableui/state.d.ts.map +1 -1
  20. package/lib/cjs/appui-react/configurableui/state.js +6 -0
  21. package/lib/cjs/appui-react/configurableui/state.js.map +1 -1
  22. package/lib/cjs/appui-react/content/ContentGroup.d.ts +8 -0
  23. package/lib/cjs/appui-react/content/ContentGroup.d.ts.map +1 -1
  24. package/lib/cjs/appui-react/content/ContentGroup.js.map +1 -1
  25. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.js +2 -2
  26. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  27. package/lib/cjs/appui-react/frontstage/Frontstage.d.ts +5 -1
  28. package/lib/cjs/appui-react/frontstage/Frontstage.d.ts.map +1 -1
  29. package/lib/cjs/appui-react/frontstage/Frontstage.js +1 -0
  30. package/lib/cjs/appui-react/frontstage/Frontstage.js.map +1 -1
  31. package/lib/cjs/appui-react/frontstage/FrontstageComposer.d.ts +3 -0
  32. package/lib/cjs/appui-react/frontstage/FrontstageComposer.d.ts.map +1 -1
  33. package/lib/cjs/appui-react/frontstage/FrontstageComposer.js +5 -2
  34. package/lib/cjs/appui-react/frontstage/FrontstageComposer.js.map +1 -1
  35. package/lib/cjs/appui-react/frontstage/FrontstageConfig.d.ts +40 -0
  36. package/lib/cjs/appui-react/frontstage/FrontstageConfig.d.ts.map +1 -0
  37. package/lib/cjs/appui-react/frontstage/FrontstageConfig.js +10 -0
  38. package/lib/cjs/appui-react/frontstage/FrontstageConfig.js.map +1 -0
  39. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts +8 -0
  40. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  41. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +114 -7
  42. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  43. package/lib/cjs/appui-react/frontstage/FrontstageManager.d.ts +2 -4
  44. package/lib/cjs/appui-react/frontstage/FrontstageManager.d.ts.map +1 -1
  45. package/lib/cjs/appui-react/frontstage/FrontstageManager.js +5 -8
  46. package/lib/cjs/appui-react/frontstage/FrontstageManager.js.map +1 -1
  47. package/lib/cjs/appui-react/frontstage/FrontstageProvider.d.ts +9 -1
  48. package/lib/cjs/appui-react/frontstage/FrontstageProvider.d.ts.map +1 -1
  49. package/lib/cjs/appui-react/frontstage/FrontstageProvider.js +1 -1
  50. package/lib/cjs/appui-react/frontstage/FrontstageProvider.js.map +1 -1
  51. package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js +14 -5
  52. package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  53. package/lib/cjs/appui-react/hooks/useFrameworkVersion.d.ts +13 -3
  54. package/lib/cjs/appui-react/hooks/useFrameworkVersion.d.ts.map +1 -1
  55. package/lib/cjs/appui-react/hooks/useFrameworkVersion.js +15 -7
  56. package/lib/cjs/appui-react/hooks/useFrameworkVersion.js.map +1 -1
  57. package/lib/cjs/appui-react/messages/ActivityMessage.d.ts +1 -0
  58. package/lib/cjs/appui-react/messages/ActivityMessage.d.ts.map +1 -1
  59. package/lib/cjs/appui-react/messages/ActivityMessage.js.map +1 -1
  60. package/lib/cjs/appui-react/messages/ActivityMessagePopup.d.ts +2 -0
  61. package/lib/cjs/appui-react/messages/ActivityMessagePopup.d.ts.map +1 -1
  62. package/lib/cjs/appui-react/messages/ActivityMessagePopup.js +1 -0
  63. package/lib/cjs/appui-react/messages/ActivityMessagePopup.js.map +1 -1
  64. package/lib/cjs/appui-react/messages/StatusMessageRenderer.d.ts +1 -0
  65. package/lib/cjs/appui-react/messages/StatusMessageRenderer.d.ts.map +1 -1
  66. package/lib/cjs/appui-react/messages/StatusMessageRenderer.js.map +1 -1
  67. package/lib/cjs/appui-react/messages/StickyMessage.d.ts +1 -0
  68. package/lib/cjs/appui-react/messages/StickyMessage.d.ts.map +1 -1
  69. package/lib/cjs/appui-react/messages/StickyMessage.js.map +1 -1
  70. package/lib/cjs/appui-react/messages/ToastMessage.d.ts +1 -0
  71. package/lib/cjs/appui-react/messages/ToastMessage.d.ts.map +1 -1
  72. package/lib/cjs/appui-react/messages/ToastMessage.js.map +1 -1
  73. package/lib/cjs/appui-react/pickers/ListPicker.d.ts +1 -0
  74. package/lib/cjs/appui-react/pickers/ListPicker.d.ts.map +1 -1
  75. package/lib/cjs/appui-react/pickers/ListPicker.js +4 -2
  76. package/lib/cjs/appui-react/pickers/ListPicker.js.map +1 -1
  77. package/lib/cjs/appui-react/pickers/ListPicker.scss +2 -1
  78. package/lib/cjs/appui-react/redux/FrameworkState.d.ts +1 -1
  79. package/lib/cjs/appui-react/safearea/SafeAreaContext.d.ts +1 -0
  80. package/lib/cjs/appui-react/safearea/SafeAreaContext.d.ts.map +1 -1
  81. package/lib/cjs/appui-react/safearea/SafeAreaContext.js +2 -1
  82. package/lib/cjs/appui-react/safearea/SafeAreaContext.js.map +1 -1
  83. package/lib/cjs/appui-react/safearea/SafeAreaInsets.d.ts +13 -0
  84. package/lib/cjs/appui-react/safearea/SafeAreaInsets.d.ts.map +1 -0
  85. package/lib/cjs/appui-react/safearea/SafeAreaInsets.js +16 -0
  86. package/lib/cjs/appui-react/safearea/SafeAreaInsets.js.map +1 -0
  87. package/lib/cjs/appui-react/selection/ClearEmphasisStatusField.js +2 -1
  88. package/lib/cjs/appui-react/selection/ClearEmphasisStatusField.js.map +1 -1
  89. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.d.ts.map +1 -1
  90. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.js +16 -3
  91. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  92. package/lib/cjs/appui-react/shared/ActionButtonItemDef.d.ts.map +1 -1
  93. package/lib/cjs/appui-react/shared/ActionButtonItemDef.js +3 -2
  94. package/lib/cjs/appui-react/shared/ActionButtonItemDef.js.map +1 -1
  95. package/lib/cjs/appui-react/stagepanels/StagePanel.d.ts +3 -0
  96. package/lib/cjs/appui-react/stagepanels/StagePanel.d.ts.map +1 -1
  97. package/lib/cjs/appui-react/stagepanels/StagePanel.js +1 -0
  98. package/lib/cjs/appui-react/stagepanels/StagePanel.js.map +1 -1
  99. package/lib/cjs/appui-react/stagepanels/StagePanelConfig.d.ts +39 -0
  100. package/lib/cjs/appui-react/stagepanels/StagePanelConfig.d.ts.map +1 -0
  101. package/lib/cjs/appui-react/stagepanels/StagePanelConfig.js +11 -0
  102. package/lib/cjs/appui-react/stagepanels/StagePanelConfig.js.map +1 -0
  103. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts +6 -6
  104. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  105. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +4 -7
  106. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  107. package/lib/cjs/appui-react/statusbar/Indicator.d.ts +26 -0
  108. package/lib/cjs/appui-react/statusbar/Indicator.d.ts.map +1 -0
  109. package/lib/cjs/appui-react/statusbar/Indicator.js +38 -0
  110. package/lib/cjs/appui-react/statusbar/Indicator.js.map +1 -0
  111. package/lib/cjs/appui-react/statusbar/Indicator.scss +110 -0
  112. package/lib/cjs/appui-react/statusbar/LabelIndicator.d.ts +24 -0
  113. package/lib/cjs/appui-react/statusbar/LabelIndicator.d.ts.map +1 -0
  114. package/lib/cjs/appui-react/statusbar/LabelIndicator.js +29 -0
  115. package/lib/cjs/appui-react/statusbar/LabelIndicator.js.map +1 -0
  116. package/lib/cjs/appui-react/statusbar/LabelIndicator.scss +43 -0
  117. package/lib/cjs/appui-react/statusbar/Separator.d.ts +10 -0
  118. package/lib/cjs/appui-react/statusbar/Separator.d.ts.map +1 -0
  119. package/lib/cjs/appui-react/statusbar/Separator.js +21 -0
  120. package/lib/cjs/appui-react/statusbar/Separator.js.map +1 -0
  121. package/lib/cjs/appui-react/statusbar/StatusBarComposer.js +2 -1
  122. package/lib/cjs/appui-react/statusbar/StatusBarComposer.js.map +1 -1
  123. package/lib/cjs/appui-react/statusbar/dialog/Button.d.ts +21 -0
  124. package/lib/cjs/appui-react/statusbar/dialog/Button.d.ts.map +1 -0
  125. package/lib/cjs/appui-react/statusbar/dialog/Button.js +20 -0
  126. package/lib/cjs/appui-react/statusbar/dialog/Button.js.map +1 -0
  127. package/lib/cjs/appui-react/statusbar/dialog/Dialog.d.ts +30 -0
  128. package/lib/cjs/appui-react/statusbar/dialog/Dialog.d.ts.map +1 -0
  129. package/lib/cjs/appui-react/statusbar/dialog/Dialog.js +31 -0
  130. package/lib/cjs/appui-react/statusbar/dialog/Dialog.js.map +1 -0
  131. package/lib/cjs/appui-react/statusbar/dialog/TitleBar.d.ts +19 -0
  132. package/lib/cjs/appui-react/statusbar/dialog/TitleBar.d.ts.map +1 -0
  133. package/lib/cjs/appui-react/statusbar/dialog/TitleBar.js +20 -0
  134. package/lib/cjs/appui-react/statusbar/dialog/TitleBar.js.map +1 -0
  135. package/lib/cjs/appui-react/statusfields/Indicator.d.ts +1 -0
  136. package/lib/cjs/appui-react/statusfields/Indicator.d.ts.map +1 -1
  137. package/lib/cjs/appui-react/statusfields/Indicator.js +1 -0
  138. package/lib/cjs/appui-react/statusfields/Indicator.js.map +1 -1
  139. package/lib/cjs/appui-react/statusfields/MessageCenter.d.ts.map +1 -1
  140. package/lib/cjs/appui-react/statusfields/MessageCenter.js +2 -5
  141. package/lib/cjs/appui-react/statusfields/MessageCenter.js.map +1 -1
  142. package/lib/cjs/appui-react/statusfields/PromptField.js +2 -1
  143. package/lib/cjs/appui-react/statusfields/PromptField.js.map +1 -1
  144. package/lib/cjs/appui-react/statusfields/SectionsField.d.ts.map +1 -1
  145. package/lib/cjs/appui-react/statusfields/SectionsField.js +4 -2
  146. package/lib/cjs/appui-react/statusfields/SectionsField.js.map +1 -1
  147. package/lib/cjs/appui-react/statusfields/SelectionInfo.js +2 -1
  148. package/lib/cjs/appui-react/statusfields/SelectionInfo.js.map +1 -1
  149. package/lib/cjs/appui-react/statusfields/SelectionScope.js +2 -1
  150. package/lib/cjs/appui-react/statusfields/SelectionScope.js.map +1 -1
  151. package/lib/cjs/appui-react/statusfields/SnapMode.js +2 -1
  152. package/lib/cjs/appui-react/statusfields/SnapMode.js.map +1 -1
  153. package/lib/cjs/appui-react/statusfields/ViewAttributes.d.ts.map +1 -1
  154. package/lib/cjs/appui-react/statusfields/ViewAttributes.js +3 -2
  155. package/lib/cjs/appui-react/statusfields/ViewAttributes.js.map +1 -1
  156. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +0 -1
  157. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  158. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js +13 -11
  159. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  160. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -1
  161. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  162. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js +14 -0
  163. package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  164. package/lib/cjs/appui-react/theme/ThemeManager.d.ts +7 -1
  165. package/lib/cjs/appui-react/theme/ThemeManager.d.ts.map +1 -1
  166. package/lib/cjs/appui-react/theme/ThemeManager.js +14 -3
  167. package/lib/cjs/appui-react/theme/ThemeManager.js.map +1 -1
  168. package/lib/cjs/appui-react/toolbar/ActionItemButton.d.ts +2 -0
  169. package/lib/cjs/appui-react/toolbar/ActionItemButton.d.ts.map +1 -1
  170. package/lib/cjs/appui-react/toolbar/ActionItemButton.js +1 -0
  171. package/lib/cjs/appui-react/toolbar/ActionItemButton.js.map +1 -1
  172. package/lib/cjs/appui-react/toolbar/GroupItem.d.ts +2 -0
  173. package/lib/cjs/appui-react/toolbar/GroupItem.d.ts.map +1 -1
  174. package/lib/cjs/appui-react/toolbar/GroupItem.js +1 -0
  175. package/lib/cjs/appui-react/toolbar/GroupItem.js.map +1 -1
  176. package/lib/cjs/appui-react/toolbar/ToolButton.d.ts +2 -0
  177. package/lib/cjs/appui-react/toolbar/ToolButton.d.ts.map +1 -1
  178. package/lib/cjs/appui-react/toolbar/ToolButton.js +1 -0
  179. package/lib/cjs/appui-react/toolbar/ToolButton.js.map +1 -1
  180. package/lib/cjs/appui-react/toolbar/ToolbarComposer.js +1 -1
  181. package/lib/cjs/appui-react/toolbar/ToolbarComposer.js.map +1 -1
  182. package/lib/cjs/appui-react/tools/RestoreLayoutTool.d.ts +9 -0
  183. package/lib/cjs/appui-react/tools/RestoreLayoutTool.d.ts.map +1 -1
  184. package/lib/cjs/appui-react/tools/RestoreLayoutTool.js +17 -1
  185. package/lib/cjs/appui-react/tools/RestoreLayoutTool.js.map +1 -1
  186. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.d.ts.map +1 -1
  187. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +3 -3
  188. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  189. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +3 -3
  190. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  191. package/lib/cjs/appui-react/uiprovider/DefaultDialogGridContainer.js +1 -1
  192. package/lib/cjs/appui-react/uiprovider/DefaultDialogGridContainer.js.map +1 -1
  193. package/lib/cjs/appui-react/uistate/AppUiSettings.d.ts +2 -0
  194. package/lib/cjs/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
  195. package/lib/cjs/appui-react/uistate/AppUiSettings.js +6 -1
  196. package/lib/cjs/appui-react/uistate/AppUiSettings.js.map +1 -1
  197. package/lib/cjs/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
  198. package/lib/cjs/appui-react/utils/UiShowHideManager.js +8 -0
  199. package/lib/cjs/appui-react/utils/UiShowHideManager.js.map +1 -1
  200. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  201. package/lib/cjs/appui-react/widget-panels/Frontstage.js +25 -19
  202. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  203. package/lib/cjs/appui-react/widget-panels/StatusBar.d.ts.map +1 -1
  204. package/lib/cjs/appui-react/widget-panels/StatusBar.js +5 -2
  205. package/lib/cjs/appui-react/widget-panels/StatusBar.js.map +1 -1
  206. package/lib/cjs/appui-react/widget-panels/Toolbars.d.ts.map +1 -1
  207. package/lib/cjs/appui-react/widget-panels/Toolbars.js +10 -3
  208. package/lib/cjs/appui-react/widget-panels/Toolbars.js.map +1 -1
  209. package/lib/cjs/appui-react/widget-panels/useWidgetDirection.js +1 -1
  210. package/lib/cjs/appui-react/widget-panels/useWidgetDirection.js.map +1 -1
  211. package/lib/cjs/appui-react/widgets/BackstageAppButton.js +2 -2
  212. package/lib/cjs/appui-react/widgets/BackstageAppButton.js.map +1 -1
  213. package/lib/cjs/appui-react/widgets/NavigationWidget.js.map +1 -1
  214. package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js +1 -1
  215. package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  216. package/lib/cjs/appui-react/widgets/ToolWidget.js.map +1 -1
  217. package/lib/cjs/appui-react/widgets/ToolbarWidgetBase.js.map +1 -1
  218. package/lib/cjs/appui-react/widgets/Widget.d.ts +1 -0
  219. package/lib/cjs/appui-react/widgets/Widget.d.ts.map +1 -1
  220. package/lib/cjs/appui-react/widgets/Widget.js +1 -0
  221. package/lib/cjs/appui-react/widgets/Widget.js.map +1 -1
  222. package/lib/cjs/appui-react/widgets/WidgetConfig.d.ts +11 -0
  223. package/lib/cjs/appui-react/widgets/WidgetConfig.d.ts.map +1 -0
  224. package/lib/cjs/appui-react/widgets/WidgetConfig.js +10 -0
  225. package/lib/cjs/appui-react/widgets/WidgetConfig.js.map +1 -0
  226. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +11 -1
  227. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  228. package/lib/cjs/appui-react/widgets/WidgetDef.js +14 -11
  229. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  230. package/lib/cjs/appui-react/widgets/WidgetProps.d.ts +1 -0
  231. package/lib/cjs/appui-react/widgets/WidgetProps.d.ts.map +1 -1
  232. package/lib/cjs/appui-react/widgets/WidgetProps.js.map +1 -1
  233. package/lib/cjs/appui-react/zones/Zone.d.ts +5 -1
  234. package/lib/cjs/appui-react/zones/Zone.d.ts.map +1 -1
  235. package/lib/cjs/appui-react/zones/Zone.js +1 -0
  236. package/lib/cjs/appui-react/zones/Zone.js.map +1 -1
  237. package/lib/cjs/appui-react/zones/ZoneDef.d.ts +1 -0
  238. package/lib/cjs/appui-react/zones/ZoneDef.d.ts.map +1 -1
  239. package/lib/cjs/appui-react/zones/ZoneDef.js +2 -2
  240. package/lib/cjs/appui-react/zones/ZoneDef.js.map +1 -1
  241. package/lib/cjs/appui-react.d.ts +8 -0
  242. package/lib/cjs/appui-react.d.ts.map +1 -1
  243. package/lib/cjs/appui-react.js +8 -0
  244. package/lib/cjs/appui-react.js.map +1 -1
  245. package/lib/esm/appui-react/UiFramework.d.ts +11 -1
  246. package/lib/esm/appui-react/UiFramework.d.ts.map +1 -1
  247. package/lib/esm/appui-react/UiFramework.js +19 -4
  248. package/lib/esm/appui-react/UiFramework.js.map +1 -1
  249. package/lib/esm/appui-react/accudraw/FrameworkAccuDraw.js +2 -2
  250. package/lib/esm/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
  251. package/lib/esm/appui-react/backstage/Backstage.d.ts +3 -0
  252. package/lib/esm/appui-react/backstage/Backstage.d.ts.map +1 -1
  253. package/lib/esm/appui-react/backstage/Backstage.js +3 -1
  254. package/lib/esm/appui-react/backstage/Backstage.js.map +1 -1
  255. package/lib/esm/appui-react/backstage/CommandLaunch.js +1 -1
  256. package/lib/esm/appui-react/backstage/CommandLaunch.js.map +1 -1
  257. package/lib/esm/appui-react/childwindow/ChildWindowManager.js +1 -0
  258. package/lib/esm/appui-react/childwindow/ChildWindowManager.js.map +1 -1
  259. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.js +1 -1
  260. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  261. package/lib/esm/appui-react/configurableui/state.d.ts +4 -1
  262. package/lib/esm/appui-react/configurableui/state.d.ts.map +1 -1
  263. package/lib/esm/appui-react/configurableui/state.js +7 -1
  264. package/lib/esm/appui-react/configurableui/state.js.map +1 -1
  265. package/lib/esm/appui-react/content/ContentGroup.d.ts +8 -0
  266. package/lib/esm/appui-react/content/ContentGroup.d.ts.map +1 -1
  267. package/lib/esm/appui-react/content/ContentGroup.js.map +1 -1
  268. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.js +2 -2
  269. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  270. package/lib/esm/appui-react/frontstage/Frontstage.d.ts +5 -1
  271. package/lib/esm/appui-react/frontstage/Frontstage.d.ts.map +1 -1
  272. package/lib/esm/appui-react/frontstage/Frontstage.js +1 -0
  273. package/lib/esm/appui-react/frontstage/Frontstage.js.map +1 -1
  274. package/lib/esm/appui-react/frontstage/FrontstageComposer.d.ts +3 -0
  275. package/lib/esm/appui-react/frontstage/FrontstageComposer.d.ts.map +1 -1
  276. package/lib/esm/appui-react/frontstage/FrontstageComposer.js +6 -3
  277. package/lib/esm/appui-react/frontstage/FrontstageComposer.js.map +1 -1
  278. package/lib/esm/appui-react/frontstage/FrontstageConfig.d.ts +40 -0
  279. package/lib/esm/appui-react/frontstage/FrontstageConfig.d.ts.map +1 -0
  280. package/lib/esm/appui-react/frontstage/FrontstageConfig.js +9 -0
  281. package/lib/esm/appui-react/frontstage/FrontstageConfig.js.map +1 -0
  282. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts +8 -0
  283. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  284. package/lib/esm/appui-react/frontstage/FrontstageDef.js +115 -8
  285. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  286. package/lib/esm/appui-react/frontstage/FrontstageManager.d.ts +2 -4
  287. package/lib/esm/appui-react/frontstage/FrontstageManager.d.ts.map +1 -1
  288. package/lib/esm/appui-react/frontstage/FrontstageManager.js +5 -8
  289. package/lib/esm/appui-react/frontstage/FrontstageManager.js.map +1 -1
  290. package/lib/esm/appui-react/frontstage/FrontstageProvider.d.ts +9 -1
  291. package/lib/esm/appui-react/frontstage/FrontstageProvider.d.ts.map +1 -1
  292. package/lib/esm/appui-react/frontstage/FrontstageProvider.js +1 -1
  293. package/lib/esm/appui-react/frontstage/FrontstageProvider.js.map +1 -1
  294. package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js +14 -5
  295. package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  296. package/lib/esm/appui-react/hooks/useFrameworkVersion.d.ts +13 -3
  297. package/lib/esm/appui-react/hooks/useFrameworkVersion.d.ts.map +1 -1
  298. package/lib/esm/appui-react/hooks/useFrameworkVersion.js +15 -7
  299. package/lib/esm/appui-react/hooks/useFrameworkVersion.js.map +1 -1
  300. package/lib/esm/appui-react/messages/ActivityMessage.d.ts +1 -0
  301. package/lib/esm/appui-react/messages/ActivityMessage.d.ts.map +1 -1
  302. package/lib/esm/appui-react/messages/ActivityMessage.js.map +1 -1
  303. package/lib/esm/appui-react/messages/ActivityMessagePopup.d.ts +2 -0
  304. package/lib/esm/appui-react/messages/ActivityMessagePopup.d.ts.map +1 -1
  305. package/lib/esm/appui-react/messages/ActivityMessagePopup.js +1 -0
  306. package/lib/esm/appui-react/messages/ActivityMessagePopup.js.map +1 -1
  307. package/lib/esm/appui-react/messages/StatusMessageRenderer.d.ts +1 -0
  308. package/lib/esm/appui-react/messages/StatusMessageRenderer.d.ts.map +1 -1
  309. package/lib/esm/appui-react/messages/StatusMessageRenderer.js.map +1 -1
  310. package/lib/esm/appui-react/messages/StickyMessage.d.ts +1 -0
  311. package/lib/esm/appui-react/messages/StickyMessage.d.ts.map +1 -1
  312. package/lib/esm/appui-react/messages/StickyMessage.js.map +1 -1
  313. package/lib/esm/appui-react/messages/ToastMessage.d.ts +1 -0
  314. package/lib/esm/appui-react/messages/ToastMessage.d.ts.map +1 -1
  315. package/lib/esm/appui-react/messages/ToastMessage.js.map +1 -1
  316. package/lib/esm/appui-react/pickers/ListPicker.d.ts +1 -0
  317. package/lib/esm/appui-react/pickers/ListPicker.d.ts.map +1 -1
  318. package/lib/esm/appui-react/pickers/ListPicker.js +4 -2
  319. package/lib/esm/appui-react/pickers/ListPicker.js.map +1 -1
  320. package/lib/esm/appui-react/pickers/ListPicker.scss +2 -1
  321. package/lib/esm/appui-react/redux/FrameworkState.d.ts +1 -1
  322. package/lib/esm/appui-react/safearea/SafeAreaContext.d.ts +1 -0
  323. package/lib/esm/appui-react/safearea/SafeAreaContext.d.ts.map +1 -1
  324. package/lib/esm/appui-react/safearea/SafeAreaContext.js +2 -1
  325. package/lib/esm/appui-react/safearea/SafeAreaContext.js.map +1 -1
  326. package/lib/esm/appui-react/safearea/SafeAreaInsets.d.ts +13 -0
  327. package/lib/esm/appui-react/safearea/SafeAreaInsets.d.ts.map +1 -0
  328. package/lib/esm/appui-react/safearea/SafeAreaInsets.js +13 -0
  329. package/lib/esm/appui-react/safearea/SafeAreaInsets.js.map +1 -0
  330. package/lib/esm/appui-react/selection/ClearEmphasisStatusField.js +2 -1
  331. package/lib/esm/appui-react/selection/ClearEmphasisStatusField.js.map +1 -1
  332. package/lib/esm/appui-react/settings/ui/UiSettingsPage.d.ts.map +1 -1
  333. package/lib/esm/appui-react/settings/ui/UiSettingsPage.js +16 -3
  334. package/lib/esm/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  335. package/lib/esm/appui-react/shared/ActionButtonItemDef.d.ts.map +1 -1
  336. package/lib/esm/appui-react/shared/ActionButtonItemDef.js +3 -2
  337. package/lib/esm/appui-react/shared/ActionButtonItemDef.js.map +1 -1
  338. package/lib/esm/appui-react/stagepanels/StagePanel.d.ts +3 -0
  339. package/lib/esm/appui-react/stagepanels/StagePanel.d.ts.map +1 -1
  340. package/lib/esm/appui-react/stagepanels/StagePanel.js +1 -0
  341. package/lib/esm/appui-react/stagepanels/StagePanel.js.map +1 -1
  342. package/lib/esm/appui-react/stagepanels/StagePanelConfig.d.ts +39 -0
  343. package/lib/esm/appui-react/stagepanels/StagePanelConfig.d.ts.map +1 -0
  344. package/lib/esm/appui-react/stagepanels/StagePanelConfig.js +10 -0
  345. package/lib/esm/appui-react/stagepanels/StagePanelConfig.js.map +1 -0
  346. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts +6 -6
  347. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  348. package/lib/esm/appui-react/stagepanels/StagePanelDef.js +4 -7
  349. package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  350. package/lib/esm/appui-react/statusbar/Indicator.d.ts +26 -0
  351. package/lib/esm/appui-react/statusbar/Indicator.d.ts.map +1 -0
  352. package/lib/esm/appui-react/statusbar/Indicator.js +34 -0
  353. package/lib/esm/appui-react/statusbar/Indicator.js.map +1 -0
  354. package/lib/esm/appui-react/statusbar/Indicator.scss +110 -0
  355. package/lib/esm/appui-react/statusbar/LabelIndicator.d.ts +24 -0
  356. package/lib/esm/appui-react/statusbar/LabelIndicator.d.ts.map +1 -0
  357. package/lib/esm/appui-react/statusbar/LabelIndicator.js +25 -0
  358. package/lib/esm/appui-react/statusbar/LabelIndicator.js.map +1 -0
  359. package/lib/esm/appui-react/statusbar/LabelIndicator.scss +43 -0
  360. package/lib/esm/appui-react/statusbar/Separator.d.ts +10 -0
  361. package/lib/esm/appui-react/statusbar/Separator.d.ts.map +1 -0
  362. package/lib/esm/appui-react/statusbar/Separator.js +17 -0
  363. package/lib/esm/appui-react/statusbar/Separator.js.map +1 -0
  364. package/lib/esm/appui-react/statusbar/StatusBarComposer.js +2 -1
  365. package/lib/esm/appui-react/statusbar/StatusBarComposer.js.map +1 -1
  366. package/lib/esm/appui-react/statusbar/dialog/Button.d.ts +21 -0
  367. package/lib/esm/appui-react/statusbar/dialog/Button.d.ts.map +1 -0
  368. package/lib/esm/appui-react/statusbar/dialog/Button.js +16 -0
  369. package/lib/esm/appui-react/statusbar/dialog/Button.js.map +1 -0
  370. package/lib/esm/appui-react/statusbar/dialog/Dialog.d.ts +30 -0
  371. package/lib/esm/appui-react/statusbar/dialog/Dialog.d.ts.map +1 -0
  372. package/lib/esm/appui-react/statusbar/dialog/Dialog.js +27 -0
  373. package/lib/esm/appui-react/statusbar/dialog/Dialog.js.map +1 -0
  374. package/lib/esm/appui-react/statusbar/dialog/TitleBar.d.ts +19 -0
  375. package/lib/esm/appui-react/statusbar/dialog/TitleBar.d.ts.map +1 -0
  376. package/lib/esm/appui-react/statusbar/dialog/TitleBar.js +16 -0
  377. package/lib/esm/appui-react/statusbar/dialog/TitleBar.js.map +1 -0
  378. package/lib/esm/appui-react/statusfields/Indicator.d.ts +1 -0
  379. package/lib/esm/appui-react/statusfields/Indicator.d.ts.map +1 -1
  380. package/lib/esm/appui-react/statusfields/Indicator.js +1 -0
  381. package/lib/esm/appui-react/statusfields/Indicator.js.map +1 -1
  382. package/lib/esm/appui-react/statusfields/MessageCenter.d.ts.map +1 -1
  383. package/lib/esm/appui-react/statusfields/MessageCenter.js +2 -5
  384. package/lib/esm/appui-react/statusfields/MessageCenter.js.map +1 -1
  385. package/lib/esm/appui-react/statusfields/PromptField.js +2 -1
  386. package/lib/esm/appui-react/statusfields/PromptField.js.map +1 -1
  387. package/lib/esm/appui-react/statusfields/SectionsField.d.ts.map +1 -1
  388. package/lib/esm/appui-react/statusfields/SectionsField.js +5 -3
  389. package/lib/esm/appui-react/statusfields/SectionsField.js.map +1 -1
  390. package/lib/esm/appui-react/statusfields/SelectionInfo.js +2 -1
  391. package/lib/esm/appui-react/statusfields/SelectionInfo.js.map +1 -1
  392. package/lib/esm/appui-react/statusfields/SelectionScope.js +2 -1
  393. package/lib/esm/appui-react/statusfields/SelectionScope.js.map +1 -1
  394. package/lib/esm/appui-react/statusfields/SnapMode.js +2 -1
  395. package/lib/esm/appui-react/statusfields/SnapMode.js.map +1 -1
  396. package/lib/esm/appui-react/statusfields/ViewAttributes.d.ts.map +1 -1
  397. package/lib/esm/appui-react/statusfields/ViewAttributes.js +3 -2
  398. package/lib/esm/appui-react/statusfields/ViewAttributes.js.map +1 -1
  399. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +0 -1
  400. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  401. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js +15 -13
  402. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  403. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -1
  404. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
  405. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js +14 -0
  406. package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  407. package/lib/esm/appui-react/theme/ThemeManager.d.ts +7 -1
  408. package/lib/esm/appui-react/theme/ThemeManager.d.ts.map +1 -1
  409. package/lib/esm/appui-react/theme/ThemeManager.js +13 -2
  410. package/lib/esm/appui-react/theme/ThemeManager.js.map +1 -1
  411. package/lib/esm/appui-react/toolbar/ActionItemButton.d.ts +2 -0
  412. package/lib/esm/appui-react/toolbar/ActionItemButton.d.ts.map +1 -1
  413. package/lib/esm/appui-react/toolbar/ActionItemButton.js +1 -0
  414. package/lib/esm/appui-react/toolbar/ActionItemButton.js.map +1 -1
  415. package/lib/esm/appui-react/toolbar/GroupItem.d.ts +2 -0
  416. package/lib/esm/appui-react/toolbar/GroupItem.d.ts.map +1 -1
  417. package/lib/esm/appui-react/toolbar/GroupItem.js +1 -0
  418. package/lib/esm/appui-react/toolbar/GroupItem.js.map +1 -1
  419. package/lib/esm/appui-react/toolbar/ToolButton.d.ts +2 -0
  420. package/lib/esm/appui-react/toolbar/ToolButton.d.ts.map +1 -1
  421. package/lib/esm/appui-react/toolbar/ToolButton.js +1 -0
  422. package/lib/esm/appui-react/toolbar/ToolButton.js.map +1 -1
  423. package/lib/esm/appui-react/toolbar/ToolbarComposer.js +1 -1
  424. package/lib/esm/appui-react/toolbar/ToolbarComposer.js.map +1 -1
  425. package/lib/esm/appui-react/tools/RestoreLayoutTool.d.ts +9 -0
  426. package/lib/esm/appui-react/tools/RestoreLayoutTool.d.ts.map +1 -1
  427. package/lib/esm/appui-react/tools/RestoreLayoutTool.js +15 -0
  428. package/lib/esm/appui-react/tools/RestoreLayoutTool.js.map +1 -1
  429. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.d.ts.map +1 -1
  430. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +3 -3
  431. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  432. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +3 -3
  433. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  434. package/lib/esm/appui-react/uiprovider/DefaultDialogGridContainer.js +1 -1
  435. package/lib/esm/appui-react/uiprovider/DefaultDialogGridContainer.js.map +1 -1
  436. package/lib/esm/appui-react/uistate/AppUiSettings.d.ts +2 -0
  437. package/lib/esm/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
  438. package/lib/esm/appui-react/uistate/AppUiSettings.js +6 -1
  439. package/lib/esm/appui-react/uistate/AppUiSettings.js.map +1 -1
  440. package/lib/esm/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
  441. package/lib/esm/appui-react/utils/UiShowHideManager.js +8 -0
  442. package/lib/esm/appui-react/utils/UiShowHideManager.js.map +1 -1
  443. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  444. package/lib/esm/appui-react/widget-panels/Frontstage.js +25 -19
  445. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  446. package/lib/esm/appui-react/widget-panels/StatusBar.d.ts.map +1 -1
  447. package/lib/esm/appui-react/widget-panels/StatusBar.js +5 -2
  448. package/lib/esm/appui-react/widget-panels/StatusBar.js.map +1 -1
  449. package/lib/esm/appui-react/widget-panels/Toolbars.d.ts.map +1 -1
  450. package/lib/esm/appui-react/widget-panels/Toolbars.js +10 -3
  451. package/lib/esm/appui-react/widget-panels/Toolbars.js.map +1 -1
  452. package/lib/esm/appui-react/widget-panels/useWidgetDirection.js +1 -1
  453. package/lib/esm/appui-react/widget-panels/useWidgetDirection.js.map +1 -1
  454. package/lib/esm/appui-react/widgets/BackstageAppButton.js +2 -2
  455. package/lib/esm/appui-react/widgets/BackstageAppButton.js.map +1 -1
  456. package/lib/esm/appui-react/widgets/NavigationWidget.js.map +1 -1
  457. package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js +1 -1
  458. package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
  459. package/lib/esm/appui-react/widgets/ToolWidget.js.map +1 -1
  460. package/lib/esm/appui-react/widgets/ToolbarWidgetBase.js.map +1 -1
  461. package/lib/esm/appui-react/widgets/Widget.d.ts +1 -0
  462. package/lib/esm/appui-react/widgets/Widget.d.ts.map +1 -1
  463. package/lib/esm/appui-react/widgets/Widget.js +1 -0
  464. package/lib/esm/appui-react/widgets/Widget.js.map +1 -1
  465. package/lib/esm/appui-react/widgets/WidgetConfig.d.ts +11 -0
  466. package/lib/esm/appui-react/widgets/WidgetConfig.d.ts.map +1 -0
  467. package/lib/esm/appui-react/widgets/WidgetConfig.js +9 -0
  468. package/lib/esm/appui-react/widgets/WidgetConfig.js.map +1 -0
  469. package/lib/esm/appui-react/widgets/WidgetDef.d.ts +11 -1
  470. package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  471. package/lib/esm/appui-react/widgets/WidgetDef.js +14 -11
  472. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  473. package/lib/esm/appui-react/widgets/WidgetProps.d.ts +1 -0
  474. package/lib/esm/appui-react/widgets/WidgetProps.d.ts.map +1 -1
  475. package/lib/esm/appui-react/widgets/WidgetProps.js.map +1 -1
  476. package/lib/esm/appui-react/zones/Zone.d.ts +5 -1
  477. package/lib/esm/appui-react/zones/Zone.d.ts.map +1 -1
  478. package/lib/esm/appui-react/zones/Zone.js +1 -0
  479. package/lib/esm/appui-react/zones/Zone.js.map +1 -1
  480. package/lib/esm/appui-react/zones/ZoneDef.d.ts +1 -0
  481. package/lib/esm/appui-react/zones/ZoneDef.d.ts.map +1 -1
  482. package/lib/esm/appui-react/zones/ZoneDef.js +2 -2
  483. package/lib/esm/appui-react/zones/ZoneDef.js.map +1 -1
  484. package/lib/esm/appui-react.d.ts +8 -0
  485. package/lib/esm/appui-react.d.ts.map +1 -1
  486. package/lib/esm/appui-react.js +8 -0
  487. package/lib/esm/appui-react.js.map +1 -1
  488. package/lib/public/locales/en/UiFramework.json +11 -4
  489. package/package.json +34 -34
@@ -9,10 +9,10 @@ import "./ViewAttributes.scss";
9
9
  import * as React from "react";
10
10
  import { ViewFlags } from "@itwin/core-common";
11
11
  import { IModelApp } from "@itwin/core-frontend";
12
- import { Dialog, TitleBar } from "@itwin/appui-layout-react";
13
12
  import { Checkbox } from "@itwin/itwinui-react";
14
13
  import { UiFramework } from "../UiFramework";
15
14
  import { Indicator } from "./Indicator";
15
+ import { StatusBarDialog } from "../statusbar/dialog/Dialog";
16
16
  /** Widget for showing Checkboxes for View Attributes
17
17
  * @beta
18
18
  */
@@ -88,7 +88,8 @@ export class ViewAttributesStatusField extends React.Component {
88
88
  // eslint-disable-next-line deprecation/deprecation
89
89
  const isOpen = this.props.openWidget === this._className;
90
90
  return (React.createElement(React.Fragment, null,
91
- React.createElement(Indicator, { iconName: "icon-window-settings", opened: isOpen, toolTip: this._title, dialog: React.createElement(Dialog, { titleBar: React.createElement(TitleBar, { title: this._title }) }, this.getViewFlags()),
91
+ React.createElement(Indicator // eslint-disable-line deprecation/deprecation
92
+ , { iconName: "icon-window-settings", opened: isOpen, toolTip: this._title, dialog: React.createElement(StatusBarDialog, { titleBar: React.createElement(StatusBarDialog.TitleBar, { title: this._title }) }, this.getViewFlags()),
92
93
  // eslint-disable-next-line deprecation/deprecation
93
94
  isInFooterMode: (_a = this.props.isInFooterMode) !== null && _a !== void 0 ? _a : true })));
94
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewAttributes.js","sourceRoot":"","sources":["../../../../src/appui-react/statusfields/ViewAttributes.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,uBAAuB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAiB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AASxC;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK,CAAC,SAA2D;IAI9G,YAAY,KAAuB;QACjC,KAAK,CAAC,KAAK,CAAC,CAAC;QAHP,WAAM,GAAG,WAAW,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QA+BnE,uBAAuB;QACf,yBAAoB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAClD,IAAI,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE;gBACtC,MAAM,KAAK,GAAkB,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAClF,KAAa,CAAC,QAAQ,CAAC,GAAI,KAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,QAAQ,CAAC,CAAC;gBACrG,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5C,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;gBACzD,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB;QACH,CAAC,CAAC;QAEM,wBAAmB,GAAG,KAAK,IAAI,EAAE;YACvC,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACnF,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC;QAxCA,IAAI,CAAC,KAAK,GAAG;YACX,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC1C,CAAC;IAEe,iBAAiB;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,uBAAuB;IACf,WAAW;QACjB,IAAI,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE;YACtC,MAAM,SAAS,GAAkB,EAAE,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACnG,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC;YAE/D,IAAI,CAAC,QAAQ,CAAC;gBACZ,SAAS;gBACT,QAAQ;aACT,CAAC,CAAC;SACJ;IACH,CAAC;IAkBD,uBAAuB;IACf,WAAW,CAAC,IAAY;QAC9B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe,CAAC,QAAgB,EAAE,KAAc,EAAE,QAAiB;QACzE,OAAO,oBAAC,QAAQ,IAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,GAAI,CAAC;IAC/O,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAE,IAAI,CAAC,KAAK,CAAC,SAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpI,CAAC;IAEO,mBAAmB;QACzB,OAAO,oBAAC,QAAQ,IAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAI,CAAC;IACrM,CAAC;IAEO,YAAY;QAClB,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC;QAC/F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,qCAAqC,CAAC,CAAC,CAAC;QAC1H,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,gCAAgC,CAAC,CAAC,CAAC;QAC9G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,kCAAkC,CAAC,CAAC,CAAC;QACpH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,gCAAgC,CAAC,CAAC,CAAC;QAC9G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,wCAAwC,CAAC,CAAC,CAAC;QACtI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,+BAA+B,CAAC,CAAC,CAAC;QAC3G,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,qCAAqC,CAAC,CAAC,CAAC;QAC7H,OAAO,6BAAK,SAAS,EAAC,+BAA+B,IAAE,KAAK,CAAO,CAAC;IACtE,CAAC;IAEe,MAAM;;QACpB,mDAAmD;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;QACzD,OAAO,CACL;YACE,oBAAC,SAAS,IACR,QAAQ,EAAC,sBAAsB,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,MAAM,EACpB,MAAM,EAAE,oBAAC,MAAM,IACb,QAAQ,EACN,oBAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAI,IAEjC,IAAI,CAAC,YAAY,EAAE,CACb;gBACT,mDAAmD;gBACnD,cAAc,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,cAAc,mCAAI,IAAI,GACjD,CACD,CACJ,CAAC;IACJ,CAAC;CAEF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module StatusBar\r\n */\r\n\r\nimport \"./ViewAttributes.scss\";\r\nimport * as React from \"react\";\r\nimport { ViewFlagProps, ViewFlags } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { Dialog, TitleBar } from \"@itwin/appui-layout-react\";\r\nimport { Checkbox } from \"@itwin/itwinui-react\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { Indicator } from \"./Indicator\";\r\nimport { StatusFieldProps } from \"./StatusFieldProps\";\r\n\r\ninterface ViewAttributesStatusFieldState {\r\n viewFlags: ViewFlagProps;\r\n cameraOn: boolean;\r\n target: HTMLElement | null;\r\n}\r\n\r\n/** Widget for showing Checkboxes for View Attributes\r\n * @beta\r\n */\r\nexport class ViewAttributesStatusField extends React.Component<StatusFieldProps, ViewAttributesStatusFieldState> {\r\n private _className: string;\r\n private _title = UiFramework.translate(\"listTools.viewAttributes\");\r\n\r\n constructor(props: StatusFieldProps) {\r\n super(props);\r\n\r\n this.state = {\r\n cameraOn: false,\r\n viewFlags: {},\r\n target: null,\r\n };\r\n\r\n this._className = this.constructor.name;\r\n }\r\n\r\n public override componentDidMount() {\r\n this.updateState();\r\n }\r\n\r\n // istanbul ignore next\r\n private updateState() {\r\n if (IModelApp.viewManager.selectedView) {\r\n const viewFlags: ViewFlagProps = { ...IModelApp.viewManager.selectedView.view.viewFlags.toJSON() };\r\n const cameraOn = IModelApp.viewManager.selectedView.isCameraOn;\r\n\r\n this.setState({\r\n viewFlags,\r\n cameraOn,\r\n });\r\n }\r\n }\r\n\r\n // istanbul ignore next\r\n private _handleViewFlagClick = (flagName: string) => {\r\n if (IModelApp.viewManager.selectedView) {\r\n const props: ViewFlagProps = IModelApp.viewManager.selectedView.viewFlags.toJSON();\r\n (props as any)[flagName] = (props as any)[flagName] === undefined ? true : !(props as any)[flagName];\r\n const viewFlags = ViewFlags.fromJSON(props);\r\n IModelApp.viewManager.selectedView.viewFlags = viewFlags;\r\n this.updateState();\r\n }\r\n };\r\n\r\n private _handleToggleCamera = async () => {\r\n await IModelApp.tools.run(\"View.ToggleCamera\", IModelApp.viewManager.selectedView);\r\n this.updateState();\r\n };\r\n\r\n // istanbul ignore next\r\n private stylizeName(name: string) {\r\n name = name.charAt(0).toUpperCase() + name.slice(1);\r\n name = name.replace(/([A-Z])/g, \" $1\").trim();\r\n return name;\r\n }\r\n\r\n private getViewFlagItem(flagName: string, value: boolean, labelKey?: string) {\r\n return <Checkbox key={flagName} label={labelKey ? IModelApp.localization.getLocalizedString(labelKey) : /* istanbul ignore next */ this.stylizeName(flagName)} onClick={() => this._handleViewFlagClick(flagName)} defaultChecked={value} />;\r\n }\r\n\r\n private getFlagState(flagName: string) {\r\n return this.state.viewFlags.hasOwnProperty(flagName) ? /* istanbul ignore next */ (this.state.viewFlags as any)[flagName] : false;\r\n }\r\n\r\n private getToggleCameraItem() {\r\n return <Checkbox key={\"toggleCamera\"} label={IModelApp.localization.getLocalizedString(\"UiFramework:listTools.camera\")} onClick={this._handleToggleCamera} defaultChecked={this.state.cameraOn} />;\r\n }\r\n\r\n private getViewFlags() {\r\n const items: JSX.Element[] = [];\r\n items.push(this.getViewFlagItem(\"acs\", this.getFlagState(\"acs\"), \"UiFramework:listTools.acs\"));\r\n items.push(this.getToggleCameraItem());\r\n items.push(this.getViewFlagItem(\"noConstruct\", !this.getFlagState(\"noConstruct\"), \"UiFramework:listTools.constructions\"));\r\n items.push(this.getViewFlagItem(\"hidEdges\", this.getFlagState(\"hidEdges\"), \"UiFramework:listTools.hidEdges\"));\r\n items.push(this.getViewFlagItem(\"monochrome\", this.getFlagState(\"monochrome\"), \"UiFramework:listTools.monochrome\"));\r\n items.push(this.getViewFlagItem(\"visEdges\", this.getFlagState(\"visEdges\"), \"UiFramework:listTools.visEdges\"));\r\n items.push(this.getViewFlagItem(\"ambientOcclusion\", this.getFlagState(\"ambientOcclusion\"), \"UiFramework:listTools.ambientOcclusion\"));\r\n items.push(this.getViewFlagItem(\"shadows\", this.getFlagState(\"shadows\"), \"UiFramework:listTools.shadows\"));\r\n items.push(this.getViewFlagItem(\"backgroundMap\", this.getFlagState(\"backgroundMap\"), \"UiFramework:listTools.backgroundMap\"));\r\n return <div className=\"uifw-view-attributes-contents\">{items}</div>;\r\n }\r\n\r\n public override render() {\r\n // eslint-disable-next-line deprecation/deprecation\r\n const isOpen = this.props.openWidget === this._className;\r\n return (\r\n <>\r\n <Indicator\r\n iconName=\"icon-window-settings\"\r\n opened={isOpen}\r\n toolTip={this._title}\r\n dialog={<Dialog\r\n titleBar={\r\n <TitleBar title={this._title} />\r\n }>\r\n {this.getViewFlags()}\r\n </Dialog>}\r\n // eslint-disable-next-line deprecation/deprecation\r\n isInFooterMode={this.props.isInFooterMode ?? true}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewAttributes.js","sourceRoot":"","sources":["../../../../src/appui-react/statusfields/ViewAttributes.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module StatusBar\r\n */\r\n\r\nimport \"./ViewAttributes.scss\";\r\nimport * as React from \"react\";\r\nimport { ViewFlagProps, ViewFlags } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { Checkbox } from \"@itwin/itwinui-react\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { Indicator } from \"./Indicator\";\r\nimport { StatusFieldProps } from \"./StatusFieldProps\";\r\nimport { StatusBarDialog } from \"../statusbar/dialog/Dialog\";\r\n\r\ninterface ViewAttributesStatusFieldState {\r\n viewFlags: ViewFlagProps;\r\n cameraOn: boolean;\r\n target: HTMLElement | null;\r\n}\r\n\r\n/** Widget for showing Checkboxes for View Attributes\r\n * @beta\r\n */\r\nexport class ViewAttributesStatusField extends React.Component<StatusFieldProps, ViewAttributesStatusFieldState> {\r\n private _className: string;\r\n private _title = UiFramework.translate(\"listTools.viewAttributes\");\r\n\r\n constructor(props: StatusFieldProps) {\r\n super(props);\r\n\r\n this.state = {\r\n cameraOn: false,\r\n viewFlags: {},\r\n target: null,\r\n };\r\n\r\n this._className = this.constructor.name;\r\n }\r\n\r\n public override componentDidMount() {\r\n this.updateState();\r\n }\r\n\r\n // istanbul ignore next\r\n private updateState() {\r\n if (IModelApp.viewManager.selectedView) {\r\n const viewFlags: ViewFlagProps = { ...IModelApp.viewManager.selectedView.view.viewFlags.toJSON() };\r\n const cameraOn = IModelApp.viewManager.selectedView.isCameraOn;\r\n\r\n this.setState({\r\n viewFlags,\r\n cameraOn,\r\n });\r\n }\r\n }\r\n\r\n // istanbul ignore next\r\n private _handleViewFlagClick = (flagName: string) => {\r\n if (IModelApp.viewManager.selectedView) {\r\n const props: ViewFlagProps = IModelApp.viewManager.selectedView.viewFlags.toJSON();\r\n (props as any)[flagName] = (props as any)[flagName] === undefined ? true : !(props as any)[flagName];\r\n const viewFlags = ViewFlags.fromJSON(props);\r\n IModelApp.viewManager.selectedView.viewFlags = viewFlags;\r\n this.updateState();\r\n }\r\n };\r\n\r\n private _handleToggleCamera = async () => {\r\n await IModelApp.tools.run(\"View.ToggleCamera\", IModelApp.viewManager.selectedView);\r\n this.updateState();\r\n };\r\n\r\n // istanbul ignore next\r\n private stylizeName(name: string) {\r\n name = name.charAt(0).toUpperCase() + name.slice(1);\r\n name = name.replace(/([A-Z])/g, \" $1\").trim();\r\n return name;\r\n }\r\n\r\n private getViewFlagItem(flagName: string, value: boolean, labelKey?: string) {\r\n return <Checkbox key={flagName} label={labelKey ? IModelApp.localization.getLocalizedString(labelKey) : /* istanbul ignore next */ this.stylizeName(flagName)} onClick={() => this._handleViewFlagClick(flagName)} defaultChecked={value} />;\r\n }\r\n\r\n private getFlagState(flagName: string) {\r\n return this.state.viewFlags.hasOwnProperty(flagName) ? /* istanbul ignore next */ (this.state.viewFlags as any)[flagName] : false;\r\n }\r\n\r\n private getToggleCameraItem() {\r\n return <Checkbox key={\"toggleCamera\"} label={IModelApp.localization.getLocalizedString(\"UiFramework:listTools.camera\")} onClick={this._handleToggleCamera} defaultChecked={this.state.cameraOn} />;\r\n }\r\n\r\n private getViewFlags() {\r\n const items: JSX.Element[] = [];\r\n items.push(this.getViewFlagItem(\"acs\", this.getFlagState(\"acs\"), \"UiFramework:listTools.acs\"));\r\n items.push(this.getToggleCameraItem());\r\n items.push(this.getViewFlagItem(\"noConstruct\", !this.getFlagState(\"noConstruct\"), \"UiFramework:listTools.constructions\"));\r\n items.push(this.getViewFlagItem(\"hidEdges\", this.getFlagState(\"hidEdges\"), \"UiFramework:listTools.hidEdges\"));\r\n items.push(this.getViewFlagItem(\"monochrome\", this.getFlagState(\"monochrome\"), \"UiFramework:listTools.monochrome\"));\r\n items.push(this.getViewFlagItem(\"visEdges\", this.getFlagState(\"visEdges\"), \"UiFramework:listTools.visEdges\"));\r\n items.push(this.getViewFlagItem(\"ambientOcclusion\", this.getFlagState(\"ambientOcclusion\"), \"UiFramework:listTools.ambientOcclusion\"));\r\n items.push(this.getViewFlagItem(\"shadows\", this.getFlagState(\"shadows\"), \"UiFramework:listTools.shadows\"));\r\n items.push(this.getViewFlagItem(\"backgroundMap\", this.getFlagState(\"backgroundMap\"), \"UiFramework:listTools.backgroundMap\"));\r\n return <div className=\"uifw-view-attributes-contents\">{items}</div>;\r\n }\r\n\r\n public override render() {\r\n // eslint-disable-next-line deprecation/deprecation\r\n const isOpen = this.props.openWidget === this._className;\r\n return (\r\n <>\r\n <Indicator // eslint-disable-line deprecation/deprecation\r\n iconName=\"icon-window-settings\"\r\n opened={isOpen}\r\n toolTip={this._title}\r\n dialog={<StatusBarDialog\r\n titleBar={\r\n <StatusBarDialog.TitleBar title={this._title} />\r\n }>\r\n {this.getViewFlags()}\r\n </StatusBarDialog>}\r\n // eslint-disable-next-line deprecation/deprecation\r\n isInFooterMode={this.props.isInFooterMode ?? true}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n}\r\n"]}
@@ -86,7 +86,6 @@ export declare class ToolAssistanceField extends React.Component<ToolAssistanceF
86
86
  private _handleOutsideClick;
87
87
  private _handleToolAssistanceIndicatorClick;
88
88
  private _handlePinButtonClick;
89
- private _handleCloseButtonClick;
90
89
  private setOpenWidget;
91
90
  /** @internal */
92
91
  static getInstructionImage(instruction: ToolAssistanceInstruction): React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"ToolAssistanceField.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolAssistanceField.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.tsx"],"names":[],"mappings":"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"}
@@ -13,8 +13,8 @@ import { Logger } from "@itwin/core-bentley";
13
13
  import { IModelApp, ToolAssistanceImage, ToolAssistanceInputMethod, } from "@itwin/core-frontend";
14
14
  import { IconSpecUtilities } from "@itwin/appui-abstract";
15
15
  import { FillCentered, Icon, LocalStateStorage, UiCore, UiStateEntry, UiStateStorageStatus, } from "@itwin/core-react";
16
- import { FooterPopup, ToolAssistanceInstruction as NZ_ToolAssistanceInstruction, TitleBarButton, ToolAssistance, ToolAssistanceDialog, ToolAssistanceItem, ToolAssistanceSeparator, } from "@itwin/appui-layout-react";
17
- import { HorizontalTabs, ToggleSwitch } from "@itwin/itwinui-react";
16
+ import { FooterPopup, ToolAssistanceInstruction as NZ_ToolAssistanceInstruction, ToolAssistance, ToolAssistanceDialog, ToolAssistanceItem, ToolAssistanceSeparator, } from "@itwin/appui-layout-react";
17
+ import { HorizontalTabs, IconButton, ToggleSwitch } from "@itwin/itwinui-react";
18
18
  import { CursorPrompt } from "../../cursor/cursorprompt/CursorPrompt";
19
19
  import { FrontstageManager } from "../../frontstage/FrontstageManager";
20
20
  import { MessageManager } from "../../messages/MessageManager";
@@ -36,6 +36,7 @@ import clickMouseWheelDragIcon from "./mouse-click-wheel-drag.svg";
36
36
  import mouseWheelClickIcon from "./mouse-click-wheel.svg";
37
37
  import touchCursorDragIcon from "./touch-cursor-pan.svg";
38
38
  import touchCursorTapIcon from "./touch-cursor-point.svg";
39
+ import { SvgClose, SvgPinHollow } from "@itwin/itwinui-icons-react";
39
40
  /** Tool Assistance Field React component.
40
41
  * @public
41
42
  */
@@ -141,11 +142,15 @@ export class ToolAssistanceField extends React.Component {
141
142
  };
142
143
  this._handlePinButtonClick = () => {
143
144
  // istanbul ignore else
144
- if (this._isMounted)
145
- this.setState({ isPinned: true });
146
- };
147
- this._handleCloseButtonClick = () => {
148
- this._handleClose();
145
+ if (this._isMounted) {
146
+ const isPinned = !this.state.isPinned;
147
+ this.setState({
148
+ isPinned,
149
+ });
150
+ if (!isPinned) {
151
+ this._handleClose();
152
+ }
153
+ }
149
154
  };
150
155
  const instance = this.constructor;
151
156
  this._className = instance.name;
@@ -278,12 +283,9 @@ export class ToolAssistanceField extends React.Component {
278
283
  , { icons: React.createElement(React.Fragment, null, toolIcon), indicatorRef: this._indicator, className: classnames("uifw-statusFields-toolassistance", this.props.className), style: this.props.style, isInFooterMode: (_a = this.props.isInFooterMode) !== null && _a !== void 0 ? _a : true, onClick: this._handleToolAssistanceIndicatorClick, title: tooltip }, ((_b = this.props.isInFooterMode) !== null && _b !== void 0 ? _b : true) ? prompt : undefined)),
279
284
  React.createElement(FooterPopup, { isOpen: ((_c = this.props.openWidget) !== null && _c !== void 0 ? _c : this.state.openWidget) === this._className, onClose: this._handleClose, onOutsideClick: this._handleOutsideClick, target: this._target, isPinned: this.state.isPinned },
280
285
  React.createElement(ToolAssistanceDialog, { buttons: React.createElement(React.Fragment, null,
281
- !this.state.isPinned &&
282
- React.createElement(TitleBarButton, { onClick: this._handlePinButtonClick, title: UiFramework.translate("toolAssistance.pin") },
283
- React.createElement("i", { className: "icon icon-pin" })),
284
- this.state.isPinned &&
285
- React.createElement(TitleBarButton, { onClick: this._handleCloseButtonClick, title: UiCore.translate("dialog.close") },
286
- React.createElement("i", { className: "icon icon-close" }))), title: dialogTitle }, dialogContent))));
286
+ React.createElement(IconButton, { size: "small", styleType: "borderless", onClick: this._handlePinButtonClick, title: this.state.isPinned
287
+ ? UiCore.translate("dialog.close")
288
+ : UiFramework.translate("toolAssistance.pin") }, this.state.isPinned ? React.createElement(SvgClose, null) : React.createElement(SvgPinHollow, null))), title: dialogTitle }, dialogContent))));
287
289
  }
288
290
  setOpenWidget(openWidget) {
289
291
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"ToolAssistanceField.js","sourceRoot":"","sources":["../../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n/** @packageDocumentation\r\n * @module Notification\r\n */\r\n\r\nimport \"./ToolAssistanceField.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelApp, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceInstructions, ToolAssistanceKeyboardInfo,\r\n ToolAssistanceSection,\r\n} from \"@itwin/core-frontend\";\r\nimport { IconSpecUtilities } from \"@itwin/appui-abstract\";\r\nimport {\r\n FillCentered, Icon, LocalStateStorage, UiCore, UiStateEntry, UiStateStorage, UiStateStorageResult, UiStateStorageStatus,\r\n} from \"@itwin/core-react\";\r\nimport {\r\n FooterPopup, ToolAssistanceInstruction as NZ_ToolAssistanceInstruction, TitleBarButton, ToolAssistance, ToolAssistanceDialog,\r\n ToolAssistanceItem,\r\n ToolAssistanceSeparator,\r\n} from \"@itwin/appui-layout-react\";\r\nimport { HorizontalTabs, ToggleSwitch } from \"@itwin/itwinui-react\";\r\nimport { CursorPrompt } from \"../../cursor/cursorprompt/CursorPrompt\";\r\nimport { FrontstageManager, ToolIconChangedEventArgs } from \"../../frontstage/FrontstageManager\";\r\nimport { MessageManager, ToolAssistanceChangedEventArgs } from \"../../messages/MessageManager\";\r\nimport { StatusBarFieldId } from \"../../statusbar/StatusBarWidgetControl\";\r\nimport { UiFramework } from \"../../UiFramework\";\r\nimport { StatusFieldProps } from \"../StatusFieldProps\";\r\nimport { UiStateStorageContext } from \"../../uistate/useUiStateStorage\";\r\n\r\nimport acceptPointIcon from \"./accept-point.svg\";\r\nimport cursorClickIcon from \"./cursor-click.svg\";\r\nimport oneTouchDragIcon from \"./gesture-one-finger-drag.svg\";\r\nimport oneTouchDoubleTapIcon from \"./gesture-one-finger-tap-double.svg\";\r\nimport oneTouchTapIcon from \"./gesture-one-finger-tap.svg\";\r\nimport twoTouchPinchIcon from \"./gesture-pinch.svg\";\r\nimport twoTouchDragIcon from \"./gesture-two-finger-drag.svg\";\r\nimport twoTouchTapIcon from \"./gesture-two-finger-tap.svg\";\r\nimport clickLeftDragIcon from \"./mouse-click-left-drag.svg\";\r\nimport clickLeftIcon from \"./mouse-click-left.svg\";\r\nimport clickRightDragIcon from \"./mouse-click-right-drag.svg\";\r\nimport clickRightIcon from \"./mouse-click-right.svg\";\r\nimport clickMouseWheelDragIcon from \"./mouse-click-wheel-drag.svg\";\r\nimport mouseWheelClickIcon from \"./mouse-click-wheel.svg\";\r\nimport touchCursorDragIcon from \"./touch-cursor-pan.svg\";\r\nimport touchCursorTapIcon from \"./touch-cursor-point.svg\";\r\n\r\n// cSpell:ignore cursorprompt\r\n\r\n/** Properties of [[ToolAssistanceField]] component.\r\n * @public\r\n */\r\nexport interface ToolAssistanceFieldProps extends StatusFieldProps {\r\n /** Indicates whether to include promptAtCursor Checkbox. Defaults to true. */\r\n includePromptAtCursor: boolean;\r\n /** Optional parameter for persistent UI settings. Defaults to UiStateStorageContext.\r\n */\r\n uiStateStorage?: UiStateStorage; // eslint-disable-line deprecation/deprecation\r\n /** Cursor Prompt Timeout period. Defaults to 5000. */\r\n cursorPromptTimeout: number;\r\n /** Fade Out the Cursor Prompt when closed. */\r\n fadeOutCursorPrompt: boolean;\r\n /** Indicates whether to show promptAtCursor by default. Defaults to false. */\r\n defaultPromptAtCursor: boolean;\r\n}\r\n\r\n/** Default properties of [[ToolAssistanceField]] component.\r\n * @internal\r\n */\r\nexport type ToolAssistanceFieldDefaultProps =\r\n Pick<ToolAssistanceFieldProps, \"includePromptAtCursor\" | \"uiStateStorage\" | \"cursorPromptTimeout\" | \"fadeOutCursorPrompt\" | \"defaultPromptAtCursor\">;\r\n\r\n/** @internal */\r\ninterface ToolAssistanceFieldState {\r\n instructions: ToolAssistanceInstructions | undefined;\r\n toolIconSpec: string;\r\n showPromptAtCursor: boolean;\r\n includeMouseInstructions: boolean;\r\n includeTouchInstructions: boolean;\r\n showMouseTouchTabs: boolean;\r\n showMouseInstructions: boolean;\r\n showTouchInstructions: boolean;\r\n mouseTouchTabIndex: number;\r\n isPinned: boolean;\r\n openWidget: string | null;\r\n}\r\n\r\n/** Tool Assistance Field React component.\r\n * @public\r\n */\r\nexport class ToolAssistanceField extends React.Component<ToolAssistanceFieldProps, ToolAssistanceFieldState> {\r\n /** @internal */\r\n public static override contextType = UiStateStorageContext;\r\n /** @internal */\r\n public declare context: React.ContextType<typeof UiStateStorageContext>;\r\n\r\n private static _toolAssistanceKey = \"ToolAssistance\";\r\n private static _showPromptAtCursorKey = \"showPromptAtCursor\";\r\n private static _mouseTouchTabIndexKey = \"mouseTouchTabIndex\";\r\n private _showPromptAtCursorSetting: UiStateEntry<boolean>;\r\n private _mouseTouchTabIndexSetting: UiStateEntry<number>;\r\n private _target: HTMLElement | null = null;\r\n private _className: string;\r\n private _indicator = React.createRef<HTMLDivElement>();\r\n private _cursorPrompt: CursorPrompt;\r\n private _isMounted = false;\r\n private _uiSettingsStorage: UiStateStorage; // eslint-disable-line deprecation/deprecation\r\n\r\n /** @internal */\r\n public static readonly defaultProps: ToolAssistanceFieldDefaultProps = {\r\n includePromptAtCursor: true,\r\n cursorPromptTimeout: 5000,\r\n fadeOutCursorPrompt: true,\r\n defaultPromptAtCursor: false,\r\n };\r\n\r\n /** @internal */\r\n constructor(p: ToolAssistanceFieldProps) {\r\n super(p);\r\n\r\n const instance = this.constructor;\r\n this._className = instance.name;\r\n\r\n const mobile = UiFramework.isMobile();\r\n\r\n this.state = {\r\n instructions: undefined,\r\n toolIconSpec: \"\",\r\n showPromptAtCursor: p.defaultPromptAtCursor,\r\n includeMouseInstructions: !mobile,\r\n includeTouchInstructions: true,\r\n showMouseTouchTabs: false,\r\n showMouseInstructions: false,\r\n showTouchInstructions: false,\r\n mouseTouchTabIndex: 0,\r\n isPinned: false,\r\n openWidget: null,\r\n };\r\n\r\n this._uiSettingsStorage = new LocalStateStorage();\r\n this._cursorPrompt = new CursorPrompt(this.props.cursorPromptTimeout, this.props.fadeOutCursorPrompt);\r\n this._showPromptAtCursorSetting = new UiStateEntry(ToolAssistanceField._toolAssistanceKey, ToolAssistanceField._showPromptAtCursorKey,\r\n () => this.state.showPromptAtCursor);\r\n this._mouseTouchTabIndexSetting = new UiStateEntry(ToolAssistanceField._toolAssistanceKey, ToolAssistanceField._mouseTouchTabIndexKey,\r\n () => this.state.mouseTouchTabIndex);\r\n }\r\n\r\n /** @internal */\r\n public override async componentDidMount() {\r\n this._isMounted = true;\r\n MessageManager.onToolAssistanceChangedEvent.addListener(this._handleToolAssistanceChangedEvent);\r\n FrontstageManager.onToolIconChangedEvent.addListener(this._handleToolIconChangedEvent);\r\n\r\n // istanbul ignore else\r\n if (this.props.uiStateStorage)\r\n this._uiSettingsStorage = this.props.uiStateStorage;\r\n else if (this.context)\r\n this._uiSettingsStorage = this.context;\r\n\r\n await this.restoreSettings();\r\n }\r\n\r\n /** @internal */\r\n public override componentWillUnmount() {\r\n this._isMounted = false;\r\n MessageManager.onToolAssistanceChangedEvent.removeListener(this._handleToolAssistanceChangedEvent);\r\n FrontstageManager.onToolIconChangedEvent.removeListener(this._handleToolIconChangedEvent);\r\n }\r\n\r\n private async restoreSettings() {\r\n let getShowPromptAtCursor: Promise<UiStateStorageResult> | undefined; // eslint-disable-line deprecation/deprecation\r\n // istanbul ignore else\r\n if (this.props.includePromptAtCursor) {\r\n getShowPromptAtCursor = this._showPromptAtCursorSetting.getSetting(this._uiSettingsStorage);\r\n }\r\n const getMouseTouchTabIndex = this._mouseTouchTabIndexSetting.getSetting(this._uiSettingsStorage);\r\n const [showPromptAtCursorResult, mouseTouchTabIndexResult] = await Promise.all([\r\n getShowPromptAtCursor,\r\n getMouseTouchTabIndex,\r\n ]);\r\n\r\n // istanbul ignore else\r\n if (showPromptAtCursorResult !== undefined && showPromptAtCursorResult.status === UiStateStorageStatus.Success) {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({ showPromptAtCursor: showPromptAtCursorResult.setting });\r\n }\r\n\r\n // istanbul ignore else\r\n if (mouseTouchTabIndexResult.status === UiStateStorageStatus.Success) {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({ mouseTouchTabIndex: mouseTouchTabIndexResult.setting });\r\n }\r\n }\r\n\r\n private _handleToolAssistanceChangedEvent = (args: ToolAssistanceChangedEventArgs): void => {\r\n let showMouseTouchTabs = false;\r\n let showMouseInstructions = false;\r\n let showTouchInstructions = false;\r\n\r\n if (args.instructions && args.instructions.sections) {\r\n const hasMouseInstructions = args.instructions.sections.some((section: ToolAssistanceSection) => {\r\n return section.instructions.some((instruction: ToolAssistanceInstruction) => this._isMouseInstruction(instruction));\r\n });\r\n const hasTouchInstructions = args.instructions.sections.some((section: ToolAssistanceSection) => {\r\n return section.instructions.some((instruction: ToolAssistanceInstruction) => this._isTouchInstruction(instruction));\r\n });\r\n\r\n if (this.state.includeMouseInstructions && this.state.includeTouchInstructions && hasMouseInstructions && hasTouchInstructions) {\r\n showMouseTouchTabs = true;\r\n showMouseInstructions = this.state.mouseTouchTabIndex === 0;\r\n showTouchInstructions = this.state.mouseTouchTabIndex === 1;\r\n } else {\r\n if (this.state.includeMouseInstructions && hasMouseInstructions)\r\n showMouseInstructions = true;\r\n else if (this.state.includeTouchInstructions && hasTouchInstructions)\r\n showTouchInstructions = true;\r\n }\r\n }\r\n\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState(\r\n {\r\n instructions: args.instructions,\r\n showMouseTouchTabs,\r\n showMouseInstructions,\r\n showTouchInstructions,\r\n },\r\n () => {\r\n this._showCursorPrompt();\r\n },\r\n );\r\n };\r\n\r\n private _isBothInstruction = (instruction: ToolAssistanceInstruction) => {\r\n return instruction.inputMethod === undefined || instruction.inputMethod === ToolAssistanceInputMethod.Both;\r\n };\r\n\r\n private _isMouseInstruction = (instruction: ToolAssistanceInstruction) => instruction.inputMethod === ToolAssistanceInputMethod.Mouse;\r\n\r\n private _isTouchInstruction = (instruction: ToolAssistanceInstruction) => instruction.inputMethod === ToolAssistanceInputMethod.Touch;\r\n\r\n private _handleToolIconChangedEvent = (args: ToolIconChangedEventArgs): void => {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState(\r\n { toolIconSpec: args.iconSpec },\r\n () => {\r\n this._showCursorPrompt();\r\n },\r\n );\r\n\r\n };\r\n\r\n private _showCursorPrompt() {\r\n if (this.state.showPromptAtCursor && this.state.instructions)\r\n this._cursorPrompt.display(this.state.toolIconSpec, this.state.instructions.mainInstruction);\r\n }\r\n\r\n private _sectionHasDisplayableInstructions(section: ToolAssistanceSection): boolean {\r\n const displayableInstructions = this._getDisplayableInstructions(section);\r\n return displayableInstructions.length > 0;\r\n }\r\n\r\n private _getDisplayableInstructions(section: ToolAssistanceSection): ToolAssistanceInstruction[] {\r\n const displayableInstructions = section.instructions.filter((instruction: ToolAssistanceInstruction) => {\r\n return (\r\n this._isBothInstruction(instruction)\r\n || (this.state.showMouseInstructions && this._isMouseInstruction(instruction))\r\n || (this.state.showTouchInstructions && this._isTouchInstruction(instruction))\r\n );\r\n });\r\n return displayableInstructions;\r\n }\r\n\r\n private _handleMouseTouchTab = async (index: number) => {\r\n const showMouseInstructions = index === 0;\r\n const showTouchInstructions = index === 1;\r\n\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({\r\n mouseTouchTabIndex: index,\r\n showMouseInstructions,\r\n showTouchInstructions,\r\n }, async () => {\r\n await this._mouseTouchTabIndexSetting.saveSetting(this._uiSettingsStorage);\r\n });\r\n };\r\n\r\n /** @internal */\r\n public override render(): React.ReactNode {\r\n const { instructions } = this.state;\r\n const dialogTitle = (IModelApp.toolAdmin.activeTool) ? /* istanbul ignore next */ IModelApp.toolAdmin.activeTool.flyover : UiFramework.translate(\"toolAssistance.title\");\r\n const mouseLabel = UiFramework.translate(\"toolAssistance.mouse\");\r\n const touchLabel = UiFramework.translate(\"toolAssistance.touch\");\r\n let prompt = \"\";\r\n let tooltip = \"\";\r\n let toolIcon: React.ReactNode;\r\n let dialogContent: React.ReactNode;\r\n\r\n if (instructions) {\r\n prompt = instructions.mainInstruction.text;\r\n toolIcon = <Icon iconSpec={this.state.toolIconSpec} />;\r\n\r\n let displayableSections: ToolAssistanceSection[] | undefined;\r\n if (instructions.sections) {\r\n displayableSections = instructions.sections.filter((section: ToolAssistanceSection) => this._sectionHasDisplayableInstructions(section));\r\n }\r\n\r\n dialogContent = (\r\n <div>\r\n {this.state.showMouseTouchTabs &&\r\n <HorizontalTabs\r\n tabsClassName=\"uifw-toolAssistance-tabs\"\r\n labels={[mouseLabel, touchLabel]}\r\n activeIndex={this.state.mouseTouchTabIndex}\r\n onTabSelected={this._handleMouseTouchTab} />\r\n }\r\n\r\n <div className=\"uifw-toolAssistance-content\">\r\n <NZ_ToolAssistanceInstruction\r\n key=\"main\"\r\n image={ToolAssistanceField.getInstructionImage(instructions.mainInstruction)}\r\n text={instructions.mainInstruction.text}\r\n isNew={instructions.mainInstruction.isNew} />\r\n\r\n {displayableSections && displayableSections.map((section: ToolAssistanceSection, index1: number) => {\r\n return (\r\n <React.Fragment key={index1.toString()}>\r\n <ToolAssistanceSeparator key={index1.toString()}>{section.label}</ToolAssistanceSeparator>\r\n {this._getDisplayableInstructions(section).map((instruction: ToolAssistanceInstruction, index2: number) => {\r\n return (\r\n <NZ_ToolAssistanceInstruction\r\n key={`${index1.toString()}-${index2.toString()}`}\r\n image={ToolAssistanceField.getInstructionImage(instruction)}\r\n text={instruction.text}\r\n isNew={instruction.isNew} />\r\n );\r\n })}\r\n </React.Fragment>\r\n );\r\n })}\r\n\r\n {this.props.includePromptAtCursor &&\r\n <>\r\n <ToolAssistanceSeparator key=\"prompt-sep\" />\r\n <ToolAssistanceItem key=\"prompt-item\">\r\n <ToggleSwitch\r\n label={UiFramework.translate(\"toolAssistance.promptAtCursor\")}\r\n labelPosition=\"right\"\r\n checked={this.state.showPromptAtCursor} onChange={this._onPromptAtCursorChange} />\r\n </ToolAssistanceItem>\r\n </>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (prompt)\r\n tooltip = prompt;\r\n\r\n // istanbul ignore next\r\n if (IModelApp.toolAdmin.activeTool)\r\n tooltip = `${IModelApp.toolAdmin.activeTool.flyover} > ${tooltip} `;\r\n\r\n if (tooltip) {\r\n const lineBreak = \"\\u000d\\u000a\";\r\n tooltip = tooltip + lineBreak;\r\n }\r\n\r\n tooltip += UiFramework.translate(\"toolAssistance.moreInfo\");\r\n\r\n return (\r\n <>\r\n <div style={{ height: \"100%\" }} ref={this._handleTargetRef}>\r\n <ToolAssistance // eslint-disable-line deprecation/deprecation\r\n icons={\r\n <>\r\n {toolIcon}\r\n </>\r\n }\r\n indicatorRef={this._indicator}\r\n className={classnames(\"uifw-statusFields-toolassistance\", this.props.className)}\r\n style={this.props.style}\r\n isInFooterMode={this.props.isInFooterMode ?? true}\r\n onClick={this._handleToolAssistanceIndicatorClick}\r\n title={tooltip}\r\n >\r\n {(this.props.isInFooterMode ?? true) ? prompt : undefined}\r\n </ToolAssistance>\r\n </div>\r\n <FooterPopup\r\n isOpen={(this.props.openWidget ?? this.state.openWidget) === this._className}\r\n onClose={this._handleClose}\r\n onOutsideClick={this._handleOutsideClick}\r\n target={this._target}\r\n isPinned={this.state.isPinned}\r\n >\r\n <ToolAssistanceDialog\r\n buttons={\r\n <>\r\n {!this.state.isPinned &&\r\n <TitleBarButton onClick={this._handlePinButtonClick} title={UiFramework.translate(\"toolAssistance.pin\")}>\r\n <i className={\"icon icon-pin\"} />\r\n </TitleBarButton>\r\n }\r\n {this.state.isPinned &&\r\n <TitleBarButton onClick={this._handleCloseButtonClick} title={UiCore.translate(\"dialog.close\")}>\r\n <i className={\"icon icon-close\"} />\r\n </TitleBarButton>\r\n }\r\n </>\r\n }\r\n title={dialogTitle}\r\n >\r\n {dialogContent}\r\n </ToolAssistanceDialog>\r\n </FooterPopup>\r\n </>\r\n );\r\n }\r\n\r\n private _handleTargetRef = (target: HTMLElement | null) => {\r\n this._target = target;\r\n };\r\n\r\n private _onPromptAtCursorChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({\r\n showPromptAtCursor: e.target.checked,\r\n }, async () => {\r\n await this._showPromptAtCursorSetting.saveSetting(this._uiSettingsStorage);\r\n });\r\n };\r\n\r\n private _handleClose = () => {\r\n this.setOpenWidget(null);\r\n };\r\n\r\n private _handleOutsideClick = (e: MouseEvent) => {\r\n if (this.state.isPinned)\r\n return;\r\n\r\n // istanbul ignore if\r\n if (!this._indicator.current ||\r\n !(e.target instanceof Node) ||\r\n this._indicator.current.contains(e.target))\r\n return;\r\n\r\n this._handleClose();\r\n };\r\n\r\n private _handleToolAssistanceIndicatorClick = () => {\r\n const isOpen = (this.props.openWidget ?? this.state.openWidget) === this._className;\r\n if (isOpen) {\r\n this.setOpenWidget(null);\r\n } else\r\n this.setOpenWidget(this._className);\r\n };\r\n\r\n private _handlePinButtonClick = () => {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({ isPinned: true });\r\n };\r\n\r\n private _handleCloseButtonClick = () => {\r\n this._handleClose();\r\n };\r\n\r\n private setOpenWidget(openWidget: StatusBarFieldId) {\r\n this.props.onOpenWidget?.(openWidget);\r\n let newState = {\r\n openWidget,\r\n };\r\n if (!openWidget && this.state.isPinned && this._isMounted) {\r\n newState = {...newState, ...{isPinned: false}};\r\n }\r\n this.setState(newState);\r\n }\r\n\r\n /** @internal */\r\n public static getInstructionImage(instruction: ToolAssistanceInstruction): React.ReactNode {\r\n let image: React.ReactNode;\r\n\r\n if ((typeof instruction.image === \"string\" || instruction.image !== ToolAssistanceImage.Keyboard) && instruction.keyboardInfo) {\r\n if (instruction.keyboardInfo.keys.length === 1 && !instruction.keyboardInfo.bottomKeys) {\r\n const key = instruction.keyboardInfo.keys[0];\r\n const rightImage = (typeof instruction.image === \"string\") ?\r\n <div className=\"uifw-toolassistance-icon-medium\"><Icon iconSpec={instruction.image} /></div> :\r\n this.getInstructionSvgImage(instruction, true);\r\n\r\n image = (\r\n <FillCentered>\r\n {ToolAssistanceField.getKeyNode(key, 0, \"uifw-toolassistance-key-modifier\")}\r\n {rightImage}\r\n </FillCentered>\r\n );\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `getInstructionImage: Invalid keyboardInfo provided with image`);\r\n }\r\n } else if (typeof instruction.image === \"string\") {\r\n if (instruction.image.length > 0) {\r\n const svgSource = IconSpecUtilities.getSvgSource(instruction.image);\r\n const className = (svgSource !== undefined) ? \"uifw-toolassistance-svg\" : \"uifw-toolassistance-icon-large\";\r\n image = <div className={className}><Icon iconSpec={instruction.image} /></div>;\r\n }\r\n } else if (instruction.image === ToolAssistanceImage.Keyboard) {\r\n if (instruction.keyboardInfo) {\r\n image = ToolAssistanceField.getInstructionKeyboardImage(instruction.keyboardInfo);\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `getInstructionImage: ToolAssistanceImage.Keyboard specified but no keyboardInfo provided`);\r\n }\r\n } else {\r\n image = this.getInstructionSvgImage(instruction, false);\r\n }\r\n\r\n return image;\r\n }\r\n\r\n private static getInstructionSvgImage(instruction: ToolAssistanceInstruction, mediumSize: boolean): React.ReactNode {\r\n let image: React.ReactNode;\r\n let className = mediumSize ? \"uifw-toolassistance-svg-medium\" : \"uifw-toolassistance-svg\";\r\n\r\n // istanbul ignore else\r\n if (typeof instruction.image !== \"string\" && instruction.image !== ToolAssistanceImage.Keyboard) {\r\n const toolAssistanceImage: ToolAssistanceImage = instruction.image;\r\n let svgImage = \"\";\r\n\r\n switch (toolAssistanceImage) {\r\n case ToolAssistanceImage.AcceptPoint:\r\n svgImage = acceptPointIcon;\r\n break;\r\n case ToolAssistanceImage.CursorClick:\r\n svgImage = cursorClickIcon;\r\n break;\r\n case ToolAssistanceImage.LeftClick:\r\n svgImage = clickLeftIcon;\r\n break;\r\n case ToolAssistanceImage.RightClick:\r\n svgImage = clickRightIcon;\r\n break;\r\n case ToolAssistanceImage.MouseWheel:\r\n svgImage = mouseWheelClickIcon;\r\n break;\r\n case ToolAssistanceImage.LeftClickDrag:\r\n svgImage = clickLeftDragIcon;\r\n className = mediumSize ? \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n case ToolAssistanceImage.RightClickDrag:\r\n svgImage = clickRightDragIcon;\r\n className = mediumSize ? \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n case ToolAssistanceImage.MouseWheelClickDrag:\r\n svgImage = clickMouseWheelDragIcon;\r\n className = mediumSize ? \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n case ToolAssistanceImage.OneTouchTap:\r\n svgImage = oneTouchTapIcon;\r\n break;\r\n case ToolAssistanceImage.OneTouchDoubleTap:\r\n svgImage = oneTouchDoubleTapIcon;\r\n break;\r\n case ToolAssistanceImage.OneTouchDrag:\r\n svgImage = oneTouchDragIcon;\r\n break;\r\n case ToolAssistanceImage.TwoTouchTap:\r\n svgImage = twoTouchTapIcon;\r\n break;\r\n case ToolAssistanceImage.TwoTouchDrag:\r\n svgImage = twoTouchDragIcon;\r\n break;\r\n case ToolAssistanceImage.TwoTouchPinch:\r\n svgImage = twoTouchPinchIcon;\r\n break;\r\n case ToolAssistanceImage.TouchCursorTap:\r\n svgImage = touchCursorTapIcon;\r\n break;\r\n case ToolAssistanceImage.TouchCursorDrag:\r\n svgImage = touchCursorDragIcon;\r\n className = mediumSize ? /* istanbul ignore next */ \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n }\r\n const iconSpec = IconSpecUtilities.createWebComponentIconSpec(svgImage);\r\n image = (\r\n <div className={className}>\r\n {svgImage &&\r\n // istanbul ignore next\r\n <Icon iconSpec={iconSpec} />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n return image;\r\n }\r\n\r\n private static getInstructionKeyboardImage(keyboardInfo: ToolAssistanceKeyboardInfo): React.ReactNode {\r\n let image: React.ReactNode;\r\n\r\n if (keyboardInfo.bottomKeys !== undefined) {\r\n image = (\r\n <div className=\"uifw-toolassistance-key-group\">\r\n <span className=\"row1\">\r\n {keyboardInfo.keys.map((key: string, index1: number) => {\r\n return ToolAssistanceField.getKeyNode(key, index1, \"uifw-toolassistance-key-small\");\r\n })}\r\n </span>\r\n <br />\r\n <span className=\"row2\">\r\n {keyboardInfo.bottomKeys.map((key: string, index2: number) => {\r\n return ToolAssistanceField.getKeyNode(key, index2, \"uifw-toolassistance-key-small\");\r\n })}\r\n </span>\r\n </div>\r\n );\r\n } else if (keyboardInfo.keys.length === 2) {\r\n image = (\r\n <FillCentered>\r\n {keyboardInfo.keys.map((key: string, index3: number) => {\r\n let className = \"uifw-toolassistance-key-medium\";\r\n if (key.length > 1)\r\n className = \"uifw-toolassistance-key-modifier\";\r\n return ToolAssistanceField.getKeyNode(key, index3, className);\r\n })}\r\n </FillCentered>\r\n );\r\n } else if (keyboardInfo.keys[0]) {\r\n if (keyboardInfo.keys[0].length > 1)\r\n image = ToolAssistanceField.getKeyNode(keyboardInfo.keys[0], 0, \"uifw-toolassistance-key-large\");\r\n else\r\n image = ToolAssistanceField.getKeyNode(keyboardInfo.keys[0], 0);\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `ToolAssistanceImage.Keyboard specified but ToolAssistanceKeyboardInfo not valid`);\r\n }\r\n\r\n return image;\r\n }\r\n\r\n private static getKeyNode(key: string, index: number, className?: string): React.ReactNode {\r\n return (\r\n <div key={index.toString()} className={classnames(\"uifw-toolassistance-key\", className)}>\r\n <FillCentered>{key}</FillCentered>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ToolAssistanceField.js","sourceRoot":"","sources":["../../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n/** @packageDocumentation\r\n * @module Notification\r\n */\r\n\r\nimport \"./ToolAssistanceField.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport {\r\n IModelApp, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceInstructions, ToolAssistanceKeyboardInfo,\r\n ToolAssistanceSection,\r\n} from \"@itwin/core-frontend\";\r\nimport { IconSpecUtilities } from \"@itwin/appui-abstract\";\r\nimport {\r\n FillCentered, Icon, LocalStateStorage, UiCore, UiStateEntry, UiStateStorage, UiStateStorageResult, UiStateStorageStatus,\r\n} from \"@itwin/core-react\";\r\nimport {\r\n FooterPopup, ToolAssistanceInstruction as NZ_ToolAssistanceInstruction, ToolAssistance, ToolAssistanceDialog,\r\n ToolAssistanceItem,\r\n ToolAssistanceSeparator,\r\n} from \"@itwin/appui-layout-react\";\r\nimport { HorizontalTabs, IconButton, ToggleSwitch } from \"@itwin/itwinui-react\";\r\nimport { CursorPrompt } from \"../../cursor/cursorprompt/CursorPrompt\";\r\nimport { FrontstageManager, ToolIconChangedEventArgs } from \"../../frontstage/FrontstageManager\";\r\nimport { MessageManager, ToolAssistanceChangedEventArgs } from \"../../messages/MessageManager\";\r\nimport { StatusBarFieldId } from \"../../statusbar/StatusBarWidgetControl\";\r\nimport { UiFramework } from \"../../UiFramework\";\r\nimport { StatusFieldProps } from \"../StatusFieldProps\";\r\nimport { UiStateStorageContext } from \"../../uistate/useUiStateStorage\";\r\n\r\nimport acceptPointIcon from \"./accept-point.svg\";\r\nimport cursorClickIcon from \"./cursor-click.svg\";\r\nimport oneTouchDragIcon from \"./gesture-one-finger-drag.svg\";\r\nimport oneTouchDoubleTapIcon from \"./gesture-one-finger-tap-double.svg\";\r\nimport oneTouchTapIcon from \"./gesture-one-finger-tap.svg\";\r\nimport twoTouchPinchIcon from \"./gesture-pinch.svg\";\r\nimport twoTouchDragIcon from \"./gesture-two-finger-drag.svg\";\r\nimport twoTouchTapIcon from \"./gesture-two-finger-tap.svg\";\r\nimport clickLeftDragIcon from \"./mouse-click-left-drag.svg\";\r\nimport clickLeftIcon from \"./mouse-click-left.svg\";\r\nimport clickRightDragIcon from \"./mouse-click-right-drag.svg\";\r\nimport clickRightIcon from \"./mouse-click-right.svg\";\r\nimport clickMouseWheelDragIcon from \"./mouse-click-wheel-drag.svg\";\r\nimport mouseWheelClickIcon from \"./mouse-click-wheel.svg\";\r\nimport touchCursorDragIcon from \"./touch-cursor-pan.svg\";\r\nimport touchCursorTapIcon from \"./touch-cursor-point.svg\";\r\nimport { SvgClose, SvgPinHollow } from \"@itwin/itwinui-icons-react\";\r\n\r\n// cSpell:ignore cursorprompt\r\n\r\n/** Properties of [[ToolAssistanceField]] component.\r\n * @public\r\n */\r\nexport interface ToolAssistanceFieldProps extends StatusFieldProps {\r\n /** Indicates whether to include promptAtCursor Checkbox. Defaults to true. */\r\n includePromptAtCursor: boolean;\r\n /** Optional parameter for persistent UI settings. Defaults to UiStateStorageContext.\r\n */\r\n uiStateStorage?: UiStateStorage; // eslint-disable-line deprecation/deprecation\r\n /** Cursor Prompt Timeout period. Defaults to 5000. */\r\n cursorPromptTimeout: number;\r\n /** Fade Out the Cursor Prompt when closed. */\r\n fadeOutCursorPrompt: boolean;\r\n /** Indicates whether to show promptAtCursor by default. Defaults to false. */\r\n defaultPromptAtCursor: boolean;\r\n}\r\n\r\n/** Default properties of [[ToolAssistanceField]] component.\r\n * @internal\r\n */\r\nexport type ToolAssistanceFieldDefaultProps =\r\n Pick<ToolAssistanceFieldProps, \"includePromptAtCursor\" | \"uiStateStorage\" | \"cursorPromptTimeout\" | \"fadeOutCursorPrompt\" | \"defaultPromptAtCursor\">;\r\n\r\n/** @internal */\r\ninterface ToolAssistanceFieldState {\r\n instructions: ToolAssistanceInstructions | undefined;\r\n toolIconSpec: string;\r\n showPromptAtCursor: boolean;\r\n includeMouseInstructions: boolean;\r\n includeTouchInstructions: boolean;\r\n showMouseTouchTabs: boolean;\r\n showMouseInstructions: boolean;\r\n showTouchInstructions: boolean;\r\n mouseTouchTabIndex: number;\r\n isPinned: boolean;\r\n openWidget: string | null;\r\n}\r\n\r\n/** Tool Assistance Field React component.\r\n * @public\r\n */\r\nexport class ToolAssistanceField extends React.Component<ToolAssistanceFieldProps, ToolAssistanceFieldState> {\r\n /** @internal */\r\n public static override contextType = UiStateStorageContext;\r\n /** @internal */\r\n public declare context: React.ContextType<typeof UiStateStorageContext>;\r\n\r\n private static _toolAssistanceKey = \"ToolAssistance\";\r\n private static _showPromptAtCursorKey = \"showPromptAtCursor\";\r\n private static _mouseTouchTabIndexKey = \"mouseTouchTabIndex\";\r\n private _showPromptAtCursorSetting: UiStateEntry<boolean>;\r\n private _mouseTouchTabIndexSetting: UiStateEntry<number>;\r\n private _target: HTMLElement | null = null;\r\n private _className: string;\r\n private _indicator = React.createRef<HTMLDivElement>();\r\n private _cursorPrompt: CursorPrompt;\r\n private _isMounted = false;\r\n private _uiSettingsStorage: UiStateStorage; // eslint-disable-line deprecation/deprecation\r\n\r\n /** @internal */\r\n public static readonly defaultProps: ToolAssistanceFieldDefaultProps = {\r\n includePromptAtCursor: true,\r\n cursorPromptTimeout: 5000,\r\n fadeOutCursorPrompt: true,\r\n defaultPromptAtCursor: false,\r\n };\r\n\r\n /** @internal */\r\n constructor(p: ToolAssistanceFieldProps) {\r\n super(p);\r\n\r\n const instance = this.constructor;\r\n this._className = instance.name;\r\n\r\n const mobile = UiFramework.isMobile();\r\n\r\n this.state = {\r\n instructions: undefined,\r\n toolIconSpec: \"\",\r\n showPromptAtCursor: p.defaultPromptAtCursor,\r\n includeMouseInstructions: !mobile,\r\n includeTouchInstructions: true,\r\n showMouseTouchTabs: false,\r\n showMouseInstructions: false,\r\n showTouchInstructions: false,\r\n mouseTouchTabIndex: 0,\r\n isPinned: false,\r\n openWidget: null,\r\n };\r\n\r\n this._uiSettingsStorage = new LocalStateStorage();\r\n this._cursorPrompt = new CursorPrompt(this.props.cursorPromptTimeout, this.props.fadeOutCursorPrompt);\r\n this._showPromptAtCursorSetting = new UiStateEntry(ToolAssistanceField._toolAssistanceKey, ToolAssistanceField._showPromptAtCursorKey,\r\n () => this.state.showPromptAtCursor);\r\n this._mouseTouchTabIndexSetting = new UiStateEntry(ToolAssistanceField._toolAssistanceKey, ToolAssistanceField._mouseTouchTabIndexKey,\r\n () => this.state.mouseTouchTabIndex);\r\n }\r\n\r\n /** @internal */\r\n public override async componentDidMount() {\r\n this._isMounted = true;\r\n MessageManager.onToolAssistanceChangedEvent.addListener(this._handleToolAssistanceChangedEvent);\r\n FrontstageManager.onToolIconChangedEvent.addListener(this._handleToolIconChangedEvent);\r\n\r\n // istanbul ignore else\r\n if (this.props.uiStateStorage)\r\n this._uiSettingsStorage = this.props.uiStateStorage;\r\n else if (this.context)\r\n this._uiSettingsStorage = this.context;\r\n\r\n await this.restoreSettings();\r\n }\r\n\r\n /** @internal */\r\n public override componentWillUnmount() {\r\n this._isMounted = false;\r\n MessageManager.onToolAssistanceChangedEvent.removeListener(this._handleToolAssistanceChangedEvent);\r\n FrontstageManager.onToolIconChangedEvent.removeListener(this._handleToolIconChangedEvent);\r\n }\r\n\r\n private async restoreSettings() {\r\n let getShowPromptAtCursor: Promise<UiStateStorageResult> | undefined; // eslint-disable-line deprecation/deprecation\r\n // istanbul ignore else\r\n if (this.props.includePromptAtCursor) {\r\n getShowPromptAtCursor = this._showPromptAtCursorSetting.getSetting(this._uiSettingsStorage);\r\n }\r\n const getMouseTouchTabIndex = this._mouseTouchTabIndexSetting.getSetting(this._uiSettingsStorage);\r\n const [showPromptAtCursorResult, mouseTouchTabIndexResult] = await Promise.all([\r\n getShowPromptAtCursor,\r\n getMouseTouchTabIndex,\r\n ]);\r\n\r\n // istanbul ignore else\r\n if (showPromptAtCursorResult !== undefined && showPromptAtCursorResult.status === UiStateStorageStatus.Success) {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({ showPromptAtCursor: showPromptAtCursorResult.setting });\r\n }\r\n\r\n // istanbul ignore else\r\n if (mouseTouchTabIndexResult.status === UiStateStorageStatus.Success) {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({ mouseTouchTabIndex: mouseTouchTabIndexResult.setting });\r\n }\r\n }\r\n\r\n private _handleToolAssistanceChangedEvent = (args: ToolAssistanceChangedEventArgs): void => {\r\n let showMouseTouchTabs = false;\r\n let showMouseInstructions = false;\r\n let showTouchInstructions = false;\r\n\r\n if (args.instructions && args.instructions.sections) {\r\n const hasMouseInstructions = args.instructions.sections.some((section: ToolAssistanceSection) => {\r\n return section.instructions.some((instruction: ToolAssistanceInstruction) => this._isMouseInstruction(instruction));\r\n });\r\n const hasTouchInstructions = args.instructions.sections.some((section: ToolAssistanceSection) => {\r\n return section.instructions.some((instruction: ToolAssistanceInstruction) => this._isTouchInstruction(instruction));\r\n });\r\n\r\n if (this.state.includeMouseInstructions && this.state.includeTouchInstructions && hasMouseInstructions && hasTouchInstructions) {\r\n showMouseTouchTabs = true;\r\n showMouseInstructions = this.state.mouseTouchTabIndex === 0;\r\n showTouchInstructions = this.state.mouseTouchTabIndex === 1;\r\n } else {\r\n if (this.state.includeMouseInstructions && hasMouseInstructions)\r\n showMouseInstructions = true;\r\n else if (this.state.includeTouchInstructions && hasTouchInstructions)\r\n showTouchInstructions = true;\r\n }\r\n }\r\n\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState(\r\n {\r\n instructions: args.instructions,\r\n showMouseTouchTabs,\r\n showMouseInstructions,\r\n showTouchInstructions,\r\n },\r\n () => {\r\n this._showCursorPrompt();\r\n },\r\n );\r\n };\r\n\r\n private _isBothInstruction = (instruction: ToolAssistanceInstruction) => {\r\n return instruction.inputMethod === undefined || instruction.inputMethod === ToolAssistanceInputMethod.Both;\r\n };\r\n\r\n private _isMouseInstruction = (instruction: ToolAssistanceInstruction) => instruction.inputMethod === ToolAssistanceInputMethod.Mouse;\r\n\r\n private _isTouchInstruction = (instruction: ToolAssistanceInstruction) => instruction.inputMethod === ToolAssistanceInputMethod.Touch;\r\n\r\n private _handleToolIconChangedEvent = (args: ToolIconChangedEventArgs): void => {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState(\r\n { toolIconSpec: args.iconSpec },\r\n () => {\r\n this._showCursorPrompt();\r\n },\r\n );\r\n\r\n };\r\n\r\n private _showCursorPrompt() {\r\n if (this.state.showPromptAtCursor && this.state.instructions)\r\n this._cursorPrompt.display(this.state.toolIconSpec, this.state.instructions.mainInstruction);\r\n }\r\n\r\n private _sectionHasDisplayableInstructions(section: ToolAssistanceSection): boolean {\r\n const displayableInstructions = this._getDisplayableInstructions(section);\r\n return displayableInstructions.length > 0;\r\n }\r\n\r\n private _getDisplayableInstructions(section: ToolAssistanceSection): ToolAssistanceInstruction[] {\r\n const displayableInstructions = section.instructions.filter((instruction: ToolAssistanceInstruction) => {\r\n return (\r\n this._isBothInstruction(instruction)\r\n || (this.state.showMouseInstructions && this._isMouseInstruction(instruction))\r\n || (this.state.showTouchInstructions && this._isTouchInstruction(instruction))\r\n );\r\n });\r\n return displayableInstructions;\r\n }\r\n\r\n private _handleMouseTouchTab = async (index: number) => {\r\n const showMouseInstructions = index === 0;\r\n const showTouchInstructions = index === 1;\r\n\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({\r\n mouseTouchTabIndex: index,\r\n showMouseInstructions,\r\n showTouchInstructions,\r\n }, async () => {\r\n await this._mouseTouchTabIndexSetting.saveSetting(this._uiSettingsStorage);\r\n });\r\n };\r\n\r\n /** @internal */\r\n public override render(): React.ReactNode {\r\n const { instructions } = this.state;\r\n const dialogTitle = (IModelApp.toolAdmin.activeTool) ? /* istanbul ignore next */ IModelApp.toolAdmin.activeTool.flyover : UiFramework.translate(\"toolAssistance.title\");\r\n const mouseLabel = UiFramework.translate(\"toolAssistance.mouse\");\r\n const touchLabel = UiFramework.translate(\"toolAssistance.touch\");\r\n let prompt = \"\";\r\n let tooltip = \"\";\r\n let toolIcon: React.ReactNode;\r\n let dialogContent: React.ReactNode;\r\n\r\n if (instructions) {\r\n prompt = instructions.mainInstruction.text;\r\n toolIcon = <Icon iconSpec={this.state.toolIconSpec} />;\r\n\r\n let displayableSections: ToolAssistanceSection[] | undefined;\r\n if (instructions.sections) {\r\n displayableSections = instructions.sections.filter((section: ToolAssistanceSection) => this._sectionHasDisplayableInstructions(section));\r\n }\r\n\r\n dialogContent = (\r\n <div>\r\n {this.state.showMouseTouchTabs &&\r\n <HorizontalTabs\r\n tabsClassName=\"uifw-toolAssistance-tabs\"\r\n labels={[mouseLabel, touchLabel]}\r\n activeIndex={this.state.mouseTouchTabIndex}\r\n onTabSelected={this._handleMouseTouchTab} />\r\n }\r\n\r\n <div className=\"uifw-toolAssistance-content\">\r\n <NZ_ToolAssistanceInstruction\r\n key=\"main\"\r\n image={ToolAssistanceField.getInstructionImage(instructions.mainInstruction)}\r\n text={instructions.mainInstruction.text}\r\n isNew={instructions.mainInstruction.isNew} />\r\n\r\n {displayableSections && displayableSections.map((section: ToolAssistanceSection, index1: number) => {\r\n return (\r\n <React.Fragment key={index1.toString()}>\r\n <ToolAssistanceSeparator key={index1.toString()}>{section.label}</ToolAssistanceSeparator>\r\n {this._getDisplayableInstructions(section).map((instruction: ToolAssistanceInstruction, index2: number) => {\r\n return (\r\n <NZ_ToolAssistanceInstruction\r\n key={`${index1.toString()}-${index2.toString()}`}\r\n image={ToolAssistanceField.getInstructionImage(instruction)}\r\n text={instruction.text}\r\n isNew={instruction.isNew} />\r\n );\r\n })}\r\n </React.Fragment>\r\n );\r\n })}\r\n\r\n {this.props.includePromptAtCursor &&\r\n <>\r\n <ToolAssistanceSeparator key=\"prompt-sep\" />\r\n <ToolAssistanceItem key=\"prompt-item\">\r\n <ToggleSwitch\r\n label={UiFramework.translate(\"toolAssistance.promptAtCursor\")}\r\n labelPosition=\"right\"\r\n checked={this.state.showPromptAtCursor} onChange={this._onPromptAtCursorChange} />\r\n </ToolAssistanceItem>\r\n </>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n if (prompt)\r\n tooltip = prompt;\r\n\r\n // istanbul ignore next\r\n if (IModelApp.toolAdmin.activeTool)\r\n tooltip = `${IModelApp.toolAdmin.activeTool.flyover} > ${tooltip} `;\r\n\r\n if (tooltip) {\r\n const lineBreak = \"\\u000d\\u000a\";\r\n tooltip = tooltip + lineBreak;\r\n }\r\n\r\n tooltip += UiFramework.translate(\"toolAssistance.moreInfo\");\r\n\r\n return (\r\n <>\r\n <div style={{ height: \"100%\" }} ref={this._handleTargetRef}>\r\n <ToolAssistance // eslint-disable-line deprecation/deprecation\r\n icons={\r\n <>\r\n {toolIcon}\r\n </>\r\n }\r\n indicatorRef={this._indicator}\r\n className={classnames(\"uifw-statusFields-toolassistance\", this.props.className)}\r\n style={this.props.style}\r\n isInFooterMode={this.props.isInFooterMode ?? true}\r\n onClick={this._handleToolAssistanceIndicatorClick}\r\n title={tooltip}\r\n >\r\n {(this.props.isInFooterMode ?? true) ? prompt : undefined}\r\n </ToolAssistance>\r\n </div>\r\n <FooterPopup\r\n isOpen={(this.props.openWidget ?? this.state.openWidget) === this._className}\r\n onClose={this._handleClose}\r\n onOutsideClick={this._handleOutsideClick}\r\n target={this._target}\r\n isPinned={this.state.isPinned}\r\n >\r\n <ToolAssistanceDialog\r\n buttons={\r\n <>\r\n <IconButton\r\n size=\"small\"\r\n styleType=\"borderless\"\r\n onClick={this._handlePinButtonClick}\r\n title={\r\n this.state.isPinned\r\n ? UiCore.translate(\"dialog.close\")\r\n : UiFramework.translate(\"toolAssistance.pin\")\r\n }\r\n >\r\n {this.state.isPinned ? <SvgClose /> : <SvgPinHollow />}\r\n </IconButton>\r\n </>\r\n }\r\n title={dialogTitle}\r\n >\r\n {dialogContent}\r\n </ToolAssistanceDialog>\r\n </FooterPopup>\r\n </>\r\n );\r\n }\r\n\r\n private _handleTargetRef = (target: HTMLElement | null) => {\r\n this._target = target;\r\n };\r\n\r\n private _onPromptAtCursorChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\r\n // istanbul ignore else\r\n if (this._isMounted)\r\n this.setState({\r\n showPromptAtCursor: e.target.checked,\r\n }, async () => {\r\n await this._showPromptAtCursorSetting.saveSetting(this._uiSettingsStorage);\r\n });\r\n };\r\n\r\n private _handleClose = () => {\r\n this.setOpenWidget(null);\r\n };\r\n\r\n private _handleOutsideClick = (e: MouseEvent) => {\r\n if (this.state.isPinned)\r\n return;\r\n\r\n // istanbul ignore if\r\n if (!this._indicator.current ||\r\n !(e.target instanceof Node) ||\r\n this._indicator.current.contains(e.target))\r\n return;\r\n\r\n this._handleClose();\r\n };\r\n\r\n private _handleToolAssistanceIndicatorClick = () => {\r\n const isOpen = (this.props.openWidget ?? this.state.openWidget) === this._className;\r\n if (isOpen) {\r\n this.setOpenWidget(null);\r\n } else\r\n this.setOpenWidget(this._className);\r\n };\r\n\r\n private _handlePinButtonClick = () => {\r\n // istanbul ignore else\r\n if (this._isMounted) {\r\n const isPinned = !this.state.isPinned;\r\n this.setState({\r\n isPinned,\r\n });\r\n if (!isPinned) {\r\n this._handleClose();\r\n }\r\n }\r\n };\r\n\r\n private setOpenWidget(openWidget: StatusBarFieldId) {\r\n this.props.onOpenWidget?.(openWidget);\r\n let newState = {\r\n openWidget,\r\n };\r\n if (!openWidget && this.state.isPinned && this._isMounted) {\r\n newState = { ...newState, ...{ isPinned: false } };\r\n }\r\n this.setState(newState);\r\n }\r\n\r\n /** @internal */\r\n public static getInstructionImage(instruction: ToolAssistanceInstruction): React.ReactNode {\r\n let image: React.ReactNode;\r\n\r\n if ((typeof instruction.image === \"string\" || instruction.image !== ToolAssistanceImage.Keyboard) && instruction.keyboardInfo) {\r\n if (instruction.keyboardInfo.keys.length === 1 && !instruction.keyboardInfo.bottomKeys) {\r\n const key = instruction.keyboardInfo.keys[0];\r\n const rightImage = (typeof instruction.image === \"string\") ?\r\n <div className=\"uifw-toolassistance-icon-medium\"><Icon iconSpec={instruction.image} /></div> :\r\n this.getInstructionSvgImage(instruction, true);\r\n\r\n image = (\r\n <FillCentered>\r\n {ToolAssistanceField.getKeyNode(key, 0, \"uifw-toolassistance-key-modifier\")}\r\n {rightImage}\r\n </FillCentered>\r\n );\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `getInstructionImage: Invalid keyboardInfo provided with image`);\r\n }\r\n } else if (typeof instruction.image === \"string\") {\r\n if (instruction.image.length > 0) {\r\n const svgSource = IconSpecUtilities.getSvgSource(instruction.image);\r\n const className = (svgSource !== undefined) ? \"uifw-toolassistance-svg\" : \"uifw-toolassistance-icon-large\";\r\n image = <div className={className}><Icon iconSpec={instruction.image} /></div>;\r\n }\r\n } else if (instruction.image === ToolAssistanceImage.Keyboard) {\r\n if (instruction.keyboardInfo) {\r\n image = ToolAssistanceField.getInstructionKeyboardImage(instruction.keyboardInfo);\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `getInstructionImage: ToolAssistanceImage.Keyboard specified but no keyboardInfo provided`);\r\n }\r\n } else {\r\n image = this.getInstructionSvgImage(instruction, false);\r\n }\r\n\r\n return image;\r\n }\r\n\r\n private static getInstructionSvgImage(instruction: ToolAssistanceInstruction, mediumSize: boolean): React.ReactNode {\r\n let image: React.ReactNode;\r\n let className = mediumSize ? \"uifw-toolassistance-svg-medium\" : \"uifw-toolassistance-svg\";\r\n\r\n // istanbul ignore else\r\n if (typeof instruction.image !== \"string\" && instruction.image !== ToolAssistanceImage.Keyboard) {\r\n const toolAssistanceImage: ToolAssistanceImage = instruction.image;\r\n let svgImage = \"\";\r\n\r\n switch (toolAssistanceImage) {\r\n case ToolAssistanceImage.AcceptPoint:\r\n svgImage = acceptPointIcon;\r\n break;\r\n case ToolAssistanceImage.CursorClick:\r\n svgImage = cursorClickIcon;\r\n break;\r\n case ToolAssistanceImage.LeftClick:\r\n svgImage = clickLeftIcon;\r\n break;\r\n case ToolAssistanceImage.RightClick:\r\n svgImage = clickRightIcon;\r\n break;\r\n case ToolAssistanceImage.MouseWheel:\r\n svgImage = mouseWheelClickIcon;\r\n break;\r\n case ToolAssistanceImage.LeftClickDrag:\r\n svgImage = clickLeftDragIcon;\r\n className = mediumSize ? \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n case ToolAssistanceImage.RightClickDrag:\r\n svgImage = clickRightDragIcon;\r\n className = mediumSize ? \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n case ToolAssistanceImage.MouseWheelClickDrag:\r\n svgImage = clickMouseWheelDragIcon;\r\n className = mediumSize ? \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n case ToolAssistanceImage.OneTouchTap:\r\n svgImage = oneTouchTapIcon;\r\n break;\r\n case ToolAssistanceImage.OneTouchDoubleTap:\r\n svgImage = oneTouchDoubleTapIcon;\r\n break;\r\n case ToolAssistanceImage.OneTouchDrag:\r\n svgImage = oneTouchDragIcon;\r\n break;\r\n case ToolAssistanceImage.TwoTouchTap:\r\n svgImage = twoTouchTapIcon;\r\n break;\r\n case ToolAssistanceImage.TwoTouchDrag:\r\n svgImage = twoTouchDragIcon;\r\n break;\r\n case ToolAssistanceImage.TwoTouchPinch:\r\n svgImage = twoTouchPinchIcon;\r\n break;\r\n case ToolAssistanceImage.TouchCursorTap:\r\n svgImage = touchCursorTapIcon;\r\n break;\r\n case ToolAssistanceImage.TouchCursorDrag:\r\n svgImage = touchCursorDragIcon;\r\n className = mediumSize ? /* istanbul ignore next */ \"uifw-toolassistance-svg-medium-wide\" : \"uifw-toolassistance-svg-wide\";\r\n break;\r\n }\r\n const iconSpec = IconSpecUtilities.createWebComponentIconSpec(svgImage);\r\n image = (\r\n <div className={className}>\r\n {svgImage &&\r\n // istanbul ignore next\r\n <Icon iconSpec={iconSpec} />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n return image;\r\n }\r\n\r\n private static getInstructionKeyboardImage(keyboardInfo: ToolAssistanceKeyboardInfo): React.ReactNode {\r\n let image: React.ReactNode;\r\n\r\n if (keyboardInfo.bottomKeys !== undefined) {\r\n image = (\r\n <div className=\"uifw-toolassistance-key-group\">\r\n <span className=\"row1\">\r\n {keyboardInfo.keys.map((key: string, index1: number) => {\r\n return ToolAssistanceField.getKeyNode(key, index1, \"uifw-toolassistance-key-small\");\r\n })}\r\n </span>\r\n <br />\r\n <span className=\"row2\">\r\n {keyboardInfo.bottomKeys.map((key: string, index2: number) => {\r\n return ToolAssistanceField.getKeyNode(key, index2, \"uifw-toolassistance-key-small\");\r\n })}\r\n </span>\r\n </div>\r\n );\r\n } else if (keyboardInfo.keys.length === 2) {\r\n image = (\r\n <FillCentered>\r\n {keyboardInfo.keys.map((key: string, index3: number) => {\r\n let className = \"uifw-toolassistance-key-medium\";\r\n if (key.length > 1)\r\n className = \"uifw-toolassistance-key-modifier\";\r\n return ToolAssistanceField.getKeyNode(key, index3, className);\r\n })}\r\n </FillCentered>\r\n );\r\n } else if (keyboardInfo.keys[0]) {\r\n if (keyboardInfo.keys[0].length > 1)\r\n image = ToolAssistanceField.getKeyNode(keyboardInfo.keys[0], 0, \"uifw-toolassistance-key-large\");\r\n else\r\n image = ToolAssistanceField.getKeyNode(keyboardInfo.keys[0], 0);\r\n } else {\r\n Logger.logError(UiFramework.loggerCategory(this), `ToolAssistanceImage.Keyboard specified but ToolAssistanceKeyboardInfo not valid`);\r\n }\r\n\r\n return image;\r\n }\r\n\r\n private static getKeyNode(key: string, index: number, className?: string): React.ReactNode {\r\n return (\r\n <div key={index.toString()} className={classnames(\"uifw-toolassistance-key\", className)}>\r\n <FillCentered>{key}</FillCentered>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
@@ -53,7 +53,11 @@ export declare enum SyncUiEventId {
53
53
  ViewStateChanged = "viewstatechanged",
54
54
  /** The current object the reads and write UI State has changed. */
55
55
  UiStateStorageChanged = "uistatestoragechanged",
56
- ShowHideManagerSettingChange = "show-hide-setting-change"
56
+ ShowHideManagerSettingChange = "show-hide-setting-change",
57
+ /** The list of feature overrides applied has been changed
58
+ * @alpha
59
+ */
60
+ FeatureOverridesChanged = "featureoverrideschanged"
57
61
  }
58
62
  /** SyncUi Event arguments. Contains a set of lower case event Ids.
59
63
  * @public @deprecated use UiSyncEventArgs in appui-abstract instead
@@ -87,6 +91,7 @@ export declare class SyncUiEventDispatcher {
87
91
  /** Checks to see if an eventId of interest is contained in the set of eventIds */
88
92
  static hasEventOfInterest(eventIds: Set<string>, idsOfInterest: string[]): boolean;
89
93
  private static _dispatchViewChange;
94
+ private static _dispatchFeatureOverridesChange;
90
95
  /** Initializes the Monitoring of Events that trigger dispatching sync events */
91
96
  static initialize(): void;
92
97
  private static selectionChangedHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"SyncUiEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAqB,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAa,gBAAgB,EAAkD,MAAM,sBAAsB,CAAC;AAiBnH;;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;;OAEG;IACH,mBAAmB,wBAAwB;IAC3C,iCAAiC;IACjC,cAAc,mBAAmB;IACjC,4CAA4C;IAC5C,sBAAsB,2BAA2B;IACjD,4EAA4E;IAC5E,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;qBACiB;IACjB,aAAa,kBAAkB;IAC/B,yCAAyC;IACzC,kBAAkB,uBAAuB;IACzC;qBACiB;IACjB,iBAAiB,sBAAsB;IACvC,oEAAoE;IACpE,mBAAmB,wBAAwB;IAC3C,kFAAkF;IAClF,wBAAwB,6BAA6B;IACrD,mFAAmF;IACnF,gBAAgB,qBAAqB;IACrC,mEAAmE;IACnE,qBAAqB,0BAA0B;IAC/C,4BAA4B,6BAA6B;CAC1D;AAED;;GAEG;AACH,oBAAY,eAAe,GAAG,eAAe,CAAC;AAE9C;;GAEG;AACH,oBAAY,WAAW,GAAG,WAAW,CAAC;AAEtC;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA2B;IAC5D,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAa;IACpD,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAyB;IAChE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS;IAEnC,wCAAwC;WAE1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,+DAA+D;IAC/D,WAAkB,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAE5C;IAED,oEAAoE;IAEpE,WAAkB,aAAa,IAAI,WAAW,CAE7C;IAED,iDAAiD;WACnC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjE,0CAA0C;WAC5B,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxD,oDAAoD;WACtC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ5D,kFAAkF;WACpE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE;IAK/E,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAIlC,gFAAgF;WAClE,UAAU;IA0ExB,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAItC,qFAAqF;WACvE,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB;IAKtE,0FAA0F;WAC5E,0BAA0B,CAAC,gBAAgB,EAAE,gBAAgB;CA+C5E"}
1
+ {"version":3,"file":"SyncUiEventDispatcher.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAqB,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAa,gBAAgB,EAAkD,MAAM,sBAAsB,CAAC;AAiBnH;;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;;OAEG;IACH,mBAAmB,wBAAwB;IAC3C,iCAAiC;IACjC,cAAc,mBAAmB;IACjC,4CAA4C;IAC5C,sBAAsB,2BAA2B;IACjD,4EAA4E;IAC5E,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;qBACiB;IACjB,aAAa,kBAAkB;IAC/B,yCAAyC;IACzC,kBAAkB,uBAAuB;IACzC;qBACiB;IACjB,iBAAiB,sBAAsB;IACvC,oEAAoE;IACpE,mBAAmB,wBAAwB;IAC3C,kFAAkF;IAClF,wBAAwB,6BAA6B;IACrD,mFAAmF;IACnF,gBAAgB,qBAAqB;IACrC,mEAAmE;IACnE,qBAAqB,0BAA0B;IAC/C,4BAA4B,6BAA6B;IACzD;;MAEE;IACF,uBAAuB,4BAA4B;CACpD;AAED;;GAEG;AACH,oBAAY,eAAe,GAAG,eAAe,CAAC;AAE9C;;GAEG;AACH,oBAAY,WAAW,GAAG,WAAW,CAAC;AAEtC;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA2B;IAC5D,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAa;IACpD,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAyB;IAChE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS;IAEnC,wCAAwC;WAE1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,+DAA+D;IAC/D,WAAkB,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,CAE5C;IAED,oEAAoE;IAEpE,WAAkB,aAAa,IAAI,WAAW,CAE7C;IAED,iDAAiD;WACnC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjE,0CAA0C;WAC5B,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxD,oDAAoD;WACtC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ5D,kFAAkF;WACpE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE;IAK/E,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAKlC,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAI9C,gFAAgF;WAClE,UAAU;IAgFxB,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAItC,qFAAqF;WACvE,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB;IAKtE,0FAA0F;WAC5E,0BAA0B,CAAC,gBAAgB,EAAE,gBAAgB;CA+C5E"}
@@ -74,6 +74,10 @@ export var SyncUiEventId;
74
74
  /** The current object the reads and write UI State has changed. */
75
75
  SyncUiEventId["UiStateStorageChanged"] = "uistatestoragechanged";
76
76
  SyncUiEventId["ShowHideManagerSettingChange"] = "show-hide-setting-change";
77
+ /** The list of feature overrides applied has been changed
78
+ * @alpha
79
+ */
80
+ SyncUiEventId["FeatureOverridesChanged"] = "featureoverrideschanged";
77
81
  })(SyncUiEventId || (SyncUiEventId = {}));
78
82
  /** This class is used to send eventIds to interested UI components so the component can determine if it needs
79
83
  * to refresh its display by calling setState on itself.
@@ -122,6 +126,10 @@ export class SyncUiEventDispatcher {
122
126
  static _dispatchViewChange() {
123
127
  SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ViewStateChanged);
124
128
  }
129
+ // istanbul ignore next
130
+ static _dispatchFeatureOverridesChange() {
131
+ SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FeatureOverridesChanged);
132
+ }
125
133
  /** Initializes the Monitoring of Events that trigger dispatching sync events */
126
134
  static initialize() {
127
135
  // clear any registered listeners - this should only be encountered in unit test scenarios
@@ -174,11 +182,17 @@ export class SyncUiEventDispatcher {
174
182
  // istanbul ignore next
175
183
  if (args.previous.onViewChanged && typeof args.previous.onViewChanged.removeListener === "function") // not set during unit test
176
184
  args.previous.onViewChanged.removeListener(SyncUiEventDispatcher._dispatchViewChange);
185
+ // istanbul ignore next
186
+ if (args.previous.onFeatureOverridesChanged && typeof args.previous.onFeatureOverridesChanged.removeListener === "function") // not set during unit test
187
+ args.previous.onFeatureOverridesChanged.removeListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);
177
188
  }
178
189
  // istanbul ignore next
179
190
  if (args.current) {
180
191
  if (args.current.onViewChanged && typeof args.current.onViewChanged.addListener === "function") // not set during unit test
181
192
  args.current.onViewChanged.addListener(SyncUiEventDispatcher._dispatchViewChange);
193
+ // istanbul ignore next
194
+ if (args.current.onFeatureOverridesChanged && typeof args.current.onFeatureOverridesChanged.addListener === "function") // not set during unit test
195
+ args.current.onFeatureOverridesChanged.addListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);
182
196
  }
183
197
  }));
184
198
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SyncUiEventDispatcher.js","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module SyncUi\r\n */\r\n\r\nimport { UiEventDispatcher, UiSyncEvent, UiSyncEventArgs } from \"@itwin/appui-abstract\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { IModelApp, IModelConnection, SelectedViewportChangedArgs, SelectionSetEvent } from \"@itwin/core-frontend\";\r\nimport { getInstancesCount, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider, Presentation, SelectionChangeEventArgs } from \"@itwin/presentation-frontend\";\r\n// cSpell:ignore configurableui\r\nimport { Backstage } from \"../backstage/Backstage\";\r\nimport { ContentViewManager } from \"../content/ContentViewManager\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { PresentationSelectionScope, SessionStateActionId } from \"../redux/SessionState\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { WorkflowManager } from \"../workflow/Workflow\";\r\n\r\n// cSpell:ignore activecontentchanged, activitymessageupdated, activitymessagecancelled, backstagecloseevent, backstageevent, contentlayoutactivated, contentcontrolactivated,\r\n// cSpell:ignore elementtooltipchanged, frontstageactivated, inputfieldmessageadded, inputfieldmessageremoved, modalfrontstagechanged, modaldialogchanged\r\n// cSpell:ignore navigationaidactivated, notificationmessageadded, toolactivated, taskactivated, widgetstatechanged, workflowactivated frontstageactivating\r\n// cSpell:ignore frontstageready activeviewportchanged selectionsetchanged presentationselectionchanged viewstatechanged\r\n// cSpell:ignore accudrawcompassmodechanged accudrawfieldlockchanged accudrawrotationchanged uisettingschanged\r\n\r\n/** Event Id used to sync UI components. Used to refresh visibility or enable state of control.\r\n * @public\r\n */\r\nexport enum SyncUiEventId {\r\n /** AccuDraw compass mode has changed. */\r\n AccuDrawCompassModeChanged = \"accudrawcompassmodechanged\",\r\n /** AccuDraw rotation has changed. */\r\n AccuDrawRotationChanged = \"accudrawrotationchanged\",\r\n /** The active content as maintained by the ContentViewManager has changed. */\r\n ActiveContentChanged = \"activecontentchanged\",\r\n /** The active view maintained by the ViewManager has changed. */\r\n ActiveViewportChanged = \"activeviewportchanged\",\r\n /** Backstage has been closed.\r\n * @deprecated Use BackstageEvent instead\r\n */\r\n BackstageCloseEvent = \"backstagecloseevent\",\r\n /** Backstage has been closed. */\r\n BackstageEvent = \"backstageevent\",\r\n /** A Content Layout has been activated. */\r\n ContentLayoutActivated = \"contentlayoutactivated\",\r\n /** A Content Control maintained by FrontstageManager has been activated. */\r\n ContentControlActivated = \"contentcontrolactivated\",\r\n /** A Frontstage is activating. */\r\n FrontstageActivating = \"frontstageactivating\",\r\n /** A Frontstage has been activated and the content has been assigned. */\r\n FrontstageReady = \"frontstageready\",\r\n /** A Modal Frontstage has been opened or closed. */\r\n ModalFrontstageChanged = \"modalfrontstagechanged\",\r\n /** A Modal Dialog has been opened or closed. */\r\n ModalDialogChanged = \"modaldialogchanged\",\r\n /** A NavigationAid has been activated. */\r\n NavigationAidActivated = \"navigationaidactivated\",\r\n /** An InteractiveTool has been activated via the ToolAdmin. */\r\n ToolActivated = \"toolactivated\",\r\n /** A Task has been activated.\r\n * @deprecated */\r\n TaskActivated = \"taskactivated\",\r\n /** The state of a Widget has changed. */\r\n WidgetStateChanged = \"widgetstatechanged\",\r\n /** A Workflow has been activated.\r\n * @deprecated */\r\n WorkflowActivated = \"workflowactivated\",\r\n /** The SelectionSet for the active IModelConnection has changed. */\r\n SelectionSetChanged = \"selectionsetchanged\",\r\n /** The list of settings providers registered with SettingsManager has changed. */\r\n SettingsProvidersChanged = \"settingsproviderschanged\",\r\n /** The current view state has changed (used by view undo/redo toolbar buttons). */\r\n ViewStateChanged = \"viewstatechanged\",\r\n /** The current object the reads and write UI State has changed. */\r\n UiStateStorageChanged = \"uistatestoragechanged\",\r\n ShowHideManagerSettingChange = \"show-hide-setting-change\",\r\n}\r\n\r\n/** SyncUi Event arguments. Contains a set of lower case event Ids.\r\n * @public @deprecated use UiSyncEventArgs in appui-abstract instead\r\n */\r\nexport type SyncUiEventArgs = UiSyncEventArgs;\r\n\r\n/** SyncUi Event class.\r\n * @public @deprecated use UiSyncEvent in appui-abstract instead\r\n */\r\nexport type SyncUiEvent = UiSyncEvent;\r\n\r\n/** This class is used to send eventIds to interested UI components so the component can determine if it needs\r\n * to refresh its display by calling setState on itself.\r\n * @public\r\n */\r\nexport class SyncUiEventDispatcher {\r\n private static _uiEventDispatcher = new UiEventDispatcher();\r\n private static _unregisterListenerFunc?: () => void;\r\n private static _unregisterListenerFuncs: Array<() => void> = [];\r\n private static initialized = false;\r\n\r\n /** @internal - used for testing only */\r\n /* istanbul ignore next */\r\n public static setTimeoutPeriod(period: number): void {\r\n SyncUiEventDispatcher._uiEventDispatcher.setTimeoutPeriod(period);\r\n }\r\n\r\n /** Return set of event ids that will be sent to listeners/. */\r\n public static get syncEventIds(): Set<string> {\r\n return SyncUiEventDispatcher._uiEventDispatcher.syncEventIds;\r\n }\r\n\r\n /** Return SyncUiEvent so callers can register an event callback. */\r\n // eslint-disable-next-line deprecation/deprecation\r\n public static get onSyncUiEvent(): SyncUiEvent {\r\n return SyncUiEventDispatcher._uiEventDispatcher.onSyncUiEvent;\r\n }\r\n\r\n /** Immediately trigger sync event processing. */\r\n public static dispatchImmediateSyncUiEvent(eventId: string): void {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchImmediateSyncUiEvent(eventId);\r\n }\r\n\r\n /** Save eventId in Set for processing. */\r\n public static dispatchSyncUiEvent(eventId: string): void {\r\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\r\n Logger.logInfo(UiFramework.loggerCategory(this), `[dispatchSyncUiEvent] not processed because timeoutPeriod=0`);\r\n return;\r\n }\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(eventId);\r\n }\r\n\r\n /** Save multiple eventIds in Set for processing. */\r\n public static dispatchSyncUiEvents(eventIds: string[]): void {\r\n // istanbul ignore if\r\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\r\n Logger.logInfo(UiFramework.loggerCategory(this), `[dispatchSyncUiEvents] not processed because _timeoutPeriod=0`);\r\n }\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvents(eventIds);\r\n }\r\n\r\n /** Checks to see if an eventId of interest is contained in the set of eventIds */\r\n public static hasEventOfInterest(eventIds: Set<string>, idsOfInterest: string[]) {\r\n return SyncUiEventDispatcher._uiEventDispatcher.hasEventOfInterest(eventIds, idsOfInterest);\r\n }\r\n\r\n // istanbul ignore next\r\n private static _dispatchViewChange() {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ViewStateChanged);\r\n }\r\n\r\n /** Initializes the Monitoring of Events that trigger dispatching sync events */\r\n public static initialize() {\r\n // clear any registered listeners - this should only be encountered in unit test scenarios\r\n this._unregisterListenerFuncs.forEach((unregisterListenerFunc) => unregisterListenerFunc());\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onContentControlActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ContentControlActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onContentLayoutActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ContentLayoutActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onFrontstageActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FrontstageActivating);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onFrontstageReadyEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FrontstageReady);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onModalFrontstageChangedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ModalFrontstageChanged);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onNavigationAidActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.NavigationAidActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onToolActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ToolActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onWidgetStateChangedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.WidgetStateChanged);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(Backstage.onBackstageEvent.addListener(() => { // eslint-disable-line deprecation/deprecation\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.BackstageEvent);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(WorkflowManager.onTaskActivatedEvent.addListener(() => { // eslint-disable-line deprecation/deprecation\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.TaskActivated); // eslint-disable-line deprecation/deprecation\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(WorkflowManager.onWorkflowActivatedEvent.addListener(() => { // eslint-disable-line deprecation/deprecation\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.WorkflowActivated); // eslint-disable-line deprecation/deprecation\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(ContentViewManager.onActiveContentChangedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveContentChanged);\r\n }));\r\n\r\n // istanbul ignore else\r\n if (IModelApp && IModelApp.viewManager) {\r\n this._unregisterListenerFuncs.push(IModelApp.viewManager.onSelectedViewportChanged.addListener((args: SelectedViewportChangedArgs) => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveViewportChanged);\r\n\r\n // if this is the first view being opened up start the default tool so tool admin is happy.\r\n if (undefined === args.previous) {\r\n IModelApp.toolAdmin.startDefaultTool();// eslint-disable-line @typescript-eslint/no-floating-promises\r\n } else {\r\n // istanbul ignore next\r\n if (args.previous.onViewChanged && typeof args.previous.onViewChanged.removeListener === \"function\") // not set during unit test\r\n args.previous.onViewChanged.removeListener(SyncUiEventDispatcher._dispatchViewChange);\r\n }\r\n // istanbul ignore next\r\n if (args.current) {\r\n if (args.current.onViewChanged && typeof args.current.onViewChanged.addListener === \"function\") // not set during unit test\r\n args.current.onViewChanged.addListener(SyncUiEventDispatcher._dispatchViewChange);\r\n }\r\n }));\r\n }\r\n }\r\n\r\n private static selectionChangedHandler(_ev: SelectionSetEvent) {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.SelectionSetChanged);\r\n }\r\n\r\n /** This should be called by IModelApp when the active IModelConnection is closed. */\r\n public static clearConnectionEvents(iModelConnection: IModelConnection) {\r\n iModelConnection.selectionSet.onChanged.removeListener(SyncUiEventDispatcher.selectionChangedHandler);\r\n SyncUiEventDispatcher._unregisterListenerFunc && SyncUiEventDispatcher._unregisterListenerFunc();\r\n }\r\n\r\n /** This should be called by IModelApp when the active IModelConnection is established. */\r\n public static initializeConnectionEvents(iModelConnection: IModelConnection) {\r\n if (SyncUiEventDispatcher._unregisterListenerFunc)\r\n SyncUiEventDispatcher._unregisterListenerFunc();\r\n\r\n if (iModelConnection.isBlankConnection() || !iModelConnection.isOpen) {\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, 0);\r\n return;\r\n }\r\n\r\n iModelConnection.selectionSet.onChanged.removeListener(SyncUiEventDispatcher.selectionChangedHandler);\r\n iModelConnection.selectionSet.onChanged.addListener(SyncUiEventDispatcher.selectionChangedHandler);\r\n (iModelConnection.iModelId) ? UiFramework.setActiveIModelId(iModelConnection.iModelId) : /* istanbul ignore next */ \"\";\r\n\r\n // listen for changes from presentation rules selection manager (this is done once an iModelConnection is available to ensure Presentation.selection is valid)\r\n SyncUiEventDispatcher._unregisterListenerFunc = Presentation.selection.selectionChange.addListener((args: SelectionChangeEventArgs, provider: ISelectionProvider) => {\r\n // istanbul ignore if\r\n if (args.level !== 0) {\r\n // don't need to handle sub-selections\r\n return;\r\n }\r\n const selection = provider.getSelection(args.imodel, args.level);\r\n const numSelected = getInstancesCount(selection);\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, numSelected);\r\n });\r\n\r\n try {\r\n Presentation.selection.scopes.getSelectionScopes(iModelConnection).then((availableScopes: SelectionScope[]) => { // eslint-disable-line @typescript-eslint/no-floating-promises\r\n // istanbul ignore else\r\n if (availableScopes) {\r\n const presentationScopes: PresentationSelectionScope[] = [];\r\n availableScopes.map((scope) => presentationScopes.push(scope));\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetAvailableSelectionScopes, presentationScopes);\r\n }\r\n });\r\n\r\n const activeSelectionScope = Presentation.selection.scopes.activeScope;\r\n if (activeSelectionScope) {\r\n if (typeof (activeSelectionScope) === \"object\") {\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetSelectionScope, activeSelectionScope.id);\r\n } else {\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetSelectionScope, activeSelectionScope);\r\n }\r\n }\r\n } catch {}\r\n\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"SyncUiEventDispatcher.js","sourceRoot":"","sources":["../../../../src/appui-react/syncui/SyncUiEventDispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module SyncUi\r\n */\r\n\r\nimport { UiEventDispatcher, UiSyncEvent, UiSyncEventArgs } from \"@itwin/appui-abstract\";\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { IModelApp, IModelConnection, SelectedViewportChangedArgs, SelectionSetEvent } from \"@itwin/core-frontend\";\r\nimport { getInstancesCount, SelectionScope } from \"@itwin/presentation-common\";\r\nimport { ISelectionProvider, Presentation, SelectionChangeEventArgs } from \"@itwin/presentation-frontend\";\r\n// cSpell:ignore configurableui\r\nimport { Backstage } from \"../backstage/Backstage\";\r\nimport { ContentViewManager } from \"../content/ContentViewManager\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { PresentationSelectionScope, SessionStateActionId } from \"../redux/SessionState\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { WorkflowManager } from \"../workflow/Workflow\";\r\n\r\n// cSpell:ignore activecontentchanged, activitymessageupdated, activitymessagecancelled, backstagecloseevent, backstageevent, contentlayoutactivated, contentcontrolactivated,\r\n// cSpell:ignore elementtooltipchanged, frontstageactivated, inputfieldmessageadded, inputfieldmessageremoved, modalfrontstagechanged, modaldialogchanged\r\n// cSpell:ignore navigationaidactivated, notificationmessageadded, toolactivated, taskactivated, widgetstatechanged, workflowactivated frontstageactivating\r\n// cSpell:ignore frontstageready activeviewportchanged selectionsetchanged presentationselectionchanged viewstatechanged\r\n// cSpell:ignore accudrawcompassmodechanged accudrawfieldlockchanged accudrawrotationchanged uisettingschanged\r\n\r\n/** Event Id used to sync UI components. Used to refresh visibility or enable state of control.\r\n * @public\r\n */\r\nexport enum SyncUiEventId {\r\n /** AccuDraw compass mode has changed. */\r\n AccuDrawCompassModeChanged = \"accudrawcompassmodechanged\",\r\n /** AccuDraw rotation has changed. */\r\n AccuDrawRotationChanged = \"accudrawrotationchanged\",\r\n /** The active content as maintained by the ContentViewManager has changed. */\r\n ActiveContentChanged = \"activecontentchanged\",\r\n /** The active view maintained by the ViewManager has changed. */\r\n ActiveViewportChanged = \"activeviewportchanged\",\r\n /** Backstage has been closed.\r\n * @deprecated Use BackstageEvent instead\r\n */\r\n BackstageCloseEvent = \"backstagecloseevent\",\r\n /** Backstage has been closed. */\r\n BackstageEvent = \"backstageevent\",\r\n /** A Content Layout has been activated. */\r\n ContentLayoutActivated = \"contentlayoutactivated\",\r\n /** A Content Control maintained by FrontstageManager has been activated. */\r\n ContentControlActivated = \"contentcontrolactivated\",\r\n /** A Frontstage is activating. */\r\n FrontstageActivating = \"frontstageactivating\",\r\n /** A Frontstage has been activated and the content has been assigned. */\r\n FrontstageReady = \"frontstageready\",\r\n /** A Modal Frontstage has been opened or closed. */\r\n ModalFrontstageChanged = \"modalfrontstagechanged\",\r\n /** A Modal Dialog has been opened or closed. */\r\n ModalDialogChanged = \"modaldialogchanged\",\r\n /** A NavigationAid has been activated. */\r\n NavigationAidActivated = \"navigationaidactivated\",\r\n /** An InteractiveTool has been activated via the ToolAdmin. */\r\n ToolActivated = \"toolactivated\",\r\n /** A Task has been activated.\r\n * @deprecated */\r\n TaskActivated = \"taskactivated\",\r\n /** The state of a Widget has changed. */\r\n WidgetStateChanged = \"widgetstatechanged\",\r\n /** A Workflow has been activated.\r\n * @deprecated */\r\n WorkflowActivated = \"workflowactivated\",\r\n /** The SelectionSet for the active IModelConnection has changed. */\r\n SelectionSetChanged = \"selectionsetchanged\",\r\n /** The list of settings providers registered with SettingsManager has changed. */\r\n SettingsProvidersChanged = \"settingsproviderschanged\",\r\n /** The current view state has changed (used by view undo/redo toolbar buttons). */\r\n ViewStateChanged = \"viewstatechanged\",\r\n /** The current object the reads and write UI State has changed. */\r\n UiStateStorageChanged = \"uistatestoragechanged\",\r\n ShowHideManagerSettingChange = \"show-hide-setting-change\",\r\n /** The list of feature overrides applied has been changed\r\n * @alpha\r\n */\r\n FeatureOverridesChanged = \"featureoverrideschanged\"\r\n}\r\n\r\n/** SyncUi Event arguments. Contains a set of lower case event Ids.\r\n * @public @deprecated use UiSyncEventArgs in appui-abstract instead\r\n */\r\nexport type SyncUiEventArgs = UiSyncEventArgs;\r\n\r\n/** SyncUi Event class.\r\n * @public @deprecated use UiSyncEvent in appui-abstract instead\r\n */\r\nexport type SyncUiEvent = UiSyncEvent;\r\n\r\n/** This class is used to send eventIds to interested UI components so the component can determine if it needs\r\n * to refresh its display by calling setState on itself.\r\n * @public\r\n */\r\nexport class SyncUiEventDispatcher {\r\n private static _uiEventDispatcher = new UiEventDispatcher();\r\n private static _unregisterListenerFunc?: () => void;\r\n private static _unregisterListenerFuncs: Array<() => void> = [];\r\n private static initialized = false;\r\n\r\n /** @internal - used for testing only */\r\n /* istanbul ignore next */\r\n public static setTimeoutPeriod(period: number): void {\r\n SyncUiEventDispatcher._uiEventDispatcher.setTimeoutPeriod(period);\r\n }\r\n\r\n /** Return set of event ids that will be sent to listeners/. */\r\n public static get syncEventIds(): Set<string> {\r\n return SyncUiEventDispatcher._uiEventDispatcher.syncEventIds;\r\n }\r\n\r\n /** Return SyncUiEvent so callers can register an event callback. */\r\n // eslint-disable-next-line deprecation/deprecation\r\n public static get onSyncUiEvent(): SyncUiEvent {\r\n return SyncUiEventDispatcher._uiEventDispatcher.onSyncUiEvent;\r\n }\r\n\r\n /** Immediately trigger sync event processing. */\r\n public static dispatchImmediateSyncUiEvent(eventId: string): void {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchImmediateSyncUiEvent(eventId);\r\n }\r\n\r\n /** Save eventId in Set for processing. */\r\n public static dispatchSyncUiEvent(eventId: string): void {\r\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\r\n Logger.logInfo(UiFramework.loggerCategory(this), `[dispatchSyncUiEvent] not processed because timeoutPeriod=0`);\r\n return;\r\n }\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(eventId);\r\n }\r\n\r\n /** Save multiple eventIds in Set for processing. */\r\n public static dispatchSyncUiEvents(eventIds: string[]): void {\r\n // istanbul ignore if\r\n if (0 === SyncUiEventDispatcher._uiEventDispatcher.timeoutPeriod) {\r\n Logger.logInfo(UiFramework.loggerCategory(this), `[dispatchSyncUiEvents] not processed because _timeoutPeriod=0`);\r\n }\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvents(eventIds);\r\n }\r\n\r\n /** Checks to see if an eventId of interest is contained in the set of eventIds */\r\n public static hasEventOfInterest(eventIds: Set<string>, idsOfInterest: string[]) {\r\n return SyncUiEventDispatcher._uiEventDispatcher.hasEventOfInterest(eventIds, idsOfInterest);\r\n }\r\n\r\n // istanbul ignore next\r\n private static _dispatchViewChange() {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ViewStateChanged);\r\n }\r\n\r\n // istanbul ignore next\r\n private static _dispatchFeatureOverridesChange() {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FeatureOverridesChanged);\r\n }\r\n\r\n /** Initializes the Monitoring of Events that trigger dispatching sync events */\r\n public static initialize() {\r\n // clear any registered listeners - this should only be encountered in unit test scenarios\r\n this._unregisterListenerFuncs.forEach((unregisterListenerFunc) => unregisterListenerFunc());\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onContentControlActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ContentControlActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onContentLayoutActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ContentLayoutActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onFrontstageActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FrontstageActivating);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onFrontstageReadyEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.FrontstageReady);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onModalFrontstageChangedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ModalFrontstageChanged);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onNavigationAidActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.NavigationAidActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onToolActivatedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ToolActivated);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(FrontstageManager.onWidgetStateChangedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.WidgetStateChanged);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(Backstage.onBackstageEvent.addListener(() => { // eslint-disable-line deprecation/deprecation\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.BackstageEvent);\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(WorkflowManager.onTaskActivatedEvent.addListener(() => { // eslint-disable-line deprecation/deprecation\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.TaskActivated); // eslint-disable-line deprecation/deprecation\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(WorkflowManager.onWorkflowActivatedEvent.addListener(() => { // eslint-disable-line deprecation/deprecation\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.WorkflowActivated); // eslint-disable-line deprecation/deprecation\r\n }));\r\n\r\n this._unregisterListenerFuncs.push(ContentViewManager.onActiveContentChangedEvent.addListener(() => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveContentChanged);\r\n }));\r\n\r\n // istanbul ignore else\r\n if (IModelApp && IModelApp.viewManager) {\r\n this._unregisterListenerFuncs.push(IModelApp.viewManager.onSelectedViewportChanged.addListener((args: SelectedViewportChangedArgs) => {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.ActiveViewportChanged);\r\n\r\n // if this is the first view being opened up start the default tool so tool admin is happy.\r\n if (undefined === args.previous) {\r\n IModelApp.toolAdmin.startDefaultTool();// eslint-disable-line @typescript-eslint/no-floating-promises\r\n } else {\r\n // istanbul ignore next\r\n if (args.previous.onViewChanged && typeof args.previous.onViewChanged.removeListener === \"function\") // not set during unit test\r\n args.previous.onViewChanged.removeListener(SyncUiEventDispatcher._dispatchViewChange);\r\n // istanbul ignore next\r\n if (args.previous.onFeatureOverridesChanged && typeof args.previous.onFeatureOverridesChanged.removeListener === \"function\") // not set during unit test\r\n args.previous.onFeatureOverridesChanged.removeListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);\r\n }\r\n // istanbul ignore next\r\n if (args.current) {\r\n if (args.current.onViewChanged && typeof args.current.onViewChanged.addListener === \"function\") // not set during unit test\r\n args.current.onViewChanged.addListener(SyncUiEventDispatcher._dispatchViewChange);\r\n // istanbul ignore next\r\n if (args.current.onFeatureOverridesChanged && typeof args.current.onFeatureOverridesChanged.addListener === \"function\") // not set during unit test\r\n args.current.onFeatureOverridesChanged.addListener(SyncUiEventDispatcher._dispatchFeatureOverridesChange);\r\n }\r\n }));\r\n }\r\n }\r\n\r\n private static selectionChangedHandler(_ev: SelectionSetEvent) {\r\n SyncUiEventDispatcher._uiEventDispatcher.dispatchSyncUiEvent(SyncUiEventId.SelectionSetChanged);\r\n }\r\n\r\n /** This should be called by IModelApp when the active IModelConnection is closed. */\r\n public static clearConnectionEvents(iModelConnection: IModelConnection) {\r\n iModelConnection.selectionSet.onChanged.removeListener(SyncUiEventDispatcher.selectionChangedHandler);\r\n SyncUiEventDispatcher._unregisterListenerFunc && SyncUiEventDispatcher._unregisterListenerFunc();\r\n }\r\n\r\n /** This should be called by IModelApp when the active IModelConnection is established. */\r\n public static initializeConnectionEvents(iModelConnection: IModelConnection) {\r\n if (SyncUiEventDispatcher._unregisterListenerFunc)\r\n SyncUiEventDispatcher._unregisterListenerFunc();\r\n\r\n if (iModelConnection.isBlankConnection() || !iModelConnection.isOpen) {\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, 0);\r\n return;\r\n }\r\n\r\n iModelConnection.selectionSet.onChanged.removeListener(SyncUiEventDispatcher.selectionChangedHandler);\r\n iModelConnection.selectionSet.onChanged.addListener(SyncUiEventDispatcher.selectionChangedHandler);\r\n (iModelConnection.iModelId) ? UiFramework.setActiveIModelId(iModelConnection.iModelId) : /* istanbul ignore next */ \"\";\r\n\r\n // listen for changes from presentation rules selection manager (this is done once an iModelConnection is available to ensure Presentation.selection is valid)\r\n SyncUiEventDispatcher._unregisterListenerFunc = Presentation.selection.selectionChange.addListener((args: SelectionChangeEventArgs, provider: ISelectionProvider) => {\r\n // istanbul ignore if\r\n if (args.level !== 0) {\r\n // don't need to handle sub-selections\r\n return;\r\n }\r\n const selection = provider.getSelection(args.imodel, args.level);\r\n const numSelected = getInstancesCount(selection);\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetNumItemsSelected, numSelected);\r\n });\r\n\r\n try {\r\n Presentation.selection.scopes.getSelectionScopes(iModelConnection).then((availableScopes: SelectionScope[]) => { // eslint-disable-line @typescript-eslint/no-floating-promises\r\n // istanbul ignore else\r\n if (availableScopes) {\r\n const presentationScopes: PresentationSelectionScope[] = [];\r\n availableScopes.map((scope) => presentationScopes.push(scope));\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetAvailableSelectionScopes, presentationScopes);\r\n }\r\n });\r\n\r\n const activeSelectionScope = Presentation.selection.scopes.activeScope;\r\n if (activeSelectionScope) {\r\n if (typeof (activeSelectionScope) === \"object\") {\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetSelectionScope, activeSelectionScope.id);\r\n } else {\r\n UiFramework.dispatchActionToStore(SessionStateActionId.SetSelectionScope, activeSelectionScope);\r\n }\r\n }\r\n } catch {}\r\n\r\n }\r\n\r\n}\r\n"]}