@itwin/appui-react 4.6.0 → 4.6.1
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 +8 -1
- package/lib/cjs/appui-react/UiFramework.js +4 -7
- package/lib/cjs/appui-react/UiFramework.js.map +1 -1
- package/lib/cjs/appui-react/backstage/BackstageComposerItem.js +1 -2
- package/lib/cjs/appui-react/backstage/BackstageComposerItem.js.map +1 -1
- package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js +1 -1
- package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
- package/lib/cjs/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
- package/lib/cjs/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
- package/lib/cjs/appui-react/configurableui/TimeTracker.js +1 -2
- package/lib/cjs/appui-react/configurableui/TimeTracker.js.map +1 -1
- package/lib/cjs/appui-react/content/ContentLayout.js +9 -12
- package/lib/cjs/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/cjs/appui-react/content/DefaultViewOverlay.js +3 -4
- package/lib/cjs/appui-react/content/DefaultViewOverlay.js.map +1 -1
- package/lib/cjs/appui-react/content/FloatingViewportContent.js +1 -2
- package/lib/cjs/appui-react/content/FloatingViewportContent.js.map +1 -1
- package/lib/cjs/appui-react/content/IModelViewport.js +3 -6
- package/lib/cjs/appui-react/content/IModelViewport.js.map +1 -1
- package/lib/cjs/appui-react/content/InternalContentLayoutManager.js +1 -2
- package/lib/cjs/appui-react/content/InternalContentLayoutManager.js.map +1 -1
- package/lib/cjs/appui-react/content/InternalContentViewManager.js +1 -1
- package/lib/cjs/appui-react/content/InternalContentViewManager.js.map +1 -1
- package/lib/cjs/appui-react/content/split-pane/SplitPane.js +10 -12
- package/lib/cjs/appui-react/content/split-pane/SplitPane.js.map +1 -1
- package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js +2 -3
- package/lib/cjs/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
- package/lib/cjs/appui-react/dialog/ContentDialog.js +3 -6
- package/lib/cjs/appui-react/dialog/ContentDialog.js.map +1 -1
- package/lib/cjs/appui-react/dialog/DialogManagerBase.js +2 -3
- package/lib/cjs/appui-react/dialog/DialogManagerBase.js.map +1 -1
- package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
- package/lib/cjs/appui-react/frontstage/FrontstageDef.js +33 -51
- package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
- package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js +2 -3
- package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
- package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js +1 -2
- package/lib/cjs/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
- package/lib/cjs/appui-react/hooks/useAnalysisAnimationDataProvider.js +7 -11
- package/lib/cjs/appui-react/hooks/useAnalysisAnimationDataProvider.js.map +1 -1
- package/lib/cjs/appui-react/hooks/useScheduleAnimationDataProvider.js +7 -11
- package/lib/cjs/appui-react/hooks/useScheduleAnimationDataProvider.js.map +1 -1
- package/lib/cjs/appui-react/hooks/useSolarDataProvider.js +8 -13
- package/lib/cjs/appui-react/hooks/useSolarDataProvider.js.map +1 -1
- package/lib/cjs/appui-react/messages/ActivityMessage.js +5 -7
- package/lib/cjs/appui-react/messages/ActivityMessage.js.map +1 -1
- package/lib/cjs/appui-react/pickers/ViewSelector.js +5 -6
- package/lib/cjs/appui-react/pickers/ViewSelector.js.map +1 -1
- package/lib/cjs/appui-react/popup/KeyinPalettePanel.js +1 -2
- package/lib/cjs/appui-react/popup/KeyinPalettePanel.js.map +1 -1
- package/lib/cjs/appui-react/popup/PopupManager.js +1 -2
- package/lib/cjs/appui-react/popup/PopupManager.js.map +1 -1
- package/lib/cjs/appui-react/selection/SelectionContextItemDef.js +2 -2
- package/lib/cjs/appui-react/selection/SelectionContextItemDef.js.map +1 -1
- package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.js +2 -1
- package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
- package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +11 -16
- package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
- package/lib/cjs/appui-react/statusbar/Indicator.js +1 -2
- package/lib/cjs/appui-react/statusbar/Indicator.js.map +1 -1
- package/lib/cjs/appui-react/statusbar/StatusBar.js +3 -5
- package/lib/cjs/appui-react/statusbar/StatusBar.js.map +1 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js +1 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/ToolbarHelper.js +6 -4
- package/lib/cjs/appui-react/toolbar/ToolbarHelper.js.map +1 -1
- package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.js +3 -4
- package/lib/cjs/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
- package/lib/cjs/appui-react/tools/CoreToolDefinitions.js +10 -17
- package/lib/cjs/appui-react/tools/CoreToolDefinitions.js.map +1 -1
- package/lib/cjs/appui-react/toolsettings/DefaultToolSettingsProvider.js +3 -2
- package/lib/cjs/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
- package/lib/cjs/appui-react/ui-items-provider/AbstractUiItemsManager.js +12 -14
- package/lib/cjs/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
- package/lib/cjs/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +9 -10
- package/lib/cjs/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
- package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -2
- package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
- package/lib/cjs/appui-react/ui-items-provider/UiItemsManager.js +8 -14
- package/lib/cjs/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
- package/lib/cjs/appui-react/uiadmin/FrameworkUiAdmin.js +1 -1
- package/lib/cjs/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
- package/lib/cjs/appui-react/uiprovider/ComponentGenerator.js +1 -1
- package/lib/cjs/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
- package/lib/cjs/appui-react/utils/InternalUiShowHideManager.js +3 -3
- package/lib/cjs/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/Content.js +8 -9
- package/lib/cjs/appui-react/widget-panels/Content.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/Frontstage.js +34 -32
- package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/StatusBar.js +1 -1
- package/lib/cjs/appui-react/widget-panels/StatusBar.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/Tab.js +1 -1
- package/lib/cjs/appui-react/widget-panels/Tab.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/ToolSettings.js +13 -19
- package/lib/cjs/appui-react/widget-panels/ToolSettings.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/Toolbars.js +2 -3
- package/lib/cjs/appui-react/widget-panels/Toolbars.js.map +1 -1
- package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js +2 -2
- package/lib/cjs/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
- package/lib/cjs/appui-react/widgets/WidgetDef.js +5 -6
- package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/cjs/appui-react/widgets/WidgetHost.js +2 -3
- package/lib/cjs/appui-react/widgets/WidgetHost.js.map +1 -1
- package/lib/esm/appui-react/UiFramework.js +4 -7
- package/lib/esm/appui-react/UiFramework.js.map +1 -1
- package/lib/esm/appui-react/backstage/BackstageComposerItem.js +1 -2
- package/lib/esm/appui-react/backstage/BackstageComposerItem.js.map +1 -1
- package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js +1 -1
- package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
- package/lib/esm/appui-react/configurableui/InternalConfigurableUiManager.js +1 -1
- package/lib/esm/appui-react/configurableui/InternalConfigurableUiManager.js.map +1 -1
- package/lib/esm/appui-react/configurableui/TimeTracker.js +1 -2
- package/lib/esm/appui-react/configurableui/TimeTracker.js.map +1 -1
- package/lib/esm/appui-react/content/ContentLayout.js +9 -12
- package/lib/esm/appui-react/content/ContentLayout.js.map +1 -1
- package/lib/esm/appui-react/content/DefaultViewOverlay.js +3 -4
- package/lib/esm/appui-react/content/DefaultViewOverlay.js.map +1 -1
- package/lib/esm/appui-react/content/FloatingViewportContent.js +1 -2
- package/lib/esm/appui-react/content/FloatingViewportContent.js.map +1 -1
- package/lib/esm/appui-react/content/IModelViewport.js +3 -6
- package/lib/esm/appui-react/content/IModelViewport.js.map +1 -1
- package/lib/esm/appui-react/content/InternalContentLayoutManager.js +1 -2
- package/lib/esm/appui-react/content/InternalContentLayoutManager.js.map +1 -1
- package/lib/esm/appui-react/content/InternalContentViewManager.js +1 -1
- package/lib/esm/appui-react/content/InternalContentViewManager.js.map +1 -1
- package/lib/esm/appui-react/content/split-pane/SplitPane.js +10 -12
- package/lib/esm/appui-react/content/split-pane/SplitPane.js.map +1 -1
- package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js +2 -3
- package/lib/esm/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
- package/lib/esm/appui-react/dialog/ContentDialog.js +3 -6
- package/lib/esm/appui-react/dialog/ContentDialog.js.map +1 -1
- package/lib/esm/appui-react/dialog/DialogManagerBase.js +2 -3
- package/lib/esm/appui-react/dialog/DialogManagerBase.js.map +1 -1
- package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
- package/lib/esm/appui-react/frontstage/FrontstageDef.js +33 -51
- package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
- package/lib/esm/appui-react/frontstage/ModalSettingsStage.js +2 -3
- package/lib/esm/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
- package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js +1 -2
- package/lib/esm/appui-react/frontstage/StandardFrontstageProvider.js.map +1 -1
- package/lib/esm/appui-react/hooks/useAnalysisAnimationDataProvider.js +7 -11
- package/lib/esm/appui-react/hooks/useAnalysisAnimationDataProvider.js.map +1 -1
- package/lib/esm/appui-react/hooks/useScheduleAnimationDataProvider.js +7 -11
- package/lib/esm/appui-react/hooks/useScheduleAnimationDataProvider.js.map +1 -1
- package/lib/esm/appui-react/hooks/useSolarDataProvider.js +8 -13
- package/lib/esm/appui-react/hooks/useSolarDataProvider.js.map +1 -1
- package/lib/esm/appui-react/messages/ActivityMessage.js +5 -7
- package/lib/esm/appui-react/messages/ActivityMessage.js.map +1 -1
- package/lib/esm/appui-react/pickers/ViewSelector.js +5 -6
- package/lib/esm/appui-react/pickers/ViewSelector.js.map +1 -1
- package/lib/esm/appui-react/popup/KeyinPalettePanel.js +1 -2
- package/lib/esm/appui-react/popup/KeyinPalettePanel.js.map +1 -1
- package/lib/esm/appui-react/popup/PopupManager.js +1 -2
- package/lib/esm/appui-react/popup/PopupManager.js.map +1 -1
- package/lib/esm/appui-react/selection/SelectionContextItemDef.js +2 -2
- package/lib/esm/appui-react/selection/SelectionContextItemDef.js.map +1 -1
- package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.js +2 -1
- package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
- package/lib/esm/appui-react/stagepanels/StagePanelDef.js +11 -16
- package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
- package/lib/esm/appui-react/statusbar/Indicator.js +1 -2
- package/lib/esm/appui-react/statusbar/Indicator.js.map +1 -1
- package/lib/esm/appui-react/statusbar/StatusBar.js +3 -5
- package/lib/esm/appui-react/statusbar/StatusBar.js.map +1 -1
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js +1 -1
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
- package/lib/esm/appui-react/toolbar/ToolbarHelper.js +6 -4
- package/lib/esm/appui-react/toolbar/ToolbarHelper.js.map +1 -1
- package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.js +3 -4
- package/lib/esm/appui-react/toolbar/useUiItemsProviderToolbarItems.js.map +1 -1
- package/lib/esm/appui-react/tools/CoreToolDefinitions.js +10 -17
- package/lib/esm/appui-react/tools/CoreToolDefinitions.js.map +1 -1
- package/lib/esm/appui-react/toolsettings/DefaultToolSettingsProvider.js +3 -2
- package/lib/esm/appui-react/toolsettings/DefaultToolSettingsProvider.js.map +1 -1
- package/lib/esm/appui-react/ui-items-provider/AbstractUiItemsManager.js +12 -14
- package/lib/esm/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
- package/lib/esm/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js +9 -10
- package/lib/esm/appui-react/ui-items-provider/StandardContentToolsUiItemsProvider.js.map +1 -1
- package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js +1 -2
- package/lib/esm/appui-react/ui-items-provider/StandardStatusbarUiItemsProvider.js.map +1 -1
- package/lib/esm/appui-react/ui-items-provider/UiItemsManager.js +8 -14
- package/lib/esm/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
- package/lib/esm/appui-react/uiadmin/FrameworkUiAdmin.js +1 -1
- package/lib/esm/appui-react/uiadmin/FrameworkUiAdmin.js.map +1 -1
- package/lib/esm/appui-react/uiprovider/ComponentGenerator.js +1 -1
- package/lib/esm/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
- package/lib/esm/appui-react/utils/InternalUiShowHideManager.js +3 -3
- package/lib/esm/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/Content.js +8 -9
- package/lib/esm/appui-react/widget-panels/Content.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/Frontstage.js +34 -32
- package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/StatusBar.js +1 -1
- package/lib/esm/appui-react/widget-panels/StatusBar.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/Tab.js +1 -1
- package/lib/esm/appui-react/widget-panels/Tab.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/ToolSettings.js +13 -19
- package/lib/esm/appui-react/widget-panels/ToolSettings.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/Toolbars.js +2 -3
- package/lib/esm/appui-react/widget-panels/Toolbars.js.map +1 -1
- package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js +2 -2
- package/lib/esm/appui-react/widgets/NavigationWidgetComposer.js.map +1 -1
- package/lib/esm/appui-react/widgets/WidgetDef.js +5 -6
- package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/esm/appui-react/widgets/WidgetHost.js +2 -3
- package/lib/esm/appui-react/widgets/WidgetHost.js.map +1 -1
- package/package.json +9 -9
|
@@ -52,7 +52,7 @@ const toolSettingsContent = React.createElement(ToolSettingsContent, null);
|
|
|
52
52
|
const widgetPanelsFrontstage = React.createElement(WidgetPanelsFrontstageComponent, null);
|
|
53
53
|
/** @internal */
|
|
54
54
|
export function useLayoutStore(frontstageDef) {
|
|
55
|
-
const layoutStore = React.useMemo(() => createLayoutStore(frontstageDef
|
|
55
|
+
const layoutStore = React.useMemo(() => createLayoutStore(frontstageDef?.nineZoneState), [frontstageDef]);
|
|
56
56
|
React.useEffect(() => {
|
|
57
57
|
return InternalFrontstageManager.onFrontstageNineZoneStateChangedEvent.addListener((args) => {
|
|
58
58
|
if (args.frontstageDef !== frontstageDef)
|
|
@@ -152,10 +152,9 @@ export function useLabels() {
|
|
|
152
152
|
}), []);
|
|
153
153
|
}
|
|
154
154
|
function toTabArgs(widget) {
|
|
155
|
-
var _a;
|
|
156
155
|
const label = getWidgetLabel(widget.label);
|
|
157
156
|
const args = {
|
|
158
|
-
allowedPanelTargets:
|
|
157
|
+
allowedPanelTargets: widget.allowedPanelTargets?.map((location) => toPanelSide(location)),
|
|
159
158
|
hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,
|
|
160
159
|
canPopout: widget.canPopout,
|
|
161
160
|
iconSpec: widget.iconSpec,
|
|
@@ -179,7 +178,7 @@ export function addWidgets(state, widgets, side, widgetId) {
|
|
|
179
178
|
const activeWidget = visibleWidgets.find((widget) => widget.isActive);
|
|
180
179
|
const minimized = false;
|
|
181
180
|
// istanbul ignore else
|
|
182
|
-
if (
|
|
181
|
+
if (activeWidget?.defaultState !== WidgetState.Floating) {
|
|
183
182
|
state = addPanelWidget(state, side, widgetId, tabs, {
|
|
184
183
|
activeTabId: activeWidget ? activeWidget.id : tabs[0],
|
|
185
184
|
minimized,
|
|
@@ -238,7 +237,7 @@ export function appendWidgets(state, widgetDefs, location, section) {
|
|
|
238
237
|
width: 300,
|
|
239
238
|
...tab.preferredFloatingWidgetSize,
|
|
240
239
|
};
|
|
241
|
-
const preferredPoint = preferredPosition
|
|
240
|
+
const preferredPoint = preferredPosition ?? {
|
|
242
241
|
x: (state.size.width - size.width) / 2,
|
|
243
242
|
y: (state.size.height - size.height) / 2,
|
|
244
243
|
};
|
|
@@ -300,16 +299,23 @@ function processPopoutWidgets(state) {
|
|
|
300
299
|
* @internal
|
|
301
300
|
*/
|
|
302
301
|
export function addMissingWidgets(frontstageDef, initialState) {
|
|
303
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
304
302
|
let state = initialState;
|
|
305
|
-
state = appendWidgets(state, determineNewWidgets(
|
|
306
|
-
|
|
307
|
-
state = appendWidgets(state, determineNewWidgets(
|
|
308
|
-
|
|
309
|
-
state = appendWidgets(state, determineNewWidgets(
|
|
310
|
-
|
|
311
|
-
state = appendWidgets(state, determineNewWidgets(
|
|
312
|
-
|
|
303
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.getPanelSectionDef(StagePanelSection.Start)
|
|
304
|
+
.widgetDefs, state), StagePanelLocation.Left, StagePanelSection.Start);
|
|
305
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.leftPanel?.getPanelSectionDef(StagePanelSection.End)
|
|
306
|
+
.widgetDefs, state), StagePanelLocation.Left, StagePanelSection.End);
|
|
307
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.getPanelSectionDef(StagePanelSection.Start)
|
|
308
|
+
.widgetDefs, state), StagePanelLocation.Right, StagePanelSection.Start);
|
|
309
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.rightPanel?.getPanelSectionDef(StagePanelSection.End)
|
|
310
|
+
.widgetDefs, state), StagePanelLocation.Right, StagePanelSection.End);
|
|
311
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.getPanelSectionDef(StagePanelSection.Start)
|
|
312
|
+
.widgetDefs, state), StagePanelLocation.Top, StagePanelSection.Start);
|
|
313
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.topPanel?.getPanelSectionDef(StagePanelSection.End)
|
|
314
|
+
.widgetDefs, state), StagePanelLocation.Top, StagePanelSection.End);
|
|
315
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection.Start)
|
|
316
|
+
.widgetDefs, state), StagePanelLocation.Bottom, StagePanelSection.Start);
|
|
317
|
+
state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection.End)
|
|
318
|
+
.widgetDefs, state), StagePanelLocation.Bottom, StagePanelSection.End);
|
|
313
319
|
if (frontstageDef.toolSettings) {
|
|
314
320
|
const newToolSettingsWidgets = determineNewWidgets([frontstageDef.toolSettings], state);
|
|
315
321
|
for (const newToolSettingsWidget of newToolSettingsWidgets) {
|
|
@@ -338,8 +344,7 @@ function hideWidgets(state, frontstageDef) {
|
|
|
338
344
|
* @internal
|
|
339
345
|
*/
|
|
340
346
|
function removeMissingWidgets(frontstageDef, state) {
|
|
341
|
-
|
|
342
|
-
const toolSettingsTabId = (_a = state.toolSettings) === null || _a === void 0 ? void 0 : _a.tabId;
|
|
347
|
+
const toolSettingsTabId = state.toolSettings?.tabId;
|
|
343
348
|
for (const [, tab] of Object.entries(state.tabs)) {
|
|
344
349
|
if (tab.id === toolSettingsTabId)
|
|
345
350
|
continue;
|
|
@@ -385,8 +390,8 @@ export function getWidgetId(location, section) {
|
|
|
385
390
|
/** @internal */
|
|
386
391
|
export function getPanelSectionWidgets(frontstageDef, location, section) {
|
|
387
392
|
const stagePanel = frontstageDef.getStagePanelDef(location);
|
|
388
|
-
const panelSection = stagePanel
|
|
389
|
-
return
|
|
393
|
+
const panelSection = stagePanel?.getPanelSectionDef(section);
|
|
394
|
+
return panelSection?.widgetDefs || [];
|
|
390
395
|
}
|
|
391
396
|
/** @internal */
|
|
392
397
|
export function addPanelWidgets(state, frontstageDef, location) {
|
|
@@ -411,14 +416,13 @@ export function initializePanel(state, frontstageDef, location) {
|
|
|
411
416
|
state = addPanelWidgets(state, frontstageDef, location);
|
|
412
417
|
const panelDef = frontstageDef.getStagePanelDef(location);
|
|
413
418
|
state = produce(state, (draft) => {
|
|
414
|
-
var _a, _b, _c, _d, _e, _f;
|
|
415
419
|
const panel = draft.panels[side];
|
|
416
|
-
panel.minSize =
|
|
417
|
-
panel.pinned =
|
|
418
|
-
panel.resizable =
|
|
419
|
-
panel.maxSize =
|
|
420
|
+
panel.minSize = panelDef?.initialConfig?.minSize ?? panel.minSize;
|
|
421
|
+
panel.pinned = panelDef?.pinned ?? panel.pinned;
|
|
422
|
+
panel.resizable = panelDef?.resizable ?? panel.resizable;
|
|
423
|
+
panel.maxSize = panelDef?.initialConfig?.maxSize ?? panel.maxSize;
|
|
420
424
|
});
|
|
421
|
-
if (
|
|
425
|
+
if (panelDef?.size !== undefined) {
|
|
422
426
|
state = NineZoneStateReducer(state, {
|
|
423
427
|
type: "PANEL_SET_SIZE",
|
|
424
428
|
side,
|
|
@@ -446,7 +450,6 @@ export function initializeNineZoneState(frontstageDef) {
|
|
|
446
450
|
nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Top);
|
|
447
451
|
nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Bottom);
|
|
448
452
|
nineZone = produce(nineZone, (draft) => {
|
|
449
|
-
var _a, _b, _c, _d;
|
|
450
453
|
for (const [, panel] of Object.entries(draft.panels)) {
|
|
451
454
|
const expanded = panel.widgets.find((widgetId) => draft.widgets[widgetId].minimized === false);
|
|
452
455
|
const firstWidget = panel.widgets.length > 0 ? draft.widgets[panel.widgets[0]] : undefined;
|
|
@@ -455,10 +458,10 @@ export function initializeNineZoneState(frontstageDef) {
|
|
|
455
458
|
firstWidget.minimized = false;
|
|
456
459
|
}
|
|
457
460
|
}
|
|
458
|
-
draft.panels.left.collapsed = isPanelCollapsed(
|
|
459
|
-
draft.panels.right.collapsed = isPanelCollapsed(
|
|
460
|
-
draft.panels.top.collapsed = isPanelCollapsed(
|
|
461
|
-
draft.panels.bottom.collapsed = isPanelCollapsed(
|
|
461
|
+
draft.panels.left.collapsed = isPanelCollapsed(frontstageDef.leftPanel?.panelState);
|
|
462
|
+
draft.panels.right.collapsed = isPanelCollapsed(frontstageDef.rightPanel?.panelState);
|
|
463
|
+
draft.panels.top.collapsed = isPanelCollapsed(frontstageDef.topPanel?.panelState);
|
|
464
|
+
draft.panels.bottom.collapsed = isPanelCollapsed(frontstageDef.bottomPanel?.panelState);
|
|
462
465
|
});
|
|
463
466
|
nineZone = addMissingWidgets(frontstageDef, nineZone);
|
|
464
467
|
const toolSettingsWidgetDef = frontstageDef.toolSettings;
|
|
@@ -721,16 +724,15 @@ export function useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel)
|
|
|
721
724
|
const defaultLabel = React.useMemo(() => UiFramework.translate("widget.labels.toolSettings"), []);
|
|
722
725
|
React.useEffect(() => {
|
|
723
726
|
const updateLabel = () => {
|
|
724
|
-
var _a, _b;
|
|
725
727
|
const state = frontstageDef.nineZoneState;
|
|
726
728
|
if (!state)
|
|
727
729
|
return;
|
|
728
|
-
const toolSettingsTabId =
|
|
730
|
+
const toolSettingsTabId = state.toolSettings?.tabId;
|
|
729
731
|
if (!toolSettingsTabId)
|
|
730
732
|
return;
|
|
731
733
|
const toolId = UiFramework.frontstages.activeToolId;
|
|
732
734
|
const label = useToolAsToolSettingsLabel
|
|
733
|
-
?
|
|
735
|
+
? IModelApp.tools.find(toolId)?.flyover || defaultLabel
|
|
734
736
|
: defaultLabel;
|
|
735
737
|
frontstageDef.dispatch({
|
|
736
738
|
type: "WIDGET_TAB_SET_LABEL",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Frontstage.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Frontstage.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 Frontstage\n */\n\n// cSpell:ignore popout\n\nimport \"./Frontstage.scss\";\nimport produce from \"immer\";\nimport * as React from \"react\";\nimport { unstable_batchedUpdates } from \"react-dom\";\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\nimport type { UiStateStorageResult } from \"@itwin/core-react\";\nimport { Rectangle, UiStateStorageStatus } from \"@itwin/core-react\";\nimport { ToolbarPopupAutoHideContext } from \"@itwin/components-react\";\nimport type {\n FloatingWidgetHomeState,\n LayoutStore,\n NineZoneLabels,\n NineZoneState,\n PanelSide,\n TabState,\n} from \"@itwin/appui-layout-react\";\nimport {\n addDockedToolSettings,\n addFloatingWidget,\n addPanelWidget,\n addRemovedTab,\n addTab,\n addTabToWidget,\n createLayoutStore,\n createNineZoneState,\n floatingWidgetBringToFront,\n FloatingWidgets,\n getTabLocation,\n getUniqueId,\n getWidgetPanelSectionId,\n isFloatingTabLocation,\n isPanelTabLocation,\n NineZone,\n NineZoneStateReducer,\n removeTab,\n WidgetPanels,\n} from \"@itwin/appui-layout-react\";\nimport {\n type FrontstageDef,\n useActiveFrontstageDef,\n} from \"../frontstage/FrontstageDef\";\nimport { StagePanelState, toPanelSide } from \"../stagepanels/StagePanelDef\";\nimport { UiFramework } from \"../UiFramework\";\nimport { useUiStateStorageHandler } from \"../uistate/useUiStateStorage\";\nimport type { WidgetDef } from \"../widgets/WidgetDef\";\nimport { WidgetContent } from \"./Content\";\nimport { WidgetPanelsFrontstageContent } from \"./FrontstageContent\";\nimport {\n ModalFrontstageComposer,\n useActiveModalFrontstageInfo,\n} from \"./ModalFrontstageComposer\";\nimport { WidgetPanelsStatusBar } from \"./StatusBar\";\nimport { WidgetPanelsTab } from \"./Tab\";\nimport { WidgetPanelsToolbars } from \"./Toolbars\";\nimport { ToolSettingsContent, WidgetPanelsToolSettings } from \"./ToolSettings\";\nimport { useEscapeSetFocusToHome } from \"../hooks/useEscapeSetFocusToHome\";\nimport type { FrameworkRootState } from \"../redux/StateManager\";\nimport { useSelector } from \"react-redux\";\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { FloatingWidget } from \"./FloatingWidget\";\nimport { InternalFrontstageManager } from \"../frontstage/InternalFrontstageManager\";\nimport { WidgetState } from \"../widgets/WidgetState\";\nimport { StagePanelSection } from \"../stagepanels/StagePanelSection\";\nimport { StagePanelLocation } from \"../stagepanels/StagePanelLocation\";\nimport { UiItemsManager } from \"../ui-items-provider/UiItemsManager\";\n\nfunction WidgetPanelsFrontstageComponent() {\n const activeModalFrontstageInfo = useActiveModalFrontstageInfo();\n const uiIsVisible = useUiVisibility();\n\n return (\n <>\n <WidgetPanelsToolSettings />\n <ToolbarPopupAutoHideContext.Provider value={!uiIsVisible}>\n <ModalFrontstageComposer stageInfo={activeModalFrontstageInfo} />\n <WidgetPanels\n className=\"uifw-widgetPanels\"\n centerContent={<WidgetPanelsToolbars />}\n >\n <WidgetPanelsFrontstageContent />\n </WidgetPanels>\n <WidgetPanelsStatusBar />\n <FloatingWidgets />\n </ToolbarPopupAutoHideContext.Provider>\n </>\n );\n}\n\nconst widgetContent = <WidgetContent />;\nconst toolSettingsContent = <ToolSettingsContent />;\nconst widgetPanelsFrontstage = <WidgetPanelsFrontstageComponent />;\n\n/** @internal */\nexport function useLayoutStore(frontstageDef: FrontstageDef | undefined) {\n const layoutStore = React.useMemo(\n () => createLayoutStore(frontstageDef?.nineZoneState),\n [frontstageDef]\n );\n React.useEffect(() => {\n return InternalFrontstageManager.onFrontstageNineZoneStateChangedEvent.addListener(\n (args) => {\n if (args.frontstageDef !== frontstageDef) return;\n unstable_batchedUpdates(() => {\n // https://github.com/pmndrs/zustand/blob/main/docs/guides/event-handler-in-pre-react-18.md\n layoutStore.setState(args.state || defaultNineZone);\n });\n }\n );\n }, [frontstageDef, layoutStore]);\n return layoutStore;\n}\n\n/** Update in-memory NineZoneState of newly activated frontstage with up to date size.\n * @internal\n */\nexport function useUpdateNineZoneSize(frontstageDef: FrontstageDef) {\n React.useEffect(() => {\n const size = InternalFrontstageManager.nineZoneSize;\n const state = frontstageDef.nineZoneState;\n if (!size || !state) return;\n frontstageDef.dispatch({\n type: \"RESIZE\",\n size: {\n height: size.height,\n width: size.width,\n },\n });\n }, [frontstageDef]);\n}\n\n/** @internal */\nexport function useNineZoneDispatch(frontstageDef: FrontstageDef) {\n return React.useMemo(() => frontstageDef.dispatch, [frontstageDef]);\n}\n\n/** @internal */\nexport function WidgetPanelsFrontstage() {\n const frontstageDef = useActiveFrontstageDef();\n const layout = useLayoutStore(frontstageDef);\n\n React.useEffect(() => {\n const triggerWidowCloseProcessing = () => {\n frontstageDef && frontstageDef.setIsApplicationClosing(true);\n };\n window.addEventListener(\"unload\", triggerWidowCloseProcessing);\n return () => {\n window.removeEventListener(\"unload\", triggerWidowCloseProcessing);\n };\n }, [frontstageDef]);\n\n if (!frontstageDef) return null;\n return (\n <ActiveFrontstageDefProvider\n frontstageDef={frontstageDef}\n layout={layout}\n />\n );\n}\n\nconst defaultNineZone = createNineZoneState();\nconst tabElement = <WidgetPanelsTab />;\nconst floatingWidgetElement = <FloatingWidget />;\n\ninterface ActiveFrontstageDefProviderProps {\n layout: LayoutStore;\n frontstageDef: FrontstageDef;\n}\n\n/** @internal */\nexport function ActiveFrontstageDefProvider({\n frontstageDef,\n layout,\n}: ActiveFrontstageDefProviderProps) {\n const dispatch = useNineZoneDispatch(frontstageDef);\n useUpdateNineZoneSize(frontstageDef);\n useSavedFrontstageState(frontstageDef);\n useSaveFrontstageSettings(frontstageDef, layout);\n useItemsManager(frontstageDef);\n const labels = useLabels();\n const uiIsVisible = useUiVisibility();\n const showWidgetIcon = useSelector((state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.showWidgetIcon;\n });\n const autoCollapseUnpinnedPanels = useSelector(\n (state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.autoCollapseUnpinnedPanels;\n }\n );\n const animateToolSettings = useSelector((state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.animateToolSettings;\n });\n const useToolAsToolSettingsLabel = useSelector(\n (state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.useToolAsToolSettingsLabel;\n }\n );\n useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel);\n\n const handleKeyDown = useEscapeSetFocusToHome();\n\n return (\n <div\n className=\"uifw-widgetPanels-frontstage\"\n onKeyDown={handleKeyDown}\n role=\"presentation\"\n >\n <NineZone\n dispatch={dispatch}\n labels={labels}\n layout={layout}\n tab={tabElement}\n floatingWidget={floatingWidgetElement}\n showWidgetIcon={showWidgetIcon}\n autoCollapseUnpinnedPanels={autoCollapseUnpinnedPanels}\n toolSettingsContent={toolSettingsContent}\n widgetContent={widgetContent}\n animateDockedToolSettings={animateToolSettings}\n uiIsVisible={uiIsVisible}\n >\n {widgetPanelsFrontstage}\n </NineZone>\n </div>\n );\n}\n\n/** @internal */\nexport function useLabels() {\n return React.useMemo<NineZoneLabels>(\n () => ({\n dockToolSettingsTitle: UiFramework.translate(\n \"widget.tooltips.dockToolSettings\"\n ),\n moreWidgetsTitle: UiFramework.translate(\"widget.tooltips.moreWidgets\"),\n moreToolSettingsTitle: UiFramework.translate(\n \"widget.tooltips.moreToolSettings\"\n ),\n pinPanelTitle: UiFramework.translate(\"widget.tooltips.pinPanel\"),\n resizeGripTitle: UiFramework.translate(\"widget.tooltips.resizeGrip\"),\n sendWidgetHomeTitle: UiFramework.translate(\"widget.tooltips.sendHome\"),\n toolSettingsHandleTitle: UiFramework.translate(\n \"widget.tooltips.toolSettingsHandle\"\n ),\n unpinPanelTitle: UiFramework.translate(\"widget.tooltips.unpinPanel\"),\n popoutActiveTab: UiFramework.translate(\"widget.tooltips.popoutActiveTab\"),\n }),\n []\n );\n}\n\nfunction toTabArgs(widget: WidgetDef) {\n const label = getWidgetLabel(widget.label);\n const args = {\n allowedPanelTargets: widget.allowedPanelTargets?.map((location) =>\n toPanelSide(location)\n ),\n hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,\n canPopout: widget.canPopout,\n iconSpec: widget.iconSpec,\n isFloatingWidgetResizable: widget.isFloatingStateWindowResizable,\n label,\n preferredFloatingWidgetSize: widget.defaultFloatingSize,\n preferredPanelWidgetSize: widget.preferredPanelSize,\n };\n return args satisfies Pick<TabState, keyof typeof args>;\n}\n\n/** @internal */\nexport function addWidgets(\n state: NineZoneState,\n widgets: ReadonlyArray<WidgetDef>,\n side: PanelSide,\n widgetId: WidgetId\n): NineZoneState {\n const visibleWidgets = widgets.filter(\n (w) => w.isVisible && w.defaultState !== WidgetState.Floating\n );\n if (visibleWidgets.length === 0) return state;\n\n const tabs = new Array<string>();\n for (const widget of visibleWidgets) {\n state = addTab(state, widget.id, toTabArgs(widget));\n tabs.push(widget.id);\n }\n\n const activeWidget = visibleWidgets.find((widget) => widget.isActive);\n const minimized = false;\n // istanbul ignore else\n if (activeWidget?.defaultState !== WidgetState.Floating) {\n state = addPanelWidget(state, side, widgetId, tabs, {\n activeTabId: activeWidget ? activeWidget.id : tabs[0],\n minimized,\n });\n }\n\n return state;\n}\n\n/** @internal */\n// istanbul ignore next\nexport function appendWidgets(\n state: NineZoneState,\n widgetDefs: ReadonlyArray<WidgetDef>,\n location: StagePanelLocation,\n section: StagePanelSection\n): NineZoneState {\n const side = toPanelSide(location);\n\n // Add missing widget tabs.\n for (const widgetDef of widgetDefs) {\n const saveTab = state.tabs[widgetDef.id];\n const preferredPanelWidgetSize = saveTab\n ? saveTab.preferredPanelWidgetSize\n : widgetDef.preferredPanelSize;\n const preferredFloatingWidgetSize = saveTab\n ? saveTab.preferredFloatingWidgetSize\n : widgetDef.defaultFloatingSize;\n // if a defaultFloatingSize is specified then this mean the widget can't determine its intrinsic size and must be explicitly sized\n const userSized = saveTab\n ? saveTab.userSized ||\n (!!widgetDef.defaultFloatingSize &&\n !!saveTab.preferredFloatingWidgetSize)\n : !!widgetDef.defaultFloatingSize;\n state = addTab(state, widgetDef.id, {\n ...toTabArgs(widgetDef),\n preferredFloatingWidgetSize,\n preferredPanelWidgetSize,\n userSized,\n });\n\n const savedTab = state.savedTabs.byId[widgetDef.id];\n if (savedTab) {\n state = addRemovedTab(state, widgetDef.id);\n } else if (\n widgetDef.isFloatingStateSupported &&\n widgetDef.defaultState === WidgetState.Floating\n ) {\n const floatingContainerId = widgetDef.floatingContainerId\n ? widgetDef.floatingContainerId\n : getUniqueId();\n const widgetContainerId = getWidgetId(location, section);\n const home: FloatingWidgetHomeState = {\n side,\n widgetId: widgetContainerId,\n widgetIndex: 0,\n };\n const preferredPosition = widgetDef.defaultFloatingPosition;\n\n if (floatingContainerId in state.widgets) {\n state = addTabToWidget(state, widgetDef.id, floatingContainerId);\n } else {\n const tab = state.tabs[widgetDef.id];\n\n const size = {\n height: 200,\n width: 300,\n ...tab.preferredFloatingWidgetSize,\n };\n const preferredPoint = preferredPosition ?? {\n x: (state.size.width - size.width) / 2,\n y: (state.size.height - size.height) / 2,\n };\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.createFromSize(size).offset(preferredPoint);\n const containedBounds = bounds.containIn(nzBounds);\n\n state = addFloatingWidget(state, floatingContainerId, [widgetDef.id], {\n bounds: containedBounds.toProps(),\n home,\n userSized,\n });\n }\n } else {\n const preferredWidgetIndex: number = section;\n const widgetPanelSectionId = getWidgetPanelSectionId(\n side,\n preferredWidgetIndex\n );\n if (widgetPanelSectionId in state.widgets) {\n state = addTabToWidget(state, widgetDef.id, widgetPanelSectionId);\n } else {\n const panel = state.panels[side];\n if (panel.widgets.length < panel.maxWidgetCount) {\n state = addPanelWidget(state, side, widgetPanelSectionId, [\n widgetDef.id,\n ]);\n } else {\n const widgetIndex = Math.min(\n preferredWidgetIndex,\n panel.widgets.length - 1\n );\n const widgetId = panel.widgets[widgetIndex];\n state = addTabToWidget(state, widgetDef.id, widgetId);\n }\n }\n }\n\n if (widgetDef.defaultState === WidgetState.Hidden) {\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_HIDE\",\n id: widgetDef.id,\n });\n }\n }\n\n return state;\n}\n\nfunction processPopoutWidgets(state: NineZoneState): NineZoneState {\n // Electron reopens popout windows\n if (ProcessDetector.isElectronAppFrontend) {\n return state;\n }\n\n for (const popoutWidgetId of state.popoutWidgets.allIds) {\n const widget = state.widgets[popoutWidgetId];\n const id = widget.tabs[0];\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_FLOAT\",\n id,\n });\n }\n return state;\n}\n\n/** Adds frontstageDef widgets that are missing in NineZoneState.\n * @internal\n */\nexport function addMissingWidgets(\n frontstageDef: FrontstageDef,\n initialState: NineZoneState\n): NineZoneState {\n let state = initialState;\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.leftPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Left,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.leftPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Left,\n StagePanelSection.End\n );\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.rightPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Right,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.rightPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Right,\n StagePanelSection.End\n );\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.topPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Top,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.topPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Top,\n StagePanelSection.End\n );\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Bottom,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Bottom,\n StagePanelSection.End\n );\n\n if (frontstageDef.toolSettings) {\n const newToolSettingsWidgets = determineNewWidgets(\n [frontstageDef.toolSettings],\n state\n );\n for (const newToolSettingsWidget of newToolSettingsWidgets) {\n state = addTab(\n state,\n newToolSettingsWidget.id,\n toTabArgs(newToolSettingsWidget)\n );\n }\n }\n\n return state;\n}\n\n/** Hide widgets with Hidden defaultState. */\nfunction hideWidgets(\n state: NineZoneState,\n frontstageDef: FrontstageDef\n): NineZoneState {\n const tabs = Object.values(state.tabs);\n for (const tab of tabs) {\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\n if (!widgetDef) continue;\n\n if (widgetDef.defaultState === WidgetState.Hidden) {\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_HIDE\",\n id: widgetDef.id,\n });\n }\n }\n\n return state;\n}\n\n/** Removes NineZoneState widgets that are missing in frontstageDef.\n * @internal\n */\nfunction removeMissingWidgets(\n frontstageDef: FrontstageDef,\n state: NineZoneState\n): NineZoneState {\n const toolSettingsTabId = state.toolSettings?.tabId;\n for (const [, tab] of Object.entries(state.tabs)) {\n if (tab.id === toolSettingsTabId) continue;\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\n if (widgetDef) continue;\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_HIDE\",\n id: tab.id,\n });\n state = removeTab(state, tab.id);\n }\n return state;\n}\n\nfunction getWidgetLabel(label: string) {\n return label === \"\" ? \"Widget\" : label;\n}\n\ntype WidgetId =\n | \"leftStart\"\n | \"leftEnd\"\n | \"rightStart\"\n | \"rightEnd\"\n | \"topStart\"\n | \"topEnd\"\n | \"bottomStart\"\n | \"bottomEnd\";\n\n/** @internal */\nexport function getWidgetId(\n location: StagePanelLocation,\n section: StagePanelSection\n): WidgetId {\n switch (location) {\n case StagePanelLocation.Left: {\n if (section === StagePanelSection.Start) return \"leftStart\";\n return \"leftEnd\";\n }\n case StagePanelLocation.Right: {\n if (section === StagePanelSection.Start) return \"rightStart\";\n return \"rightEnd\";\n }\n case StagePanelLocation.Top: {\n if (section === StagePanelSection.Start) return \"topStart\";\n return \"topEnd\";\n }\n case StagePanelLocation.Bottom: {\n if (section === StagePanelSection.Start) return \"bottomStart\";\n return \"bottomEnd\";\n }\n }\n}\n\n/** @internal */\nexport function getPanelSectionWidgets(\n frontstageDef: FrontstageDef,\n location: StagePanelLocation,\n section: StagePanelSection\n): ReadonlyArray<WidgetDef> {\n const stagePanel = frontstageDef.getStagePanelDef(location);\n const panelSection = stagePanel?.getPanelSectionDef(section);\n return panelSection?.widgetDefs || [];\n}\n\n/** @internal */\nexport function addPanelWidgets(\n state: NineZoneState,\n frontstageDef: FrontstageDef,\n location: StagePanelLocation\n): NineZoneState {\n const side = toPanelSide(location);\n\n const start = getWidgetId(location, StagePanelSection.Start);\n const startWidgets = getPanelSectionWidgets(\n frontstageDef,\n location,\n StagePanelSection.Start\n );\n state = addWidgets(\n state,\n determineNewWidgets(startWidgets, state),\n side,\n start\n );\n\n const end = getWidgetId(location, StagePanelSection.End);\n const endWidgets = getPanelSectionWidgets(\n frontstageDef,\n location,\n StagePanelSection.End\n );\n state = addWidgets(state, determineNewWidgets(endWidgets, state), side, end);\n return state;\n}\n\n/** @internal */\nexport function isFrontstageStateSettingResult(\n settingsResult: UiStateStorageResult\n): settingsResult is {\n status: UiStateStorageStatus.Success;\n setting: WidgetPanelsFrontstageState;\n} {\n if (settingsResult.status === UiStateStorageStatus.Success) return true;\n return false;\n}\n\n/** @internal */\nexport function initializePanel(\n state: NineZoneState,\n frontstageDef: FrontstageDef,\n location: StagePanelLocation\n) {\n const side = toPanelSide(location);\n\n state = addPanelWidgets(state, frontstageDef, location);\n const panelDef = frontstageDef.getStagePanelDef(location);\n state = produce(state, (draft) => {\n const panel = draft.panels[side];\n panel.minSize = panelDef?.initialConfig?.minSize ?? panel.minSize;\n panel.pinned = panelDef?.pinned ?? panel.pinned;\n panel.resizable = panelDef?.resizable ?? panel.resizable;\n panel.maxSize = panelDef?.initialConfig?.maxSize ?? panel.maxSize;\n });\n if (panelDef?.size !== undefined) {\n state = NineZoneStateReducer(state, {\n type: \"PANEL_SET_SIZE\",\n side,\n size: panelDef.size,\n });\n }\n\n return state;\n}\n\n/** @internal */\nexport const stateVersion = 16; // this needs to be bumped when NineZoneState is changed (to recreate the layout).\n\n/** @internal */\nexport function initializeNineZoneState(\n frontstageDef: FrontstageDef\n): NineZoneState {\n let nineZone = defaultNineZone;\n nineZone = produce(nineZone, (stateDraft) => {\n // istanbul ignore next\n if (!InternalFrontstageManager.nineZoneSize) return;\n stateDraft.size = {\n height: InternalFrontstageManager.nineZoneSize.height,\n width: InternalFrontstageManager.nineZoneSize.width,\n };\n });\n\n nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Left);\n nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Right);\n nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Top);\n nineZone = initializePanel(\n nineZone,\n frontstageDef,\n StagePanelLocation.Bottom\n );\n nineZone = produce(nineZone, (draft) => {\n for (const [, panel] of Object.entries(draft.panels)) {\n const expanded = panel.widgets.find(\n (widgetId) => draft.widgets[widgetId].minimized === false\n );\n const firstWidget =\n panel.widgets.length > 0 ? draft.widgets[panel.widgets[0]] : undefined;\n // istanbul ignore next\n if (!expanded && firstWidget) {\n firstWidget.minimized = false;\n }\n }\n draft.panels.left.collapsed = isPanelCollapsed(\n frontstageDef.leftPanel?.panelState\n );\n draft.panels.right.collapsed = isPanelCollapsed(\n frontstageDef.rightPanel?.panelState\n );\n draft.panels.top.collapsed = isPanelCollapsed(\n frontstageDef.topPanel?.panelState\n );\n draft.panels.bottom.collapsed = isPanelCollapsed(\n frontstageDef.bottomPanel?.panelState\n );\n });\n\n nineZone = addMissingWidgets(frontstageDef, nineZone);\n\n const toolSettingsWidgetDef = frontstageDef.toolSettings;\n if (toolSettingsWidgetDef) {\n const toolSettingsTabId = toolSettingsWidgetDef.id;\n nineZone = addDockedToolSettings(nineZone, toolSettingsTabId);\n }\n\n nineZone = hideWidgets(nineZone, frontstageDef);\n nineZone = processPopoutWidgets(nineZone);\n\n return nineZone;\n}\n\n/** Converts from saved NineZoneState to NineZoneState.\n * @note Restores toolSettings tab.\n * @note Restores tab labels.\n * @internal\n */\nexport function restoreNineZoneState(\n frontstageDef: FrontstageDef,\n saved: SavedNineZoneState\n): NineZoneState {\n let state: NineZoneState = {\n ...saved,\n tabs: {},\n };\n\n for (const [, tab] of Object.entries(saved.tabs)) {\n // Re-add the placeholder tab in order to correctly remove it from the state if WidgetDef is not found.\n state = addTab(state, tab.id);\n\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\n if (!widgetDef) {\n Logger.logInfo(\n UiFramework.loggerCategory(restoreNineZoneState),\n \"WidgetDef is not found for saved tab.\",\n () => ({\n frontstageId: frontstageDef.id,\n tabId: tab.id,\n })\n );\n state = removeTab(state, tab.id);\n continue;\n }\n state = produce(state, (draft) => {\n draft.tabs[tab.id] = {\n ...tab,\n ...toTabArgs(widgetDef),\n preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,\n preferredPanelWidgetSize: tab.preferredPanelWidgetSize,\n };\n });\n }\n state = produce(state, (draft) => {\n // remove center panel section if one is found in left or right panels\n const oldLeftMiddleIndex = saved.panels.left.widgets.findIndex(\n (value) => value === \"leftMiddle\"\n );\n // istanbul ignore next\n if (-1 !== oldLeftMiddleIndex) {\n draft.panels.left.widgets = saved.panels.left.widgets.filter(\n (value) => value !== \"leftMiddle\"\n );\n if (\"leftEnd\" in draft.widgets) {\n draft.widgets.leftMiddle.tabs.forEach((tab) =>\n draft.widgets.leftEnd.tabs.push(tab)\n );\n } else {\n draft.widgets.leftEnd = { ...draft.widgets.leftMiddle };\n delete draft.widgets.leftMiddle;\n }\n }\n\n const oldRightMiddleIndex = saved.panels.right.widgets.findIndex(\n (value) => value === \"rightMiddle\"\n );\n // istanbul ignore next\n if (-1 !== oldRightMiddleIndex) {\n draft.panels.right.widgets = saved.panels.right.widgets.filter(\n (value) => value !== \"rightMiddle\"\n );\n if (\"rightEnd\" in draft.widgets) {\n draft.widgets.rightMiddle.tabs.forEach((tab) =>\n draft.widgets.rightEnd.tabs.push(tab)\n );\n } else {\n draft.widgets.rightEnd = { ...draft.widgets.rightMiddle };\n delete draft.widgets.rightMiddle;\n }\n }\n\n return;\n });\n\n if (\n InternalFrontstageManager.nineZoneSize &&\n (0 !== InternalFrontstageManager.nineZoneSize.height ||\n 0 !== InternalFrontstageManager.nineZoneSize.width)\n ) {\n state = NineZoneStateReducer(state, {\n type: \"RESIZE\",\n size: {\n height: InternalFrontstageManager.nineZoneSize.height,\n width: InternalFrontstageManager.nineZoneSize.width,\n },\n });\n }\n\n state = addMissingWidgets(frontstageDef, state);\n state = hideWidgets(state, frontstageDef);\n state = processPopoutWidgets(state);\n return state;\n}\n\n/** Prepares NineZoneState to be saved.\n * @note Removes toolSettings tab.\n * @note Removes tab labels and iconSpec.\n * @internal\n */\nexport function packNineZoneState(state: NineZoneState): SavedNineZoneState {\n let packed: SavedNineZoneState = {\n ...state,\n tabs: {},\n };\n packed = produce(packed, (draft) => {\n for (const [, tab] of Object.entries(state.tabs)) {\n draft.tabs[tab.id] = {\n id: tab.id,\n preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,\n userSized: tab.userSized,\n };\n }\n });\n return packed;\n}\n\n/** @internal */\nexport function isPanelCollapsed(panelState: StagePanelState | undefined) {\n return panelState !== StagePanelState.Open;\n}\n\n/** FrontstageState is saved in UiStateStorage.\n * @internal\n */\nexport interface WidgetPanelsFrontstageState {\n nineZone: SavedNineZoneState;\n id: FrontstageDef[\"id\"];\n /** Frontstage version used to create the frontstage state. Allows to invalidate the layout from the frontstage. */\n version: number;\n /** Platform provided frontstage version. Allows to invalidate the layout from the platform. */\n stateVersion: number;\n}\n\n// We don't save tab labels or if widget is allowed to \"pop-out\".\ntype SavedTabState = Omit<\n TabState,\n \"label\" | \"canPopout\" | \"isFloatingStateWindowResizable\" | \"iconSpec\"\n>;\n\ninterface SavedTabsState {\n readonly [id: string]: SavedTabState;\n}\n\ninterface SavedNineZoneState extends Omit<NineZoneState, \"tabs\"> {\n readonly tabs: SavedTabsState;\n}\n\n/** @internal */\nexport function showWidget(state: NineZoneState, id: TabState[\"id\"]) {\n const location = getTabLocation(state, id);\n if (!location) return state;\n state = produce(state, (draft) => {\n const widget = draft.widgets[location.widgetId];\n widget.activeTabId = id;\n widget.minimized = false;\n if (isPanelTabLocation(location)) {\n const panel = draft.panels[location.side];\n panel.collapsed = false;\n }\n });\n if (isFloatingTabLocation(location)) {\n state = floatingWidgetBringToFront(state, location.floatingWidgetId);\n }\n return state;\n}\n\n/** @internal */\nexport function expandWidget(state: NineZoneState, id: TabState[\"id\"]) {\n const location = getTabLocation(state, id);\n if (!location) return state;\n\n return produce(state, (draft) => {\n const widget = draft.widgets[location.widgetId];\n if (isPanelTabLocation(location)) {\n const panel = draft.panels[location.side];\n panel.splitterPercent =\n panel.widgets.findIndex((wId) => wId === location.widgetId) === 0\n ? 100\n : 0;\n }\n widget.minimized = false;\n });\n}\n\n/** @internal */\nexport function useSavedFrontstageState(frontstageDef: FrontstageDef) {\n const uiStateStorage = useUiStateStorageHandler();\n const uiStateStorageRef = React.useRef(uiStateStorage);\n const isMountedRef = React.useRef(false);\n React.useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n React.useEffect(() => {\n uiStateStorageRef.current = uiStateStorage;\n }, [uiStateStorage]);\n React.useEffect(() => {\n async function fetchFrontstageState() {\n if (frontstageDef.nineZoneState) {\n frontstageDef.nineZoneState = processPopoutWidgets(\n frontstageDef.nineZoneState\n );\n return;\n }\n\n const id = frontstageDef.id;\n const version = frontstageDef.version;\n const settingResult = await uiStateStorageRef.current.getSetting(\n FRONTSTAGE_SETTINGS_NAMESPACE,\n getFrontstageStateSettingName(id)\n );\n if (!isMountedRef.current) return;\n\n if (isFrontstageStateSettingResult(settingResult)) {\n const setting = settingResult.setting;\n if (\n setting.version === version &&\n setting.stateVersion === stateVersion\n ) {\n frontstageDef.nineZoneState = restoreNineZoneState(\n frontstageDef,\n setting.nineZone\n );\n return;\n }\n }\n frontstageDef.nineZoneState = initializeNineZoneState(frontstageDef);\n }\n void fetchFrontstageState();\n }, [frontstageDef]);\n}\n\n/** @internal */\nexport function useSaveFrontstageSettings(\n frontstageDef: FrontstageDef,\n store: LayoutStore\n) {\n const uiSettingsStorage = useUiStateStorageHandler();\n const saveSetting = React.useMemo(() => {\n const debounced = debounce(\n async (frontstage: FrontstageDef, state: NineZoneState) => {\n const id = frontstage.id;\n const setting: WidgetPanelsFrontstageState = {\n id,\n version: frontstage.version,\n stateVersion,\n nineZone: packNineZoneState(state),\n };\n await uiSettingsStorage.saveSetting(\n FRONTSTAGE_SETTINGS_NAMESPACE,\n getFrontstageStateSettingName(id),\n setting\n );\n },\n 1000\n );\n\n const save = (frontstage: FrontstageDef, state: NineZoneState) => {\n if (state.draggedTab) return;\n debounced(frontstage, state);\n };\n save.cancel = debounced.cancel;\n return save;\n }, [uiSettingsStorage]);\n React.useEffect(() => {\n return () => {\n saveSetting.cancel();\n };\n }, [saveSetting]);\n\n React.useEffect(() => {\n saveSetting(frontstageDef, store.getState());\n }, [saveSetting, frontstageDef, store]);\n React.useEffect(() => {\n return store.subscribe(() => {\n saveSetting(frontstageDef, store.getState());\n });\n }, [saveSetting, frontstageDef, store]);\n}\n\n/** @internal */\nexport const FRONTSTAGE_SETTINGS_NAMESPACE = \"uifw-frontstageSettings\";\n\n/** @internal */\nexport function getFrontstageStateSettingName(\n frontstageId: WidgetPanelsFrontstageState[\"id\"]\n) {\n return `frontstageState[${frontstageId}]`;\n}\n\n// istanbul ignore next\nfunction debounce<T extends (...args: any[]) => any>(\n func: T,\n duration: number\n) {\n let timeout: number | undefined;\n const debounced = (...args: Parameters<T>) => {\n const handler = () => {\n timeout = undefined;\n return func(...args);\n };\n window.clearTimeout(timeout);\n timeout = window.setTimeout(handler, duration);\n };\n debounced.cancel = () => {\n window.clearTimeout(timeout);\n };\n return debounced;\n}\n\n/** @internal */\nexport function useFrontstageManager(\n frontstageDef: FrontstageDef,\n useToolAsToolSettingsLabel?: boolean\n) {\n const uiSettingsStorage = useUiStateStorageHandler();\n React.useEffect(() => {\n return InternalFrontstageManager.onFrontstageRestoreLayoutEvent.addListener(\n (args) => {\n // TODO: track restoring frontstages to support workflows: i.e. prevent loading frontstage OR saving layout when delete is pending\n void uiSettingsStorage.deleteSetting(\n FRONTSTAGE_SETTINGS_NAMESPACE,\n getFrontstageStateSettingName(args.frontstageDef.id)\n );\n if (frontstageDef.id === args.frontstageDef.id) {\n args.frontstageDef.nineZoneState =\n initializeNineZoneState(frontstageDef);\n } else {\n args.frontstageDef.nineZoneState = undefined;\n }\n }\n );\n }, [uiSettingsStorage, frontstageDef]);\n const defaultLabel = React.useMemo(\n () => UiFramework.translate(\"widget.labels.toolSettings\"),\n []\n );\n React.useEffect(() => {\n const updateLabel = () => {\n const state = frontstageDef.nineZoneState;\n if (!state) return;\n const toolSettingsTabId = state.toolSettings?.tabId;\n if (!toolSettingsTabId) return;\n\n const toolId = UiFramework.frontstages.activeToolId;\n const label = useToolAsToolSettingsLabel\n ? IModelApp.tools.find(toolId)?.flyover || defaultLabel\n : defaultLabel;\n frontstageDef.dispatch({\n type: \"WIDGET_TAB_SET_LABEL\",\n id: toolSettingsTabId,\n label,\n });\n };\n // Whenever the frontstageDef or the useTool... changes, keep the label up to date.\n updateLabel();\n\n const removeListenerFuncs: (() => void)[] = [];\n // If useTool... is true, listen for events to keep up the label up to date.\n if (useToolAsToolSettingsLabel) {\n removeListenerFuncs.push(\n UiFramework.frontstages.onFrontstageReadyEvent.addListener(updateLabel),\n InternalFrontstageManager.onFrontstageRestoreLayoutEvent.addListener(\n updateLabel\n ),\n UiFramework.frontstages.onToolActivatedEvent.addListener(updateLabel),\n UiFramework.frontstages.onToolSettingsReloadEvent.addListener(\n updateLabel\n )\n );\n }\n return () => {\n removeListenerFuncs.forEach((removeListener) => removeListener());\n };\n }, [frontstageDef, useToolAsToolSettingsLabel, defaultLabel]);\n}\n\n/** @internal */\n// istanbul ignore next\nexport function useItemsManager(frontstageDef: FrontstageDef) {\n const refreshNineZoneState = (def: FrontstageDef) => {\n // Fired for both registered/unregistered. Update definitions and remove/add missing widgets.\n def.updateWidgetDefs();\n let state = def.nineZoneState;\n if (!state) return;\n state = addMissingWidgets(def, state);\n state = removeMissingWidgets(def, state);\n def.nineZoneState = state;\n };\n\n React.useEffect(() => {\n // Need to refresh anytime frontstageDef changes because uiItemsProvider may have added something to\n // another stage before it was possibly unloaded in this stage.\n refreshNineZoneState(frontstageDef);\n }, [frontstageDef]);\n React.useEffect(() => {\n return UiItemsManager.onUiProviderRegisteredEvent.addListener(() => {\n refreshNineZoneState(frontstageDef);\n });\n }, [frontstageDef]);\n}\n\n// istanbul ignore next\nfunction determineNewWidgets(\n defs: readonly WidgetDef[] | undefined,\n state: NineZoneState\n) {\n defs = defs || [];\n const uniqueDefs = defs.filter((def, index, array) => {\n return index === array.findIndex((def1) => def.id === def1.id);\n });\n return uniqueDefs.filter((def) => !(def.id in state.tabs));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Frontstage.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Frontstage.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 Frontstage\n */\n\n// cSpell:ignore popout\n\nimport \"./Frontstage.scss\";\nimport produce from \"immer\";\nimport * as React from \"react\";\nimport { unstable_batchedUpdates } from \"react-dom\";\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\nimport type { UiStateStorageResult } from \"@itwin/core-react\";\nimport { Rectangle, UiStateStorageStatus } from \"@itwin/core-react\";\nimport { ToolbarPopupAutoHideContext } from \"@itwin/components-react\";\nimport type {\n FloatingWidgetHomeState,\n LayoutStore,\n NineZoneLabels,\n NineZoneState,\n PanelSide,\n TabState,\n} from \"@itwin/appui-layout-react\";\nimport {\n addDockedToolSettings,\n addFloatingWidget,\n addPanelWidget,\n addRemovedTab,\n addTab,\n addTabToWidget,\n createLayoutStore,\n createNineZoneState,\n floatingWidgetBringToFront,\n FloatingWidgets,\n getTabLocation,\n getUniqueId,\n getWidgetPanelSectionId,\n isFloatingTabLocation,\n isPanelTabLocation,\n NineZone,\n NineZoneStateReducer,\n removeTab,\n WidgetPanels,\n} from \"@itwin/appui-layout-react\";\nimport {\n type FrontstageDef,\n useActiveFrontstageDef,\n} from \"../frontstage/FrontstageDef\";\nimport { StagePanelState, toPanelSide } from \"../stagepanels/StagePanelDef\";\nimport { UiFramework } from \"../UiFramework\";\nimport { useUiStateStorageHandler } from \"../uistate/useUiStateStorage\";\nimport type { WidgetDef } from \"../widgets/WidgetDef\";\nimport { WidgetContent } from \"./Content\";\nimport { WidgetPanelsFrontstageContent } from \"./FrontstageContent\";\nimport {\n ModalFrontstageComposer,\n useActiveModalFrontstageInfo,\n} from \"./ModalFrontstageComposer\";\nimport { WidgetPanelsStatusBar } from \"./StatusBar\";\nimport { WidgetPanelsTab } from \"./Tab\";\nimport { WidgetPanelsToolbars } from \"./Toolbars\";\nimport { ToolSettingsContent, WidgetPanelsToolSettings } from \"./ToolSettings\";\nimport { useEscapeSetFocusToHome } from \"../hooks/useEscapeSetFocusToHome\";\nimport type { FrameworkRootState } from \"../redux/StateManager\";\nimport { useSelector } from \"react-redux\";\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { FloatingWidget } from \"./FloatingWidget\";\nimport { InternalFrontstageManager } from \"../frontstage/InternalFrontstageManager\";\nimport { WidgetState } from \"../widgets/WidgetState\";\nimport { StagePanelSection } from \"../stagepanels/StagePanelSection\";\nimport { StagePanelLocation } from \"../stagepanels/StagePanelLocation\";\nimport { UiItemsManager } from \"../ui-items-provider/UiItemsManager\";\n\nfunction WidgetPanelsFrontstageComponent() {\n const activeModalFrontstageInfo = useActiveModalFrontstageInfo();\n const uiIsVisible = useUiVisibility();\n\n return (\n <>\n <WidgetPanelsToolSettings />\n <ToolbarPopupAutoHideContext.Provider value={!uiIsVisible}>\n <ModalFrontstageComposer stageInfo={activeModalFrontstageInfo} />\n <WidgetPanels\n className=\"uifw-widgetPanels\"\n centerContent={<WidgetPanelsToolbars />}\n >\n <WidgetPanelsFrontstageContent />\n </WidgetPanels>\n <WidgetPanelsStatusBar />\n <FloatingWidgets />\n </ToolbarPopupAutoHideContext.Provider>\n </>\n );\n}\n\nconst widgetContent = <WidgetContent />;\nconst toolSettingsContent = <ToolSettingsContent />;\nconst widgetPanelsFrontstage = <WidgetPanelsFrontstageComponent />;\n\n/** @internal */\nexport function useLayoutStore(frontstageDef: FrontstageDef | undefined) {\n const layoutStore = React.useMemo(\n () => createLayoutStore(frontstageDef?.nineZoneState),\n [frontstageDef]\n );\n React.useEffect(() => {\n return InternalFrontstageManager.onFrontstageNineZoneStateChangedEvent.addListener(\n (args) => {\n if (args.frontstageDef !== frontstageDef) return;\n unstable_batchedUpdates(() => {\n // https://github.com/pmndrs/zustand/blob/main/docs/guides/event-handler-in-pre-react-18.md\n layoutStore.setState(args.state || defaultNineZone);\n });\n }\n );\n }, [frontstageDef, layoutStore]);\n return layoutStore;\n}\n\n/** Update in-memory NineZoneState of newly activated frontstage with up to date size.\n * @internal\n */\nexport function useUpdateNineZoneSize(frontstageDef: FrontstageDef) {\n React.useEffect(() => {\n const size = InternalFrontstageManager.nineZoneSize;\n const state = frontstageDef.nineZoneState;\n if (!size || !state) return;\n frontstageDef.dispatch({\n type: \"RESIZE\",\n size: {\n height: size.height,\n width: size.width,\n },\n });\n }, [frontstageDef]);\n}\n\n/** @internal */\nexport function useNineZoneDispatch(frontstageDef: FrontstageDef) {\n return React.useMemo(() => frontstageDef.dispatch, [frontstageDef]);\n}\n\n/** @internal */\nexport function WidgetPanelsFrontstage() {\n const frontstageDef = useActiveFrontstageDef();\n const layout = useLayoutStore(frontstageDef);\n\n React.useEffect(() => {\n const triggerWidowCloseProcessing = () => {\n frontstageDef && frontstageDef.setIsApplicationClosing(true);\n };\n window.addEventListener(\"unload\", triggerWidowCloseProcessing);\n return () => {\n window.removeEventListener(\"unload\", triggerWidowCloseProcessing);\n };\n }, [frontstageDef]);\n\n if (!frontstageDef) return null;\n return (\n <ActiveFrontstageDefProvider\n frontstageDef={frontstageDef}\n layout={layout}\n />\n );\n}\n\nconst defaultNineZone = createNineZoneState();\nconst tabElement = <WidgetPanelsTab />;\nconst floatingWidgetElement = <FloatingWidget />;\n\ninterface ActiveFrontstageDefProviderProps {\n layout: LayoutStore;\n frontstageDef: FrontstageDef;\n}\n\n/** @internal */\nexport function ActiveFrontstageDefProvider({\n frontstageDef,\n layout,\n}: ActiveFrontstageDefProviderProps) {\n const dispatch = useNineZoneDispatch(frontstageDef);\n useUpdateNineZoneSize(frontstageDef);\n useSavedFrontstageState(frontstageDef);\n useSaveFrontstageSettings(frontstageDef, layout);\n useItemsManager(frontstageDef);\n const labels = useLabels();\n const uiIsVisible = useUiVisibility();\n const showWidgetIcon = useSelector((state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.showWidgetIcon;\n });\n const autoCollapseUnpinnedPanels = useSelector(\n (state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.autoCollapseUnpinnedPanels;\n }\n );\n const animateToolSettings = useSelector((state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.animateToolSettings;\n });\n const useToolAsToolSettingsLabel = useSelector(\n (state: FrameworkRootState) => {\n const frameworkState = (state as any)[UiFramework.frameworkStateKey];\n return !!frameworkState.configurableUiState.useToolAsToolSettingsLabel;\n }\n );\n useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel);\n\n const handleKeyDown = useEscapeSetFocusToHome();\n\n return (\n <div\n className=\"uifw-widgetPanels-frontstage\"\n onKeyDown={handleKeyDown}\n role=\"presentation\"\n >\n <NineZone\n dispatch={dispatch}\n labels={labels}\n layout={layout}\n tab={tabElement}\n floatingWidget={floatingWidgetElement}\n showWidgetIcon={showWidgetIcon}\n autoCollapseUnpinnedPanels={autoCollapseUnpinnedPanels}\n toolSettingsContent={toolSettingsContent}\n widgetContent={widgetContent}\n animateDockedToolSettings={animateToolSettings}\n uiIsVisible={uiIsVisible}\n >\n {widgetPanelsFrontstage}\n </NineZone>\n </div>\n );\n}\n\n/** @internal */\nexport function useLabels() {\n return React.useMemo<NineZoneLabels>(\n () => ({\n dockToolSettingsTitle: UiFramework.translate(\n \"widget.tooltips.dockToolSettings\"\n ),\n moreWidgetsTitle: UiFramework.translate(\"widget.tooltips.moreWidgets\"),\n moreToolSettingsTitle: UiFramework.translate(\n \"widget.tooltips.moreToolSettings\"\n ),\n pinPanelTitle: UiFramework.translate(\"widget.tooltips.pinPanel\"),\n resizeGripTitle: UiFramework.translate(\"widget.tooltips.resizeGrip\"),\n sendWidgetHomeTitle: UiFramework.translate(\"widget.tooltips.sendHome\"),\n toolSettingsHandleTitle: UiFramework.translate(\n \"widget.tooltips.toolSettingsHandle\"\n ),\n unpinPanelTitle: UiFramework.translate(\"widget.tooltips.unpinPanel\"),\n popoutActiveTab: UiFramework.translate(\"widget.tooltips.popoutActiveTab\"),\n }),\n []\n );\n}\n\nfunction toTabArgs(widget: WidgetDef) {\n const label = getWidgetLabel(widget.label);\n const args = {\n allowedPanelTargets: widget.allowedPanelTargets?.map((location) =>\n toPanelSide(location)\n ),\n hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,\n canPopout: widget.canPopout,\n iconSpec: widget.iconSpec,\n isFloatingWidgetResizable: widget.isFloatingStateWindowResizable,\n label,\n preferredFloatingWidgetSize: widget.defaultFloatingSize,\n preferredPanelWidgetSize: widget.preferredPanelSize,\n };\n return args satisfies Pick<TabState, keyof typeof args>;\n}\n\n/** @internal */\nexport function addWidgets(\n state: NineZoneState,\n widgets: ReadonlyArray<WidgetDef>,\n side: PanelSide,\n widgetId: WidgetId\n): NineZoneState {\n const visibleWidgets = widgets.filter(\n (w) => w.isVisible && w.defaultState !== WidgetState.Floating\n );\n if (visibleWidgets.length === 0) return state;\n\n const tabs = new Array<string>();\n for (const widget of visibleWidgets) {\n state = addTab(state, widget.id, toTabArgs(widget));\n tabs.push(widget.id);\n }\n\n const activeWidget = visibleWidgets.find((widget) => widget.isActive);\n const minimized = false;\n // istanbul ignore else\n if (activeWidget?.defaultState !== WidgetState.Floating) {\n state = addPanelWidget(state, side, widgetId, tabs, {\n activeTabId: activeWidget ? activeWidget.id : tabs[0],\n minimized,\n });\n }\n\n return state;\n}\n\n/** @internal */\n// istanbul ignore next\nexport function appendWidgets(\n state: NineZoneState,\n widgetDefs: ReadonlyArray<WidgetDef>,\n location: StagePanelLocation,\n section: StagePanelSection\n): NineZoneState {\n const side = toPanelSide(location);\n\n // Add missing widget tabs.\n for (const widgetDef of widgetDefs) {\n const saveTab = state.tabs[widgetDef.id];\n const preferredPanelWidgetSize = saveTab\n ? saveTab.preferredPanelWidgetSize\n : widgetDef.preferredPanelSize;\n const preferredFloatingWidgetSize = saveTab\n ? saveTab.preferredFloatingWidgetSize\n : widgetDef.defaultFloatingSize;\n // if a defaultFloatingSize is specified then this mean the widget can't determine its intrinsic size and must be explicitly sized\n const userSized = saveTab\n ? saveTab.userSized ||\n (!!widgetDef.defaultFloatingSize &&\n !!saveTab.preferredFloatingWidgetSize)\n : !!widgetDef.defaultFloatingSize;\n state = addTab(state, widgetDef.id, {\n ...toTabArgs(widgetDef),\n preferredFloatingWidgetSize,\n preferredPanelWidgetSize,\n userSized,\n });\n\n const savedTab = state.savedTabs.byId[widgetDef.id];\n if (savedTab) {\n state = addRemovedTab(state, widgetDef.id);\n } else if (\n widgetDef.isFloatingStateSupported &&\n widgetDef.defaultState === WidgetState.Floating\n ) {\n const floatingContainerId = widgetDef.floatingContainerId\n ? widgetDef.floatingContainerId\n : getUniqueId();\n const widgetContainerId = getWidgetId(location, section);\n const home: FloatingWidgetHomeState = {\n side,\n widgetId: widgetContainerId,\n widgetIndex: 0,\n };\n const preferredPosition = widgetDef.defaultFloatingPosition;\n\n if (floatingContainerId in state.widgets) {\n state = addTabToWidget(state, widgetDef.id, floatingContainerId);\n } else {\n const tab = state.tabs[widgetDef.id];\n\n const size = {\n height: 200,\n width: 300,\n ...tab.preferredFloatingWidgetSize,\n };\n const preferredPoint = preferredPosition ?? {\n x: (state.size.width - size.width) / 2,\n y: (state.size.height - size.height) / 2,\n };\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.createFromSize(size).offset(preferredPoint);\n const containedBounds = bounds.containIn(nzBounds);\n\n state = addFloatingWidget(state, floatingContainerId, [widgetDef.id], {\n bounds: containedBounds.toProps(),\n home,\n userSized,\n });\n }\n } else {\n const preferredWidgetIndex: number = section;\n const widgetPanelSectionId = getWidgetPanelSectionId(\n side,\n preferredWidgetIndex\n );\n if (widgetPanelSectionId in state.widgets) {\n state = addTabToWidget(state, widgetDef.id, widgetPanelSectionId);\n } else {\n const panel = state.panels[side];\n if (panel.widgets.length < panel.maxWidgetCount) {\n state = addPanelWidget(state, side, widgetPanelSectionId, [\n widgetDef.id,\n ]);\n } else {\n const widgetIndex = Math.min(\n preferredWidgetIndex,\n panel.widgets.length - 1\n );\n const widgetId = panel.widgets[widgetIndex];\n state = addTabToWidget(state, widgetDef.id, widgetId);\n }\n }\n }\n\n if (widgetDef.defaultState === WidgetState.Hidden) {\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_HIDE\",\n id: widgetDef.id,\n });\n }\n }\n\n return state;\n}\n\nfunction processPopoutWidgets(state: NineZoneState): NineZoneState {\n // Electron reopens popout windows\n if (ProcessDetector.isElectronAppFrontend) {\n return state;\n }\n\n for (const popoutWidgetId of state.popoutWidgets.allIds) {\n const widget = state.widgets[popoutWidgetId];\n const id = widget.tabs[0];\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_FLOAT\",\n id,\n });\n }\n return state;\n}\n\n/** Adds frontstageDef widgets that are missing in NineZoneState.\n * @internal\n */\nexport function addMissingWidgets(\n frontstageDef: FrontstageDef,\n initialState: NineZoneState\n): NineZoneState {\n let state = initialState;\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.leftPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Left,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.leftPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Left,\n StagePanelSection.End\n );\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.rightPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Right,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.rightPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Right,\n StagePanelSection.End\n );\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.topPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Top,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.topPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Top,\n StagePanelSection.End\n );\n\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection.Start)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Bottom,\n StagePanelSection.Start\n );\n state = appendWidgets(\n state,\n determineNewWidgets(\n frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection.End)\n .widgetDefs,\n state\n ),\n StagePanelLocation.Bottom,\n StagePanelSection.End\n );\n\n if (frontstageDef.toolSettings) {\n const newToolSettingsWidgets = determineNewWidgets(\n [frontstageDef.toolSettings],\n state\n );\n for (const newToolSettingsWidget of newToolSettingsWidgets) {\n state = addTab(\n state,\n newToolSettingsWidget.id,\n toTabArgs(newToolSettingsWidget)\n );\n }\n }\n\n return state;\n}\n\n/** Hide widgets with Hidden defaultState. */\nfunction hideWidgets(\n state: NineZoneState,\n frontstageDef: FrontstageDef\n): NineZoneState {\n const tabs = Object.values(state.tabs);\n for (const tab of tabs) {\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\n if (!widgetDef) continue;\n\n if (widgetDef.defaultState === WidgetState.Hidden) {\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_HIDE\",\n id: widgetDef.id,\n });\n }\n }\n\n return state;\n}\n\n/** Removes NineZoneState widgets that are missing in frontstageDef.\n * @internal\n */\nfunction removeMissingWidgets(\n frontstageDef: FrontstageDef,\n state: NineZoneState\n): NineZoneState {\n const toolSettingsTabId = state.toolSettings?.tabId;\n for (const [, tab] of Object.entries(state.tabs)) {\n if (tab.id === toolSettingsTabId) continue;\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\n if (widgetDef) continue;\n state = NineZoneStateReducer(state, {\n type: \"WIDGET_TAB_HIDE\",\n id: tab.id,\n });\n state = removeTab(state, tab.id);\n }\n return state;\n}\n\nfunction getWidgetLabel(label: string) {\n return label === \"\" ? \"Widget\" : label;\n}\n\ntype WidgetId =\n | \"leftStart\"\n | \"leftEnd\"\n | \"rightStart\"\n | \"rightEnd\"\n | \"topStart\"\n | \"topEnd\"\n | \"bottomStart\"\n | \"bottomEnd\";\n\n/** @internal */\nexport function getWidgetId(\n location: StagePanelLocation,\n section: StagePanelSection\n): WidgetId {\n switch (location) {\n case StagePanelLocation.Left: {\n if (section === StagePanelSection.Start) return \"leftStart\";\n return \"leftEnd\";\n }\n case StagePanelLocation.Right: {\n if (section === StagePanelSection.Start) return \"rightStart\";\n return \"rightEnd\";\n }\n case StagePanelLocation.Top: {\n if (section === StagePanelSection.Start) return \"topStart\";\n return \"topEnd\";\n }\n case StagePanelLocation.Bottom: {\n if (section === StagePanelSection.Start) return \"bottomStart\";\n return \"bottomEnd\";\n }\n }\n}\n\n/** @internal */\nexport function getPanelSectionWidgets(\n frontstageDef: FrontstageDef,\n location: StagePanelLocation,\n section: StagePanelSection\n): ReadonlyArray<WidgetDef> {\n const stagePanel = frontstageDef.getStagePanelDef(location);\n const panelSection = stagePanel?.getPanelSectionDef(section);\n return panelSection?.widgetDefs || [];\n}\n\n/** @internal */\nexport function addPanelWidgets(\n state: NineZoneState,\n frontstageDef: FrontstageDef,\n location: StagePanelLocation\n): NineZoneState {\n const side = toPanelSide(location);\n\n const start = getWidgetId(location, StagePanelSection.Start);\n const startWidgets = getPanelSectionWidgets(\n frontstageDef,\n location,\n StagePanelSection.Start\n );\n state = addWidgets(\n state,\n determineNewWidgets(startWidgets, state),\n side,\n start\n );\n\n const end = getWidgetId(location, StagePanelSection.End);\n const endWidgets = getPanelSectionWidgets(\n frontstageDef,\n location,\n StagePanelSection.End\n );\n state = addWidgets(state, determineNewWidgets(endWidgets, state), side, end);\n return state;\n}\n\n/** @internal */\nexport function isFrontstageStateSettingResult(\n settingsResult: UiStateStorageResult\n): settingsResult is {\n status: UiStateStorageStatus.Success;\n setting: WidgetPanelsFrontstageState;\n} {\n if (settingsResult.status === UiStateStorageStatus.Success) return true;\n return false;\n}\n\n/** @internal */\nexport function initializePanel(\n state: NineZoneState,\n frontstageDef: FrontstageDef,\n location: StagePanelLocation\n) {\n const side = toPanelSide(location);\n\n state = addPanelWidgets(state, frontstageDef, location);\n const panelDef = frontstageDef.getStagePanelDef(location);\n state = produce(state, (draft) => {\n const panel = draft.panels[side];\n panel.minSize = panelDef?.initialConfig?.minSize ?? panel.minSize;\n panel.pinned = panelDef?.pinned ?? panel.pinned;\n panel.resizable = panelDef?.resizable ?? panel.resizable;\n panel.maxSize = panelDef?.initialConfig?.maxSize ?? panel.maxSize;\n });\n if (panelDef?.size !== undefined) {\n state = NineZoneStateReducer(state, {\n type: \"PANEL_SET_SIZE\",\n side,\n size: panelDef.size,\n });\n }\n\n return state;\n}\n\n/** @internal */\nexport const stateVersion = 16; // this needs to be bumped when NineZoneState is changed (to recreate the layout).\n\n/** @internal */\nexport function initializeNineZoneState(\n frontstageDef: FrontstageDef\n): NineZoneState {\n let nineZone = defaultNineZone;\n nineZone = produce(nineZone, (stateDraft) => {\n // istanbul ignore next\n if (!InternalFrontstageManager.nineZoneSize) return;\n stateDraft.size = {\n height: InternalFrontstageManager.nineZoneSize.height,\n width: InternalFrontstageManager.nineZoneSize.width,\n };\n });\n\n nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Left);\n nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Right);\n nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation.Top);\n nineZone = initializePanel(\n nineZone,\n frontstageDef,\n StagePanelLocation.Bottom\n );\n nineZone = produce(nineZone, (draft) => {\n for (const [, panel] of Object.entries(draft.panels)) {\n const expanded = panel.widgets.find(\n (widgetId) => draft.widgets[widgetId].minimized === false\n );\n const firstWidget =\n panel.widgets.length > 0 ? draft.widgets[panel.widgets[0]] : undefined;\n // istanbul ignore next\n if (!expanded && firstWidget) {\n firstWidget.minimized = false;\n }\n }\n draft.panels.left.collapsed = isPanelCollapsed(\n frontstageDef.leftPanel?.panelState\n );\n draft.panels.right.collapsed = isPanelCollapsed(\n frontstageDef.rightPanel?.panelState\n );\n draft.panels.top.collapsed = isPanelCollapsed(\n frontstageDef.topPanel?.panelState\n );\n draft.panels.bottom.collapsed = isPanelCollapsed(\n frontstageDef.bottomPanel?.panelState\n );\n });\n\n nineZone = addMissingWidgets(frontstageDef, nineZone);\n\n const toolSettingsWidgetDef = frontstageDef.toolSettings;\n if (toolSettingsWidgetDef) {\n const toolSettingsTabId = toolSettingsWidgetDef.id;\n nineZone = addDockedToolSettings(nineZone, toolSettingsTabId);\n }\n\n nineZone = hideWidgets(nineZone, frontstageDef);\n nineZone = processPopoutWidgets(nineZone);\n\n return nineZone;\n}\n\n/** Converts from saved NineZoneState to NineZoneState.\n * @note Restores toolSettings tab.\n * @note Restores tab labels.\n * @internal\n */\nexport function restoreNineZoneState(\n frontstageDef: FrontstageDef,\n saved: SavedNineZoneState\n): NineZoneState {\n let state: NineZoneState = {\n ...saved,\n tabs: {},\n };\n\n for (const [, tab] of Object.entries(saved.tabs)) {\n // Re-add the placeholder tab in order to correctly remove it from the state if WidgetDef is not found.\n state = addTab(state, tab.id);\n\n const widgetDef = frontstageDef.findWidgetDef(tab.id);\n if (!widgetDef) {\n Logger.logInfo(\n UiFramework.loggerCategory(restoreNineZoneState),\n \"WidgetDef is not found for saved tab.\",\n () => ({\n frontstageId: frontstageDef.id,\n tabId: tab.id,\n })\n );\n state = removeTab(state, tab.id);\n continue;\n }\n state = produce(state, (draft) => {\n draft.tabs[tab.id] = {\n ...tab,\n ...toTabArgs(widgetDef),\n preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,\n preferredPanelWidgetSize: tab.preferredPanelWidgetSize,\n };\n });\n }\n state = produce(state, (draft) => {\n // remove center panel section if one is found in left or right panels\n const oldLeftMiddleIndex = saved.panels.left.widgets.findIndex(\n (value) => value === \"leftMiddle\"\n );\n // istanbul ignore next\n if (-1 !== oldLeftMiddleIndex) {\n draft.panels.left.widgets = saved.panels.left.widgets.filter(\n (value) => value !== \"leftMiddle\"\n );\n if (\"leftEnd\" in draft.widgets) {\n draft.widgets.leftMiddle.tabs.forEach((tab) =>\n draft.widgets.leftEnd.tabs.push(tab)\n );\n } else {\n draft.widgets.leftEnd = { ...draft.widgets.leftMiddle };\n delete draft.widgets.leftMiddle;\n }\n }\n\n const oldRightMiddleIndex = saved.panels.right.widgets.findIndex(\n (value) => value === \"rightMiddle\"\n );\n // istanbul ignore next\n if (-1 !== oldRightMiddleIndex) {\n draft.panels.right.widgets = saved.panels.right.widgets.filter(\n (value) => value !== \"rightMiddle\"\n );\n if (\"rightEnd\" in draft.widgets) {\n draft.widgets.rightMiddle.tabs.forEach((tab) =>\n draft.widgets.rightEnd.tabs.push(tab)\n );\n } else {\n draft.widgets.rightEnd = { ...draft.widgets.rightMiddle };\n delete draft.widgets.rightMiddle;\n }\n }\n\n return;\n });\n\n if (\n InternalFrontstageManager.nineZoneSize &&\n (0 !== InternalFrontstageManager.nineZoneSize.height ||\n 0 !== InternalFrontstageManager.nineZoneSize.width)\n ) {\n state = NineZoneStateReducer(state, {\n type: \"RESIZE\",\n size: {\n height: InternalFrontstageManager.nineZoneSize.height,\n width: InternalFrontstageManager.nineZoneSize.width,\n },\n });\n }\n\n state = addMissingWidgets(frontstageDef, state);\n state = hideWidgets(state, frontstageDef);\n state = processPopoutWidgets(state);\n return state;\n}\n\n/** Prepares NineZoneState to be saved.\n * @note Removes toolSettings tab.\n * @note Removes tab labels and iconSpec.\n * @internal\n */\nexport function packNineZoneState(state: NineZoneState): SavedNineZoneState {\n let packed: SavedNineZoneState = {\n ...state,\n tabs: {},\n };\n packed = produce(packed, (draft) => {\n for (const [, tab] of Object.entries(state.tabs)) {\n draft.tabs[tab.id] = {\n id: tab.id,\n preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,\n userSized: tab.userSized,\n };\n }\n });\n return packed;\n}\n\n/** @internal */\nexport function isPanelCollapsed(panelState: StagePanelState | undefined) {\n return panelState !== StagePanelState.Open;\n}\n\n/** FrontstageState is saved in UiStateStorage.\n * @internal\n */\nexport interface WidgetPanelsFrontstageState {\n nineZone: SavedNineZoneState;\n id: FrontstageDef[\"id\"];\n /** Frontstage version used to create the frontstage state. Allows to invalidate the layout from the frontstage. */\n version: number;\n /** Platform provided frontstage version. Allows to invalidate the layout from the platform. */\n stateVersion: number;\n}\n\n// We don't save tab labels or if widget is allowed to \"pop-out\".\ntype SavedTabState = Omit<\n TabState,\n \"label\" | \"canPopout\" | \"isFloatingStateWindowResizable\" | \"iconSpec\"\n>;\n\ninterface SavedTabsState {\n readonly [id: string]: SavedTabState;\n}\n\ninterface SavedNineZoneState extends Omit<NineZoneState, \"tabs\"> {\n readonly tabs: SavedTabsState;\n}\n\n/** @internal */\nexport function showWidget(state: NineZoneState, id: TabState[\"id\"]) {\n const location = getTabLocation(state, id);\n if (!location) return state;\n state = produce(state, (draft) => {\n const widget = draft.widgets[location.widgetId];\n widget.activeTabId = id;\n widget.minimized = false;\n if (isPanelTabLocation(location)) {\n const panel = draft.panels[location.side];\n panel.collapsed = false;\n }\n });\n if (isFloatingTabLocation(location)) {\n state = floatingWidgetBringToFront(state, location.floatingWidgetId);\n }\n return state;\n}\n\n/** @internal */\nexport function expandWidget(state: NineZoneState, id: TabState[\"id\"]) {\n const location = getTabLocation(state, id);\n if (!location) return state;\n\n return produce(state, (draft) => {\n const widget = draft.widgets[location.widgetId];\n if (isPanelTabLocation(location)) {\n const panel = draft.panels[location.side];\n panel.splitterPercent =\n panel.widgets.findIndex((wId) => wId === location.widgetId) === 0\n ? 100\n : 0;\n }\n widget.minimized = false;\n });\n}\n\n/** @internal */\nexport function useSavedFrontstageState(frontstageDef: FrontstageDef) {\n const uiStateStorage = useUiStateStorageHandler();\n const uiStateStorageRef = React.useRef(uiStateStorage);\n const isMountedRef = React.useRef(false);\n React.useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n React.useEffect(() => {\n uiStateStorageRef.current = uiStateStorage;\n }, [uiStateStorage]);\n React.useEffect(() => {\n async function fetchFrontstageState() {\n if (frontstageDef.nineZoneState) {\n frontstageDef.nineZoneState = processPopoutWidgets(\n frontstageDef.nineZoneState\n );\n return;\n }\n\n const id = frontstageDef.id;\n const version = frontstageDef.version;\n const settingResult = await uiStateStorageRef.current.getSetting(\n FRONTSTAGE_SETTINGS_NAMESPACE,\n getFrontstageStateSettingName(id)\n );\n if (!isMountedRef.current) return;\n\n if (isFrontstageStateSettingResult(settingResult)) {\n const setting = settingResult.setting;\n if (\n setting.version === version &&\n setting.stateVersion === stateVersion\n ) {\n frontstageDef.nineZoneState = restoreNineZoneState(\n frontstageDef,\n setting.nineZone\n );\n return;\n }\n }\n frontstageDef.nineZoneState = initializeNineZoneState(frontstageDef);\n }\n void fetchFrontstageState();\n }, [frontstageDef]);\n}\n\n/** @internal */\nexport function useSaveFrontstageSettings(\n frontstageDef: FrontstageDef,\n store: LayoutStore\n) {\n const uiSettingsStorage = useUiStateStorageHandler();\n const saveSetting = React.useMemo(() => {\n const debounced = debounce(\n async (frontstage: FrontstageDef, state: NineZoneState) => {\n const id = frontstage.id;\n const setting: WidgetPanelsFrontstageState = {\n id,\n version: frontstage.version,\n stateVersion,\n nineZone: packNineZoneState(state),\n };\n await uiSettingsStorage.saveSetting(\n FRONTSTAGE_SETTINGS_NAMESPACE,\n getFrontstageStateSettingName(id),\n setting\n );\n },\n 1000\n );\n\n const save = (frontstage: FrontstageDef, state: NineZoneState) => {\n if (state.draggedTab) return;\n debounced(frontstage, state);\n };\n save.cancel = debounced.cancel;\n return save;\n }, [uiSettingsStorage]);\n React.useEffect(() => {\n return () => {\n saveSetting.cancel();\n };\n }, [saveSetting]);\n\n React.useEffect(() => {\n saveSetting(frontstageDef, store.getState());\n }, [saveSetting, frontstageDef, store]);\n React.useEffect(() => {\n return store.subscribe(() => {\n saveSetting(frontstageDef, store.getState());\n });\n }, [saveSetting, frontstageDef, store]);\n}\n\n/** @internal */\nexport const FRONTSTAGE_SETTINGS_NAMESPACE = \"uifw-frontstageSettings\";\n\n/** @internal */\nexport function getFrontstageStateSettingName(\n frontstageId: WidgetPanelsFrontstageState[\"id\"]\n) {\n return `frontstageState[${frontstageId}]`;\n}\n\n// istanbul ignore next\nfunction debounce<T extends (...args: any[]) => any>(\n func: T,\n duration: number\n) {\n let timeout: number | undefined;\n const debounced = (...args: Parameters<T>) => {\n const handler = () => {\n timeout = undefined;\n return func(...args);\n };\n window.clearTimeout(timeout);\n timeout = window.setTimeout(handler, duration);\n };\n debounced.cancel = () => {\n window.clearTimeout(timeout);\n };\n return debounced;\n}\n\n/** @internal */\nexport function useFrontstageManager(\n frontstageDef: FrontstageDef,\n useToolAsToolSettingsLabel?: boolean\n) {\n const uiSettingsStorage = useUiStateStorageHandler();\n React.useEffect(() => {\n return InternalFrontstageManager.onFrontstageRestoreLayoutEvent.addListener(\n (args) => {\n // TODO: track restoring frontstages to support workflows: i.e. prevent loading frontstage OR saving layout when delete is pending\n void uiSettingsStorage.deleteSetting(\n FRONTSTAGE_SETTINGS_NAMESPACE,\n getFrontstageStateSettingName(args.frontstageDef.id)\n );\n if (frontstageDef.id === args.frontstageDef.id) {\n args.frontstageDef.nineZoneState =\n initializeNineZoneState(frontstageDef);\n } else {\n args.frontstageDef.nineZoneState = undefined;\n }\n }\n );\n }, [uiSettingsStorage, frontstageDef]);\n const defaultLabel = React.useMemo(\n () => UiFramework.translate(\"widget.labels.toolSettings\"),\n []\n );\n React.useEffect(() => {\n const updateLabel = () => {\n const state = frontstageDef.nineZoneState;\n if (!state) return;\n const toolSettingsTabId = state.toolSettings?.tabId;\n if (!toolSettingsTabId) return;\n\n const toolId = UiFramework.frontstages.activeToolId;\n const label = useToolAsToolSettingsLabel\n ? IModelApp.tools.find(toolId)?.flyover || defaultLabel\n : defaultLabel;\n frontstageDef.dispatch({\n type: \"WIDGET_TAB_SET_LABEL\",\n id: toolSettingsTabId,\n label,\n });\n };\n // Whenever the frontstageDef or the useTool... changes, keep the label up to date.\n updateLabel();\n\n const removeListenerFuncs: (() => void)[] = [];\n // If useTool... is true, listen for events to keep up the label up to date.\n if (useToolAsToolSettingsLabel) {\n removeListenerFuncs.push(\n UiFramework.frontstages.onFrontstageReadyEvent.addListener(updateLabel),\n InternalFrontstageManager.onFrontstageRestoreLayoutEvent.addListener(\n updateLabel\n ),\n UiFramework.frontstages.onToolActivatedEvent.addListener(updateLabel),\n UiFramework.frontstages.onToolSettingsReloadEvent.addListener(\n updateLabel\n )\n );\n }\n return () => {\n removeListenerFuncs.forEach((removeListener) => removeListener());\n };\n }, [frontstageDef, useToolAsToolSettingsLabel, defaultLabel]);\n}\n\n/** @internal */\n// istanbul ignore next\nexport function useItemsManager(frontstageDef: FrontstageDef) {\n const refreshNineZoneState = (def: FrontstageDef) => {\n // Fired for both registered/unregistered. Update definitions and remove/add missing widgets.\n def.updateWidgetDefs();\n let state = def.nineZoneState;\n if (!state) return;\n state = addMissingWidgets(def, state);\n state = removeMissingWidgets(def, state);\n def.nineZoneState = state;\n };\n\n React.useEffect(() => {\n // Need to refresh anytime frontstageDef changes because uiItemsProvider may have added something to\n // another stage before it was possibly unloaded in this stage.\n refreshNineZoneState(frontstageDef);\n }, [frontstageDef]);\n React.useEffect(() => {\n return UiItemsManager.onUiProviderRegisteredEvent.addListener(() => {\n refreshNineZoneState(frontstageDef);\n });\n }, [frontstageDef]);\n}\n\n// istanbul ignore next\nfunction determineNewWidgets(\n defs: readonly WidgetDef[] | undefined,\n state: NineZoneState\n) {\n defs = defs || [];\n const uniqueDefs = defs.filter((def, index, array) => {\n return index === array.findIndex((def1) => def.id === def1.id);\n });\n return uniqueDefs.filter((def) => !(def.id in state.tabs));\n}\n"]}
|
|
@@ -14,7 +14,7 @@ import { useActiveFrontstageDef } from "../frontstage/FrontstageDef";
|
|
|
14
14
|
/** @internal */
|
|
15
15
|
export function WidgetPanelsStatusBar(props) {
|
|
16
16
|
const frontstageDef = useActiveFrontstageDef();
|
|
17
|
-
const widgetDef = frontstageDef
|
|
17
|
+
const widgetDef = frontstageDef?.statusBar;
|
|
18
18
|
if (!widgetDef)
|
|
19
19
|
return null;
|
|
20
20
|
const content = widgetDef.reactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,gBAAgB;AAChB,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,gBAAgB;AAChB,MAAM,UAAU,qBAAqB,CAAC,KAAkB;IACtD,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa,EAAE,SAAS,CAAC;IAC3C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC;IACpC,MAAM,aAAa,GACjB,OAAO,KAAK,SAAS;QACnB,CAAC,CAAE,SAAS,CAAC,gBAAgB,CACzB,yBAAyB,CAAC,eAAe,CACH;QAC1C,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,SAAS,GAAG,UAAU,CAAC,6BAA6B,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7E,OAAO,CACL,oBAAC,SAAS,IACR,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,aAAa,IAE3B,SAAS,CAAC,SAAS,CACV,CACb,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module StatusBar\n */\n\nimport \"./StatusBar.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { ConfigurableUiControlType } from \"../configurableui/ConfigurableUiControl\";\nimport { StatusBar } from \"../statusbar/StatusBar\";\nimport type { StatusBarWidgetControl } from \"../statusbar/StatusBarWidgetControl\";\nimport { useActiveFrontstageDef } from \"../frontstage/FrontstageDef\";\n\n/** @internal */\nexport function WidgetPanelsStatusBar(props: CommonProps) {\n const frontstageDef = useActiveFrontstageDef();\n const widgetDef = frontstageDef?.statusBar;\n if (!widgetDef) return null;\n const content = widgetDef.reactNode;\n const widgetControl =\n content === undefined\n ? (widgetDef.getWidgetControl(\n ConfigurableUiControlType.StatusBarWidget\n ) as StatusBarWidgetControl | undefined)\n : undefined;\n const className = classnames(\"uifw-widgetPanels-statusBar\", props.className);\n return (\n <StatusBar\n className={className}\n style={props.style}\n widgetControl={widgetControl}\n >\n {widgetDef.reactNode}\n </StatusBar>\n );\n}\n"]}
|
|
@@ -14,7 +14,7 @@ import { BadgeType } from "@itwin/appui-abstract";
|
|
|
14
14
|
/** @internal */
|
|
15
15
|
export function WidgetPanelsTab() {
|
|
16
16
|
const widgetDef = useWidgetDef();
|
|
17
|
-
const badgeType = widgetDef
|
|
17
|
+
const badgeType = widgetDef?.badgeType;
|
|
18
18
|
const badgeClassName = getBadgeClassName(badgeType);
|
|
19
19
|
const badge = React.useMemo(() => BadgeUtilities.getComponentForBadgeType(badgeType), [badgeType]);
|
|
20
20
|
return React.createElement(WidgetTab, { className: badgeClassName, badge: badge });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Tab.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,YAAY,CAAC;AACpB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,gBAAgB;AAChB,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Tab.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,YAAY,CAAC;AACpB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,gBAAgB;AAChB,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,SAAS,EAAE,SAAS,CAAC;IACvC,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CAAC,cAAc,CAAC,wBAAwB,CAAC,SAAS,CAAC,EACxD,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,oBAAC,SAAS,IAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAChE,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,iBAAiB,CAAC,SAAgC;IAChE,IAAI,SAAS,KAAK,SAAS,CAAC,GAAG;QAAE,OAAO,gBAAgB,CAAC;SACpD,IAAI,SAAS,KAAK,SAAS,CAAC,gBAAgB;QAAE,OAAO,eAAe,CAAC;IAC1E,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport \"./Tab.scss\";\nimport * as React from \"react\";\nimport { WidgetTab } from \"@itwin/appui-layout-react\";\nimport { useWidgetDef } from \"./Content\";\nimport { BadgeUtilities } from \"@itwin/core-react\";\nimport { BadgeType } from \"@itwin/appui-abstract\";\n\n/** @internal */\nexport function WidgetPanelsTab() {\n const widgetDef = useWidgetDef();\n const badgeType = widgetDef?.badgeType;\n const badgeClassName = getBadgeClassName(badgeType);\n const badge = React.useMemo(\n () => BadgeUtilities.getComponentForBadgeType(badgeType),\n [badgeType]\n );\n return <WidgetTab className={badgeClassName} badge={badge} />;\n}\n\n/** @internal */\nexport function getBadgeClassName(badgeType: BadgeType | undefined) {\n if (badgeType === BadgeType.New) return \"uifw-badge-new\";\n else if (badgeType === BadgeType.TechnicalPreview) return \"uifw-badge-tp\";\n return undefined;\n}\n"]}
|