@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.
- package/CHANGELOG.md +27 -0
- package/lib/appui-react/UiFramework.js +20 -13
- package/lib/appui-react/UiFramework.js.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawPopupManager.js +1 -1
- package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
- package/lib/appui-react/accudraw/AccuDrawWidget.js +1 -1
- package/lib/appui-react/accudraw/AccuDrawWidget.js.map +1 -1
- package/lib/appui-react/accudraw/Calculator.js +92 -98
- package/lib/appui-react/accudraw/Calculator.js.map +1 -1
- package/lib/appui-react/accudraw/CalculatorEngine.js +130 -129
- package/lib/appui-react/accudraw/CalculatorEngine.js.map +1 -1
- package/lib/appui-react/accudraw/CalculatorPopup.js +9 -12
- package/lib/appui-react/accudraw/CalculatorPopup.js.map +1 -1
- package/lib/appui-react/accudraw/FrameworkAccuDraw.js +39 -38
- package/lib/appui-react/accudraw/FrameworkAccuDraw.js.map +1 -1
- package/lib/appui-react/accudraw/MenuButton.js +20 -20
- package/lib/appui-react/accudraw/MenuButton.js.map +1 -1
- package/lib/appui-react/accudraw/MenuButtonPopup.js +9 -12
- package/lib/appui-react/accudraw/MenuButtonPopup.js.map +1 -1
- package/lib/appui-react/backstage/BackstageItemsManager.js +5 -5
- package/lib/appui-react/backstage/BackstageItemsManager.js.map +1 -1
- package/lib/appui-react/backstage/BackstageManager.js +1 -3
- package/lib/appui-react/backstage/BackstageManager.js.map +1 -1
- package/lib/appui-react/backstage/InternalBackstageManager.js +3 -5
- package/lib/appui-react/backstage/InternalBackstageManager.js.map +1 -1
- package/lib/appui-react/childwindow/InternalChildWindowManager.js +30 -32
- package/lib/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
- package/lib/appui-react/configurableui/ActivityTracker.js +33 -33
- package/lib/appui-react/configurableui/ActivityTracker.js.map +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
- package/lib/appui-react/configurableui/ConfigurableUiControl.js +8 -0
- package/lib/appui-react/configurableui/ConfigurableUiControl.js.map +1 -1
- package/lib/appui-react/configurableui/InternalConfigurableUiManager.js +8 -8
- package/lib/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
- package/lib/appui-react/configurableui/TimeTracker.js +25 -27
- package/lib/appui-react/configurableui/TimeTracker.js.map +1 -1
- package/lib/appui-react/content/ContentControl.js +2 -1
- package/lib/appui-react/content/ContentControl.js.map +1 -1
- package/lib/appui-react/content/ContentGroup.js +8 -4
- package/lib/appui-react/content/ContentGroup.js.map +1 -1
- package/lib/appui-react/content/ContentLayout.js +47 -38
- package/lib/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/appui-react/content/IModelViewport.js +28 -23
- package/lib/appui-react/content/IModelViewport.js.map +1 -1
- package/lib/appui-react/content/InternalContentLayoutManager.js +1 -1
- package/lib/appui-react/content/InternalContentLayoutManager.js.map +1 -1
- package/lib/appui-react/content/InternalContentViewManager.js +9 -8
- package/lib/appui-react/content/InternalContentViewManager.js.map +1 -1
- package/lib/appui-react/content/StandardContentLayouts.js +141 -141
- package/lib/appui-react/content/StandardContentLayouts.js.map +1 -1
- package/lib/appui-react/content/ViewportContentControl.js +25 -22
- package/lib/appui-react/content/ViewportContentControl.js.map +1 -1
- package/lib/appui-react/cursor/CursorInformation.js +7 -6
- package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
- package/lib/appui-react/cursor/cursorpopup/CursorPopup.js +9 -9
- package/lib/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +7 -7
- package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
- package/lib/appui-react/dialog/DialogManagerBase.js +18 -19
- package/lib/appui-react/dialog/DialogManagerBase.js.map +1 -1
- package/lib/appui-react/dialog/InternalContentDialogManager.js +7 -7
- package/lib/appui-react/dialog/InternalContentDialogManager.js.map +1 -1
- package/lib/appui-react/dialog/InternalModalDialogManager.js +4 -4
- package/lib/appui-react/dialog/InternalModalDialogManager.js.map +1 -1
- package/lib/appui-react/dialog/InternalModelessDialogManager.js +6 -6
- package/lib/appui-react/dialog/InternalModelessDialogManager.js.map +1 -1
- package/lib/appui-react/dialog/ModelessDialog.js +3 -3
- package/lib/appui-react/dialog/ModelessDialog.js.map +1 -1
- package/lib/appui-react/feedback/ElementTooltip.js +3 -1
- package/lib/appui-react/feedback/ElementTooltip.js.map +1 -1
- package/lib/appui-react/feedback/ValidationTextbox.js +25 -25
- package/lib/appui-react/feedback/ValidationTextbox.js.map +1 -1
- package/lib/appui-react/frontstage/FrontstageDef.js +28 -10
- package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
- package/lib/appui-react/frontstage/InternalFrontstageManager.js +96 -96
- package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
- package/lib/appui-react/frontstage/ModalFrontstage.js +5 -5
- package/lib/appui-react/frontstage/ModalFrontstage.js.map +1 -1
- package/lib/appui-react/frontstage/ModalSettingsStage.js +5 -4
- package/lib/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
- package/lib/appui-react/frontstage/StandardFrontstageProvider.js +1 -0
- package/lib/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
- package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js +22 -22
- package/lib/appui-react/keyboardshortcut/InternalKeyboardShortcut.js.map +1 -1
- package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js +11 -9
- package/lib/appui-react/keyboardshortcut/KeyboardShortcut.js.map +1 -1
- package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js +17 -20
- package/lib/appui-react/keyboardshortcut/KeyboardShortcutMenu.js.map +1 -1
- package/lib/appui-react/layout/backstage/Backstage.js +11 -14
- package/lib/appui-react/layout/backstage/Backstage.js.map +1 -1
- package/lib/appui-react/layout/base/DragManager.js +6 -7
- package/lib/appui-react/layout/base/DragManager.js.map +1 -1
- package/lib/appui-react/layout/base/SafeAreaInsets.js +8 -8
- package/lib/appui-react/layout/base/SafeAreaInsets.js.map +1 -1
- package/lib/appui-react/layout/popup/Tooltip.js +8 -11
- package/lib/appui-react/layout/popup/Tooltip.js.map +1 -1
- package/lib/appui-react/layout/state/NineZoneStateReducer.d.ts.map +1 -1
- package/lib/appui-react/layout/state/NineZoneStateReducer.js +8 -4
- package/lib/appui-react/layout/state/NineZoneStateReducer.js.map +1 -1
- package/lib/appui-react/layout/widget/Overflow.d.ts.map +1 -1
- package/lib/appui-react/layout/widget/Overflow.js +11 -17
- package/lib/appui-react/layout/widget/Overflow.js.map +1 -1
- package/lib/appui-react/layout/widget/Overflow.scss +3 -48
- package/lib/appui-react/layout/widget/Tab.d.ts.map +1 -1
- package/lib/appui-react/layout/widget/Tab.js +7 -5
- package/lib/appui-react/layout/widget/Tab.js.map +1 -1
- package/lib/appui-react/messages/InputField.js +21 -24
- package/lib/appui-react/messages/InputField.js.map +1 -1
- package/lib/appui-react/messages/MessageManager.js +39 -38
- package/lib/appui-react/messages/MessageManager.js.map +1 -1
- package/lib/appui-react/messages/Pointer.js +38 -38
- package/lib/appui-react/messages/Pointer.js.map +1 -1
- package/lib/appui-react/messages/ReactNotifyMessageDetails.js +6 -0
- package/lib/appui-react/messages/ReactNotifyMessageDetails.js.map +1 -1
- package/lib/appui-react/messages/StatusMessageManager.js +2 -4
- package/lib/appui-react/messages/StatusMessageManager.js.map +1 -1
- package/lib/appui-react/navigationaids/CubeNavigationAidControl.js +1 -1
- package/lib/appui-react/navigationaids/CubeNavigationAidControl.js.map +1 -1
- package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js +1 -1
- package/lib/appui-react/navigationaids/DrawingNavigationAidControl.js.map +1 -1
- package/lib/appui-react/navigationaids/NavigationAidControl.js +1 -0
- package/lib/appui-react/navigationaids/NavigationAidControl.js.map +1 -1
- package/lib/appui-react/navigationaids/SheetNavigationAid.js +55 -54
- package/lib/appui-react/navigationaids/SheetNavigationAid.js.map +1 -1
- package/lib/appui-react/navigationaids/SheetsModalFrontstage.js +22 -20
- package/lib/appui-react/navigationaids/SheetsModalFrontstage.js.map +1 -1
- package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js +15 -14
- package/lib/appui-react/navigationaids/StandardRotationNavigationAid.js.map +1 -1
- package/lib/appui-react/pickers/ListPicker.js +28 -28
- package/lib/appui-react/pickers/ListPicker.js.map +1 -1
- package/lib/appui-react/pickers/ViewSelector.js +87 -86
- package/lib/appui-react/pickers/ViewSelector.js.map +1 -1
- package/lib/appui-react/popup/CardPopup.js +18 -21
- package/lib/appui-react/popup/CardPopup.js.map +1 -1
- package/lib/appui-react/popup/HTMLElementPopup.js +9 -12
- package/lib/appui-react/popup/HTMLElementPopup.js.map +1 -1
- package/lib/appui-react/popup/InputEditorPopup.js +18 -20
- package/lib/appui-react/popup/InputEditorPopup.js.map +1 -1
- package/lib/appui-react/popup/PopupManager.js +22 -25
- package/lib/appui-react/popup/PopupManager.js.map +1 -1
- package/lib/appui-react/popup/ToolSettingsPopup.js +17 -17
- package/lib/appui-react/popup/ToolSettingsPopup.js.map +1 -1
- package/lib/appui-react/popup/ToolbarPopup.js +18 -21
- package/lib/appui-react/popup/ToolbarPopup.js.map +1 -1
- package/lib/appui-react/redux/ReducerRegistry.js +2 -0
- package/lib/appui-react/redux/ReducerRegistry.js.map +1 -1
- package/lib/appui-react/redux/StateManager.js +4 -1
- package/lib/appui-react/redux/StateManager.js.map +1 -1
- package/lib/appui-react/selection/HideIsolateEmphasizeManager.js +7 -3
- package/lib/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
- package/lib/appui-react/shared/ActionButtonItemDef.js +13 -6
- package/lib/appui-react/shared/ActionButtonItemDef.js.map +1 -1
- package/lib/appui-react/shared/CommandItemDef.js +3 -3
- package/lib/appui-react/shared/CommandItemDef.js.map +1 -1
- package/lib/appui-react/shared/CustomItemDef.js +4 -2
- package/lib/appui-react/shared/CustomItemDef.js.map +1 -1
- package/lib/appui-react/shared/ItemDefBase.js +13 -5
- package/lib/appui-react/shared/ItemDefBase.js.map +1 -1
- package/lib/appui-react/shared/MenuItem.js +6 -1
- package/lib/appui-react/shared/MenuItem.js.map +1 -1
- package/lib/appui-react/shared/ToolItemDef.js +1 -1
- package/lib/appui-react/shared/ToolItemDef.js.map +1 -1
- package/lib/appui-react/stagepanels/StagePanelDef.js +4 -3
- package/lib/appui-react/stagepanels/StagePanelDef.js.map +1 -1
- package/lib/appui-react/statusbar/StatusBarItemsManager.js +5 -5
- package/lib/appui-react/statusbar/StatusBarItemsManager.js.map +1 -1
- package/lib/appui-react/statusfields/ViewAttributes.js +16 -16
- package/lib/appui-react/statusfields/ViewAttributes.js.map +1 -1
- package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js +35 -33
- package/lib/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
- package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js +7 -0
- package/lib/appui-react/syncui/InternalSyncUiEventDispatcher.js.map +1 -1
- package/lib/appui-react/syncui/SyncUiEventDispatcher.js +4 -3
- package/lib/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
- package/lib/appui-react/timeline/AnalysisAnimationProvider.js +9 -8
- package/lib/appui-react/timeline/AnalysisAnimationProvider.js.map +1 -1
- package/lib/appui-react/timeline/ScheduleAnimationProvider.js +13 -12
- package/lib/appui-react/timeline/ScheduleAnimationProvider.js.map +1 -1
- package/lib/appui-react/timeline/SolarTimelineDataProvider.js +6 -5
- package/lib/appui-react/timeline/SolarTimelineDataProvider.js.map +1 -1
- package/lib/appui-react/toolbar/GroupItem.js +11 -5
- package/lib/appui-react/toolbar/GroupItem.js.map +1 -1
- package/lib/appui-react/toolbar/ToolbarItemsManager.js +7 -7
- package/lib/appui-react/toolbar/ToolbarItemsManager.js.map +1 -1
- package/lib/appui-react/tools/FrameworkToolAdmin.js +5 -1
- package/lib/appui-react/tools/FrameworkToolAdmin.js.map +1 -1
- package/lib/appui-react/tools/KeyinPaletteTools.js +2 -2
- package/lib/appui-react/tools/KeyinPaletteTools.js.map +1 -1
- package/lib/appui-react/tools/OpenSettingsTool.js +2 -2
- package/lib/appui-react/tools/OpenSettingsTool.js.map +1 -1
- package/lib/appui-react/tools/RestoreLayoutTool.js +4 -4
- package/lib/appui-react/tools/RestoreLayoutTool.js.map +1 -1
- package/lib/appui-react/tools/ToolSettingsTools.js +2 -2
- package/lib/appui-react/tools/ToolSettingsTools.js.map +1 -1
- package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js +15 -18
- package/lib/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
- package/lib/appui-react/toolsettings/InternalToolSettingsManager.js +8 -8
- package/lib/appui-react/toolsettings/InternalToolSettingsManager.js.map +1 -1
- package/lib/appui-react/toolsettings/ToolInformation.js +2 -0
- package/lib/appui-react/toolsettings/ToolInformation.js.map +1 -1
- package/lib/appui-react/toolsettings/ToolUiProvider.js +3 -0
- package/lib/appui-react/toolsettings/ToolUiProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js +1 -0
- package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
- package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js +2 -0
- package/lib/appui-react/ui-items-provider/BaseUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardContentToolsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardNavigationToolsUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -0
- package/lib/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
- package/lib/appui-react/ui-items-provider/UiItemsManager.js +3 -3
- package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
- package/lib/appui-react/uiadmin/FrameworkUiAdmin.js +1 -4
- package/lib/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
- package/lib/appui-react/uiprovider/ComponentGenerator.js +2 -0
- package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
- package/lib/appui-react/uistate/AppUiSettings.js +41 -33
- package/lib/appui-react/uistate/AppUiSettings.js.map +1 -1
- package/lib/appui-react/utils/InternalUiShowHideManager.js +13 -14
- package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
- package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js +2 -5
- package/lib/appui-react/widgets/StatusBarWidgetComposerControl.js.map +1 -1
- package/lib/appui-react/widgets/WidgetControl.js +2 -0
- package/lib/appui-react/widgets/WidgetControl.js.map +1 -1
- package/lib/appui-react/widgets/WidgetDef.js +28 -7
- package/lib/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/appui-react/widgets/WidgetHost.js +4 -4
- package/lib/appui-react/widgets/WidgetHost.js.map +1 -1
- package/lib/appui-react/widgets/WidgetManager.js +5 -7
- package/lib/appui-react/widgets/WidgetManager.js.map +1 -1
- package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
- package/lib/cjs/appui-react/layout/widget/Overflow.scss +3 -48
- package/lib/esm/appui-react/configurableui/ConfigurableUiContent.scss +0 -1
- package/lib/esm/appui-react/layout/widget/Overflow.scss +3 -48
- package/package.json +10 -11
- package/lib/appui-react/layout/widget/Menu.d.ts +0 -16
- package/lib/appui-react/layout/widget/Menu.d.ts.map +0 -1
- package/lib/appui-react/layout/widget/Menu.js +0 -21
- package/lib/appui-react/layout/widget/Menu.js.map +0 -1
- package/lib/appui-react/layout/widget/Menu.scss +0 -12
- package/lib/cjs/appui-react/layout/widget/Menu.scss +0 -12
- 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":"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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"]}
|
|
@@ -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":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,mBAAmB,CAAC;AAC3B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,OAAO,EACP,WAAW,EACX,KAAK,EACL,KAAK,GACN,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,cAAc,EACd,eAAe,EACf,OAAO,GACR,MAAM,4BAA4B,CAAC;AAGpC;;GAEG;AACH,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,+CAAQ,CAAA;IACR,yDAAa,CAAA;IACb,yDAAa,CAAA;AACf,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AA4CD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK,CAAC,aAAkC;IAC1E,6BAA6B;IACb,MAAM;QACpB,MAAM,aAAa,GAAG,UAAU,CAC9B,iBAAiB,EACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,EAClC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,YAAY,EACpC,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB,CAAC;QACF,kCAAkC;QAClC,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;YAC9C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK;YAClB,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;QACL,iEAAiE;QACjE,6BACE,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAC3B,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC;YAEZ,6BAAK,SAAS,EAAC,OAAO,EAAC,KAAK,EAAE,KAAK,IAChC,IAAI,CAAC,KAAK,CAAC,KAAK,CACb,CACF,CACP,CAAC;IACJ,CAAC;CACF;AAoBD;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK,CAAC,aAG5C;IACC,mCAAmC;IACnC,YAAY,KAA6B;QACvC,KAAK,CAAC,KAAK,CAAC,CAAC;QAaP,aAAQ,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC;QAdA,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;IAED,gBAAgB;IACA,KAAK,CAAC,kBAAkB,CACtC,SAA2C;QAE3C,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAMD,gCAAgC;IAChB,MAAM;QACpB,MAAM,SAAS,GAAG,UAAU,CAC1B,wCAAwC,EACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CACrB,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjC,4DAA4D;QAC5D,oBAAC,IAAI,IAAC,QAAQ,EAAE,oBAAC,cAAc,OAAG,GAAI,CACvC,CAAC,CAAC,CAAC;QACF,4DAA4D;QAC5D,oBAAC,IAAI,IAAC,QAAQ,EAAE,oBAAC,eAAe,OAAG,GAAI,CACxC,CAAC;QAEF,OAAO,CACL,oBAAC,KAAK,IACJ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YAGrB,6BACE,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,SAAS,EACP,IAAI,CAAC,KAAK,CAAC,QAAQ;oBACjB,CAAC,CAAC,0CAA0C;oBAC5C,CAAC,CAAC,iCAAiC,EAEvC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC,mBACG,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAElC,6BAAK,SAAS,EAAC,yCAAyC;oBACtD,6BAAK,SAAS,EAAC,mCAAmC,IAAE,IAAI,CAAO;oBAC/D,6BAAK,SAAS,EAAC,gCAAgC,IAC5C,IAAI,CAAC,KAAK,CAAC,KAAK,CACb,CACF,CACF;YACL,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrB,oBAAC,WAAW,QAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAe,CACjD,CAAC,CAAC,CAAC,CACF,gCAAO,CACR,CACK,CACT,CAAC;IACJ,CAAC;CACF;AAED,YAAY;AACZ,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,MAAM,mBAAmB,GAAG,GAAY,EAAE;QACxC,MAAM,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAc,EAAE,EAAE;YAChE,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,QAAS,CAAC,MAAM,KAAK,CAAC,CACpE,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAAE,SAAiB,EAAE,EAAE;QAC9D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO,CACL,oBAAC,cAAc,OACT,KAAK,EACT,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EACzB,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,QAAQ,EAAE,IAAI,CAAC,OAAO,EACtB,OAAO,EAAE,GAAG,EAAE;wBACZ,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxC,CAAC,GACD,CACH,CAAC;YACJ,KAAK,YAAY,CAAC,SAAS;gBACzB,OAAO,CACL,6BAAK,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAC,sBAAsB,GAAG,CACpE,CAAC;YACJ,KAAK,YAAY,CAAC,SAAS;gBACzB,IAAI,IAAI,CAAC,QAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,CACL,oBAAC,iBAAiB,IAChB,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EACzB,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,SAAS,EAAC,0BAA0B,EACpC,QAAQ,EACN,KAAK,CAAC,QAAQ,KAAK,IAAI;4BACrB,CAAC,CAAC,CAAC,mBAAmB,EAAE;4BACxB,CAAC,CAAC,mBAAmB,EAAE;wBAG3B,oBAAC,WAAW,QAAE,IAAI,CAAC,QAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAe,CAChD,CACrB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,6BAAK,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAI,CAAC;gBAC5C,CAAC;YACH;gBACE,OAAO,6BAAK,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAI,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,oBAAC,KAAK,IAAC,SAAS,EAAC,qBAAqB;QACpC,oBAAC,KAAK,QAAE,KAAK,CAAC,KAAK,CAAS;QAC3B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,mBAAmB,IAAI;QAC/C,4DAA4D;QAC5D,oBAAC,SAAS,IACR,SAAS,EAAC,qBAAqB,EAC/B,cAAc,EAAE,KAAK,CAAC,mBAAmB,GACzC,CACH;QACD,oBAAC,OAAO;YACN,oBAAC,WAAW,IAAC,SAAS,EAAC,mBAAmB,IACvC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CACvB,CACN,CACJ,CACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,KAAsB;IACjD,MAAM,IAAI,GACR,KAAK,CAAC,IAAI;QACV,4DAA4D;QAC5D,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChB,4DAA4D;QAC5D,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;QACnC,4DAA4D;QAC5D,oBAAC,IAAI,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,CACnC,CAAC,CAAC,CAAC;QACF,4DAA4D;QAC5D,2BAAG,SAAS,EAAC,yBAAyB,IAAE,KAAK,CAAC,QAAQ,CAAK,CAC5D,CACF,CAAC,CAAC,CAAC;QACF,4DAA4D;QAC5D,oBAAC,IAAI,IAAC,QAAQ,EAAE,oBAAC,OAAO,OAAG,GAAI,CAChC,CAAC,CAAC;IAEL,OAAO,CACL,oBAAC,6BAA6B,CAAC,QAAQ,QACpC,CAAC,SAAS,EAAmB,EAAE;QAC9B,OAAO,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAChC,YAAY,CAAC,KAAK,CAAC,CACpB,CAAC,CAAC,CAAC;QACF,4DAA4D;QAC5D,oBAAC,SAAS,IACR,SAAS,EAAC,mBAAmB,EAC7B,aAAa,EAAE,SAAS,EACxB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,GAC1B,CACH,CAAC;IACJ,CAAC,CACsC,CAC1C,CAAC;AACJ,CAAC;AAWD;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK,CAAC,SAAkC;IAC/D,MAAM,KAAK,OAAO;QACvB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACM,MAAM,KAAK,QAAQ;QACxB,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACM,MAAM,KAAK,UAAU;QAC1B,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACM,MAAM,KAAK,aAAa;QAC7B,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,2BAA2B;IAC3B,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;QA0Ef,sCAAsC;QACtC,sGAAsG;QAC9F,gBAAW,GAAG,CAAC,IAAc,EAAE,OAAgB,EAAE,EAAE;YACzD,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;oBACjB,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;wBACxB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;4BAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;wBACzD,OAAO;oBACT,CAAC;oBACD,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;wBACzB,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc;4BAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;wBAC3D,OAAO;oBACT,CAAC;oBACD,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;wBAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU;4BAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;wBACnD,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC;IA/FF,CAAC;IAED,8FAA8F;IACtF,WAAW,CAAC,KAAiB;QACnC,MAAM,QAAQ,GAAe,EAAE,CAAC;QAEhC,2CAA2C;QAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC7B,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAc,EAAE,EAAE;gBAC3B,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU,CAAC,OAAO;gBACvB,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,mBAAmB,CAAC;gBAChD,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAc,EAAE,EAAE;gBAC3B,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU,CAAC,QAAQ;gBACxB,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,oBAAoB,CAAC;gBACjD,OAAO,EAAE,CAAC,WAAW;gBACrB,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU,CAAC,UAAU;gBAC1B,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,sBAAsB,CAAC;gBACnD,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB,CAAC,CAAC;QACL,CAAC;QACD,IACE,IAAI,CAAC,KAAK,CAAC,aAAa;YACxB,IAAI,CAAC,KAAK,CAAC,cAAc;YACzB,IAAI,CAAC,KAAK,CAAC,UAAU,EACrB,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU,CAAC,aAAa;gBAC7B,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC;gBACtD,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,YAAY,CAAC,SAAS;aAC7B,CAAC,CAAC;QACL,CAAC;QAED,aAAa;QACb,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,IAAc;QACjC,OAAO,CACL,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,OAAO;YAC/B,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,UAAU;YAClC,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,QAAQ;YAChC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;YAC/B,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,aAAa,CACtC,CAAC;IACJ,CAAC;IA0BD,yBAAyB;IACT,MAAM;QACpB,OAAO,CACL,oBAAC,mBAAmB,OACd,IAAI,CAAC,KAAK,EACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvB,UAAU,EAAE,IAAI,CAAC,WAAW,EAC5B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EACjC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACzC,4DAA4D;YAC5D,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GACrB,CACH,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 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"]}
|