@itwin/appui-react 5.18.0 → 5.20.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 (250) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/lib/appui-react/UiFramework.js +20 -13
  3. package/lib/appui-react/UiFramework.js.map +1 -1
  4. package/lib/appui-react/accudraw/AccuDrawPopupManager.js +1 -1
  5. package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  6. package/lib/appui-react/accudraw/AccuDrawWidget.js +1 -1
  7. package/lib/appui-react/accudraw/AccuDrawWidget.js.map +1 -1
  8. package/lib/appui-react/accudraw/Calculator.js +92 -98
  9. package/lib/appui-react/accudraw/Calculator.js.map +1 -1
  10. package/lib/appui-react/accudraw/CalculatorEngine.js +130 -129
  11. package/lib/appui-react/accudraw/CalculatorEngine.js.map +1 -1
  12. package/lib/appui-react/accudraw/CalculatorPopup.js +9 -12
  13. package/lib/appui-react/accudraw/CalculatorPopup.js.map +1 -1
  14. package/lib/appui-react/accudraw/FrameworkAccuDraw.js +39 -38
  15. package/lib/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
  16. package/lib/appui-react/accudraw/MenuButton.js +20 -20
  17. package/lib/appui-react/accudraw/MenuButton.js.map +1 -1
  18. package/lib/appui-react/accudraw/MenuButtonPopup.js +9 -12
  19. package/lib/appui-react/accudraw/MenuButtonPopup.js.map +1 -1
  20. package/lib/appui-react/backstage/BackstageItemsManager.js +5 -5
  21. package/lib/appui-react/backstage/BackstageItemsManager.js.map +1 -1
  22. package/lib/appui-react/backstage/BackstageManager.js +1 -3
  23. package/lib/appui-react/backstage/BackstageManager.js.map +1 -1
  24. package/lib/appui-react/backstage/InternalBackstageManager.js +3 -5
  25. package/lib/appui-react/backstage/InternalBackstageManager.js.map +1 -1
  26. package/lib/appui-react/childwindow/InternalChildWindowManager.js +30 -32
  27. package/lib/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  28. package/lib/appui-react/configurableui/ActivityTracker.js +33 -33
  29. package/lib/appui-react/configurableui/ActivityTracker.js.map +1 -1
  30. package/lib/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
  31. package/lib/appui-react/configurableui/ConfigurableUiControl.js +8 -0
  32. package/lib/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
  33. package/lib/appui-react/configurableui/InternalConfigurableUiManager.js +8 -8
  34. package/lib/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
  35. package/lib/appui-react/configurableui/TimeTracker.js +25 -27
  36. package/lib/appui-react/configurableui/TimeTracker.js.map +1 -1
  37. package/lib/appui-react/content/ContentControl.js +2 -1
  38. package/lib/appui-react/content/ContentControl.js.map +1 -1
  39. package/lib/appui-react/content/ContentGroup.js +8 -4
  40. package/lib/appui-react/content/ContentGroup.js.map +1 -1
  41. package/lib/appui-react/content/ContentLayout.js +47 -38
  42. package/lib/appui-react/content/ContentLayout.js.map +1 -1
  43. package/lib/appui-react/content/IModelViewport.js +28 -23
  44. package/lib/appui-react/content/IModelViewport.js.map +1 -1
  45. package/lib/appui-react/content/InternalContentLayoutManager.js +1 -1
  46. package/lib/appui-react/content/InternalContentLayoutManager.js.map +1 -1
  47. package/lib/appui-react/content/InternalContentViewManager.js +9 -8
  48. package/lib/appui-react/content/InternalContentViewManager.js.map +1 -1
  49. package/lib/appui-react/content/StandardContentLayouts.js +141 -141
  50. package/lib/appui-react/content/StandardContentLayouts.js.map +1 -1
  51. package/lib/appui-react/content/ViewportContentControl.js +25 -22
  52. package/lib/appui-react/content/ViewportContentControl.js.map +1 -1
  53. package/lib/appui-react/cursor/CursorInformation.js +7 -6
  54. package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
  55. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js +9 -9
  56. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  57. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +7 -7
  58. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  59. package/lib/appui-react/dialog/DialogManagerBase.js +18 -19
  60. package/lib/appui-react/dialog/DialogManagerBase.js.map +1 -1
  61. package/lib/appui-react/dialog/InternalContentDialogManager.js +7 -7
  62. package/lib/appui-react/dialog/InternalContentDialogManager.js.map +1 -1
  63. package/lib/appui-react/dialog/InternalModalDialogManager.js +4 -4
  64. package/lib/appui-react/dialog/InternalModalDialogManager.js.map +1 -1
  65. package/lib/appui-react/dialog/InternalModelessDialogManager.js +6 -6
  66. package/lib/appui-react/dialog/InternalModelessDialogManager.js.map +1 -1
  67. package/lib/appui-react/dialog/ModelessDialog.js +3 -3
  68. package/lib/appui-react/dialog/ModelessDialog.js.map +1 -1
  69. package/lib/appui-react/feedback/ElementTooltip.js +3 -1
  70. package/lib/appui-react/feedback/ElementTooltip.js.map +1 -1
  71. package/lib/appui-react/feedback/ValidationTextbox.js +25 -25
  72. package/lib/appui-react/feedback/ValidationTextbox.js.map +1 -1
  73. package/lib/appui-react/frontstage/FrontstageDef.js +28 -10
  74. package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
  75. package/lib/appui-react/frontstage/InternalFrontstageManager.js +96 -96
  76. package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  77. package/lib/appui-react/frontstage/ModalFrontstage.js +5 -5
  78. package/lib/appui-react/frontstage/ModalFrontstage.js.map +1 -1
  79. package/lib/appui-react/frontstage/ModalSettingsStage.js +5 -4
  80. package/lib/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  81. package/lib/appui-react/frontstage/StandardFrontstageProvider.js +1 -0
  82. package/lib/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
  83. package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js +22 -22
  84. package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
  85. package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js +11 -9
  86. package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
  87. package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js +17 -20
  88. package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
  89. package/lib/appui-react/layout/backstage/Backstage.js +11 -14
  90. package/lib/appui-react/layout/backstage/Backstage.js.map +1 -1
  91. package/lib/appui-react/layout/base/DragManager.js +6 -7
  92. package/lib/appui-react/layout/base/DragManager.js.map +1 -1
  93. package/lib/appui-react/layout/base/SafeAreaInsets.js +8 -8
  94. package/lib/appui-react/layout/base/SafeAreaInsets.js.map +1 -1
  95. package/lib/appui-react/layout/popup/Tooltip.js +8 -11
  96. package/lib/appui-react/layout/popup/Tooltip.js.map +1 -1
  97. package/lib/appui-react/layout/state/NineZoneStateReducer.d.ts.map +1 -1
  98. package/lib/appui-react/layout/state/NineZoneStateReducer.js +8 -4
  99. package/lib/appui-react/layout/state/NineZoneStateReducer.js.map +1 -1
  100. package/lib/appui-react/layout/widget/Overflow.d.ts.map +1 -1
  101. package/lib/appui-react/layout/widget/Overflow.js +11 -17
  102. package/lib/appui-react/layout/widget/Overflow.js.map +1 -1
  103. package/lib/appui-react/layout/widget/Overflow.scss +3 -48
  104. package/lib/appui-react/layout/widget/Tab.d.ts.map +1 -1
  105. package/lib/appui-react/layout/widget/Tab.js +7 -5
  106. package/lib/appui-react/layout/widget/Tab.js.map +1 -1
  107. package/lib/appui-react/messages/InputField.js +21 -24
  108. package/lib/appui-react/messages/InputField.js.map +1 -1
  109. package/lib/appui-react/messages/MessageManager.js +39 -38
  110. package/lib/appui-react/messages/MessageManager.js.map +1 -1
  111. package/lib/appui-react/messages/Pointer.js +38 -38
  112. package/lib/appui-react/messages/Pointer.js.map +1 -1
  113. package/lib/appui-react/messages/ReactNotifyMessageDetails.js +6 -0
  114. package/lib/appui-react/messages/ReactNotifyMessageDetails.js.map +1 -1
  115. package/lib/appui-react/messages/StatusMessageManager.js +2 -4
  116. package/lib/appui-react/messages/StatusMessageManager.js.map +1 -1
  117. package/lib/appui-react/navigationaids/CubeNavigationAidControl.js +1 -1
  118. package/lib/appui-react/navigationaids/CubeNavigationAidControl.js.map +1 -1
  119. package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js +1 -1
  120. package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js.map +1 -1
  121. package/lib/appui-react/navigationaids/NavigationAidControl.js +1 -0
  122. package/lib/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
  123. package/lib/appui-react/navigationaids/SheetNavigationAid.js +55 -54
  124. package/lib/appui-react/navigationaids/SheetNavigationAid.js.map +1 -1
  125. package/lib/appui-react/navigationaids/SheetsModalFrontstage.js +22 -20
  126. package/lib/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
  127. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js +15 -14
  128. package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js.map +1 -1
  129. package/lib/appui-react/pickers/ListPicker.js +28 -28
  130. package/lib/appui-react/pickers/ListPicker.js.map +1 -1
  131. package/lib/appui-react/pickers/ViewSelector.js +87 -86
  132. package/lib/appui-react/pickers/ViewSelector.js.map +1 -1
  133. package/lib/appui-react/popup/CardPopup.js +18 -21
  134. package/lib/appui-react/popup/CardPopup.js.map +1 -1
  135. package/lib/appui-react/popup/HTMLElementPopup.js +9 -12
  136. package/lib/appui-react/popup/HTMLElementPopup.js.map +1 -1
  137. package/lib/appui-react/popup/InputEditorPopup.js +18 -20
  138. package/lib/appui-react/popup/InputEditorPopup.js.map +1 -1
  139. package/lib/appui-react/popup/PopupManager.js +22 -25
  140. package/lib/appui-react/popup/PopupManager.js.map +1 -1
  141. package/lib/appui-react/popup/ToolSettingsPopup.js +17 -17
  142. package/lib/appui-react/popup/ToolSettingsPopup.js.map +1 -1
  143. package/lib/appui-react/popup/ToolbarPopup.js +18 -21
  144. package/lib/appui-react/popup/ToolbarPopup.js.map +1 -1
  145. package/lib/appui-react/redux/ReducerRegistry.js +2 -0
  146. package/lib/appui-react/redux/ReducerRegistry.js.map +1 -1
  147. package/lib/appui-react/redux/StateManager.js +4 -1
  148. package/lib/appui-react/redux/StateManager.js.map +1 -1
  149. package/lib/appui-react/selection/HideIsolateEmphasizeManager.js +7 -3
  150. package/lib/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
  151. package/lib/appui-react/shared/ActionButtonItemDef.js +13 -6
  152. package/lib/appui-react/shared/ActionButtonItemDef.js.map +1 -1
  153. package/lib/appui-react/shared/CommandItemDef.js +3 -3
  154. package/lib/appui-react/shared/CommandItemDef.js.map +1 -1
  155. package/lib/appui-react/shared/CustomItemDef.js +4 -2
  156. package/lib/appui-react/shared/CustomItemDef.js.map +1 -1
  157. package/lib/appui-react/shared/ItemDefBase.js +13 -5
  158. package/lib/appui-react/shared/ItemDefBase.js.map +1 -1
  159. package/lib/appui-react/shared/MenuItem.js +6 -1
  160. package/lib/appui-react/shared/MenuItem.js.map +1 -1
  161. package/lib/appui-react/shared/ToolItemDef.js +1 -1
  162. package/lib/appui-react/shared/ToolItemDef.js.map +1 -1
  163. package/lib/appui-react/stagepanels/StagePanelDef.js +4 -3
  164. package/lib/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  165. package/lib/appui-react/statusbar/StatusBarItemsManager.js +5 -5
  166. package/lib/appui-react/statusbar/StatusBarItemsManager.js.map +1 -1
  167. package/lib/appui-react/statusfields/ViewAttributes.js +16 -16
  168. package/lib/appui-react/statusfields/ViewAttributes.js.map +1 -1
  169. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js +35 -33
  170. package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
  171. package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js +7 -0
  172. package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -1
  173. package/lib/appui-react/syncui/SyncUiEventDispatcher.js +4 -3
  174. package/lib/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
  175. package/lib/appui-react/timeline/AnalysisAnimationProvider.js +9 -8
  176. package/lib/appui-react/timeline/AnalysisAnimationProvider.js.map +1 -1
  177. package/lib/appui-react/timeline/ScheduleAnimationProvider.js +13 -12
  178. package/lib/appui-react/timeline/ScheduleAnimationProvider.js.map +1 -1
  179. package/lib/appui-react/timeline/SolarTimelineDataProvider.js +6 -5
  180. package/lib/appui-react/timeline/SolarTimelineDataProvider.js.map +1 -1
  181. package/lib/appui-react/toolbar/GroupItem.js +11 -5
  182. package/lib/appui-react/toolbar/GroupItem.js.map +1 -1
  183. package/lib/appui-react/toolbar/ToolbarItemsManager.js +7 -7
  184. package/lib/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
  185. package/lib/appui-react/tools/FrameworkToolAdmin.js +5 -1
  186. package/lib/appui-react/tools/FrameworkToolAdmin.js.map +1 -1
  187. package/lib/appui-react/tools/KeyinPaletteTools.js +2 -2
  188. package/lib/appui-react/tools/KeyinPaletteTools.js.map +1 -1
  189. package/lib/appui-react/tools/OpenSettingsTool.js +2 -2
  190. package/lib/appui-react/tools/OpenSettingsTool.js.map +1 -1
  191. package/lib/appui-react/tools/RestoreLayoutTool.js +4 -4
  192. package/lib/appui-react/tools/RestoreLayoutTool.js.map +1 -1
  193. package/lib/appui-react/tools/ToolSettingsTools.js +2 -2
  194. package/lib/appui-react/tools/ToolSettingsTools.js.map +1 -1
  195. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js +15 -18
  196. package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
  197. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js +8 -8
  198. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js.map +1 -1
  199. package/lib/appui-react/toolsettings/ToolInformation.js +2 -0
  200. package/lib/appui-react/toolsettings/ToolInformation.js.map +1 -1
  201. package/lib/appui-react/toolsettings/ToolUiProvider.js +3 -0
  202. package/lib/appui-react/toolsettings/ToolUiProvider.js.map +1 -1
  203. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js +1 -0
  204. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  205. package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js +2 -0
  206. package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js.map +1 -1
  207. package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js +1 -0
  208. package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js.map +1 -1
  209. package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +1 -0
  210. package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
  211. package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js +1 -0
  212. package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js.map +1 -1
  213. package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js +1 -0
  214. package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js.map +1 -1
  215. package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +1 -0
  216. package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  217. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -0
  218. package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
  219. package/lib/appui-react/ui-items-provider/UiItemsManager.js +3 -3
  220. package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  221. package/lib/appui-react/uiadmin/FrameworkUiAdmin.js +1 -4
  222. package/lib/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
  223. package/lib/appui-react/uiprovider/ComponentGenerator.js +2 -0
  224. package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  225. package/lib/appui-react/uistate/AppUiSettings.js +41 -33
  226. package/lib/appui-react/uistate/AppUiSettings.js.map +1 -1
  227. package/lib/appui-react/utils/InternalUiShowHideManager.js +13 -14
  228. package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  229. package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js +2 -5
  230. package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js.map +1 -1
  231. package/lib/appui-react/widgets/WidgetControl.js +2 -0
  232. package/lib/appui-react/widgets/WidgetControl.js.map +1 -1
  233. package/lib/appui-react/widgets/WidgetDef.js +28 -7
  234. package/lib/appui-react/widgets/WidgetDef.js.map +1 -1
  235. package/lib/appui-react/widgets/WidgetHost.js +4 -4
  236. package/lib/appui-react/widgets/WidgetHost.js.map +1 -1
  237. package/lib/appui-react/widgets/WidgetManager.js +5 -7
  238. package/lib/appui-react/widgets/WidgetManager.js.map +1 -1
  239. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
  240. package/lib/cjs/appui-react/layout/widget/Overflow.scss +3 -48
  241. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
  242. package/lib/esm/appui-react/layout/widget/Overflow.scss +3 -48
  243. package/package.json +10 -11
  244. package/lib/appui-react/layout/widget/Menu.d.ts +0 -16
  245. package/lib/appui-react/layout/widget/Menu.d.ts.map +0 -1
  246. package/lib/appui-react/layout/widget/Menu.js +0 -21
  247. package/lib/appui-react/layout/widget/Menu.js.map +0 -1
  248. package/lib/appui-react/layout/widget/Menu.scss +0 -12
  249. package/lib/cjs/appui-react/layout/widget/Menu.scss +0 -12
  250. package/lib/esm/appui-react/layout/widget/Menu.scss +0 -12
@@ -25,20 +25,17 @@ export class CardSelectedEvent extends UiEvent {
25
25
  * @alpha
26
26
  */
27
27
  export class SheetsModalFrontstage {
28
+ title = UiFramework.translate("navigationAid.sheetsModalFrontstage");
29
+ _cards = [];
30
+ _connection;
31
+ _currentIndex;
32
+ _searchValue = "";
28
33
  /**
29
34
  * Creates a SheetsModalFrontstage
30
35
  * @param sheets Collection of sheets available in SheetNavigationAid
31
36
  * @param connection IModelConnection to query for sheet ViewState
32
37
  */
33
38
  constructor(sheets, connection, currentIndex) {
34
- this.title = UiFramework.translate("navigationAid.sheetsModalFrontstage");
35
- this._cards = [];
36
- this._searchValue = "";
37
- /** Updates stage based on search value */
38
- this._handleSearchValueChanged = (value) => {
39
- this._searchValue = value;
40
- UiFramework.frontstages.updateModalFrontstage();
41
- };
42
39
  this._connection = connection;
43
40
  this._currentIndex = currentIndex;
44
41
  this._storeSheetsAsCards(sheets);
@@ -68,11 +65,18 @@ export class SheetsModalFrontstage {
68
65
  // eslint-disable-next-line @typescript-eslint/no-deprecated
69
66
  React.createElement(SearchBox, { placeholder: UiFramework.translate("general.search"), onValueChanged: this._handleSearchValueChanged, valueChangedDelay: 250 }));
70
67
  }
68
+ /** Updates stage based on search value */
69
+ _handleSearchValueChanged = (value) => {
70
+ this._searchValue = value;
71
+ UiFramework.frontstages.updateModalFrontstage();
72
+ };
71
73
  }
72
74
  /** Displays cards in SheetModalFrontstage
73
75
  * @alpha
74
76
  */
75
77
  export class CardContainer extends React.Component {
78
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
79
+ static _cardSelectedEvent = new BeUiEvent();
76
80
  /** Get CardSelectedEvent event */
77
81
  // eslint-disable-next-line @typescript-eslint/no-deprecated
78
82
  static get onCardSelectedEvent() {
@@ -126,26 +130,24 @@ export class CardContainer extends React.Component {
126
130
  });
127
131
  }
128
132
  }
129
- // eslint-disable-next-line @typescript-eslint/no-deprecated
130
- CardContainer._cardSelectedEvent = new BeUiEvent();
131
133
  /** Displays information about an individual sheet
132
134
  * @alpha
133
135
  */
134
136
  export class SheetCard extends React.Component {
135
137
  constructor(props) {
136
138
  super(props);
137
- this._onClick = () => {
138
- this.setState({ isActive: true }, () => this.props.onClick());
139
- };
140
- this._onMouseDown = () => {
141
- this.setState({ isPressed: true });
142
- };
143
- this._onMouseLeave = () => {
144
- if (this.state.isPressed)
145
- this.setState({ isPressed: false });
146
- };
147
139
  this.state = { isActive: this.props.isActive, isPressed: false };
148
140
  }
141
+ _onClick = () => {
142
+ this.setState({ isActive: true }, () => this.props.onClick());
143
+ };
144
+ _onMouseDown = () => {
145
+ this.setState({ isPressed: true });
146
+ };
147
+ _onMouseLeave = () => {
148
+ if (this.state.isPressed)
149
+ this.setState({ isPressed: false });
150
+ };
149
151
  render() {
150
152
  const { label, index } = this.props;
151
153
  const className = classnames("uifw-sheet-card", this.state.isActive && "is-active", this.state.isPressed && "is-pressed");
@@ -1 +1 @@
1
- {"version":3,"file":"SheetsModalFrontstage.js","sourceRoot":"","sources":["../../../src/appui-react/navigationaids/SheetsModalFrontstage.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module NavigationAids\n */\n\nimport \"./SheetsModalFrontstage.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { UiEvent } from \"@itwin/appui-abstract\";\nimport type { CommonProps, IconSpec } from \"@itwin/core-react\";\nimport {\n FlexWrapContainer,\n Icon,\n ScrollView,\n SearchBox,\n} from \"@itwin/core-react\";\nimport type { ModalFrontstageInfo } from \"../framework/FrameworkFrontstages.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { SheetData } from \"./SheetNavigationAid.js\";\nimport { SvgDocument, SvgPlaceholder } from \"@itwin/itwinui-icons-react\";\nimport { BeUiEvent } from \"@itwin/core-bentley\";\n\n/** Data about a sheet card\n * @alpha\n */\nexport interface CardInfo {\n index: number;\n label: string;\n /** @deprecated in 4.16.0. Use {@link CardInfo.icon} instead. */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec: IconSpec;\n icon?: React.ReactNode;\n isActive: boolean;\n viewId: any;\n}\n\n/** Arguments for CardSelectedEvent\n * @alpha\n * @deprecated in 4.13.0. Event args are inferred from a listener. If explicit type is needed use a type helper.\n */\nexport interface CardSelectedEventArgs {\n id: any;\n index: number;\n}\n\n/** Class for CardSelectedEvent\n * @alpha\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class CardSelectedEvent extends UiEvent<CardSelectedEventArgs> {}\n\n/** Modal frontstage displaying sheet information in cards.\n * @alpha\n */\nexport class SheetsModalFrontstage implements ModalFrontstageInfo {\n public title = UiFramework.translate(\"navigationAid.sheetsModalFrontstage\");\n private _cards: CardInfo[] = [];\n private _connection: IModelConnection;\n private _currentIndex: number;\n private _searchValue: string = \"\";\n\n /**\n * Creates a SheetsModalFrontstage\n * @param sheets Collection of sheets available in SheetNavigationAid\n * @param connection IModelConnection to query for sheet ViewState\n */\n constructor(\n sheets: SheetData[],\n connection: IModelConnection,\n currentIndex: number\n ) {\n this._connection = connection;\n this._currentIndex = currentIndex;\n this._storeSheetsAsCards(sheets);\n }\n\n /**\n * Gathers card info from available sheets\n * @param sheets SheetData from available sheets\n */\n private _storeSheetsAsCards(sheets: SheetData[]) {\n sheets.forEach((sheet: SheetData, index: number) => {\n this._cards.push({\n index,\n label: sheet.name,\n iconSpec: <SvgDocument />,\n viewId: sheet.viewId,\n isActive: index === this._currentIndex,\n });\n });\n }\n\n /** Gets set of cards */\n public get content(): React.ReactNode {\n return (\n <CardContainer\n cards={this._cards}\n searchValue={this._searchValue}\n connection={this._connection}\n />\n );\n }\n\n /** Gets components to be placed in the app bar */\n public get appBarRight(): React.ReactNode {\n return (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <SearchBox\n placeholder={UiFramework.translate(\"general.search\")}\n onValueChanged={this._handleSearchValueChanged}\n valueChangedDelay={250}\n />\n );\n }\n\n /** Updates stage based on search value */\n private _handleSearchValueChanged = (value: string): void => {\n this._searchValue = value;\n UiFramework.frontstages.updateModalFrontstage();\n };\n}\n\n/** Properties for [[CardContainer]]\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface CardContainerProps extends CommonProps {\n cards: CardInfo[];\n searchValue: string;\n connection: IModelConnection;\n}\n\n/** Displays cards in SheetModalFrontstage\n * @alpha\n */\nexport class CardContainer extends React.Component<CardContainerProps> {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n private static _cardSelectedEvent = new BeUiEvent<CardSelectedEventArgs>();\n\n /** Get CardSelectedEvent event */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public static get onCardSelectedEvent(): CardSelectedEvent {\n return CardContainer._cardSelectedEvent;\n }\n\n public override render() {\n return (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <ScrollView className={this.props.className} style={this.props.style}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <FlexWrapContainer>\n {this.props.cards.map((card: CardInfo, _index: number) => {\n let includeCard = true;\n if (this.props.searchValue) {\n includeCard = this.contains(card.label, this.props.searchValue);\n }\n\n if (includeCard) {\n return (\n <SheetCard\n key={card.label}\n label={card.label}\n index={card.index}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={card.iconSpec}\n icon={card.icon}\n isActive={card.isActive}\n onClick={async () => this._handleCardSelected(card)}\n />\n );\n }\n\n return null;\n })}\n </FlexWrapContainer>\n </ScrollView>\n );\n }\n\n /**\n * Determines if string contains a substring\n * @param valueA The string to search through\n * @param valueB The value to search for\n * @return True if valueB can be found in valueA, false otherwise\n */\n private contains(valueA: string, valueB: string): boolean {\n if (!valueA || !valueB) return false;\n\n if (valueB.length > valueA.length) return false;\n\n return (\n valueA.toLocaleUpperCase().indexOf(valueB.toLocaleUpperCase(), 0) !== -1\n );\n }\n\n /**\n * Updates view with ViewState for selected card.\n * @param card Data about the sheet card selected.\n */\n private async _handleCardSelected(card: CardInfo) {\n if (IModelApp.viewManager && IModelApp.viewManager.selectedView) {\n const vp = IModelApp.viewManager.selectedView;\n const viewState = await this.props.connection.views.load(card.viewId);\n vp.changeView(viewState);\n }\n\n card.isActive = true;\n UiFramework.frontstages.closeModalFrontstage();\n CardContainer.onCardSelectedEvent.emit({\n id: card.viewId,\n index: card.index,\n });\n }\n}\n\n/** Properties for [[SheetCard]]\n * @alpha\n */\nexport interface SheetCardProps {\n label: string;\n index: number;\n /** @deprecated in 4.16.0. Use {@link SheetCardProps.icon} instead. */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec: IconSpec;\n icon?: React.ReactNode;\n isActive: boolean;\n onClick: () => void;\n}\n\n/** State for [[SheetCard]]\n * @internal\n */\ninterface SheetCardState {\n isActive: boolean;\n isPressed: boolean;\n}\n\n/** Displays information about an individual sheet\n * @alpha\n */\nexport class SheetCard extends React.Component<SheetCardProps, SheetCardState> {\n constructor(props: SheetCardProps) {\n super(props);\n this.state = { isActive: this.props.isActive, isPressed: false };\n }\n\n private _onClick = () => {\n this.setState({ isActive: true }, () => this.props.onClick());\n };\n\n private _onMouseDown = () => {\n this.setState({ isPressed: true });\n };\n\n private _onMouseLeave = () => {\n if (this.state.isPressed) this.setState({ isPressed: false });\n };\n\n public override render() {\n const { label, index } = this.props;\n\n const className = classnames(\n \"uifw-sheet-card\",\n this.state.isActive && \"is-active\",\n this.state.isPressed && \"is-pressed\"\n );\n\n const icon =\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.props.icon ?? this.props.iconSpec ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={this.props.iconSpec} />\n ) : (\n <SvgPlaceholder />\n );\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n className={className}\n onClick={this._onClick}\n onMouseDown={this._onMouseDown}\n onMouseLeave={this._onMouseLeave}\n role=\"button\"\n tabIndex={-1}\n >\n {label}\n <div className=\"sheet-image-container\">\n <div className=\"icon\">{icon}</div>\n </div>\n <div className=\"sheet-index\">{index + 1}</div>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"SheetsModalFrontstage.js","sourceRoot":"","sources":["../../../src/appui-react/navigationaids/SheetsModalFrontstage.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module NavigationAids\n */\n\nimport \"./SheetsModalFrontstage.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { UiEvent } from \"@itwin/appui-abstract\";\nimport type { CommonProps, IconSpec } from \"@itwin/core-react\";\nimport {\n FlexWrapContainer,\n Icon,\n ScrollView,\n SearchBox,\n} from \"@itwin/core-react\";\nimport type { ModalFrontstageInfo } from \"../framework/FrameworkFrontstages.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { SheetData } from \"./SheetNavigationAid.js\";\nimport { SvgDocument, SvgPlaceholder } from \"@itwin/itwinui-icons-react\";\nimport { BeUiEvent } from \"@itwin/core-bentley\";\n\n/** Data about a sheet card\n * @alpha\n */\nexport interface CardInfo {\n index: number;\n label: string;\n /** @deprecated in 4.16.0. Use {@link CardInfo.icon} instead. */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec: IconSpec;\n icon?: React.ReactNode;\n isActive: boolean;\n viewId: any;\n}\n\n/** Arguments for CardSelectedEvent\n * @alpha\n * @deprecated in 4.13.0. Event args are inferred from a listener. If explicit type is needed use a type helper.\n */\nexport interface CardSelectedEventArgs {\n id: any;\n index: number;\n}\n\n/** Class for CardSelectedEvent\n * @alpha\n * @deprecated in 4.13.0. This class should not be used by applications to instantiate objects.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class CardSelectedEvent extends UiEvent<CardSelectedEventArgs> {}\n\n/** Modal frontstage displaying sheet information in cards.\n * @alpha\n */\nexport class SheetsModalFrontstage implements ModalFrontstageInfo {\n public title = UiFramework.translate(\"navigationAid.sheetsModalFrontstage\");\n private _cards: CardInfo[] = [];\n private _connection: IModelConnection;\n private _currentIndex: number;\n private _searchValue: string = \"\";\n\n /**\n * Creates a SheetsModalFrontstage\n * @param sheets Collection of sheets available in SheetNavigationAid\n * @param connection IModelConnection to query for sheet ViewState\n */\n constructor(\n sheets: SheetData[],\n connection: IModelConnection,\n currentIndex: number\n ) {\n this._connection = connection;\n this._currentIndex = currentIndex;\n this._storeSheetsAsCards(sheets);\n }\n\n /**\n * Gathers card info from available sheets\n * @param sheets SheetData from available sheets\n */\n private _storeSheetsAsCards(sheets: SheetData[]) {\n sheets.forEach((sheet: SheetData, index: number) => {\n this._cards.push({\n index,\n label: sheet.name,\n iconSpec: <SvgDocument />,\n viewId: sheet.viewId,\n isActive: index === this._currentIndex,\n });\n });\n }\n\n /** Gets set of cards */\n public get content(): React.ReactNode {\n return (\n <CardContainer\n cards={this._cards}\n searchValue={this._searchValue}\n connection={this._connection}\n />\n );\n }\n\n /** Gets components to be placed in the app bar */\n public get appBarRight(): React.ReactNode {\n return (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <SearchBox\n placeholder={UiFramework.translate(\"general.search\")}\n onValueChanged={this._handleSearchValueChanged}\n valueChangedDelay={250}\n />\n );\n }\n\n /** Updates stage based on search value */\n private _handleSearchValueChanged = (value: string): void => {\n this._searchValue = value;\n UiFramework.frontstages.updateModalFrontstage();\n };\n}\n\n/** Properties for [[CardContainer]]\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface CardContainerProps extends CommonProps {\n cards: CardInfo[];\n searchValue: string;\n connection: IModelConnection;\n}\n\n/** Displays cards in SheetModalFrontstage\n * @alpha\n */\nexport class CardContainer extends React.Component<CardContainerProps> {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n private static _cardSelectedEvent = new BeUiEvent<CardSelectedEventArgs>();\n\n /** Get CardSelectedEvent event */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public static get onCardSelectedEvent(): CardSelectedEvent {\n return CardContainer._cardSelectedEvent;\n }\n\n public override render() {\n return (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <ScrollView className={this.props.className} style={this.props.style}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <FlexWrapContainer>\n {this.props.cards.map((card: CardInfo, _index: number) => {\n let includeCard = true;\n if (this.props.searchValue) {\n includeCard = this.contains(card.label, this.props.searchValue);\n }\n\n if (includeCard) {\n return (\n <SheetCard\n key={card.label}\n label={card.label}\n index={card.index}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={card.iconSpec}\n icon={card.icon}\n isActive={card.isActive}\n onClick={async () => this._handleCardSelected(card)}\n />\n );\n }\n\n return null;\n })}\n </FlexWrapContainer>\n </ScrollView>\n );\n }\n\n /**\n * Determines if string contains a substring\n * @param valueA The string to search through\n * @param valueB The value to search for\n * @return True if valueB can be found in valueA, false otherwise\n */\n private contains(valueA: string, valueB: string): boolean {\n if (!valueA || !valueB) return false;\n\n if (valueB.length > valueA.length) return false;\n\n return (\n valueA.toLocaleUpperCase().indexOf(valueB.toLocaleUpperCase(), 0) !== -1\n );\n }\n\n /**\n * Updates view with ViewState for selected card.\n * @param card Data about the sheet card selected.\n */\n private async _handleCardSelected(card: CardInfo) {\n if (IModelApp.viewManager && IModelApp.viewManager.selectedView) {\n const vp = IModelApp.viewManager.selectedView;\n const viewState = await this.props.connection.views.load(card.viewId);\n vp.changeView(viewState);\n }\n\n card.isActive = true;\n UiFramework.frontstages.closeModalFrontstage();\n CardContainer.onCardSelectedEvent.emit({\n id: card.viewId,\n index: card.index,\n });\n }\n}\n\n/** Properties for [[SheetCard]]\n * @alpha\n */\nexport interface SheetCardProps {\n label: string;\n index: number;\n /** @deprecated in 4.16.0. Use {@link SheetCardProps.icon} instead. */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec: IconSpec;\n icon?: React.ReactNode;\n isActive: boolean;\n onClick: () => void;\n}\n\n/** State for [[SheetCard]]\n * @internal\n */\ninterface SheetCardState {\n isActive: boolean;\n isPressed: boolean;\n}\n\n/** Displays information about an individual sheet\n * @alpha\n */\nexport class SheetCard extends React.Component<SheetCardProps, SheetCardState> {\n constructor(props: SheetCardProps) {\n super(props);\n this.state = { isActive: this.props.isActive, isPressed: false };\n }\n\n private _onClick = () => {\n this.setState({ isActive: true }, () => this.props.onClick());\n };\n\n private _onMouseDown = () => {\n this.setState({ isPressed: true });\n };\n\n private _onMouseLeave = () => {\n if (this.state.isPressed) this.setState({ isPressed: false });\n };\n\n public override render() {\n const { label, index } = this.props;\n\n const className = classnames(\n \"uifw-sheet-card\",\n this.state.isActive && \"is-active\",\n this.state.isPressed && \"is-pressed\"\n );\n\n const icon =\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.props.icon ?? this.props.iconSpec ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={this.props.iconSpec} />\n ) : (\n <SvgPlaceholder />\n );\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n className={className}\n onClick={this._onClick}\n onMouseDown={this._onMouseDown}\n onMouseLeave={this._onMouseLeave}\n role=\"button\"\n tabIndex={-1}\n >\n {label}\n <div className=\"sheet-image-container\">\n <div className=\"icon\">{icon}</div>\n </div>\n <div className=\"sheet-index\">{index + 1}</div>\n </div>\n );\n }\n}\n"]}
@@ -31,6 +31,7 @@ import "./StandardRotationNavigationAid.scss";
31
31
  */
32
32
  // eslint-disable-next-line @typescript-eslint/no-deprecated
33
33
  export class StandardRotationNavigationAidControl extends NavigationAidControl {
34
+ static navigationAidId = "StandardRotationNavigationAid";
34
35
  // eslint-disable-next-line @typescript-eslint/no-deprecated
35
36
  constructor(info, options) {
36
37
  // eslint-disable-next-line @typescript-eslint/no-deprecated
@@ -38,26 +39,13 @@ export class StandardRotationNavigationAidControl extends NavigationAidControl {
38
39
  this.reactNode = React.createElement(StandardRotationNavigationAid, null);
39
40
  }
40
41
  }
41
- StandardRotationNavigationAidControl.navigationAidId = "StandardRotationNavigationAid";
42
42
  /** A 3D Standard Rotation Navigation Aid.
43
43
  * @public
44
44
  */
45
45
  export class StandardRotationNavigationAid extends React.Component {
46
+ state;
46
47
  constructor(props) {
47
48
  super(props);
48
- this._handleRef = (element) => {
49
- this.setState(() => ({ element }));
50
- };
51
- this._handlePopupClose = () => {
52
- this.setState(() => ({ isExpanded: false }));
53
- };
54
- this._toggleIsExpanded = () => {
55
- this.setState((prevState) => ({ isExpanded: !prevState.isExpanded }));
56
- };
57
- this._handleListItemClicked = (item) => {
58
- const selected = item;
59
- this.setState(() => ({ isExpanded: false, selected }), () => ViewportComponentEvents.setStandardRotation(selected));
60
- };
61
49
  const list = [
62
50
  {
63
51
  label: UiFramework.translate("rotations.top"),
@@ -107,6 +95,19 @@ export class StandardRotationNavigationAid extends React.Component {
107
95
  React.createElement(Icon, { iconSpec: this.state.list[this.state.selected].iconsSpec })), onClick: this._toggleIsExpanded, title: UiFramework.translate("standardRotationNavigationAid.title") })),
108
96
  React.createElement(Popup, { isOpen: this.state.isExpanded, offset: 0, onClose: this._handlePopupClose, position: RelativePosition.Bottom, target: this.state.element }, this.getExpandedContent())));
109
97
  }
98
+ _handleRef = (element) => {
99
+ this.setState(() => ({ element }));
100
+ };
101
+ _handlePopupClose = () => {
102
+ this.setState(() => ({ isExpanded: false }));
103
+ };
104
+ _toggleIsExpanded = () => {
105
+ this.setState((prevState) => ({ isExpanded: !prevState.isExpanded }));
106
+ };
107
+ _handleListItemClicked = (item) => {
108
+ const selected = item;
109
+ this.setState(() => ({ isExpanded: false, selected }), () => ViewportComponentEvents.setStandardRotation(selected));
110
+ };
110
111
  getExpandedContent() {
111
112
  if (!this.state.isExpanded)
112
113
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"StandardRotationNavigationAid.js","sourceRoot":"","sources":["../../../src/appui-react/navigationaids/StandardRotationNavigationAid.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module NavigationAids\n */\n\nimport { SvgCubeFaceBottom } from \"../icons/cube-faces/SvgCubeFaceBottom.js\";\nimport { SvgCubeFaceFront } from \"../icons/cube-faces/SvgCubeFaceFront.js\";\nimport { SvgCubeFaceIsoLeft } from \"../icons/cube-faces/SvgCubeFaceIsoLeft.js\";\nimport { SvgCubeFaceIsoRight } from \"../icons/cube-faces/SvgCubeFaceIsoRight.js\";\nimport { SvgCubeFaceLeft } from \"../icons/cube-faces/SvgCubeFaceLeft.js\";\nimport { SvgCubeFaceRear } from \"../icons/cube-faces/SvgCubeFaceRear.js\";\nimport { SvgCubeFaceRight } from \"../icons/cube-faces/SvgCubeFaceRight.js\";\nimport { SvgCubeFaceTop } from \"../icons/cube-faces/SvgCubeFaceTop.js\";\nimport { RelativePosition, ToolbarItemUtilities } from \"@itwin/appui-abstract\";\nimport {\n Columns,\n GroupColumn,\n GroupTool,\n Panel,\n} from \"@itwin/components-react/internal\";\nimport { StandardViewId } from \"@itwin/core-frontend\";\nimport type { CommonProps, IconSpec } from \"@itwin/core-react\";\nimport { Icon, Popup } from \"@itwin/core-react\";\nimport { ViewportComponentEvents } from \"@itwin/imodel-components-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { ConfigurableCreateInfo } from \"../configurableui/ConfigurableUiControl.js\";\nimport { ExpandableButton as NZ_Expandable } from \"../layout/widget/tools/button/Expandable.js\";\nimport { ToolbarIcon as NZ_Icon } from \"../layout/widget/tools/button/Icon.js\";\nimport { NavigationAidControl } from \"./NavigationAidControl.js\";\nimport \"./StandardRotationNavigationAid.scss\";\n\n/** A 3D Standard Rotation Navigation Aid control.\n * @public\n * @deprecated in 4.16.0. Use {@link StandardRotationNavigationAid} component instead.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class StandardRotationNavigationAidControl extends NavigationAidControl {\n public static navigationAidId = \"StandardRotationNavigationAid\";\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n constructor(info: ConfigurableCreateInfo, options: any) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n super(info, options);\n this.reactNode = <StandardRotationNavigationAid />;\n }\n}\n\ninterface RotationData {\n label: string;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconsSpec?: IconSpec;\n}\n\ninterface StandardRotationNavigationAidState {\n element: HTMLDivElement | null;\n isExpanded: boolean;\n list: RotationData[];\n selected: StandardViewId;\n}\n\n/** A 3D Standard Rotation Navigation Aid.\n * @public\n */\nexport class StandardRotationNavigationAid extends React.Component<\n CommonProps, // eslint-disable-line @typescript-eslint/no-deprecated\n StandardRotationNavigationAidState\n> {\n public override readonly state: Readonly<StandardRotationNavigationAidState>;\n\n constructor(props: any) {\n super(props);\n const list: RotationData[] = [\n {\n label: UiFramework.translate(\"rotations.top\"),\n iconsSpec: <SvgCubeFaceTop />,\n },\n {\n label: UiFramework.translate(\"rotations.bottom\"),\n iconsSpec: <SvgCubeFaceBottom />,\n },\n {\n label: UiFramework.translate(\"rotations.left\"),\n iconsSpec: <SvgCubeFaceLeft />,\n },\n {\n label: UiFramework.translate(\"rotations.right\"),\n iconsSpec: <SvgCubeFaceRight />,\n },\n {\n label: UiFramework.translate(\"rotations.front\"),\n iconsSpec: <SvgCubeFaceFront />,\n },\n {\n label: UiFramework.translate(\"rotations.rear\"),\n iconsSpec: <SvgCubeFaceRear />,\n },\n {\n label: UiFramework.translate(\"rotations.isoLeft\"),\n iconsSpec: <SvgCubeFaceIsoLeft />,\n },\n {\n label: UiFramework.translate(\"rotations.isoRight\"),\n iconsSpec: <SvgCubeFaceIsoRight />,\n },\n ];\n this.state = {\n element: null,\n isExpanded: false,\n list,\n selected: StandardViewId.Top,\n };\n }\n\n public override render(): React.ReactNode {\n const className = classnames(\n \"uifw-standard-rotation-navigation\",\n this.props.className\n );\n\n return (\n <div className={className} style={this.props.style} ref={this._handleRef}>\n <NZ_Expandable className={\"expandable\"}>\n <NZ_Icon\n className={\"icon-button\"}\n icon={\n <span className={classnames(\"three-d-icon\", \"icon\")}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon\n iconSpec={this.state.list[this.state.selected].iconsSpec}\n />\n </span>\n }\n onClick={this._toggleIsExpanded}\n title={UiFramework.translate(\"standardRotationNavigationAid.title\")}\n ></NZ_Icon>\n </NZ_Expandable>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Popup\n isOpen={this.state.isExpanded}\n offset={0}\n onClose={this._handlePopupClose}\n position={RelativePosition.Bottom}\n target={this.state.element}\n >\n {this.getExpandedContent()}\n </Popup>\n </div>\n );\n }\n\n private _handleRef = (element: HTMLDivElement | null) => {\n this.setState(() => ({ element }));\n };\n\n private _handlePopupClose = () => {\n this.setState(() => ({ isExpanded: false }));\n };\n\n private _toggleIsExpanded = () => {\n this.setState((prevState) => ({ isExpanded: !prevState.isExpanded }));\n };\n\n private _handleListItemClicked = (item: number) => {\n const selected = item;\n\n this.setState(\n () => ({ isExpanded: false, selected }),\n () => ViewportComponentEvents.setStandardRotation(selected)\n );\n };\n\n private getExpandedContent(): React.ReactNode {\n if (!this.state.isExpanded) return undefined;\n\n return (\n <Panel>\n <Columns>\n <GroupColumn>\n {this.state.list.map((item, itemIndex) => {\n return (\n <GroupTool\n key={itemIndex.toString()}\n label={item.label}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n icon={<Icon iconSpec={item.iconsSpec} />}\n isActive={this.state.selected.valueOf() === itemIndex}\n onClick={() => this._handleListItemClicked(itemIndex)}\n item={ToolbarItemUtilities.createActionButton(\n \"\",\n 0,\n \"\",\n \"\",\n () => {}\n )}\n />\n );\n })}\n </GroupColumn>\n </Columns>\n </Panel>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"StandardRotationNavigationAid.js","sourceRoot":"","sources":["../../../src/appui-react/navigationaids/StandardRotationNavigationAid.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EACL,OAAO,EACP,WAAW,EACX,SAAS,EACT,KAAK,GACN,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,IAAI,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,sCAAsC,CAAC;AAE9C;;;GAGG;AACH,4DAA4D;AAC5D,MAAM,OAAO,oCAAqC,SAAQ,oBAAoB;IACrE,MAAM,CAAC,eAAe,GAAG,+BAA+B,CAAC;IAEhE,4DAA4D;IAC5D,YAAY,IAA4B,EAAE,OAAY;QACpD,4DAA4D;QAC5D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,oBAAC,6BAA6B,OAAG,CAAC;IACrD,CAAC;;AAgBH;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,KAAK,CAAC,SAGxD;IAC0B,KAAK,CAA+C;IAE7E,YAAY,KAAU;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,MAAM,IAAI,GAAmB;YAC3B;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC;gBAC7C,SAAS,EAAE,oBAAC,cAAc,OAAG;aAC9B;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,kBAAkB,CAAC;gBAChD,SAAS,EAAE,oBAAC,iBAAiB,OAAG;aACjC;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAC9C,SAAS,EAAE,oBAAC,eAAe,OAAG;aAC/B;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,iBAAiB,CAAC;gBAC/C,SAAS,EAAE,oBAAC,gBAAgB,OAAG;aAChC;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,iBAAiB,CAAC;gBAC/C,SAAS,EAAE,oBAAC,gBAAgB,OAAG;aAChC;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAC9C,SAAS,EAAE,oBAAC,eAAe,OAAG;aAC/B;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,mBAAmB,CAAC;gBACjD,SAAS,EAAE,oBAAC,kBAAkB,OAAG;aAClC;YACD;gBACE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBAClD,SAAS,EAAE,oBAAC,mBAAmB,OAAG;aACnC;SACF,CAAC;QACF,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK;YACjB,IAAI;YACJ,QAAQ,EAAE,cAAc,CAAC,GAAG;SAC7B,CAAC;IACJ,CAAC;IAEe,MAAM;QACpB,MAAM,SAAS,GAAG,UAAU,CAC1B,mCAAmC,EACnC,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB,CAAC;QAEF,OAAO,CACL,6BAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU;YACtE,oBAAC,aAAa,IAAC,SAAS,EAAE,YAAY;gBACpC,oBAAC,OAAO,IACN,SAAS,EAAE,aAAa,EACxB,IAAI,EACF,8BAAM,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC;wBAEjD,oBAAC,IAAI,IACH,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,GACxD,CACG,EAET,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAC/B,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,qCAAqC,CAAC,GAC1D,CACG;YAEhB,oBAAC,KAAK,IACJ,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAC7B,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAC/B,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAEzB,IAAI,CAAC,kBAAkB,EAAE,CACpB,CACJ,CACP,CAAC;IACJ,CAAC;IAEO,UAAU,GAAG,CAAC,OAA8B,EAAE,EAAE;QACtD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEM,iBAAiB,GAAG,GAAG,EAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEM,iBAAiB,GAAG,GAAG,EAAE;QAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IAEM,sBAAsB,GAAG,CAAC,IAAY,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,QAAQ,CACX,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EACvC,GAAG,EAAE,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAC5D,CAAC;IACJ,CAAC,CAAC;IAEM,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAE7C,OAAO,CACL,oBAAC,KAAK;YACJ,oBAAC,OAAO;gBACN,oBAAC,WAAW,QACT,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;oBACvC,OAAO,CACL,oBAAC,SAAS,IACR,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EACzB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,4DAA4D;wBAC5D,IAAI,EAAE,oBAAC,IAAI,IAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAI,EACxC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,SAAS,EACrD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,EACrD,IAAI,EAAE,oBAAoB,CAAC,kBAAkB,CAC3C,EAAE,EACF,CAAC,EACD,EAAE,EACF,EAAE,EACF,GAAG,EAAE,GAAE,CAAC,CACT,GACD,CACH,CAAC;gBACJ,CAAC,CAAC,CACU,CACN,CACJ,CACT,CAAC;IACJ,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module NavigationAids\n */\n\nimport { SvgCubeFaceBottom } from \"../icons/cube-faces/SvgCubeFaceBottom.js\";\nimport { SvgCubeFaceFront } from \"../icons/cube-faces/SvgCubeFaceFront.js\";\nimport { SvgCubeFaceIsoLeft } from \"../icons/cube-faces/SvgCubeFaceIsoLeft.js\";\nimport { SvgCubeFaceIsoRight } from \"../icons/cube-faces/SvgCubeFaceIsoRight.js\";\nimport { SvgCubeFaceLeft } from \"../icons/cube-faces/SvgCubeFaceLeft.js\";\nimport { SvgCubeFaceRear } from \"../icons/cube-faces/SvgCubeFaceRear.js\";\nimport { SvgCubeFaceRight } from \"../icons/cube-faces/SvgCubeFaceRight.js\";\nimport { SvgCubeFaceTop } from \"../icons/cube-faces/SvgCubeFaceTop.js\";\nimport { RelativePosition, ToolbarItemUtilities } from \"@itwin/appui-abstract\";\nimport {\n Columns,\n GroupColumn,\n GroupTool,\n Panel,\n} from \"@itwin/components-react/internal\";\nimport { StandardViewId } from \"@itwin/core-frontend\";\nimport type { CommonProps, IconSpec } from \"@itwin/core-react\";\nimport { Icon, Popup } from \"@itwin/core-react\";\nimport { ViewportComponentEvents } from \"@itwin/imodel-components-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { ConfigurableCreateInfo } from \"../configurableui/ConfigurableUiControl.js\";\nimport { ExpandableButton as NZ_Expandable } from \"../layout/widget/tools/button/Expandable.js\";\nimport { ToolbarIcon as NZ_Icon } from \"../layout/widget/tools/button/Icon.js\";\nimport { NavigationAidControl } from \"./NavigationAidControl.js\";\nimport \"./StandardRotationNavigationAid.scss\";\n\n/** A 3D Standard Rotation Navigation Aid control.\n * @public\n * @deprecated in 4.16.0. Use {@link StandardRotationNavigationAid} component instead.\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport class StandardRotationNavigationAidControl extends NavigationAidControl {\n public static navigationAidId = \"StandardRotationNavigationAid\";\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n constructor(info: ConfigurableCreateInfo, options: any) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n super(info, options);\n this.reactNode = <StandardRotationNavigationAid />;\n }\n}\n\ninterface RotationData {\n label: string;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconsSpec?: IconSpec;\n}\n\ninterface StandardRotationNavigationAidState {\n element: HTMLDivElement | null;\n isExpanded: boolean;\n list: RotationData[];\n selected: StandardViewId;\n}\n\n/** A 3D Standard Rotation Navigation Aid.\n * @public\n */\nexport class StandardRotationNavigationAid extends React.Component<\n CommonProps, // eslint-disable-line @typescript-eslint/no-deprecated\n StandardRotationNavigationAidState\n> {\n public override readonly state: Readonly<StandardRotationNavigationAidState>;\n\n constructor(props: any) {\n super(props);\n const list: RotationData[] = [\n {\n label: UiFramework.translate(\"rotations.top\"),\n iconsSpec: <SvgCubeFaceTop />,\n },\n {\n label: UiFramework.translate(\"rotations.bottom\"),\n iconsSpec: <SvgCubeFaceBottom />,\n },\n {\n label: UiFramework.translate(\"rotations.left\"),\n iconsSpec: <SvgCubeFaceLeft />,\n },\n {\n label: UiFramework.translate(\"rotations.right\"),\n iconsSpec: <SvgCubeFaceRight />,\n },\n {\n label: UiFramework.translate(\"rotations.front\"),\n iconsSpec: <SvgCubeFaceFront />,\n },\n {\n label: UiFramework.translate(\"rotations.rear\"),\n iconsSpec: <SvgCubeFaceRear />,\n },\n {\n label: UiFramework.translate(\"rotations.isoLeft\"),\n iconsSpec: <SvgCubeFaceIsoLeft />,\n },\n {\n label: UiFramework.translate(\"rotations.isoRight\"),\n iconsSpec: <SvgCubeFaceIsoRight />,\n },\n ];\n this.state = {\n element: null,\n isExpanded: false,\n list,\n selected: StandardViewId.Top,\n };\n }\n\n public override render(): React.ReactNode {\n const className = classnames(\n \"uifw-standard-rotation-navigation\",\n this.props.className\n );\n\n return (\n <div className={className} style={this.props.style} ref={this._handleRef}>\n <NZ_Expandable className={\"expandable\"}>\n <NZ_Icon\n className={\"icon-button\"}\n icon={\n <span className={classnames(\"three-d-icon\", \"icon\")}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon\n iconSpec={this.state.list[this.state.selected].iconsSpec}\n />\n </span>\n }\n onClick={this._toggleIsExpanded}\n title={UiFramework.translate(\"standardRotationNavigationAid.title\")}\n ></NZ_Icon>\n </NZ_Expandable>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Popup\n isOpen={this.state.isExpanded}\n offset={0}\n onClose={this._handlePopupClose}\n position={RelativePosition.Bottom}\n target={this.state.element}\n >\n {this.getExpandedContent()}\n </Popup>\n </div>\n );\n }\n\n private _handleRef = (element: HTMLDivElement | null) => {\n this.setState(() => ({ element }));\n };\n\n private _handlePopupClose = () => {\n this.setState(() => ({ isExpanded: false }));\n };\n\n private _toggleIsExpanded = () => {\n this.setState((prevState) => ({ isExpanded: !prevState.isExpanded }));\n };\n\n private _handleListItemClicked = (item: number) => {\n const selected = item;\n\n this.setState(\n () => ({ isExpanded: false, selected }),\n () => ViewportComponentEvents.setStandardRotation(selected)\n );\n };\n\n private getExpandedContent(): React.ReactNode {\n if (!this.state.isExpanded) return undefined;\n\n return (\n <Panel>\n <Columns>\n <GroupColumn>\n {this.state.list.map((item, itemIndex) => {\n return (\n <GroupTool\n key={itemIndex.toString()}\n label={item.label}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n icon={<Icon iconSpec={item.iconsSpec} />}\n isActive={this.state.selected.valueOf() === itemIndex}\n onClick={() => this._handleListItemClicked(itemIndex)}\n item={ToolbarItemUtilities.createActionButton(\n \"\",\n 0,\n \"\",\n \"\",\n () => {}\n )}\n />\n );\n })}\n </GroupColumn>\n </Columns>\n </Panel>\n );\n }\n}\n"]}
@@ -47,9 +47,6 @@ export class ExpandableSection extends React.PureComponent {
47
47
  /** Creates an ExpandableSection */
48
48
  constructor(props) {
49
49
  super(props);
50
- this._onClick = () => {
51
- this.setState((prevState) => ({ expanded: !prevState.expanded }));
52
- };
53
50
  this.state = { expanded: !!this.props.expanded };
54
51
  }
55
52
  /** @internal */
@@ -58,6 +55,9 @@ export class ExpandableSection extends React.PureComponent {
58
55
  this.setState({ expanded: true });
59
56
  }
60
57
  }
58
+ _onClick = () => {
59
+ this.setState((prevState) => ({ expanded: !prevState.expanded }));
60
+ };
61
61
  /** Renders ExpandableSection */
62
62
  render() {
63
63
  const className = classnames("nz-toolbar-item-expandable-group-group", this.props.className);
@@ -158,31 +158,6 @@ export class ListPicker extends React.Component {
158
158
  /** Creates a ListPicker */
159
159
  constructor(props) {
160
160
  super(props);
161
- // Handle enabling/disabling the items
162
- // This will call the this.props.setEnabled function to provide the parent with a chance to process it
163
- this._setEnabled = (item, enabled) => {
164
- if (this.isSpecialItem(item)) {
165
- switch (item.key) {
166
- case ListPicker.Key_All: {
167
- if (this.props.enableAllFunc)
168
- this.props.enableAllFunc();
169
- return;
170
- }
171
- case ListPicker.Key_None: {
172
- if (this.props.disableAllFunc)
173
- this.props.disableAllFunc();
174
- return;
175
- }
176
- case ListPicker.Key_Invert: {
177
- if (this.props.invertFunc)
178
- this.props.invertFunc();
179
- return;
180
- }
181
- }
182
- }
183
- // Call on parent to do processing of the item
184
- this.props.setEnabled(item, enabled);
185
- };
186
161
  }
187
162
  // Creates an array of items containing the separator and special requests (all, none, invert)
188
163
  createItems(items) {
@@ -247,6 +222,31 @@ export class ListPicker extends React.Component {
247
222
  item.type !== ListItemType.Item ||
248
223
  item.key === ListPicker.Key_Separator);
249
224
  }
225
+ // Handle enabling/disabling the items
226
+ // This will call the this.props.setEnabled function to provide the parent with a chance to process it
227
+ _setEnabled = (item, enabled) => {
228
+ if (this.isSpecialItem(item)) {
229
+ switch (item.key) {
230
+ case ListPicker.Key_All: {
231
+ if (this.props.enableAllFunc)
232
+ this.props.enableAllFunc();
233
+ return;
234
+ }
235
+ case ListPicker.Key_None: {
236
+ if (this.props.disableAllFunc)
237
+ this.props.disableAllFunc();
238
+ return;
239
+ }
240
+ case ListPicker.Key_Invert: {
241
+ if (this.props.invertFunc)
242
+ this.props.invertFunc();
243
+ return;
244
+ }
245
+ }
246
+ }
247
+ // Call on parent to do processing of the item
248
+ this.props.setEnabled(item, enabled);
249
+ };
250
250
  /** Renders ListPicker */
251
251
  render() {
252
252
  return (React.createElement(ListPickerPopupItem, { ...this.props, title: this.props.title, setEnabled: this._setEnabled, onExpanded: this.props.onExpanded, items: this.createItems(this.props.items),
@@ -1 +1 @@
1
- {"version":3,"file":"ListPicker.js","sourceRoot":"","sources":["../../../src/appui-react/pickers/ListPicker.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Picker\n */\n\nimport \"./ListPicker.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { PopupItem } from \"@itwin/components-react\";\nimport {\n Columns,\n GroupColumn,\n Panel,\n Title,\n} from \"@itwin/components-react/internal\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Icon, SearchBox } from \"@itwin/core-react\";\nimport { ToolbarDragInteractionContext } from \"../toolbar/DragInteraction.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport {\n SvgChevronDown,\n SvgChevronRight,\n SvgList,\n} from \"@itwin/itwinui-icons-react\";\nimport type { SizeProps } from \"../utils/SizeProps.js\";\n\n/** Enum for the list picker item type\n * @beta\n */\nexport enum ListItemType {\n Item = 0,\n Separator = 1,\n Container = 2,\n}\n\n/** List picker item\n * @beta\n */\nexport interface ListItem {\n [key: string]: any;\n id?: string;\n name?: string;\n enabled: boolean;\n type?: ListItemType;\n children?: ListItem[];\n}\n\n/** Properties for the [[ListPicker]] component\n * @beta\n */\nexport interface ListPickerProps {\n title: string;\n items: ListItem[];\n /** @deprecated in 4.16.0. Use {@link ListPickerProps.icon} instead. */\n iconSpec?: string | React.ReactNode;\n icon?: React.ReactNode;\n setEnabled: (item: ListItem, enabled: boolean) => any;\n onExpanded?: (expand: boolean) => void;\n onSizeKnown?: (size: SizeProps) => void;\n searchBox?: boolean;\n onSearchValueChange?: (search: string) => void;\n panelOnly?: boolean;\n expanded?: boolean;\n}\n\n/** Properties for the [[ListPickerItem]] component\n * @beta\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ListPickerItemProps extends CommonProps {\n key: any;\n isActive?: boolean;\n isFocused?: boolean;\n onClick?: () => void;\n label?: string;\n}\n\n/** List Picker Item React component\n * @beta\n */\nexport class ListPickerItem extends React.PureComponent<ListPickerItemProps> {\n /** Renders ListPickerItem */\n public override render() {\n const itemClassName = classnames(\n \"ListPicker-item\",\n this.props.isActive && \"is-active\",\n this.props.isFocused && \"is-focused\",\n this.props.className\n );\n // TODO - if cut off, show a title\n const title: string | undefined =\n this.props.label && this.props.label.length > 25\n ? this.props.label\n : undefined;\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n className={itemClassName}\n onClick={this.props.onClick}\n role=\"button\"\n tabIndex={-1}\n >\n <div className=\"label\" title={title}>\n {this.props.label}\n </div>\n </div>\n );\n }\n}\n\n/** Properties for the [[ExpandableSection]] component\n * @beta\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ExpandableSectionProps extends CommonProps {\n title?: string;\n expanded?: boolean;\n /** Content */\n children?: React.ReactNode;\n}\n\n/** State for the [[ExpandableSection]] component\n * @internal\n */\ninterface ExpandableSectionState {\n expanded: boolean;\n}\n\n/** Expandable Section React component\n * @beta\n */\nexport class ExpandableSection extends React.PureComponent<\n ExpandableSectionProps,\n ExpandableSectionState\n> {\n /** Creates an ExpandableSection */\n constructor(props: ExpandableSectionProps) {\n super(props);\n this.state = { expanded: !!this.props.expanded };\n }\n\n /** @internal */\n public override async componentDidUpdate(\n prevProps: Readonly<ExpandableSectionProps>\n ) {\n if (this.props.expanded !== prevProps.expanded) {\n this.setState({ expanded: true });\n }\n }\n\n private _onClick = () => {\n this.setState((prevState) => ({ expanded: !prevState.expanded }));\n };\n\n /** Renders ExpandableSection */\n public override render() {\n const className = classnames(\n \"nz-toolbar-item-expandable-group-group\",\n this.props.className\n );\n\n const icon = this.state.expanded ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={<SvgChevronDown />} />\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={<SvgChevronRight />} />\n );\n\n return (\n <Panel\n className={className}\n style={this.props.style}\n key={this.props.title}\n >\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <div\n onClick={this._onClick}\n className={\n this.state.expanded\n ? \"ListPickerInnerContainer-header-expanded\"\n : \"ListPickerInnerContainer-header\"\n }\n role=\"button\"\n tabIndex={-1}\n aria-expanded={this.state.expanded}\n >\n <div className=\"ListPickerInnerContainer-header-content\">\n <div className=\"ListPickerInnerContainer-expander\">{icon}</div>\n <div className=\"ListPickerInnerContainer-title\">\n {this.props.title}\n </div>\n </div>\n </div>\n {this.state.expanded ? (\n <GroupColumn>{this.props.children}</GroupColumn>\n ) : (\n <div />\n )}\n </Panel>\n );\n }\n}\n\n/** @beta */\nexport function getListPanel(props: ListPickerProps): React.ReactNode {\n const expandSingleSection = (): boolean => {\n const populatedContainers = props.items.filter((item: ListItem) => {\n return (\n item.type === ListItemType.Container && item.children!.length !== 0\n );\n });\n return populatedContainers.length === 1;\n };\n\n const listItemToElement = (item: ListItem, itemIndex: number) => {\n switch (item.type) {\n case ListItemType.Item:\n return (\n <ListPickerItem\n {...props}\n key={itemIndex.toString()}\n label={item.name}\n isActive={item.enabled}\n onClick={() => {\n props.setEnabled(item, !item.enabled);\n }}\n />\n );\n case ListItemType.Separator:\n return (\n <div key={itemIndex.toString()} className=\"ListPicker-separator\" />\n );\n case ListItemType.Container:\n if (item.children!.length !== 0) {\n return (\n <ExpandableSection\n key={itemIndex.toString()}\n title={item.name}\n className=\"ListPickerInnerContainer\"\n expanded={\n props.expanded === true\n ? !expandSingleSection()\n : expandSingleSection()\n }\n >\n <GroupColumn>{item.children!.map(listItemToElement)}</GroupColumn>\n </ExpandableSection>\n );\n } else {\n return <div key={itemIndex.toString()} />;\n }\n default:\n return <div key={itemIndex.toString()} />;\n }\n };\n\n return (\n <Panel className=\"ListPickerContainer\">\n <Title>{props.title}</Title>\n {props.searchBox && props.onSearchValueChange && (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <SearchBox\n className=\"ListPickerSearchBox\"\n onValueChanged={props.onSearchValueChange}\n />\n )}\n <Columns>\n <GroupColumn className=\"ListPicker-column\">\n {props.items.map(listItemToElement)}\n </GroupColumn>\n </Columns>\n </Panel>\n );\n}\n\n/**\n * List picker toolbar popup item.\n * Used to provide an expandable list of items to enable/disable items.\n * @beta\n */\nfunction ListPickerPopupItem(props: ListPickerProps) {\n const icon =\n props.icon ??\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (props.iconSpec ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n typeof props.iconSpec === \"string\" ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={props.iconSpec} />\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <i className=\"icon uifw-item-svg-icon\">{props.iconSpec}</i>\n )\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={<SvgList />} />\n ));\n\n return (\n <ToolbarDragInteractionContext.Consumer>\n {(isEnabled): React.ReactNode => {\n return props.panelOnly === true ? (\n getListPanel(props)\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <PopupItem\n className=\"ListPicker-button\"\n hideIndicator={isEnabled}\n icon={icon}\n title={props.title}\n panel={getListPanel(props)}\n />\n );\n }}\n </ToolbarDragInteractionContext.Consumer>\n );\n}\n\n/** Properties for the [[ListPicker]] component\n * @beta\n */\nexport interface ListPickerPropsExtended extends ListPickerProps {\n enableAllFunc?: () => void;\n disableAllFunc?: () => void;\n invertFunc?: () => void;\n}\n\n/**\n * List Picker that lets the user pick from a list of items to enable/disable\n * It also provides options to enable all, disable all and invert selection\n * @beta\n */\nexport class ListPicker extends React.Component<ListPickerPropsExtended> {\n public static get Key_All() {\n return -3;\n }\n public static get Key_None() {\n return -2;\n }\n public static get Key_Invert() {\n return -1;\n }\n public static get Key_Separator() {\n return -4;\n }\n\n /** Creates a ListPicker */\n constructor(props: ListPickerPropsExtended) {\n super(props);\n }\n\n // Creates an array of items containing the separator and special requests (all, none, invert)\n private createItems(items: ListItem[]): ListItem[] {\n const newItems: ListItem[] = [];\n\n // Create special buttons (All/None/Invert)\n if (this.props.enableAllFunc) {\n let allEnabled = true;\n items.map((item: ListItem) => {\n allEnabled = allEnabled && item.enabled;\n });\n newItems.push({\n key: ListPicker.Key_All,\n name: UiFramework.translate(\"pickerButtons.all\"),\n enabled: allEnabled,\n type: ListItemType.Item,\n });\n }\n if (this.props.disableAllFunc) {\n let allDisabled = false;\n items.map((item: ListItem) => {\n allDisabled = allDisabled || item.enabled;\n });\n newItems.push({\n key: ListPicker.Key_None,\n name: UiFramework.translate(\"pickerButtons.none\"),\n enabled: !allDisabled,\n type: ListItemType.Item,\n });\n }\n if (this.props.invertFunc) {\n newItems.push({\n key: ListPicker.Key_Invert,\n name: UiFramework.translate(\"pickerButtons.invert\"),\n enabled: false,\n type: ListItemType.Item,\n });\n }\n if (\n this.props.enableAllFunc ||\n this.props.disableAllFunc ||\n this.props.invertFunc\n ) {\n newItems.push({\n key: ListPicker.Key_Separator,\n name: UiFramework.translate(\"pickerButtons.separator\"),\n enabled: false,\n type: ListItemType.Separator,\n });\n }\n\n // Push items\n items.map((item) => {\n newItems.push(item);\n });\n return newItems;\n }\n\n /**\n * Checks if item is a special item.\n * @param item Item to check\n */\n public isSpecialItem(item: ListItem) {\n return (\n item.key === ListPicker.Key_All ||\n item.key === ListPicker.Key_Invert ||\n item.key === ListPicker.Key_None ||\n item.type !== ListItemType.Item ||\n item.key === ListPicker.Key_Separator\n );\n }\n\n // Handle enabling/disabling the items\n // This will call the this.props.setEnabled function to provide the parent with a chance to process it\n private _setEnabled = (item: ListItem, enabled: boolean) => {\n if (this.isSpecialItem(item)) {\n switch (item.key) {\n case ListPicker.Key_All: {\n if (this.props.enableAllFunc) this.props.enableAllFunc();\n return;\n }\n case ListPicker.Key_None: {\n if (this.props.disableAllFunc) this.props.disableAllFunc();\n return;\n }\n case ListPicker.Key_Invert: {\n if (this.props.invertFunc) this.props.invertFunc();\n return;\n }\n }\n }\n\n // Call on parent to do processing of the item\n this.props.setEnabled(item, enabled);\n };\n\n /** Renders ListPicker */\n public override render() {\n return (\n <ListPickerPopupItem\n {...this.props}\n title={this.props.title}\n setEnabled={this._setEnabled}\n onExpanded={this.props.onExpanded}\n items={this.createItems(this.props.items)}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={this.props.iconSpec}\n icon={this.props.icon}\n />\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ListPicker.js","sourceRoot":"","sources":["../../../src/appui-react/pickers/ListPicker.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Picker\n */\n\nimport \"./ListPicker.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { PopupItem } from \"@itwin/components-react\";\nimport {\n Columns,\n GroupColumn,\n Panel,\n Title,\n} from \"@itwin/components-react/internal\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Icon, SearchBox } from \"@itwin/core-react\";\nimport { ToolbarDragInteractionContext } from \"../toolbar/DragInteraction.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport {\n SvgChevronDown,\n SvgChevronRight,\n SvgList,\n} from \"@itwin/itwinui-icons-react\";\nimport type { SizeProps } from \"../utils/SizeProps.js\";\n\n/** Enum for the list picker item type\n * @beta\n */\nexport enum ListItemType {\n Item = 0,\n Separator = 1,\n Container = 2,\n}\n\n/** List picker item\n * @beta\n */\nexport interface ListItem {\n [key: string]: any;\n id?: string;\n name?: string;\n enabled: boolean;\n type?: ListItemType;\n children?: ListItem[];\n}\n\n/** Properties for the [[ListPicker]] component\n * @beta\n */\nexport interface ListPickerProps {\n title: string;\n items: ListItem[];\n /** @deprecated in 4.16.0. Use {@link ListPickerProps.icon} instead. */\n iconSpec?: string | React.ReactNode;\n icon?: React.ReactNode;\n setEnabled: (item: ListItem, enabled: boolean) => any;\n onExpanded?: (expand: boolean) => void;\n onSizeKnown?: (size: SizeProps) => void;\n searchBox?: boolean;\n onSearchValueChange?: (search: string) => void;\n panelOnly?: boolean;\n expanded?: boolean;\n}\n\n/** Properties for the [[ListPickerItem]] component\n * @beta\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ListPickerItemProps extends CommonProps {\n key: any;\n isActive?: boolean;\n isFocused?: boolean;\n onClick?: () => void;\n label?: string;\n}\n\n/** List Picker Item React component\n * @beta\n */\nexport class ListPickerItem extends React.PureComponent<ListPickerItemProps> {\n /** Renders ListPickerItem */\n public override render() {\n const itemClassName = classnames(\n \"ListPicker-item\",\n this.props.isActive && \"is-active\",\n this.props.isFocused && \"is-focused\",\n this.props.className\n );\n // TODO - if cut off, show a title\n const title: string | undefined =\n this.props.label && this.props.label.length > 25\n ? this.props.label\n : undefined;\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div\n className={itemClassName}\n onClick={this.props.onClick}\n role=\"button\"\n tabIndex={-1}\n >\n <div className=\"label\" title={title}>\n {this.props.label}\n </div>\n </div>\n );\n }\n}\n\n/** Properties for the [[ExpandableSection]] component\n * @beta\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ExpandableSectionProps extends CommonProps {\n title?: string;\n expanded?: boolean;\n /** Content */\n children?: React.ReactNode;\n}\n\n/** State for the [[ExpandableSection]] component\n * @internal\n */\ninterface ExpandableSectionState {\n expanded: boolean;\n}\n\n/** Expandable Section React component\n * @beta\n */\nexport class ExpandableSection extends React.PureComponent<\n ExpandableSectionProps,\n ExpandableSectionState\n> {\n /** Creates an ExpandableSection */\n constructor(props: ExpandableSectionProps) {\n super(props);\n this.state = { expanded: !!this.props.expanded };\n }\n\n /** @internal */\n public override async componentDidUpdate(\n prevProps: Readonly<ExpandableSectionProps>\n ) {\n if (this.props.expanded !== prevProps.expanded) {\n this.setState({ expanded: true });\n }\n }\n\n private _onClick = () => {\n this.setState((prevState) => ({ expanded: !prevState.expanded }));\n };\n\n /** Renders ExpandableSection */\n public override render() {\n const className = classnames(\n \"nz-toolbar-item-expandable-group-group\",\n this.props.className\n );\n\n const icon = this.state.expanded ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={<SvgChevronDown />} />\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={<SvgChevronRight />} />\n );\n\n return (\n <Panel\n className={className}\n style={this.props.style}\n key={this.props.title}\n >\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <div\n onClick={this._onClick}\n className={\n this.state.expanded\n ? \"ListPickerInnerContainer-header-expanded\"\n : \"ListPickerInnerContainer-header\"\n }\n role=\"button\"\n tabIndex={-1}\n aria-expanded={this.state.expanded}\n >\n <div className=\"ListPickerInnerContainer-header-content\">\n <div className=\"ListPickerInnerContainer-expander\">{icon}</div>\n <div className=\"ListPickerInnerContainer-title\">\n {this.props.title}\n </div>\n </div>\n </div>\n {this.state.expanded ? (\n <GroupColumn>{this.props.children}</GroupColumn>\n ) : (\n <div />\n )}\n </Panel>\n );\n }\n}\n\n/** @beta */\nexport function getListPanel(props: ListPickerProps): React.ReactNode {\n const expandSingleSection = (): boolean => {\n const populatedContainers = props.items.filter((item: ListItem) => {\n return (\n item.type === ListItemType.Container && item.children!.length !== 0\n );\n });\n return populatedContainers.length === 1;\n };\n\n const listItemToElement = (item: ListItem, itemIndex: number) => {\n switch (item.type) {\n case ListItemType.Item:\n return (\n <ListPickerItem\n {...props}\n key={itemIndex.toString()}\n label={item.name}\n isActive={item.enabled}\n onClick={() => {\n props.setEnabled(item, !item.enabled);\n }}\n />\n );\n case ListItemType.Separator:\n return (\n <div key={itemIndex.toString()} className=\"ListPicker-separator\" />\n );\n case ListItemType.Container:\n if (item.children!.length !== 0) {\n return (\n <ExpandableSection\n key={itemIndex.toString()}\n title={item.name}\n className=\"ListPickerInnerContainer\"\n expanded={\n props.expanded === true\n ? !expandSingleSection()\n : expandSingleSection()\n }\n >\n <GroupColumn>{item.children!.map(listItemToElement)}</GroupColumn>\n </ExpandableSection>\n );\n } else {\n return <div key={itemIndex.toString()} />;\n }\n default:\n return <div key={itemIndex.toString()} />;\n }\n };\n\n return (\n <Panel className=\"ListPickerContainer\">\n <Title>{props.title}</Title>\n {props.searchBox && props.onSearchValueChange && (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <SearchBox\n className=\"ListPickerSearchBox\"\n onValueChanged={props.onSearchValueChange}\n />\n )}\n <Columns>\n <GroupColumn className=\"ListPicker-column\">\n {props.items.map(listItemToElement)}\n </GroupColumn>\n </Columns>\n </Panel>\n );\n}\n\n/**\n * List picker toolbar popup item.\n * Used to provide an expandable list of items to enable/disable items.\n * @beta\n */\nfunction ListPickerPopupItem(props: ListPickerProps) {\n const icon =\n props.icon ??\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (props.iconSpec ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n typeof props.iconSpec === \"string\" ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={props.iconSpec} />\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <i className=\"icon uifw-item-svg-icon\">{props.iconSpec}</i>\n )\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={<SvgList />} />\n ));\n\n return (\n <ToolbarDragInteractionContext.Consumer>\n {(isEnabled): React.ReactNode => {\n return props.panelOnly === true ? (\n getListPanel(props)\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <PopupItem\n className=\"ListPicker-button\"\n hideIndicator={isEnabled}\n icon={icon}\n title={props.title}\n panel={getListPanel(props)}\n />\n );\n }}\n </ToolbarDragInteractionContext.Consumer>\n );\n}\n\n/** Properties for the [[ListPicker]] component\n * @beta\n */\nexport interface ListPickerPropsExtended extends ListPickerProps {\n enableAllFunc?: () => void;\n disableAllFunc?: () => void;\n invertFunc?: () => void;\n}\n\n/**\n * List Picker that lets the user pick from a list of items to enable/disable\n * It also provides options to enable all, disable all and invert selection\n * @beta\n */\nexport class ListPicker extends React.Component<ListPickerPropsExtended> {\n public static get Key_All() {\n return -3;\n }\n public static get Key_None() {\n return -2;\n }\n public static get Key_Invert() {\n return -1;\n }\n public static get Key_Separator() {\n return -4;\n }\n\n /** Creates a ListPicker */\n constructor(props: ListPickerPropsExtended) {\n super(props);\n }\n\n // Creates an array of items containing the separator and special requests (all, none, invert)\n private createItems(items: ListItem[]): ListItem[] {\n const newItems: ListItem[] = [];\n\n // Create special buttons (All/None/Invert)\n if (this.props.enableAllFunc) {\n let allEnabled = true;\n items.map((item: ListItem) => {\n allEnabled = allEnabled && item.enabled;\n });\n newItems.push({\n key: ListPicker.Key_All,\n name: UiFramework.translate(\"pickerButtons.all\"),\n enabled: allEnabled,\n type: ListItemType.Item,\n });\n }\n if (this.props.disableAllFunc) {\n let allDisabled = false;\n items.map((item: ListItem) => {\n allDisabled = allDisabled || item.enabled;\n });\n newItems.push({\n key: ListPicker.Key_None,\n name: UiFramework.translate(\"pickerButtons.none\"),\n enabled: !allDisabled,\n type: ListItemType.Item,\n });\n }\n if (this.props.invertFunc) {\n newItems.push({\n key: ListPicker.Key_Invert,\n name: UiFramework.translate(\"pickerButtons.invert\"),\n enabled: false,\n type: ListItemType.Item,\n });\n }\n if (\n this.props.enableAllFunc ||\n this.props.disableAllFunc ||\n this.props.invertFunc\n ) {\n newItems.push({\n key: ListPicker.Key_Separator,\n name: UiFramework.translate(\"pickerButtons.separator\"),\n enabled: false,\n type: ListItemType.Separator,\n });\n }\n\n // Push items\n items.map((item) => {\n newItems.push(item);\n });\n return newItems;\n }\n\n /**\n * Checks if item is a special item.\n * @param item Item to check\n */\n public isSpecialItem(item: ListItem) {\n return (\n item.key === ListPicker.Key_All ||\n item.key === ListPicker.Key_Invert ||\n item.key === ListPicker.Key_None ||\n item.type !== ListItemType.Item ||\n item.key === ListPicker.Key_Separator\n );\n }\n\n // Handle enabling/disabling the items\n // This will call the this.props.setEnabled function to provide the parent with a chance to process it\n private _setEnabled = (item: ListItem, enabled: boolean) => {\n if (this.isSpecialItem(item)) {\n switch (item.key) {\n case ListPicker.Key_All: {\n if (this.props.enableAllFunc) this.props.enableAllFunc();\n return;\n }\n case ListPicker.Key_None: {\n if (this.props.disableAllFunc) this.props.disableAllFunc();\n return;\n }\n case ListPicker.Key_Invert: {\n if (this.props.invertFunc) this.props.invertFunc();\n return;\n }\n }\n }\n\n // Call on parent to do processing of the item\n this.props.setEnabled(item, enabled);\n };\n\n /** Renders ListPicker */\n public override render() {\n return (\n <ListPickerPopupItem\n {...this.props}\n title={this.props.title}\n setEnabled={this._setEnabled}\n onExpanded={this.props.onExpanded}\n items={this.createItems(this.props.items)}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={this.props.iconSpec}\n icon={this.props.icon}\n />\n );\n }\n}\n"]}