@itwin/appui-react 3.2.0-dev.21 → 3.2.0-dev.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/appui-react/backstage/BackstageComposerItem.d.ts.map +1 -1
  3. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js +4 -2
  4. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  5. package/lib/cjs/appui-react/frontstage/Frontstage.d.ts +5 -0
  6. package/lib/cjs/appui-react/frontstage/Frontstage.d.ts.map +1 -1
  7. package/lib/cjs/appui-react/frontstage/Frontstage.js +9 -1
  8. package/lib/cjs/appui-react/frontstage/Frontstage.js.map +1 -1
  9. package/lib/cjs/appui-react/frontstage/FrontstageComposer.d.ts.map +1 -1
  10. package/lib/cjs/appui-react/frontstage/FrontstageComposer.js +2 -0
  11. package/lib/cjs/appui-react/frontstage/FrontstageComposer.js.map +1 -1
  12. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  13. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +9 -4
  14. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  15. package/lib/cjs/appui-react/stagepanels/StagePanel.d.ts +1 -1
  16. package/lib/cjs/appui-react/stagepanels/StagePanel.d.ts.map +1 -1
  17. package/lib/cjs/appui-react/stagepanels/StagePanel.js.map +1 -1
  18. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts +6 -4
  19. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  20. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +6 -10
  21. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  22. package/lib/cjs/appui-react/statusfields/Indicator.d.ts +3 -3
  23. package/lib/cjs/appui-react/statusfields/Indicator.d.ts.map +1 -1
  24. package/lib/cjs/appui-react/statusfields/Indicator.js.map +1 -1
  25. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.d.ts +2 -2
  26. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +4 -3
  27. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  28. package/lib/cjs/appui-react/utils/PropsHelper.d.ts +3 -1
  29. package/lib/cjs/appui-react/utils/PropsHelper.d.ts.map +1 -1
  30. package/lib/cjs/appui-react/utils/PropsHelper.js +10 -0
  31. package/lib/cjs/appui-react/utils/PropsHelper.js.map +1 -1
  32. package/lib/cjs/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
  33. package/lib/cjs/appui-react/utils/UiShowHideManager.js +1 -0
  34. package/lib/cjs/appui-react/utils/UiShowHideManager.js.map +1 -1
  35. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts +17 -1
  36. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  37. package/lib/cjs/appui-react/widget-panels/Frontstage.js +124 -123
  38. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  39. package/lib/cjs/appui-react/widget-panels/ToolSettings.scss +10 -0
  40. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +8 -1
  41. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  42. package/lib/cjs/appui-react/widgets/WidgetDef.js +13 -3
  43. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  44. package/lib/cjs/appui-react/widgets/WidgetHost.d.ts +1 -1
  45. package/lib/cjs/appui-react/widgets/WidgetHost.d.ts.map +1 -1
  46. package/lib/cjs/appui-react/widgets/WidgetHost.js +56 -7
  47. package/lib/cjs/appui-react/widgets/WidgetHost.js.map +1 -1
  48. package/lib/cjs/appui-react/widgets/WidgetManager.d.ts.map +1 -1
  49. package/lib/cjs/appui-react/widgets/WidgetManager.js +1 -0
  50. package/lib/cjs/appui-react/widgets/WidgetManager.js.map +1 -1
  51. package/lib/esm/appui-react/backstage/BackstageComposerItem.d.ts.map +1 -1
  52. package/lib/esm/appui-react/backstage/BackstageComposerItem.js +5 -3
  53. package/lib/esm/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  54. package/lib/esm/appui-react/frontstage/Frontstage.d.ts +5 -0
  55. package/lib/esm/appui-react/frontstage/Frontstage.d.ts.map +1 -1
  56. package/lib/esm/appui-react/frontstage/Frontstage.js +7 -0
  57. package/lib/esm/appui-react/frontstage/Frontstage.js.map +1 -1
  58. package/lib/esm/appui-react/frontstage/FrontstageComposer.d.ts.map +1 -1
  59. package/lib/esm/appui-react/frontstage/FrontstageComposer.js +2 -0
  60. package/lib/esm/appui-react/frontstage/FrontstageComposer.js.map +1 -1
  61. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  62. package/lib/esm/appui-react/frontstage/FrontstageDef.js +9 -4
  63. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  64. package/lib/esm/appui-react/stagepanels/StagePanel.d.ts +1 -1
  65. package/lib/esm/appui-react/stagepanels/StagePanel.d.ts.map +1 -1
  66. package/lib/esm/appui-react/stagepanels/StagePanel.js.map +1 -1
  67. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts +6 -4
  68. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  69. package/lib/esm/appui-react/stagepanels/StagePanelDef.js +6 -10
  70. package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  71. package/lib/esm/appui-react/statusfields/Indicator.d.ts +3 -3
  72. package/lib/esm/appui-react/statusfields/Indicator.d.ts.map +1 -1
  73. package/lib/esm/appui-react/statusfields/Indicator.js.map +1 -1
  74. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.d.ts +2 -2
  75. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +4 -3
  76. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  77. package/lib/esm/appui-react/utils/PropsHelper.d.ts +3 -1
  78. package/lib/esm/appui-react/utils/PropsHelper.d.ts.map +1 -1
  79. package/lib/esm/appui-react/utils/PropsHelper.js +11 -1
  80. package/lib/esm/appui-react/utils/PropsHelper.js.map +1 -1
  81. package/lib/esm/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
  82. package/lib/esm/appui-react/utils/UiShowHideManager.js +1 -0
  83. package/lib/esm/appui-react/utils/UiShowHideManager.js.map +1 -1
  84. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts +17 -1
  85. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  86. package/lib/esm/appui-react/widget-panels/Frontstage.js +125 -124
  87. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  88. package/lib/esm/appui-react/widget-panels/ToolSettings.scss +10 -0
  89. package/lib/esm/appui-react/widgets/WidgetDef.d.ts +8 -1
  90. package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  91. package/lib/esm/appui-react/widgets/WidgetDef.js +13 -3
  92. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  93. package/lib/esm/appui-react/widgets/WidgetHost.d.ts +1 -1
  94. package/lib/esm/appui-react/widgets/WidgetHost.d.ts.map +1 -1
  95. package/lib/esm/appui-react/widgets/WidgetHost.js +56 -7
  96. package/lib/esm/appui-react/widgets/WidgetHost.js.map +1 -1
  97. package/lib/esm/appui-react/widgets/WidgetManager.d.ts.map +1 -1
  98. package/lib/esm/appui-react/widgets/WidgetManager.js +1 -0
  99. package/lib/esm/appui-react/widgets/WidgetManager.js.map +1 -1
  100. package/package.json +33 -32
@@ -14,7 +14,7 @@ import { assert, Logger, ProcessDetector } from "@itwin/core-bentley";
14
14
  import { StagePanelLocation, UiItemsManager, WidgetState } from "@itwin/appui-abstract";
15
15
  import { Size, UiStateStorageStatus } from "@itwin/core-react";
16
16
  import { ToolbarPopupAutoHideContext } from "@itwin/components-react";
17
- import { addPanelWidget, addTab, addWidgetTabToFloatingPanel, convertAllPopupWidgetContainersToFloating, createNineZoneState, createTabsState, createTabState, createWidgetState, findTab, findWidget, floatingWidgetBringToFront, FloatingWidgets, getUniqueId, isFloatingLocation, isHorizontalPanelSide, NineZone, NineZoneStateReducer, panelSides, removeTab, toolSettingsTabId, WidgetPanels, } from "@itwin/appui-layout-react";
17
+ import { addPanelWidget, addTab, addWidgetTabToFloatingPanel, addWidgetTabToPanelSection, convertAllPopupWidgetContainersToFloating, createNineZoneState, createTabsState, createTabState, createWidgetState, findTab, findWidget, floatingWidgetBringToFront, FloatingWidgets, getUniqueId, getWidgetPanelSectionId, isFloatingLocation, isHorizontalPanelSide, NineZone, NineZoneStateReducer, panelSides, removeTab, toolSettingsTabId, WidgetPanels, } from "@itwin/appui-layout-react";
18
18
  import { useActiveFrontstageDef } from "../frontstage/Frontstage";
19
19
  import { FrontstageManager } from "../frontstage/FrontstageManager";
20
20
  import { StagePanelState } from "../stagepanels/StagePanelDef";
@@ -31,7 +31,7 @@ import { ToolSettingsContent, WidgetPanelsToolSettings } from "./ToolSettings";
31
31
  import { useEscapeSetFocusToHome } from "../hooks/useEscapeSetFocusToHome";
32
32
  import { useSelector } from "react-redux";
33
33
  import { useUiVisibility } from "../hooks/useUiVisibility";
34
- const panelZoneKeys = ["start", "middle", "end"];
34
+ const panelZoneKeys = ["start", "end"];
35
35
  // istanbul ignore next
36
36
  const WidgetPanelsFrontstageComponent = React.memo(function WidgetPanelsFrontstageComponent() {
37
37
  const activeModalFrontstageInfo = useActiveModalFrontstageInfo();
@@ -211,6 +211,7 @@ export function addWidgets(state, widgets, side, widgetId) {
211
211
  label,
212
212
  iconSpec: widget.iconSpec,
213
213
  preferredPanelWidgetSize: widget.preferredPanelSize,
214
+ preferredFloatingWidgetSize: widget.defaultFloatingSize,
214
215
  canPopout: widget.canPopout,
215
216
  isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,
216
217
  });
@@ -233,15 +234,16 @@ export function appendWidgets(state, widgetDefs, side, preferredWidgetIndex) {
233
234
  var _a;
234
235
  if (widgetDefs.length === 0)
235
236
  return state;
236
- // Add new tabs.
237
- const tabs = new Array();
237
+ // Add missing widget tabs.
238
238
  for (const widgetDef of widgetDefs) {
239
239
  const label = getWidgetLabel(widgetDef.label);
240
240
  const saveTab = state.tabs[widgetDef.id];
241
241
  const preferredPanelWidgetSize = saveTab ? saveTab.preferredPanelWidgetSize : widgetDef.preferredPanelSize;
242
- const preferredFloatingWidgetSize = saveTab ? saveTab.preferredFloatingWidgetSize : undefined;
242
+ const preferredFloatingWidgetSize = saveTab ? saveTab.preferredFloatingWidgetSize : widgetDef.defaultFloatingSize;
243
243
  const preferredPopoutWidgetSize = saveTab ? saveTab.preferredPopoutWidgetSize : undefined;
244
- const userSized = saveTab ? saveTab.userSized : undefined;
244
+ // if a defaultFloatingSize is specified then this mean the widget can't determine its intrinsic size and must be explicitly sized
245
+ const userSized = saveTab ? (saveTab.userSized || !!widgetDef.defaultFloatingSize && !!saveTab.preferredFloatingWidgetSize)
246
+ : !!widgetDef.defaultFloatingSize;
245
247
  state = addTab(state, widgetDef.id, {
246
248
  label,
247
249
  iconSpec: widgetDef.iconSpec,
@@ -260,29 +262,8 @@ export function appendWidgets(state, widgetDefs, side, preferredWidgetIndex) {
260
262
  state = addWidgetTabToFloatingPanel(state, floatingContainerId, widgetDef.id, homePanelInfo, preferredFloatingWidgetSize, preferredPosition, userSized, widgetDef.isFloatingStateWindowResizable);
261
263
  }
262
264
  else {
263
- tabs.push(widgetDef.id);
264
- }
265
- }
266
- if (tabs.length) {
267
- const panel = state.panels[side];
268
- preferredWidgetIndex = preferredWidgetIndex >= panel.maxWidgetCount ? panel.maxWidgetCount - 1 : preferredWidgetIndex;
269
- if (preferredWidgetIndex < panel.widgets.length) {
270
- // Append tabs to existing widget.
271
- const widgetId = panel.widgets[preferredWidgetIndex];
272
- state = produce(state, (draft) => {
273
- const widget = draft.widgets[widgetId];
274
- for (const tab of tabs) {
275
- widget.tabs.push(tab);
276
- }
277
- });
278
- }
279
- else {
280
- const newWidgetId = getNextAvailablePanelWidgetId(panel);
281
- const widget = createWidgetState(newWidgetId, tabs);
282
- state = produce(state, (draft) => {
283
- draft.panels[side].widgets.push(widget.id);
284
- draft.widgets[widget.id] = castDraft(widget);
285
- });
265
+ const widgetPanelSectionId = getWidgetPanelSectionId(side, preferredWidgetIndex);
266
+ state = addWidgetTabToPanelSection(state, side, widgetPanelSectionId, widgetDef.id);
286
267
  }
287
268
  }
288
269
  return state;
@@ -306,28 +287,26 @@ function processPopoutWidgets(initialState, frontstageDef) {
306
287
  * @internal
307
288
  */
308
289
  export function addMissingWidgets(frontstageDef, initialState) {
309
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
290
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
310
291
  let state = initialState;
311
292
  state = appendWidgets(state, determineNewWidgets((_a = frontstageDef.centerLeft) === null || _a === void 0 ? void 0 : _a.widgetDefs, initialState), "left", 0);
312
293
  state = appendWidgets(state, determineNewWidgets((_b = frontstageDef.leftPanel) === null || _b === void 0 ? void 0 : _b.panelZones.start.widgetDefs, initialState), "left", 0);
313
294
  state = appendWidgets(state, determineNewWidgets((_c = frontstageDef.bottomLeft) === null || _c === void 0 ? void 0 : _c.widgetDefs, initialState), "left", 1);
314
- state = appendWidgets(state, determineNewWidgets((_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelZones.middle.widgetDefs, initialState), "left", 1);
315
- state = appendWidgets(state, determineNewWidgets((_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelWidgetDefs, initialState), "left", 2);
316
- state = appendWidgets(state, determineNewWidgets((_f = frontstageDef.leftPanel) === null || _f === void 0 ? void 0 : _f.panelZones.end.widgetDefs, initialState), "left", 2);
317
- state = appendWidgets(state, determineNewWidgets((_g = frontstageDef.centerRight) === null || _g === void 0 ? void 0 : _g.widgetDefs, initialState), "right", 0);
318
- state = appendWidgets(state, determineNewWidgets((_h = frontstageDef.rightPanel) === null || _h === void 0 ? void 0 : _h.panelZones.start.widgetDefs, initialState), "right", 0);
319
- state = appendWidgets(state, determineNewWidgets((_j = frontstageDef.bottomRight) === null || _j === void 0 ? void 0 : _j.widgetDefs, initialState), "right", 1);
320
- state = appendWidgets(state, determineNewWidgets((_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelZones.middle.widgetDefs, initialState), "right", 1);
321
- state = appendWidgets(state, determineNewWidgets((_l = frontstageDef.rightPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs, initialState), "right", 2);
322
- state = appendWidgets(state, determineNewWidgets((_m = frontstageDef.rightPanel) === null || _m === void 0 ? void 0 : _m.panelZones.end.widgetDefs, initialState), "right", 2);
323
- state = appendWidgets(state, determineNewWidgets((_o = frontstageDef.topPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs, initialState), "top", 0);
324
- state = appendWidgets(state, determineNewWidgets((_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.start.widgetDefs, initialState), "top", 0);
325
- state = appendWidgets(state, determineNewWidgets((_q = frontstageDef.topMostPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs, initialState), "top", 1); // eslint-disable-line deprecation/deprecation
326
- state = appendWidgets(state, determineNewWidgets((_r = frontstageDef.topPanel) === null || _r === void 0 ? void 0 : _r.panelZones.end.widgetDefs, initialState), "top", 1);
327
- state = appendWidgets(state, determineNewWidgets((_s = frontstageDef.bottomPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs, initialState), "bottom", 0);
328
- state = appendWidgets(state, determineNewWidgets((_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.start.widgetDefs, initialState), "bottom", 0);
329
- state = appendWidgets(state, determineNewWidgets((_u = frontstageDef.bottomMostPanel) === null || _u === void 0 ? void 0 : _u.panelWidgetDefs, initialState), "bottom", 1); // eslint-disable-line deprecation/deprecation
330
- state = appendWidgets(state, determineNewWidgets((_v = frontstageDef.bottomPanel) === null || _v === void 0 ? void 0 : _v.panelZones.end.widgetDefs, initialState), "bottom", 1);
295
+ state = appendWidgets(state, determineNewWidgets((_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelWidgetDefs, initialState), "left", 1);
296
+ state = appendWidgets(state, determineNewWidgets((_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelZones.end.widgetDefs, initialState), "left", 1);
297
+ state = appendWidgets(state, determineNewWidgets((_f = frontstageDef.centerRight) === null || _f === void 0 ? void 0 : _f.widgetDefs, initialState), "right", 0);
298
+ state = appendWidgets(state, determineNewWidgets((_g = frontstageDef.rightPanel) === null || _g === void 0 ? void 0 : _g.panelZones.start.widgetDefs, initialState), "right", 0);
299
+ state = appendWidgets(state, determineNewWidgets((_h = frontstageDef.bottomRight) === null || _h === void 0 ? void 0 : _h.widgetDefs, initialState), "right", 1);
300
+ state = appendWidgets(state, determineNewWidgets((_j = frontstageDef.rightPanel) === null || _j === void 0 ? void 0 : _j.panelWidgetDefs, initialState), "right", 1);
301
+ state = appendWidgets(state, determineNewWidgets((_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelZones.end.widgetDefs, initialState), "right", 1);
302
+ state = appendWidgets(state, determineNewWidgets((_l = frontstageDef.topPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs, initialState), "top", 0);
303
+ state = appendWidgets(state, determineNewWidgets((_m = frontstageDef.topPanel) === null || _m === void 0 ? void 0 : _m.panelZones.start.widgetDefs, initialState), "top", 0);
304
+ state = appendWidgets(state, determineNewWidgets((_o = frontstageDef.topMostPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs, initialState), "top", 1); // eslint-disable-line deprecation/deprecation
305
+ state = appendWidgets(state, determineNewWidgets((_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.end.widgetDefs, initialState), "top", 1);
306
+ state = appendWidgets(state, determineNewWidgets((_q = frontstageDef.bottomPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs, initialState), "bottom", 0);
307
+ state = appendWidgets(state, determineNewWidgets((_r = frontstageDef.bottomPanel) === null || _r === void 0 ? void 0 : _r.panelZones.start.widgetDefs, initialState), "bottom", 0);
308
+ state = appendWidgets(state, determineNewWidgets((_s = frontstageDef.bottomMostPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs, initialState), "bottom", 1); // eslint-disable-line deprecation/deprecation
309
+ state = appendWidgets(state, determineNewWidgets((_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.end.widgetDefs, initialState), "bottom", 1);
331
310
  return state;
332
311
  }
333
312
  /** Removes widgets with Hidden defaultState. */
@@ -383,18 +362,12 @@ export function getWidgetId(side, key) {
383
362
  if (key === "start") {
384
363
  return "leftStart";
385
364
  }
386
- else if (key === "middle") {
387
- return "leftMiddle";
388
- }
389
365
  return "leftEnd";
390
366
  }
391
367
  case "right": {
392
368
  if (key === "start") {
393
369
  return "rightStart";
394
370
  }
395
- else if (key === "middle") {
396
- return "rightMiddle";
397
- }
398
371
  return "rightEnd";
399
372
  }
400
373
  case "top": {
@@ -411,74 +384,90 @@ export function getWidgetId(side, key) {
411
384
  }
412
385
  }
413
386
  /** @internal */
414
- function getNextAvailablePanelWidgetId(panel) {
415
- const index = panel.widgets.length;
416
- return getWidgetId(panel.side, panelZoneKeys[index]);
417
- }
418
- function isVerticalPanelSide(side) { return !isHorizontalPanelSide(side); }
419
- /** @internal */
420
387
  export function getPanelZoneWidgets(frontstageDef, panelZone) {
421
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
388
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
422
389
  switch (panelZone) {
423
390
  case "leftStart": {
424
- return [
425
- ...((_a = frontstageDef.centerLeft) === null || _a === void 0 ? void 0 : _a.widgetDefs) || [],
426
- ...((_b = frontstageDef.leftPanel) === null || _b === void 0 ? void 0 : _b.panelZones.start.widgetDefs) || [],
427
- ];
428
- }
429
- case "leftMiddle": {
430
- return [
431
- ...((_c = frontstageDef.bottomLeft) === null || _c === void 0 ? void 0 : _c.widgetDefs) || [],
432
- ...((_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelZones.middle.widgetDefs) || [],
433
- ];
391
+ const outArray = [...((_a = frontstageDef.centerLeft) === null || _a === void 0 ? void 0 : _a.widgetDefs) || []];
392
+ (_b = frontstageDef.leftPanel) === null || _b === void 0 ? void 0 : _b.panelZones.start.widgetDefs.forEach((widgetDef) => {
393
+ // istanbul ignore else
394
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
395
+ outArray.push(widgetDef);
396
+ });
397
+ return outArray;
434
398
  }
435
399
  case "leftEnd": {
436
- return [
437
- ...((_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelWidgetDefs) || [],
438
- ...((_f = frontstageDef.leftPanel) === null || _f === void 0 ? void 0 : _f.panelZones.end.widgetDefs) || [],
439
- ];
400
+ const outArray = [...((_c = frontstageDef.bottomLeft) === null || _c === void 0 ? void 0 : _c.widgetDefs) || []];
401
+ (_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelZones.end.widgetDefs.forEach((widgetDef) => {
402
+ // istanbul ignore else
403
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
404
+ outArray.push(widgetDef);
405
+ });
406
+ (_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelWidgetDefs.forEach((widgetDef) => {
407
+ // istanbul ignore else
408
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
409
+ outArray.push(widgetDef);
410
+ });
411
+ return outArray;
440
412
  }
441
413
  case "rightStart": {
442
- return [
443
- ...((_g = frontstageDef.centerRight) === null || _g === void 0 ? void 0 : _g.widgetDefs) || [],
444
- ...((_h = frontstageDef.rightPanel) === null || _h === void 0 ? void 0 : _h.panelZones.start.widgetDefs) || [],
445
- ];
446
- }
447
- case "rightMiddle": {
448
- return [
449
- ...((_j = frontstageDef.bottomRight) === null || _j === void 0 ? void 0 : _j.widgetDefs) || [],
450
- ...((_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelZones.middle.widgetDefs) || [],
451
- ];
414
+ const outArray = [...((_f = frontstageDef.centerRight) === null || _f === void 0 ? void 0 : _f.widgetDefs) || []];
415
+ (_g = frontstageDef.rightPanel) === null || _g === void 0 ? void 0 : _g.panelZones.start.widgetDefs.forEach((widgetDef) => {
416
+ // istanbul ignore else
417
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
418
+ outArray.push(widgetDef);
419
+ });
420
+ return outArray;
452
421
  }
453
422
  case "rightEnd": {
454
- return [
455
- ...((_l = frontstageDef.rightPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs) || [],
456
- ...((_m = frontstageDef.rightPanel) === null || _m === void 0 ? void 0 : _m.panelZones.end.widgetDefs) || [],
457
- ];
423
+ const outArray = [...((_h = frontstageDef.bottomRight) === null || _h === void 0 ? void 0 : _h.widgetDefs) || []];
424
+ (_j = frontstageDef.rightPanel) === null || _j === void 0 ? void 0 : _j.panelZones.end.widgetDefs.forEach((widgetDef) => {
425
+ // istanbul ignore else
426
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
427
+ outArray.push(widgetDef);
428
+ });
429
+ (_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelWidgetDefs.forEach((widgetDef) => {
430
+ // istanbul ignore else
431
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
432
+ outArray.push(widgetDef);
433
+ });
434
+ return outArray;
458
435
  }
459
436
  case "topStart": {
460
- return [
461
- ...((_o = frontstageDef.topPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs) || [],
462
- ...((_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.start.widgetDefs) || [],
463
- ];
437
+ const outArray = [...((_l = frontstageDef.topPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs) || []];
438
+ (_m = frontstageDef.topPanel) === null || _m === void 0 ? void 0 : _m.panelZones.start.widgetDefs.forEach((widgetDef) => {
439
+ // istanbul ignore else
440
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
441
+ outArray.push(widgetDef);
442
+ });
443
+ return outArray;
464
444
  }
465
445
  case "topEnd": {
466
- return [
467
- ...((_q = frontstageDef.topMostPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs) || [],
468
- ...((_r = frontstageDef.topPanel) === null || _r === void 0 ? void 0 : _r.panelZones.end.widgetDefs) || [],
469
- ];
446
+ const outArray = [...((_o = frontstageDef.topMostPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs) || []]; // eslint-disable-line deprecation/deprecation
447
+ (_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.end.widgetDefs.forEach((widgetDef) => {
448
+ // istanbul ignore else
449
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
450
+ outArray.push(widgetDef);
451
+ });
452
+ return outArray;
470
453
  }
471
454
  case "bottomStart": {
472
- return [
473
- ...((_s = frontstageDef.bottomPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs) || [],
474
- ...((_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.start.widgetDefs) || [],
475
- ];
455
+ const outArray = [...((_q = frontstageDef.bottomPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs) || []];
456
+ (_r = frontstageDef.bottomPanel) === null || _r === void 0 ? void 0 : _r.panelZones.start.widgetDefs.forEach((widgetDef) => {
457
+ // istanbul ignore else
458
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
459
+ outArray.push(widgetDef);
460
+ });
461
+ return outArray;
476
462
  }
477
463
  case "bottomEnd": {
478
- return [
479
- ...((_u = frontstageDef.bottomMostPanel) === null || _u === void 0 ? void 0 : _u.panelWidgetDefs) || [],
480
- ...((_v = frontstageDef.bottomPanel) === null || _v === void 0 ? void 0 : _v.panelZones.end.widgetDefs) || [],
481
- ];
464
+ const outArray = [...((_s = frontstageDef.bottomMostPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs) || []]; // eslint-disable-line deprecation/deprecation
465
+ (_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.end.widgetDefs.forEach((widgetDef) => {
466
+ // istanbul ignore else
467
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
468
+ outArray.push(widgetDef);
469
+ });
470
+ return outArray;
482
471
  }
483
472
  }
484
473
  }
@@ -487,11 +476,6 @@ export function addPanelWidgets(state, frontstageDef, side) {
487
476
  const start = getWidgetId(side, "start");
488
477
  const startWidgets = getPanelZoneWidgets(frontstageDef, start);
489
478
  state = addWidgets(state, startWidgets, side, start);
490
- if (isVerticalPanelSide(side)) {
491
- const middle = getWidgetId(side, "middle");
492
- const middleWidgets = getPanelZoneWidgets(frontstageDef, middle);
493
- state = addWidgets(state, middleWidgets, side, middle);
494
- }
495
479
  const end = getWidgetId(side, "end");
496
480
  const endWidgets = getPanelZoneWidgets(frontstageDef, end);
497
481
  state = addWidgets(state, endWidgets, side, end);
@@ -529,7 +513,7 @@ function getPanelMaxSize(maxSizeSpec, panel, nineZoneSize) {
529
513
  const size = isHorizontalPanelSide(panel) ? nineZoneSize.height : nineZoneSize.width;
530
514
  return maxSizeSpec.percentage / 100 * size;
531
515
  }
532
- const stateVersion = 11; // this needs to be bumped when NineZoneState is changed (to recreate layout).
516
+ const stateVersion = 12; // this needs to be bumped when NineZoneState is changed (to recreate layout).
533
517
  /** @internal */
534
518
  export function initializeNineZoneState(frontstageDef) {
535
519
  let nineZone = defaultNineZone;
@@ -613,6 +597,31 @@ export function restoreNineZoneState(frontstageDef, saved) {
613
597
  isFloatingStateWindowResizable: widgetDef === null || widgetDef === void 0 ? void 0 : widgetDef.isFloatingStateWindowResizable,
614
598
  };
615
599
  }
600
+ // remove center panel section if one is found in left or right panels
601
+ const oldLeftMiddleIndex = saved.panels.left.widgets.findIndex((value) => value === "leftMiddle");
602
+ // istanbul ignore next
603
+ if (-1 !== oldLeftMiddleIndex) {
604
+ draft.panels.left.widgets = saved.panels.left.widgets.filter((value) => value !== "leftMiddle");
605
+ if ("leftEnd" in draft.widgets) {
606
+ draft.widgets.leftMiddle.tabs.forEach((tab) => draft.widgets.leftEnd.tabs.push(tab));
607
+ }
608
+ else {
609
+ draft.widgets.leftEnd = { ...draft.widgets.leftMiddle };
610
+ delete draft.widgets.leftMiddle;
611
+ }
612
+ }
613
+ const oldRightMiddleIndex = saved.panels.right.widgets.findIndex((value) => value === "rightMiddle");
614
+ // istanbul ignore next
615
+ if (-1 !== oldRightMiddleIndex) {
616
+ draft.panels.right.widgets = saved.panels.right.widgets.filter((value) => value !== "rightMiddle");
617
+ if ("rightEnd" in draft.widgets) {
618
+ draft.widgets.rightMiddle.tabs.forEach((tab) => draft.widgets.rightEnd.tabs.push(tab));
619
+ }
620
+ else {
621
+ draft.widgets.rightEnd = { ...draft.widgets.rightMiddle };
622
+ delete draft.widgets.rightMiddle;
623
+ }
624
+ }
616
625
  return;
617
626
  });
618
627
  if (FrontstageManager.nineZoneSize && (0 !== FrontstageManager.nineZoneSize.height || 0 !== FrontstageManager.nineZoneSize.width)) {
@@ -661,6 +670,7 @@ function addRemovedTab(nineZone, widgetDef) {
661
670
  const newTab = createTabState(widgetDef.id, {
662
671
  label: getWidgetLabel(widgetDef.label),
663
672
  canPopout: widgetDef.canPopout,
673
+ iconSpec: widgetDef.iconSpec,
664
674
  preferredPanelWidgetSize: widgetDef.preferredPanelSize,
665
675
  isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,
666
676
  });
@@ -721,20 +731,11 @@ export const setWidgetState = produce((nineZone, widgetDef, state) => {
721
731
  location = findTab(nineZone, id);
722
732
  assert(!!location);
723
733
  }
724
- const widget = nineZone.widgets[location.widgetId];
725
- if (id !== widget.activeTabId)
726
- return;
727
- const minimized = widget.minimized;
728
- widget.minimized = true;
729
- if ("side" in location) {
730
- const panel = nineZone.panels[location.side];
731
- const maximized = panel.widgets.find((wId) => {
732
- const w = nineZone.widgets[wId];
733
- return !w.minimized;
734
- });
735
- if (maximized === undefined)
736
- widget.minimized = minimized;
737
- return;
734
+ if (isFloatingLocation(location)) {
735
+ const widget = nineZone.widgets[location.widgetId];
736
+ if (id !== widget.activeTabId)
737
+ return;
738
+ widget.minimized = true;
738
739
  }
739
740
  }
740
741
  else if (state === WidgetState.Hidden) {