@itwin/appui-react 3.2.0-dev.22 → 3.2.0-dev.23

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 (99) hide show
  1. package/lib/cjs/appui-react/backstage/BackstageComposerItem.d.ts.map +1 -1
  2. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js +4 -2
  3. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  4. package/lib/cjs/appui-react/frontstage/Frontstage.d.ts +5 -0
  5. package/lib/cjs/appui-react/frontstage/Frontstage.d.ts.map +1 -1
  6. package/lib/cjs/appui-react/frontstage/Frontstage.js +9 -1
  7. package/lib/cjs/appui-react/frontstage/Frontstage.js.map +1 -1
  8. package/lib/cjs/appui-react/frontstage/FrontstageComposer.d.ts.map +1 -1
  9. package/lib/cjs/appui-react/frontstage/FrontstageComposer.js +2 -0
  10. package/lib/cjs/appui-react/frontstage/FrontstageComposer.js.map +1 -1
  11. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  12. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +9 -4
  13. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  14. package/lib/cjs/appui-react/stagepanels/StagePanel.d.ts +1 -1
  15. package/lib/cjs/appui-react/stagepanels/StagePanel.d.ts.map +1 -1
  16. package/lib/cjs/appui-react/stagepanels/StagePanel.js.map +1 -1
  17. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts +6 -4
  18. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  19. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +6 -10
  20. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  21. package/lib/cjs/appui-react/statusfields/Indicator.d.ts +3 -3
  22. package/lib/cjs/appui-react/statusfields/Indicator.d.ts.map +1 -1
  23. package/lib/cjs/appui-react/statusfields/Indicator.js.map +1 -1
  24. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.d.ts +2 -2
  25. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +4 -3
  26. package/lib/cjs/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  27. package/lib/cjs/appui-react/utils/PropsHelper.d.ts +3 -1
  28. package/lib/cjs/appui-react/utils/PropsHelper.d.ts.map +1 -1
  29. package/lib/cjs/appui-react/utils/PropsHelper.js +10 -0
  30. package/lib/cjs/appui-react/utils/PropsHelper.js.map +1 -1
  31. package/lib/cjs/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
  32. package/lib/cjs/appui-react/utils/UiShowHideManager.js +1 -0
  33. package/lib/cjs/appui-react/utils/UiShowHideManager.js.map +1 -1
  34. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts +17 -1
  35. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  36. package/lib/cjs/appui-react/widget-panels/Frontstage.js +124 -123
  37. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  38. package/lib/cjs/appui-react/widget-panels/ToolSettings.scss +10 -0
  39. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +8 -1
  40. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  41. package/lib/cjs/appui-react/widgets/WidgetDef.js +13 -3
  42. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  43. package/lib/cjs/appui-react/widgets/WidgetHost.d.ts +1 -1
  44. package/lib/cjs/appui-react/widgets/WidgetHost.d.ts.map +1 -1
  45. package/lib/cjs/appui-react/widgets/WidgetHost.js +56 -7
  46. package/lib/cjs/appui-react/widgets/WidgetHost.js.map +1 -1
  47. package/lib/cjs/appui-react/widgets/WidgetManager.d.ts.map +1 -1
  48. package/lib/cjs/appui-react/widgets/WidgetManager.js +1 -0
  49. package/lib/cjs/appui-react/widgets/WidgetManager.js.map +1 -1
  50. package/lib/esm/appui-react/backstage/BackstageComposerItem.d.ts.map +1 -1
  51. package/lib/esm/appui-react/backstage/BackstageComposerItem.js +5 -3
  52. package/lib/esm/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  53. package/lib/esm/appui-react/frontstage/Frontstage.d.ts +5 -0
  54. package/lib/esm/appui-react/frontstage/Frontstage.d.ts.map +1 -1
  55. package/lib/esm/appui-react/frontstage/Frontstage.js +7 -0
  56. package/lib/esm/appui-react/frontstage/Frontstage.js.map +1 -1
  57. package/lib/esm/appui-react/frontstage/FrontstageComposer.d.ts.map +1 -1
  58. package/lib/esm/appui-react/frontstage/FrontstageComposer.js +2 -0
  59. package/lib/esm/appui-react/frontstage/FrontstageComposer.js.map +1 -1
  60. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  61. package/lib/esm/appui-react/frontstage/FrontstageDef.js +9 -4
  62. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  63. package/lib/esm/appui-react/stagepanels/StagePanel.d.ts +1 -1
  64. package/lib/esm/appui-react/stagepanels/StagePanel.d.ts.map +1 -1
  65. package/lib/esm/appui-react/stagepanels/StagePanel.js.map +1 -1
  66. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts +6 -4
  67. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  68. package/lib/esm/appui-react/stagepanels/StagePanelDef.js +6 -10
  69. package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  70. package/lib/esm/appui-react/statusfields/Indicator.d.ts +3 -3
  71. package/lib/esm/appui-react/statusfields/Indicator.d.ts.map +1 -1
  72. package/lib/esm/appui-react/statusfields/Indicator.js.map +1 -1
  73. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.d.ts +2 -2
  74. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js +4 -3
  75. package/lib/esm/appui-react/ui-items-provider/StandardStatusbarItemsProvider.js.map +1 -1
  76. package/lib/esm/appui-react/utils/PropsHelper.d.ts +3 -1
  77. package/lib/esm/appui-react/utils/PropsHelper.d.ts.map +1 -1
  78. package/lib/esm/appui-react/utils/PropsHelper.js +11 -1
  79. package/lib/esm/appui-react/utils/PropsHelper.js.map +1 -1
  80. package/lib/esm/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
  81. package/lib/esm/appui-react/utils/UiShowHideManager.js +1 -0
  82. package/lib/esm/appui-react/utils/UiShowHideManager.js.map +1 -1
  83. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts +17 -1
  84. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  85. package/lib/esm/appui-react/widget-panels/Frontstage.js +125 -124
  86. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  87. package/lib/esm/appui-react/widget-panels/ToolSettings.scss +10 -0
  88. package/lib/esm/appui-react/widgets/WidgetDef.d.ts +8 -1
  89. package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  90. package/lib/esm/appui-react/widgets/WidgetDef.js +13 -3
  91. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  92. package/lib/esm/appui-react/widgets/WidgetHost.d.ts +1 -1
  93. package/lib/esm/appui-react/widgets/WidgetHost.d.ts.map +1 -1
  94. package/lib/esm/appui-react/widgets/WidgetHost.js +56 -7
  95. package/lib/esm/appui-react/widgets/WidgetHost.js.map +1 -1
  96. package/lib/esm/appui-react/widgets/WidgetManager.d.ts.map +1 -1
  97. package/lib/esm/appui-react/widgets/WidgetManager.js +1 -0
  98. package/lib/esm/appui-react/widgets/WidgetManager.js.map +1 -1
  99. package/package.json +33 -32
@@ -34,7 +34,7 @@ const ToolSettings_1 = require("./ToolSettings");
34
34
  const useEscapeSetFocusToHome_1 = require("../hooks/useEscapeSetFocusToHome");
35
35
  const react_redux_1 = require("react-redux");
36
36
  const useUiVisibility_1 = require("../hooks/useUiVisibility");
37
- const panelZoneKeys = ["start", "middle", "end"];
37
+ const panelZoneKeys = ["start", "end"];
38
38
  // istanbul ignore next
39
39
  const WidgetPanelsFrontstageComponent = React.memo(function WidgetPanelsFrontstageComponent() {
40
40
  const activeModalFrontstageInfo = (0, ModalFrontstageComposer_1.useActiveModalFrontstageInfo)();
@@ -219,6 +219,7 @@ function addWidgets(state, widgets, side, widgetId) {
219
219
  label,
220
220
  iconSpec: widget.iconSpec,
221
221
  preferredPanelWidgetSize: widget.preferredPanelSize,
222
+ preferredFloatingWidgetSize: widget.defaultFloatingSize,
222
223
  canPopout: widget.canPopout,
223
224
  isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,
224
225
  });
@@ -242,15 +243,16 @@ function appendWidgets(state, widgetDefs, side, preferredWidgetIndex) {
242
243
  var _a;
243
244
  if (widgetDefs.length === 0)
244
245
  return state;
245
- // Add new tabs.
246
- const tabs = new Array();
246
+ // Add missing widget tabs.
247
247
  for (const widgetDef of widgetDefs) {
248
248
  const label = getWidgetLabel(widgetDef.label);
249
249
  const saveTab = state.tabs[widgetDef.id];
250
250
  const preferredPanelWidgetSize = saveTab ? saveTab.preferredPanelWidgetSize : widgetDef.preferredPanelSize;
251
- const preferredFloatingWidgetSize = saveTab ? saveTab.preferredFloatingWidgetSize : undefined;
251
+ const preferredFloatingWidgetSize = saveTab ? saveTab.preferredFloatingWidgetSize : widgetDef.defaultFloatingSize;
252
252
  const preferredPopoutWidgetSize = saveTab ? saveTab.preferredPopoutWidgetSize : undefined;
253
- const userSized = saveTab ? saveTab.userSized : undefined;
253
+ // if a defaultFloatingSize is specified then this mean the widget can't determine its intrinsic size and must be explicitly sized
254
+ const userSized = saveTab ? (saveTab.userSized || !!widgetDef.defaultFloatingSize && !!saveTab.preferredFloatingWidgetSize)
255
+ : !!widgetDef.defaultFloatingSize;
254
256
  state = (0, appui_layout_react_1.addTab)(state, widgetDef.id, {
255
257
  label,
256
258
  iconSpec: widgetDef.iconSpec,
@@ -269,29 +271,8 @@ function appendWidgets(state, widgetDefs, side, preferredWidgetIndex) {
269
271
  state = (0, appui_layout_react_1.addWidgetTabToFloatingPanel)(state, floatingContainerId, widgetDef.id, homePanelInfo, preferredFloatingWidgetSize, preferredPosition, userSized, widgetDef.isFloatingStateWindowResizable);
270
272
  }
271
273
  else {
272
- tabs.push(widgetDef.id);
273
- }
274
- }
275
- if (tabs.length) {
276
- const panel = state.panels[side];
277
- preferredWidgetIndex = preferredWidgetIndex >= panel.maxWidgetCount ? panel.maxWidgetCount - 1 : preferredWidgetIndex;
278
- if (preferredWidgetIndex < panel.widgets.length) {
279
- // Append tabs to existing widget.
280
- const widgetId = panel.widgets[preferredWidgetIndex];
281
- state = (0, immer_1.default)(state, (draft) => {
282
- const widget = draft.widgets[widgetId];
283
- for (const tab of tabs) {
284
- widget.tabs.push(tab);
285
- }
286
- });
287
- }
288
- else {
289
- const newWidgetId = getNextAvailablePanelWidgetId(panel);
290
- const widget = (0, appui_layout_react_1.createWidgetState)(newWidgetId, tabs);
291
- state = (0, immer_1.default)(state, (draft) => {
292
- draft.panels[side].widgets.push(widget.id);
293
- draft.widgets[widget.id] = (0, immer_1.castDraft)(widget);
294
- });
274
+ const widgetPanelSectionId = (0, appui_layout_react_1.getWidgetPanelSectionId)(side, preferredWidgetIndex);
275
+ state = (0, appui_layout_react_1.addWidgetTabToPanelSection)(state, side, widgetPanelSectionId, widgetDef.id);
295
276
  }
296
277
  }
297
278
  return state;
@@ -316,28 +297,26 @@ function processPopoutWidgets(initialState, frontstageDef) {
316
297
  * @internal
317
298
  */
318
299
  function addMissingWidgets(frontstageDef, initialState) {
319
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
300
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
320
301
  let state = initialState;
321
302
  state = appendWidgets(state, determineNewWidgets((_a = frontstageDef.centerLeft) === null || _a === void 0 ? void 0 : _a.widgetDefs, initialState), "left", 0);
322
303
  state = appendWidgets(state, determineNewWidgets((_b = frontstageDef.leftPanel) === null || _b === void 0 ? void 0 : _b.panelZones.start.widgetDefs, initialState), "left", 0);
323
304
  state = appendWidgets(state, determineNewWidgets((_c = frontstageDef.bottomLeft) === null || _c === void 0 ? void 0 : _c.widgetDefs, initialState), "left", 1);
324
- state = appendWidgets(state, determineNewWidgets((_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelZones.middle.widgetDefs, initialState), "left", 1);
325
- state = appendWidgets(state, determineNewWidgets((_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelWidgetDefs, initialState), "left", 2);
326
- state = appendWidgets(state, determineNewWidgets((_f = frontstageDef.leftPanel) === null || _f === void 0 ? void 0 : _f.panelZones.end.widgetDefs, initialState), "left", 2);
327
- state = appendWidgets(state, determineNewWidgets((_g = frontstageDef.centerRight) === null || _g === void 0 ? void 0 : _g.widgetDefs, initialState), "right", 0);
328
- state = appendWidgets(state, determineNewWidgets((_h = frontstageDef.rightPanel) === null || _h === void 0 ? void 0 : _h.panelZones.start.widgetDefs, initialState), "right", 0);
329
- state = appendWidgets(state, determineNewWidgets((_j = frontstageDef.bottomRight) === null || _j === void 0 ? void 0 : _j.widgetDefs, initialState), "right", 1);
330
- state = appendWidgets(state, determineNewWidgets((_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelZones.middle.widgetDefs, initialState), "right", 1);
331
- state = appendWidgets(state, determineNewWidgets((_l = frontstageDef.rightPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs, initialState), "right", 2);
332
- state = appendWidgets(state, determineNewWidgets((_m = frontstageDef.rightPanel) === null || _m === void 0 ? void 0 : _m.panelZones.end.widgetDefs, initialState), "right", 2);
333
- state = appendWidgets(state, determineNewWidgets((_o = frontstageDef.topPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs, initialState), "top", 0);
334
- state = appendWidgets(state, determineNewWidgets((_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.start.widgetDefs, initialState), "top", 0);
335
- state = appendWidgets(state, determineNewWidgets((_q = frontstageDef.topMostPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs, initialState), "top", 1); // eslint-disable-line deprecation/deprecation
336
- state = appendWidgets(state, determineNewWidgets((_r = frontstageDef.topPanel) === null || _r === void 0 ? void 0 : _r.panelZones.end.widgetDefs, initialState), "top", 1);
337
- state = appendWidgets(state, determineNewWidgets((_s = frontstageDef.bottomPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs, initialState), "bottom", 0);
338
- state = appendWidgets(state, determineNewWidgets((_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.start.widgetDefs, initialState), "bottom", 0);
339
- state = appendWidgets(state, determineNewWidgets((_u = frontstageDef.bottomMostPanel) === null || _u === void 0 ? void 0 : _u.panelWidgetDefs, initialState), "bottom", 1); // eslint-disable-line deprecation/deprecation
340
- state = appendWidgets(state, determineNewWidgets((_v = frontstageDef.bottomPanel) === null || _v === void 0 ? void 0 : _v.panelZones.end.widgetDefs, initialState), "bottom", 1);
305
+ state = appendWidgets(state, determineNewWidgets((_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelWidgetDefs, initialState), "left", 1);
306
+ state = appendWidgets(state, determineNewWidgets((_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelZones.end.widgetDefs, initialState), "left", 1);
307
+ state = appendWidgets(state, determineNewWidgets((_f = frontstageDef.centerRight) === null || _f === void 0 ? void 0 : _f.widgetDefs, initialState), "right", 0);
308
+ state = appendWidgets(state, determineNewWidgets((_g = frontstageDef.rightPanel) === null || _g === void 0 ? void 0 : _g.panelZones.start.widgetDefs, initialState), "right", 0);
309
+ state = appendWidgets(state, determineNewWidgets((_h = frontstageDef.bottomRight) === null || _h === void 0 ? void 0 : _h.widgetDefs, initialState), "right", 1);
310
+ state = appendWidgets(state, determineNewWidgets((_j = frontstageDef.rightPanel) === null || _j === void 0 ? void 0 : _j.panelWidgetDefs, initialState), "right", 1);
311
+ state = appendWidgets(state, determineNewWidgets((_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelZones.end.widgetDefs, initialState), "right", 1);
312
+ state = appendWidgets(state, determineNewWidgets((_l = frontstageDef.topPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs, initialState), "top", 0);
313
+ state = appendWidgets(state, determineNewWidgets((_m = frontstageDef.topPanel) === null || _m === void 0 ? void 0 : _m.panelZones.start.widgetDefs, initialState), "top", 0);
314
+ state = appendWidgets(state, determineNewWidgets((_o = frontstageDef.topMostPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs, initialState), "top", 1); // eslint-disable-line deprecation/deprecation
315
+ state = appendWidgets(state, determineNewWidgets((_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.end.widgetDefs, initialState), "top", 1);
316
+ state = appendWidgets(state, determineNewWidgets((_q = frontstageDef.bottomPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs, initialState), "bottom", 0);
317
+ state = appendWidgets(state, determineNewWidgets((_r = frontstageDef.bottomPanel) === null || _r === void 0 ? void 0 : _r.panelZones.start.widgetDefs, initialState), "bottom", 0);
318
+ state = appendWidgets(state, determineNewWidgets((_s = frontstageDef.bottomMostPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs, initialState), "bottom", 1); // eslint-disable-line deprecation/deprecation
319
+ state = appendWidgets(state, determineNewWidgets((_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.end.widgetDefs, initialState), "bottom", 1);
341
320
  return state;
342
321
  }
343
322
  exports.addMissingWidgets = addMissingWidgets;
@@ -395,18 +374,12 @@ function getWidgetId(side, key) {
395
374
  if (key === "start") {
396
375
  return "leftStart";
397
376
  }
398
- else if (key === "middle") {
399
- return "leftMiddle";
400
- }
401
377
  return "leftEnd";
402
378
  }
403
379
  case "right": {
404
380
  if (key === "start") {
405
381
  return "rightStart";
406
382
  }
407
- else if (key === "middle") {
408
- return "rightMiddle";
409
- }
410
383
  return "rightEnd";
411
384
  }
412
385
  case "top": {
@@ -424,74 +397,90 @@ function getWidgetId(side, key) {
424
397
  }
425
398
  exports.getWidgetId = getWidgetId;
426
399
  /** @internal */
427
- function getNextAvailablePanelWidgetId(panel) {
428
- const index = panel.widgets.length;
429
- return getWidgetId(panel.side, panelZoneKeys[index]);
430
- }
431
- function isVerticalPanelSide(side) { return !(0, appui_layout_react_1.isHorizontalPanelSide)(side); }
432
- /** @internal */
433
400
  function getPanelZoneWidgets(frontstageDef, panelZone) {
434
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
401
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
435
402
  switch (panelZone) {
436
403
  case "leftStart": {
437
- return [
438
- ...((_a = frontstageDef.centerLeft) === null || _a === void 0 ? void 0 : _a.widgetDefs) || [],
439
- ...((_b = frontstageDef.leftPanel) === null || _b === void 0 ? void 0 : _b.panelZones.start.widgetDefs) || [],
440
- ];
441
- }
442
- case "leftMiddle": {
443
- return [
444
- ...((_c = frontstageDef.bottomLeft) === null || _c === void 0 ? void 0 : _c.widgetDefs) || [],
445
- ...((_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelZones.middle.widgetDefs) || [],
446
- ];
404
+ const outArray = [...((_a = frontstageDef.centerLeft) === null || _a === void 0 ? void 0 : _a.widgetDefs) || []];
405
+ (_b = frontstageDef.leftPanel) === null || _b === void 0 ? void 0 : _b.panelZones.start.widgetDefs.forEach((widgetDef) => {
406
+ // istanbul ignore else
407
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
408
+ outArray.push(widgetDef);
409
+ });
410
+ return outArray;
447
411
  }
448
412
  case "leftEnd": {
449
- return [
450
- ...((_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelWidgetDefs) || [],
451
- ...((_f = frontstageDef.leftPanel) === null || _f === void 0 ? void 0 : _f.panelZones.end.widgetDefs) || [],
452
- ];
413
+ const outArray = [...((_c = frontstageDef.bottomLeft) === null || _c === void 0 ? void 0 : _c.widgetDefs) || []];
414
+ (_d = frontstageDef.leftPanel) === null || _d === void 0 ? void 0 : _d.panelZones.end.widgetDefs.forEach((widgetDef) => {
415
+ // istanbul ignore else
416
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
417
+ outArray.push(widgetDef);
418
+ });
419
+ (_e = frontstageDef.leftPanel) === null || _e === void 0 ? void 0 : _e.panelWidgetDefs.forEach((widgetDef) => {
420
+ // istanbul ignore else
421
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
422
+ outArray.push(widgetDef);
423
+ });
424
+ return outArray;
453
425
  }
454
426
  case "rightStart": {
455
- return [
456
- ...((_g = frontstageDef.centerRight) === null || _g === void 0 ? void 0 : _g.widgetDefs) || [],
457
- ...((_h = frontstageDef.rightPanel) === null || _h === void 0 ? void 0 : _h.panelZones.start.widgetDefs) || [],
458
- ];
459
- }
460
- case "rightMiddle": {
461
- return [
462
- ...((_j = frontstageDef.bottomRight) === null || _j === void 0 ? void 0 : _j.widgetDefs) || [],
463
- ...((_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelZones.middle.widgetDefs) || [],
464
- ];
427
+ const outArray = [...((_f = frontstageDef.centerRight) === null || _f === void 0 ? void 0 : _f.widgetDefs) || []];
428
+ (_g = frontstageDef.rightPanel) === null || _g === void 0 ? void 0 : _g.panelZones.start.widgetDefs.forEach((widgetDef) => {
429
+ // istanbul ignore else
430
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
431
+ outArray.push(widgetDef);
432
+ });
433
+ return outArray;
465
434
  }
466
435
  case "rightEnd": {
467
- return [
468
- ...((_l = frontstageDef.rightPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs) || [],
469
- ...((_m = frontstageDef.rightPanel) === null || _m === void 0 ? void 0 : _m.panelZones.end.widgetDefs) || [],
470
- ];
436
+ const outArray = [...((_h = frontstageDef.bottomRight) === null || _h === void 0 ? void 0 : _h.widgetDefs) || []];
437
+ (_j = frontstageDef.rightPanel) === null || _j === void 0 ? void 0 : _j.panelZones.end.widgetDefs.forEach((widgetDef) => {
438
+ // istanbul ignore else
439
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
440
+ outArray.push(widgetDef);
441
+ });
442
+ (_k = frontstageDef.rightPanel) === null || _k === void 0 ? void 0 : _k.panelWidgetDefs.forEach((widgetDef) => {
443
+ // istanbul ignore else
444
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
445
+ outArray.push(widgetDef);
446
+ });
447
+ return outArray;
471
448
  }
472
449
  case "topStart": {
473
- return [
474
- ...((_o = frontstageDef.topPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs) || [],
475
- ...((_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.start.widgetDefs) || [],
476
- ];
450
+ const outArray = [...((_l = frontstageDef.topPanel) === null || _l === void 0 ? void 0 : _l.panelWidgetDefs) || []];
451
+ (_m = frontstageDef.topPanel) === null || _m === void 0 ? void 0 : _m.panelZones.start.widgetDefs.forEach((widgetDef) => {
452
+ // istanbul ignore else
453
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
454
+ outArray.push(widgetDef);
455
+ });
456
+ return outArray;
477
457
  }
478
458
  case "topEnd": {
479
- return [
480
- ...((_q = frontstageDef.topMostPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs) || [],
481
- ...((_r = frontstageDef.topPanel) === null || _r === void 0 ? void 0 : _r.panelZones.end.widgetDefs) || [],
482
- ];
459
+ const outArray = [...((_o = frontstageDef.topMostPanel) === null || _o === void 0 ? void 0 : _o.panelWidgetDefs) || []]; // eslint-disable-line deprecation/deprecation
460
+ (_p = frontstageDef.topPanel) === null || _p === void 0 ? void 0 : _p.panelZones.end.widgetDefs.forEach((widgetDef) => {
461
+ // istanbul ignore else
462
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
463
+ outArray.push(widgetDef);
464
+ });
465
+ return outArray;
483
466
  }
484
467
  case "bottomStart": {
485
- return [
486
- ...((_s = frontstageDef.bottomPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs) || [],
487
- ...((_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.start.widgetDefs) || [],
488
- ];
468
+ const outArray = [...((_q = frontstageDef.bottomPanel) === null || _q === void 0 ? void 0 : _q.panelWidgetDefs) || []];
469
+ (_r = frontstageDef.bottomPanel) === null || _r === void 0 ? void 0 : _r.panelZones.start.widgetDefs.forEach((widgetDef) => {
470
+ // istanbul ignore else
471
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
472
+ outArray.push(widgetDef);
473
+ });
474
+ return outArray;
489
475
  }
490
476
  case "bottomEnd": {
491
- return [
492
- ...((_u = frontstageDef.bottomMostPanel) === null || _u === void 0 ? void 0 : _u.panelWidgetDefs) || [],
493
- ...((_v = frontstageDef.bottomPanel) === null || _v === void 0 ? void 0 : _v.panelZones.end.widgetDefs) || [],
494
- ];
477
+ const outArray = [...((_s = frontstageDef.bottomMostPanel) === null || _s === void 0 ? void 0 : _s.panelWidgetDefs) || []]; // eslint-disable-line deprecation/deprecation
478
+ (_t = frontstageDef.bottomPanel) === null || _t === void 0 ? void 0 : _t.panelZones.end.widgetDefs.forEach((widgetDef) => {
479
+ // istanbul ignore else
480
+ if (undefined === outArray.find((widget) => widget.id === widgetDef.id))
481
+ outArray.push(widgetDef);
482
+ });
483
+ return outArray;
495
484
  }
496
485
  }
497
486
  }
@@ -501,11 +490,6 @@ function addPanelWidgets(state, frontstageDef, side) {
501
490
  const start = getWidgetId(side, "start");
502
491
  const startWidgets = getPanelZoneWidgets(frontstageDef, start);
503
492
  state = addWidgets(state, startWidgets, side, start);
504
- if (isVerticalPanelSide(side)) {
505
- const middle = getWidgetId(side, "middle");
506
- const middleWidgets = getPanelZoneWidgets(frontstageDef, middle);
507
- state = addWidgets(state, middleWidgets, side, middle);
508
- }
509
493
  const end = getWidgetId(side, "end");
510
494
  const endWidgets = getPanelZoneWidgets(frontstageDef, end);
511
495
  state = addWidgets(state, endWidgets, side, end);
@@ -546,7 +530,7 @@ function getPanelMaxSize(maxSizeSpec, panel, nineZoneSize) {
546
530
  const size = (0, appui_layout_react_1.isHorizontalPanelSide)(panel) ? nineZoneSize.height : nineZoneSize.width;
547
531
  return maxSizeSpec.percentage / 100 * size;
548
532
  }
549
- const stateVersion = 11; // this needs to be bumped when NineZoneState is changed (to recreate layout).
533
+ const stateVersion = 12; // this needs to be bumped when NineZoneState is changed (to recreate layout).
550
534
  /** @internal */
551
535
  function initializeNineZoneState(frontstageDef) {
552
536
  let nineZone = defaultNineZone;
@@ -631,6 +615,31 @@ function restoreNineZoneState(frontstageDef, saved) {
631
615
  isFloatingStateWindowResizable: widgetDef === null || widgetDef === void 0 ? void 0 : widgetDef.isFloatingStateWindowResizable,
632
616
  };
633
617
  }
618
+ // remove center panel section if one is found in left or right panels
619
+ const oldLeftMiddleIndex = saved.panels.left.widgets.findIndex((value) => value === "leftMiddle");
620
+ // istanbul ignore next
621
+ if (-1 !== oldLeftMiddleIndex) {
622
+ draft.panels.left.widgets = saved.panels.left.widgets.filter((value) => value !== "leftMiddle");
623
+ if ("leftEnd" in draft.widgets) {
624
+ draft.widgets.leftMiddle.tabs.forEach((tab) => draft.widgets.leftEnd.tabs.push(tab));
625
+ }
626
+ else {
627
+ draft.widgets.leftEnd = { ...draft.widgets.leftMiddle };
628
+ delete draft.widgets.leftMiddle;
629
+ }
630
+ }
631
+ const oldRightMiddleIndex = saved.panels.right.widgets.findIndex((value) => value === "rightMiddle");
632
+ // istanbul ignore next
633
+ if (-1 !== oldRightMiddleIndex) {
634
+ draft.panels.right.widgets = saved.panels.right.widgets.filter((value) => value !== "rightMiddle");
635
+ if ("rightEnd" in draft.widgets) {
636
+ draft.widgets.rightMiddle.tabs.forEach((tab) => draft.widgets.rightEnd.tabs.push(tab));
637
+ }
638
+ else {
639
+ draft.widgets.rightEnd = { ...draft.widgets.rightMiddle };
640
+ delete draft.widgets.rightMiddle;
641
+ }
642
+ }
634
643
  return;
635
644
  });
636
645
  if (FrontstageManager_1.FrontstageManager.nineZoneSize && (0 !== FrontstageManager_1.FrontstageManager.nineZoneSize.height || 0 !== FrontstageManager_1.FrontstageManager.nineZoneSize.width)) {
@@ -682,6 +691,7 @@ function addRemovedTab(nineZone, widgetDef) {
682
691
  const newTab = (0, appui_layout_react_1.createTabState)(widgetDef.id, {
683
692
  label: getWidgetLabel(widgetDef.label),
684
693
  canPopout: widgetDef.canPopout,
694
+ iconSpec: widgetDef.iconSpec,
685
695
  preferredPanelWidgetSize: widgetDef.preferredPanelSize,
686
696
  isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,
687
697
  });
@@ -742,20 +752,11 @@ exports.setWidgetState = (0, immer_1.default)((nineZone, widgetDef, state) => {
742
752
  location = (0, appui_layout_react_1.findTab)(nineZone, id);
743
753
  (0, core_bentley_1.assert)(!!location);
744
754
  }
745
- const widget = nineZone.widgets[location.widgetId];
746
- if (id !== widget.activeTabId)
747
- return;
748
- const minimized = widget.minimized;
749
- widget.minimized = true;
750
- if ("side" in location) {
751
- const panel = nineZone.panels[location.side];
752
- const maximized = panel.widgets.find((wId) => {
753
- const w = nineZone.widgets[wId];
754
- return !w.minimized;
755
- });
756
- if (maximized === undefined)
757
- widget.minimized = minimized;
758
- return;
755
+ if ((0, appui_layout_react_1.isFloatingLocation)(location)) {
756
+ const widget = nineZone.widgets[location.widgetId];
757
+ if (id !== widget.activeTabId)
758
+ return;
759
+ widget.minimized = true;
759
760
  }
760
761
  }
761
762
  else if (state === appui_abstract_1.WidgetState.Hidden) {