@itwin/appui-react 4.2.0 → 4.3.0-dev.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.
Files changed (104) hide show
  1. package/lib/cjs/appui-react/UiFramework.d.ts +0 -7
  2. package/lib/cjs/appui-react/UiFramework.d.ts.map +1 -1
  3. package/lib/cjs/appui-react/UiFramework.js +0 -21
  4. package/lib/cjs/appui-react/UiFramework.js.map +1 -1
  5. package/lib/cjs/appui-react/_variables.scss +3 -3
  6. package/lib/cjs/appui-react/accudraw/AccuDrawFieldContainer.scss +3 -3
  7. package/lib/cjs/appui-react/accudraw/AccuDrawInputField.scss +3 -3
  8. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.d.ts.map +1 -1
  9. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js +1 -2
  10. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  11. package/lib/cjs/appui-react/childwindow/InternalChildWindowManager.scss +3 -3
  12. package/lib/cjs/appui-react/configurableui/configurableui.scss +3 -3
  13. package/lib/cjs/appui-react/content/DefaultViewOverlay.scss +3 -3
  14. package/lib/cjs/appui-react/feedback/ValidationTextbox.scss +3 -3
  15. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  16. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +24 -5
  17. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  18. package/lib/cjs/appui-react/navigationaids/SheetNavigationAid.scss +3 -3
  19. package/lib/cjs/appui-react/navigationaids/StandardRotationNavigationAid.scss +3 -3
  20. package/lib/cjs/appui-react/pickers/ViewSelector.d.ts.map +1 -1
  21. package/lib/cjs/appui-react/pickers/ViewSelector.js +3 -1
  22. package/lib/cjs/appui-react/pickers/ViewSelector.js.map +1 -1
  23. package/lib/cjs/appui-react/popup/CardPopup.scss +3 -3
  24. package/lib/cjs/appui-react/selection/HideIsolateEmphasizeManager.d.ts.map +1 -1
  25. package/lib/cjs/appui-react/selection/HideIsolateEmphasizeManager.js +0 -53
  26. package/lib/cjs/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
  27. package/lib/cjs/appui-react/settings/quantityformatting/QuantityFormat.scss +3 -3
  28. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.scss +3 -3
  29. package/lib/cjs/appui-react/statusbar/Separator.scss +3 -3
  30. package/lib/cjs/appui-react/statusfields/SectionsField.scss +3 -3
  31. package/lib/cjs/appui-react/statusfields/SelectionCount.scss +3 -3
  32. package/lib/cjs/appui-react/statusfields/SelectionScope.scss +3 -3
  33. package/lib/cjs/appui-react/statusfields/ViewAttributes.scss +3 -3
  34. package/lib/cjs/appui-react/statusfields/tileloading/TileLoadingIndicator.scss +3 -3
  35. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +3 -3
  36. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts +3 -1
  37. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  38. package/lib/cjs/appui-react/widget-panels/Frontstage.js +85 -70
  39. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  40. package/lib/cjs/appui-react/widget-panels/Frontstage.scss +3 -3
  41. package/lib/cjs/appui-react/widget-panels/Tab.scss +3 -3
  42. package/lib/cjs/appui-react/widget-panels/ToolSettings.d.ts +1 -1
  43. package/lib/cjs/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  44. package/lib/cjs/appui-react/widget-panels/ToolSettings.js +22 -29
  45. package/lib/cjs/appui-react/widget-panels/ToolSettings.js.map +1 -1
  46. package/lib/cjs/appui-react/widget-panels/ToolSettings.scss +3 -3
  47. package/lib/cjs/appui-react/widget-panels/Toolbars.scss +3 -3
  48. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +1 -1
  49. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  50. package/lib/cjs/appui-react/widgets/WidgetDef.js +12 -11
  51. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  52. package/lib/esm/appui-react/UiFramework.d.ts +0 -7
  53. package/lib/esm/appui-react/UiFramework.d.ts.map +1 -1
  54. package/lib/esm/appui-react/UiFramework.js +0 -21
  55. package/lib/esm/appui-react/UiFramework.js.map +1 -1
  56. package/lib/esm/appui-react/_variables.scss +3 -3
  57. package/lib/esm/appui-react/accudraw/AccuDrawFieldContainer.scss +3 -3
  58. package/lib/esm/appui-react/accudraw/AccuDrawInputField.scss +3 -3
  59. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.d.ts.map +1 -1
  60. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js +1 -2
  61. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  62. package/lib/esm/appui-react/childwindow/InternalChildWindowManager.scss +3 -3
  63. package/lib/esm/appui-react/configurableui/configurableui.scss +3 -3
  64. package/lib/esm/appui-react/content/DefaultViewOverlay.scss +3 -3
  65. package/lib/esm/appui-react/feedback/ValidationTextbox.scss +3 -3
  66. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  67. package/lib/esm/appui-react/frontstage/FrontstageDef.js +24 -5
  68. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  69. package/lib/esm/appui-react/navigationaids/SheetNavigationAid.scss +3 -3
  70. package/lib/esm/appui-react/navigationaids/StandardRotationNavigationAid.scss +3 -3
  71. package/lib/esm/appui-react/pickers/ViewSelector.d.ts.map +1 -1
  72. package/lib/esm/appui-react/pickers/ViewSelector.js +3 -1
  73. package/lib/esm/appui-react/pickers/ViewSelector.js.map +1 -1
  74. package/lib/esm/appui-react/popup/CardPopup.scss +3 -3
  75. package/lib/esm/appui-react/selection/HideIsolateEmphasizeManager.d.ts.map +1 -1
  76. package/lib/esm/appui-react/selection/HideIsolateEmphasizeManager.js +0 -53
  77. package/lib/esm/appui-react/selection/HideIsolateEmphasizeManager.js.map +1 -1
  78. package/lib/esm/appui-react/settings/quantityformatting/QuantityFormat.scss +3 -3
  79. package/lib/esm/appui-react/settings/ui/UiSettingsPage.scss +3 -3
  80. package/lib/esm/appui-react/statusbar/Separator.scss +3 -3
  81. package/lib/esm/appui-react/statusfields/SectionsField.scss +3 -3
  82. package/lib/esm/appui-react/statusfields/SelectionCount.scss +3 -3
  83. package/lib/esm/appui-react/statusfields/SelectionScope.scss +3 -3
  84. package/lib/esm/appui-react/statusfields/ViewAttributes.scss +3 -3
  85. package/lib/esm/appui-react/statusfields/tileloading/TileLoadingIndicator.scss +3 -3
  86. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +3 -3
  87. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts +3 -1
  88. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  89. package/lib/esm/appui-react/widget-panels/Frontstage.js +82 -67
  90. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  91. package/lib/esm/appui-react/widget-panels/Frontstage.scss +3 -3
  92. package/lib/esm/appui-react/widget-panels/Tab.scss +3 -3
  93. package/lib/esm/appui-react/widget-panels/ToolSettings.d.ts +1 -1
  94. package/lib/esm/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  95. package/lib/esm/appui-react/widget-panels/ToolSettings.js +22 -29
  96. package/lib/esm/appui-react/widget-panels/ToolSettings.js.map +1 -1
  97. package/lib/esm/appui-react/widget-panels/ToolSettings.scss +3 -3
  98. package/lib/esm/appui-react/widget-panels/Toolbars.scss +3 -3
  99. package/lib/esm/appui-react/widgets/WidgetDef.d.ts +1 -1
  100. package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  101. package/lib/esm/appui-react/widgets/WidgetDef.js +12 -11
  102. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  103. package/lib/public/locales/en/UiFramework.json +3 -1
  104. package/package.json +12 -12
@@ -7,7 +7,7 @@
7
7
  * @module Frontstage
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.useItemsManager = exports.useFrontstageManager = exports.getFrontstageStateSettingName = exports.FRONTSTAGE_SETTINGS_NAMESPACE = exports.useSaveFrontstageSettings = exports.useSavedFrontstageState = exports.setWidgetLabel = exports.expandWidget = exports.showWidget = exports.setWidgetState = exports.isPanelCollapsed = exports.packNineZoneState = exports.restoreNineZoneState = exports.initializeNineZoneState = exports.initializePanel = exports.isFrontstageStateSettingResult = exports.addPanelWidgets = exports.getPanelSectionWidgets = exports.getWidgetId = exports.removeMissingWidgets = exports.addMissingWidgets = exports.appendWidgets = exports.addWidgets = exports.useLabels = exports.ActiveFrontstageDefProvider = exports.WidgetPanelsFrontstage = exports.useNineZoneDispatch = exports.FrameworkStateReducer = exports.useUpdateNineZoneSize = exports.useLayoutStore = void 0;
10
+ exports.useItemsManager = exports.useFrontstageManager = exports.getFrontstageStateSettingName = exports.FRONTSTAGE_SETTINGS_NAMESPACE = exports.useSaveFrontstageSettings = exports.useSavedFrontstageState = exports.setWidgetLabel = exports.expandWidget = exports.showWidget = exports.setWidgetState = exports.isPanelCollapsed = exports.packNineZoneState = exports.restoreNineZoneState = exports.initializeNineZoneState = exports.stateVersion = exports.initializePanel = exports.isFrontstageStateSettingResult = exports.addPanelWidgets = exports.getPanelSectionWidgets = exports.getWidgetId = exports.removeMissingWidgets = exports.addMissingWidgets = exports.appendWidgets = exports.addWidgets = exports.useLabels = exports.ActiveFrontstageDefProvider = exports.WidgetPanelsFrontstage = exports.useNineZoneDispatch = exports.FrameworkStateReducer = exports.useUpdateNineZoneSize = exports.useLayoutStore = void 0;
11
11
  // cSpell:ignore popout
12
12
  require("./Frontstage.scss");
13
13
  const immer_1 = require("immer");
@@ -126,14 +126,6 @@ function useNineZoneDispatch(frontstageDef) {
126
126
  if (action.type === "RESIZE") {
127
127
  InternalFrontstageManager_1.InternalFrontstageManager.nineZoneSize = core_react_1.Size.create(action.size);
128
128
  }
129
- // istanbul ignore if
130
- if (action.type === "TOOL_SETTINGS_DRAG_START") {
131
- void UiFramework_1.UiFramework.postTelemetry("Tool Settings Undocking", "28B04E07-AE73-4533-A0BA-8E2A8DC99ADF");
132
- }
133
- // istanbul ignore if
134
- if (action.type === "TOOL_SETTINGS_DOCK") {
135
- void UiFramework_1.UiFramework.postTelemetry("Tool Settings Docking to Settings Bar", "BEDE684B-B3DB-4637-B3AF-DC3CBA223F94");
136
- }
137
129
  if (action.type === "WIDGET_TAB_POPOUT") {
138
130
  const tabId = action.id;
139
131
  frontstageDef.popoutWidget(tabId);
@@ -214,6 +206,19 @@ function useLabels() {
214
206
  }), []);
215
207
  }
216
208
  exports.useLabels = useLabels;
209
+ function toTabArgs(widget) {
210
+ const label = getWidgetLabel(widget.label);
211
+ return {
212
+ allowedPanelTargets: widget.allowedPanelTargets?.map((location) => (0, StagePanelDef_1.toPanelSide)(location)),
213
+ hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,
214
+ canPopout: widget.canPopout,
215
+ iconSpec: widget.iconSpec,
216
+ isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,
217
+ label,
218
+ preferredFloatingWidgetSize: widget.defaultFloatingSize,
219
+ preferredPanelWidgetSize: widget.preferredPanelSize,
220
+ };
221
+ }
217
222
  /** @internal */
218
223
  function addWidgets(state, widgets, side, widgetId) {
219
224
  const visibleWidgets = widgets.filter((w) => w.isVisible && w.defaultState !== WidgetState_1.WidgetState.Floating);
@@ -221,17 +226,7 @@ function addWidgets(state, widgets, side, widgetId) {
221
226
  return state;
222
227
  const tabs = new Array();
223
228
  for (const widget of visibleWidgets) {
224
- const label = getWidgetLabel(widget.label);
225
- state = (0, appui_layout_react_1.addTab)(state, widget.id, {
226
- label,
227
- iconSpec: widget.iconSpec,
228
- preferredPanelWidgetSize: widget.preferredPanelSize,
229
- preferredFloatingWidgetSize: widget.defaultFloatingSize,
230
- canPopout: widget.canPopout,
231
- isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,
232
- hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,
233
- allowedPanelTargets: widget.allowedPanelTargets?.map((location) => (0, StagePanelDef_1.toPanelSide)(location)),
234
- });
229
+ state = (0, appui_layout_react_1.addTab)(state, widget.id, toTabArgs(widget));
235
230
  tabs.push(widget.id);
236
231
  }
237
232
  const activeWidget = visibleWidgets.find((widget) => widget.isActive);
@@ -249,12 +244,9 @@ exports.addWidgets = addWidgets;
249
244
  /** @internal */
250
245
  // istanbul ignore next
251
246
  function appendWidgets(state, widgetDefs, location, section) {
252
- if (widgetDefs.length === 0)
253
- return state;
254
247
  const side = (0, StagePanelDef_1.toPanelSide)(location);
255
248
  // Add missing widget tabs.
256
249
  for (const widgetDef of widgetDefs) {
257
- const label = getWidgetLabel(widgetDef.label);
258
250
  const saveTab = state.tabs[widgetDef.id];
259
251
  const preferredPanelWidgetSize = saveTab
260
252
  ? saveTab.preferredPanelWidgetSize
@@ -269,15 +261,10 @@ function appendWidgets(state, widgetDefs, location, section) {
269
261
  !!saveTab.preferredFloatingWidgetSize)
270
262
  : !!widgetDef.defaultFloatingSize;
271
263
  state = (0, appui_layout_react_1.addTab)(state, widgetDef.id, {
272
- label,
273
- iconSpec: widgetDef.iconSpec,
274
- canPopout: widgetDef.canPopout,
275
- preferredPanelWidgetSize,
264
+ ...toTabArgs(widgetDef),
276
265
  preferredFloatingWidgetSize,
266
+ preferredPanelWidgetSize,
277
267
  userSized,
278
- isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,
279
- hideWithUiWhenFloating: !!widgetDef.hideWithUiWhenFloating,
280
- allowedPanelTargets: widgetDef.allowedPanelTargets?.map((l) => (0, StagePanelDef_1.toPanelSide)(l)),
281
268
  });
282
269
  if (widgetDef.isFloatingStateSupported &&
283
270
  widgetDef.defaultState === WidgetState_1.WidgetState.Floating) {
@@ -376,6 +363,12 @@ function addMissingWidgets(frontstageDef, initialState) {
376
363
  .widgetDefs, state), StagePanelLocation_1.StagePanelLocation.Bottom, StagePanelSection_1.StagePanelSection.Start);
377
364
  state = appendWidgets(state, determineNewWidgets(frontstageDef.bottomPanel?.getPanelSectionDef(StagePanelSection_1.StagePanelSection.End)
378
365
  .widgetDefs, state), StagePanelLocation_1.StagePanelLocation.Bottom, StagePanelSection_1.StagePanelSection.End);
366
+ if (frontstageDef.toolSettings) {
367
+ const newToolSettingsWidgets = determineNewWidgets([frontstageDef.toolSettings], state);
368
+ for (const newToolSettingsWidget of newToolSettingsWidgets) {
369
+ state = (0, appui_layout_react_1.addTab)(state, newToolSettingsWidget.id, toTabArgs(newToolSettingsWidget));
370
+ }
371
+ }
379
372
  return state;
380
373
  }
381
374
  exports.addMissingWidgets = addMissingWidgets;
@@ -395,10 +388,10 @@ function hideWidgets(state, frontstageDef) {
395
388
  /** Removes NineZoneState widgets that are missing in frontstageDef.
396
389
  * @internal
397
390
  */
398
- function removeMissingWidgets(frontstageDef, initialState) {
399
- let state = initialState;
391
+ function removeMissingWidgets(frontstageDef, state) {
392
+ const toolSettingsTabId = state.toolSettings?.tabId;
400
393
  for (const [, tab] of Object.entries(state.tabs)) {
401
- if (tab.id === appui_layout_react_1.toolSettingsTabId)
394
+ if (tab.id === toolSettingsTabId)
402
395
  continue;
403
396
  const widgetDef = frontstageDef.findWidgetDef(tab.id);
404
397
  if (widgetDef)
@@ -506,7 +499,8 @@ function getPanelMaxSize(maxSizeSpec, panel, nineZoneSize) {
506
499
  : nineZoneSize.width;
507
500
  return (maxSizeSpec.percentage / 100) * size;
508
501
  }
509
- const stateVersion = 13; // this needs to be bumped when NineZoneState is changed (to recreate the layout).
502
+ /** @internal */
503
+ exports.stateVersion = 14; // this needs to be bumped when NineZoneState is changed (to recreate the layout).
510
504
  /** @internal */
511
505
  function initializeNineZoneState(frontstageDef) {
512
506
  let nineZone = defaultNineZone;
@@ -523,29 +517,26 @@ function initializeNineZoneState(frontstageDef) {
523
517
  nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation_1.StagePanelLocation.Right);
524
518
  nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation_1.StagePanelLocation.Top);
525
519
  nineZone = initializePanel(nineZone, frontstageDef, StagePanelLocation_1.StagePanelLocation.Bottom);
526
- nineZone = (0, immer_1.default)(nineZone, (stateDraft) => {
527
- for (const [, panel] of Object.entries(stateDraft.panels)) {
528
- const expanded = panel.widgets.find((widgetId) => stateDraft.widgets[widgetId].minimized === false);
529
- const firstWidget = panel.widgets.length > 0
530
- ? stateDraft.widgets[panel.widgets[0]]
531
- : undefined;
520
+ nineZone = (0, immer_1.default)(nineZone, (draft) => {
521
+ for (const [, panel] of Object.entries(draft.panels)) {
522
+ const expanded = panel.widgets.find((widgetId) => draft.widgets[widgetId].minimized === false);
523
+ const firstWidget = panel.widgets.length > 0 ? draft.widgets[panel.widgets[0]] : undefined;
532
524
  // istanbul ignore next
533
525
  if (!expanded && firstWidget) {
534
526
  firstWidget.minimized = false;
535
527
  }
536
528
  }
537
- stateDraft.panels.left.collapsed = isPanelCollapsed(frontstageDef.leftPanel?.panelState);
538
- stateDraft.panels.right.collapsed = isPanelCollapsed(frontstageDef.rightPanel?.panelState);
539
- stateDraft.panels.top.collapsed = isPanelCollapsed(frontstageDef.topPanel?.panelState);
540
- stateDraft.panels.bottom.collapsed = isPanelCollapsed(frontstageDef.bottomPanel?.panelState);
541
- const toolSettingsWidgetDef = frontstageDef.toolSettings;
542
- if (toolSettingsWidgetDef) {
543
- const toolSettingsTab = stateDraft.tabs[appui_layout_react_1.toolSettingsTabId];
544
- toolSettingsTab.preferredPanelWidgetSize =
545
- toolSettingsWidgetDef.preferredPanelSize;
546
- }
529
+ draft.panels.left.collapsed = isPanelCollapsed(frontstageDef.leftPanel?.panelState);
530
+ draft.panels.right.collapsed = isPanelCollapsed(frontstageDef.rightPanel?.panelState);
531
+ draft.panels.top.collapsed = isPanelCollapsed(frontstageDef.topPanel?.panelState);
532
+ draft.panels.bottom.collapsed = isPanelCollapsed(frontstageDef.bottomPanel?.panelState);
547
533
  });
548
534
  nineZone = addMissingWidgets(frontstageDef, nineZone);
535
+ const toolSettingsWidgetDef = frontstageDef.toolSettings;
536
+ if (toolSettingsWidgetDef) {
537
+ const toolSettingsTabId = toolSettingsWidgetDef.id;
538
+ nineZone = (0, appui_layout_react_1.addDockedToolSettings)(nineZone, toolSettingsTabId);
539
+ }
549
540
  nineZone = hideWidgets(nineZone, frontstageDef);
550
541
  nineZone = processPopoutWidgets(nineZone, frontstageDef);
551
542
  return nineZone;
@@ -559,7 +550,7 @@ exports.initializeNineZoneState = initializeNineZoneState;
559
550
  function restoreNineZoneState(frontstageDef, saved) {
560
551
  let restored = {
561
552
  ...saved,
562
- tabs: defaultNineZone.tabs,
553
+ tabs: {},
563
554
  };
564
555
  for (const [, tab] of Object.entries(saved.tabs)) {
565
556
  // Re-add the placeholder tab in order to correctly remove it from the state if WidgetDef is not found.
@@ -576,12 +567,9 @@ function restoreNineZoneState(frontstageDef, saved) {
576
567
  restored = (0, immer_1.default)(restored, (draft) => {
577
568
  draft.tabs[tab.id] = {
578
569
  ...tab,
579
- label: getWidgetLabel(widgetDef.label),
580
- hideWithUiWhenFloating: widgetDef.hideWithUiWhenFloating,
581
- iconSpec: widgetDef.iconSpec,
582
- canPopout: widgetDef.canPopout,
583
- isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,
584
- allowedPanelTargets: widgetDef.allowedPanelTargets?.map((location) => (0, StagePanelDef_1.toPanelSide)(location)),
570
+ ...toTabArgs(widgetDef),
571
+ preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,
572
+ preferredPanelWidgetSize: tab.preferredPanelWidgetSize,
585
573
  };
586
574
  });
587
575
  }
@@ -639,12 +627,9 @@ function packNineZoneState(state) {
639
627
  };
640
628
  packed = (0, immer_1.default)(packed, (draft) => {
641
629
  for (const [, tab] of Object.entries(state.tabs)) {
642
- if (tab.id === appui_layout_react_1.toolSettingsTabId)
643
- continue;
644
630
  draft.tabs[tab.id] = {
645
631
  id: tab.id,
646
632
  preferredFloatingWidgetSize: tab.preferredFloatingWidgetSize,
647
- allowedPanelTargets: tab.allowedPanelTargets,
648
633
  userSized: tab.userSized,
649
634
  };
650
635
  }
@@ -744,10 +729,20 @@ function setWidgetState(state, widgetDef, widgetState) {
744
729
  }
745
730
  else if (widgetState === WidgetState_1.WidgetState.Open) {
746
731
  const id = widgetDef.id;
732
+ if (widgetDef.isToolSettings) {
733
+ if (!state.toolSettings && !widgetDef.tabLocation) {
734
+ state = (0, appui_layout_react_1.addDockedToolSettings)(state, id);
735
+ }
736
+ if (state.toolSettings?.type === "docked")
737
+ return state;
738
+ }
747
739
  let location = (0, appui_layout_react_1.getTabLocation)(state, id);
748
740
  if (!location) {
749
741
  state = addHiddenWidget(state, widgetDef);
750
742
  location = (0, appui_layout_react_1.getTabLocation)(state, id);
743
+ if (widgetDef.isToolSettings) {
744
+ state = (0, appui_layout_react_1.addWidgetToolSettings)(state, id);
745
+ }
751
746
  }
752
747
  return (0, immer_1.default)(state, (draft) => {
753
748
  (0, core_bentley_1.assert)(!!location);
@@ -771,6 +766,9 @@ function setWidgetState(state, widgetDef, widgetState) {
771
766
  }
772
767
  else if (widgetState === WidgetState_1.WidgetState.Closed) {
773
768
  const id = widgetDef.id;
769
+ if (widgetDef.isToolSettings && state.toolSettings?.type !== "widget") {
770
+ return state;
771
+ }
774
772
  let location = (0, appui_layout_react_1.getTabLocation)(state, id);
775
773
  if (!location) {
776
774
  state = addHiddenWidget(state, widgetDef);
@@ -801,12 +799,29 @@ function setWidgetState(state, widgetDef, widgetState) {
801
799
  state = (0, appui_layout_react_1.removeTabFromWidget)(state, id);
802
800
  const bounds = widgetDef.tabLocation?.floatingWidget?.bounds;
803
801
  state = (0, appui_layout_react_1.addFloatingWidget)(state, (0, appui_layout_react_1.getUniqueId)(), [id], { bounds });
802
+ if (widgetDef.isToolSettings) {
803
+ if (state.toolSettings?.type === "docked") {
804
+ state = (0, appui_layout_react_1.removeToolSettings)(state);
805
+ }
806
+ if (!state.toolSettings) {
807
+ state = (0, appui_layout_react_1.addWidgetToolSettings)(state, id);
808
+ }
809
+ }
804
810
  }
805
811
  return state;
806
812
  }
807
813
  exports.setWidgetState = setWidgetState;
808
814
  /** Stores widget location and hides it in the UI. */
809
815
  function hideWidget(state, widgetDef) {
816
+ const toolSettingsTabId = state.toolSettings?.tabId;
817
+ if (widgetDef.id === toolSettingsTabId) {
818
+ widgetDef.tabLocation = undefined;
819
+ state = (0, immer_1.default)(state, (draft) => {
820
+ draft.toolSettings = undefined;
821
+ });
822
+ if (state.toolSettings?.type === "docked")
823
+ return state;
824
+ }
810
825
  const location = (0, appui_layout_react_1.getTabLocation)(state, widgetDef.id);
811
826
  if (!location)
812
827
  return state;
@@ -913,8 +928,8 @@ function useSavedFrontstageState(frontstageDef) {
913
928
  return;
914
929
  if (isFrontstageStateSettingResult(settingResult)) {
915
930
  const setting = settingResult.setting;
916
- if (setting.version >= version &&
917
- setting.stateVersion >= stateVersion) {
931
+ if (setting.version === version &&
932
+ setting.stateVersion === exports.stateVersion) {
918
933
  const restored = restoreNineZoneState(frontstageDef, setting.nineZone);
919
934
  frontstageDef.savedWidgetDefs = setting.widgets;
920
935
  restoreSavedWidgets(frontstageDef);
@@ -942,7 +957,7 @@ function useSaveFrontstageSettings(frontstageDef, store) {
942
957
  const setting = {
943
958
  id,
944
959
  version: frontstage.version,
945
- stateVersion,
960
+ stateVersion: exports.stateVersion,
946
961
  nineZone: packNineZoneState(state),
947
962
  widgets,
948
963
  };
@@ -1004,14 +1019,11 @@ const createListener = (frontstageDef, listener) => {
1004
1019
  /** @internal */
1005
1020
  function useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel) {
1006
1021
  React.useEffect(() => {
1007
- const listener = createListener(frontstageDef, ({ widgetDef, widgetState }) => {
1008
- (0, core_bentley_1.assert)(!!frontstageDef.nineZoneState);
1022
+ return UiFramework_1.UiFramework.frontstages.onWidgetStateChangedEvent.addListener(({ widgetDef, widgetState }) => {
1023
+ if (!frontstageDef.nineZoneState)
1024
+ return;
1009
1025
  frontstageDef.nineZoneState = setWidgetState(frontstageDef.nineZoneState, widgetDef, widgetState);
1010
1026
  });
1011
- UiFramework_1.UiFramework.frontstages.onWidgetStateChangedEvent.addListener(listener);
1012
- return () => {
1013
- UiFramework_1.UiFramework.frontstages.onWidgetStateChangedEvent.removeListener(listener);
1014
- };
1015
1027
  }, [frontstageDef]);
1016
1028
  React.useEffect(() => {
1017
1029
  const listener = createListener(frontstageDef, ({ widgetDef }) => {
@@ -1074,7 +1086,10 @@ function useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel) {
1074
1086
  const label = useToolAsToolSettingsLabel
1075
1087
  ? core_frontend_1.IModelApp.tools.find(toolId)?.flyover || defaultLabel
1076
1088
  : defaultLabel;
1077
- frontstageDef.nineZoneState = setWidgetLabel(frontstageDef.nineZoneState, appui_layout_react_1.toolSettingsTabId, label);
1089
+ const toolSettingsTabId = frontstageDef.nineZoneState.toolSettings?.tabId;
1090
+ if (!toolSettingsTabId)
1091
+ return;
1092
+ frontstageDef.nineZoneState = setWidgetLabel(frontstageDef.nineZoneState, toolSettingsTabId, label);
1078
1093
  });
1079
1094
  // Whenever the frontstageDef or the useTool... changes, keep the label up to date.
1080
1095
  updateLabel();