@itwin/appui-react 3.5.0-dev.5 → 3.5.0-dev.51
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 +53 -1
- package/lib/cjs/appui-react/frontstage/FrontstageManager.d.ts +2 -0
- package/lib/cjs/appui-react/frontstage/FrontstageManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/frontstage/FrontstageManager.js +4 -0
- package/lib/cjs/appui-react/frontstage/FrontstageManager.js.map +1 -1
- package/lib/cjs/appui-react/pickers/ListPicker.scss +2 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +0 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js +13 -11
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -1
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js +14 -0
- package/lib/cjs/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
- package/lib/cjs/appui-react/tools/RestoreLayoutTool.d.ts +9 -0
- package/lib/cjs/appui-react/tools/RestoreLayoutTool.d.ts.map +1 -1
- package/lib/cjs/appui-react/tools/RestoreLayoutTool.js +17 -1
- package/lib/cjs/appui-react/tools/RestoreLayoutTool.js.map +1 -1
- package/lib/cjs/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
- package/lib/cjs/appui-react/utils/UiShowHideManager.js +8 -0
- package/lib/cjs/appui-react/utils/UiShowHideManager.js.map +1 -1
- package/lib/cjs/appui-react/widget-panels/FloatingWidget.d.ts +7 -0
- package/lib/cjs/appui-react/widget-panels/FloatingWidget.d.ts.map +1 -0
- package/lib/cjs/appui-react/widget-panels/FloatingWidget.js +19 -0
- package/lib/cjs/appui-react/widget-panels/FloatingWidget.js.map +1 -0
- package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
- package/lib/cjs/appui-react/widget-panels/Frontstage.js +31 -20
- package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +3 -0
- package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
- package/lib/cjs/appui-react/widgets/WidgetDef.js +7 -0
- package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/esm/appui-react/frontstage/FrontstageManager.d.ts +2 -0
- package/lib/esm/appui-react/frontstage/FrontstageManager.d.ts.map +1 -1
- package/lib/esm/appui-react/frontstage/FrontstageManager.js +4 -0
- package/lib/esm/appui-react/frontstage/FrontstageManager.js.map +1 -1
- package/lib/esm/appui-react/pickers/ListPicker.scss +2 -1
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +0 -1
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js +15 -13
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts +6 -1
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.d.ts.map +1 -1
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js +14 -0
- package/lib/esm/appui-react/syncui/SyncUiEventDispatcher.js.map +1 -1
- package/lib/esm/appui-react/tools/RestoreLayoutTool.d.ts +9 -0
- package/lib/esm/appui-react/tools/RestoreLayoutTool.d.ts.map +1 -1
- package/lib/esm/appui-react/tools/RestoreLayoutTool.js +15 -0
- package/lib/esm/appui-react/tools/RestoreLayoutTool.js.map +1 -1
- package/lib/esm/appui-react/utils/UiShowHideManager.d.ts.map +1 -1
- package/lib/esm/appui-react/utils/UiShowHideManager.js +8 -0
- package/lib/esm/appui-react/utils/UiShowHideManager.js.map +1 -1
- package/lib/esm/appui-react/widget-panels/FloatingWidget.d.ts +7 -0
- package/lib/esm/appui-react/widget-panels/FloatingWidget.d.ts.map +1 -0
- package/lib/esm/appui-react/widget-panels/FloatingWidget.js +15 -0
- package/lib/esm/appui-react/widget-panels/FloatingWidget.js.map +1 -0
- package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
- package/lib/esm/appui-react/widget-panels/Frontstage.js +31 -20
- package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
- package/lib/esm/appui-react/widgets/WidgetDef.d.ts +3 -0
- package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
- package/lib/esm/appui-react/widgets/WidgetDef.js +7 -0
- package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
- package/lib/public/locales/en/UiFramework.json +8 -3
- package/package.json +34 -34
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/** @packageDocumentation
|
|
6
|
+
* @module Widget
|
|
7
|
+
*/
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
import { FloatingWidget as FloatingWidgetComponent } from "@itwin/appui-layout-react";
|
|
10
|
+
import { UiShowHideManager } from "../utils/UiShowHideManager";
|
|
11
|
+
/** @internal */
|
|
12
|
+
export function FloatingWidget() {
|
|
13
|
+
return (React.createElement(FloatingWidgetComponent, { onMouseEnter: UiShowHideManager.handleWidgetMouseEnter }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=FloatingWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/FloatingWidget.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,gBAAgB;AAChB,MAAM,UAAU,cAAc;IAC5B,OAAO,CACL,oBAAC,uBAAuB,IACtB,YAAY,EAAE,iBAAiB,CAAC,sBAAsB,GACtD,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Widget\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { FloatingWidget as FloatingWidgetComponent } from \"@itwin/appui-layout-react\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\n\r\n/** @internal */\r\nexport function FloatingWidget() {\r\n return (\r\n <FloatingWidgetComponent\r\n onMouseEnter={UiShowHideManager.handleWidgetMouseEnter}\r\n />\r\n );\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Frontstage.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Frontstage.tsx"],"names":[],"mappings":"AAMA;;GAEG;AAIH,OAAO,mBAAmB,CAAC;AAE3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAsC,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAa,cAAc,EAAmB,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE3H,OAAO,EAIqF,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAwB,SAAS,EAC9H,QAAQ,EACrD,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAgE,MAAM,6BAA6B,CAAC;AAG1H,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGtF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAgD,MAAM,sBAAsB,CAAC;AAC5G,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Frontstage.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/widget-panels/Frontstage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,7 @@ import { useEscapeSetFocusToHome } from "../hooks/useEscapeSetFocusToHome";
|
|
|
32
32
|
import { useSelector } from "react-redux";
|
|
33
33
|
import { useUiVisibility } from "../hooks/useUiVisibility";
|
|
34
34
|
import { IModelApp } from "@itwin/core-frontend";
|
|
35
|
+
import { FloatingWidget } from "./FloatingWidget";
|
|
35
36
|
const panelZoneKeys = ["start", "end"];
|
|
36
37
|
const WidgetInternals = React.memo(function WidgetInternals() {
|
|
37
38
|
const activeModalFrontstageInfo = useActiveModalFrontstageInfo();
|
|
@@ -171,6 +172,7 @@ export const WidgetPanelsFrontstage = React.memo(function WidgetPanelsFrontstage
|
|
|
171
172
|
});
|
|
172
173
|
const defaultNineZone = createNineZoneState();
|
|
173
174
|
const tabElement = React.createElement(WidgetPanelsTab, null);
|
|
175
|
+
const floatingWidgetElement = React.createElement(FloatingWidget, null);
|
|
174
176
|
/** @internal */
|
|
175
177
|
export function ActiveFrontstageDefProvider({ frontstageDef }) {
|
|
176
178
|
let nineZone = useNineZoneState(frontstageDef);
|
|
@@ -201,7 +203,7 @@ export function ActiveFrontstageDefProvider({ frontstageDef }) {
|
|
|
201
203
|
useFrontstageManager(frontstageDef, useToolAsToolSettingsLabel);
|
|
202
204
|
const handleKeyDown = useEscapeSetFocusToHome();
|
|
203
205
|
return (React.createElement("div", { className: "uifw-widgetPanels-frontstage", onKeyDown: handleKeyDown, role: "presentation" },
|
|
204
|
-
React.createElement(NineZone, { dispatch: dispatch, labels: labels, state: nineZone, tab: tabElement, showWidgetIcon: showWidgetIcon, autoCollapseUnpinnedPanels: autoCollapseUnpinnedPanels, toolSettingsContent: toolSettingsContent, widgetContent: widgetContent, animateDockedToolSettings: animateToolSettings, uiIsVisible: uiIsVisible }, widgetPanelsFrontstage)));
|
|
206
|
+
React.createElement(NineZone, { dispatch: dispatch, labels: labels, state: nineZone, tab: tabElement, floatingWidget: floatingWidgetElement, showWidgetIcon: showWidgetIcon, autoCollapseUnpinnedPanels: autoCollapseUnpinnedPanels, toolSettingsContent: toolSettingsContent, widgetContent: widgetContent, animateDockedToolSettings: animateToolSettings, uiIsVisible: uiIsVisible }, widgetPanelsFrontstage)));
|
|
205
207
|
}
|
|
206
208
|
/** @internal */
|
|
207
209
|
export function useLabels() {
|
|
@@ -233,6 +235,7 @@ export function addWidgets(state, widgets, side, widgetId) {
|
|
|
233
235
|
canPopout: widget.canPopout,
|
|
234
236
|
isFloatingStateWindowResizable: widget.isFloatingStateWindowResizable,
|
|
235
237
|
hideWithUiWhenFloating: !!widget.hideWithUiWhenFloating,
|
|
238
|
+
allowedPanelTargets: widget.allowedPanelTargets,
|
|
236
239
|
});
|
|
237
240
|
tabs.push(widget.id);
|
|
238
241
|
}
|
|
@@ -271,6 +274,7 @@ export function appendWidgets(state, widgetDefs, side, preferredWidgetIndex) {
|
|
|
271
274
|
userSized,
|
|
272
275
|
isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,
|
|
273
276
|
hideWithUiWhenFloating: !!widgetDef.hideWithUiWhenFloating,
|
|
277
|
+
allowedPanelTargets: widgetDef.allowedPanelTargets,
|
|
274
278
|
});
|
|
275
279
|
if (widgetDef.isFloatingStateSupported && widgetDef.defaultState === WidgetState.Floating) {
|
|
276
280
|
const floatingContainerId = (_a = widgetDef.floatingContainerId) !== null && _a !== void 0 ? _a : getUniqueId();
|
|
@@ -643,6 +647,7 @@ export function restoreNineZoneState(frontstageDef, saved) {
|
|
|
643
647
|
iconSpec: widgetDef.iconSpec,
|
|
644
648
|
canPopout: widgetDef.canPopout,
|
|
645
649
|
isFloatingStateWindowResizable: widgetDef.isFloatingStateWindowResizable,
|
|
650
|
+
allowedPanelTargets: widgetDef.allowedPanelTargets,
|
|
646
651
|
};
|
|
647
652
|
});
|
|
648
653
|
}
|
|
@@ -709,9 +714,9 @@ export function packNineZoneState(state) {
|
|
|
709
714
|
});
|
|
710
715
|
return packed;
|
|
711
716
|
}
|
|
712
|
-
// TODO: clean-up of saved widgets.
|
|
713
717
|
// istanbul ignore next
|
|
714
|
-
function packSavedWidgets(
|
|
718
|
+
function packSavedWidgets(frontstageDef) {
|
|
719
|
+
let savedWidgets = [];
|
|
715
720
|
for (const widgetDef of frontstageDef.widgetDefs) {
|
|
716
721
|
const id = widgetDef.id;
|
|
717
722
|
const initialWidget = {
|
|
@@ -727,17 +732,25 @@ function packSavedWidgets(savedWidgets, frontstageDef) {
|
|
|
727
732
|
});
|
|
728
733
|
if (widget === initialWidget)
|
|
729
734
|
continue;
|
|
730
|
-
savedWidgets
|
|
731
|
-
|
|
732
|
-
|
|
735
|
+
savedWidgets.push(widget);
|
|
736
|
+
}
|
|
737
|
+
// Add previously saved widgets.
|
|
738
|
+
const prevSavedWidgets = frontstageDef.savedWidgetDefs || [];
|
|
739
|
+
for (const prevWidget of prevSavedWidgets) {
|
|
740
|
+
if (savedWidgets.find((w) => w.id === prevWidget.id))
|
|
741
|
+
continue;
|
|
742
|
+
savedWidgets.push(prevWidget);
|
|
733
743
|
}
|
|
744
|
+
// Limit number of saved widgets.
|
|
745
|
+
const maxWidgets = 100;
|
|
746
|
+
if (savedWidgets.length > maxWidgets)
|
|
747
|
+
savedWidgets = savedWidgets.slice(0, maxWidgets);
|
|
734
748
|
return savedWidgets;
|
|
735
749
|
}
|
|
736
750
|
// istanbul ignore next
|
|
737
|
-
function restoreSavedWidgets(
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
const savedWidget = savedWidgets[i];
|
|
751
|
+
function restoreSavedWidgets(frontstage) {
|
|
752
|
+
const savedWidgets = frontstage.savedWidgetDefs || [];
|
|
753
|
+
for (const savedWidget of savedWidgets) {
|
|
741
754
|
const widgetId = savedWidget.id;
|
|
742
755
|
const widgetDef = frontstage.findWidgetDef(widgetId);
|
|
743
756
|
if (!widgetDef)
|
|
@@ -748,11 +761,7 @@ function restoreSavedWidgets(savedWidgets, frontstage) {
|
|
|
748
761
|
if (savedWidget.popoutBounds) {
|
|
749
762
|
widgetDef.popoutBounds = Rectangle.create(savedWidget.popoutBounds);
|
|
750
763
|
}
|
|
751
|
-
savedWidgets = produce(savedWidgets, (draft) => {
|
|
752
|
-
draft.splice(i, 1);
|
|
753
|
-
});
|
|
754
764
|
}
|
|
755
|
-
return savedWidgets;
|
|
756
765
|
}
|
|
757
766
|
/** @internal */
|
|
758
767
|
export function isPanelCollapsed(zoneStates, panelStates) {
|
|
@@ -963,12 +972,12 @@ export function useSavedFrontstageState(frontstageDef) {
|
|
|
963
972
|
const setting = settingResult.setting;
|
|
964
973
|
if (setting.version >= version && setting.stateVersion >= stateVersion) {
|
|
965
974
|
const restored = restoreNineZoneState(frontstageDef, setting.nineZone);
|
|
966
|
-
|
|
975
|
+
frontstageDef.savedWidgetDefs = setting.widgets;
|
|
976
|
+
restoreSavedWidgets(frontstageDef);
|
|
967
977
|
let state = addMissingWidgets(frontstageDef, restored);
|
|
968
978
|
state = hideWidgets(state, frontstageDef);
|
|
969
979
|
state = processPopoutWidgets(state, frontstageDef);
|
|
970
980
|
frontstageDef.nineZoneState = state;
|
|
971
|
-
frontstageDef.savedWidgetDefs = savedWidgets;
|
|
972
981
|
return;
|
|
973
982
|
}
|
|
974
983
|
}
|
|
@@ -982,14 +991,16 @@ export function useSaveFrontstageSettings(frontstageDef) {
|
|
|
982
991
|
const nineZone = useNineZoneState(frontstageDef);
|
|
983
992
|
const uiSettingsStorage = useUiStateStorageHandler();
|
|
984
993
|
const saveSetting = React.useMemo(() => {
|
|
985
|
-
return debounce(async (frontstage, state
|
|
994
|
+
return debounce(async (frontstage, state) => {
|
|
986
995
|
const id = frontstage.id;
|
|
996
|
+
const widgets = packSavedWidgets(frontstage);
|
|
997
|
+
frontstage.savedWidgetDefs = widgets;
|
|
987
998
|
const setting = {
|
|
988
999
|
id,
|
|
989
1000
|
version: frontstage.version,
|
|
990
1001
|
stateVersion,
|
|
991
1002
|
nineZone: packNineZoneState(state),
|
|
992
|
-
widgets
|
|
1003
|
+
widgets,
|
|
993
1004
|
};
|
|
994
1005
|
await uiSettingsStorage.saveSetting(FRONTSTAGE_SETTINGS_NAMESPACE, getFrontstageStateSettingName(id), setting);
|
|
995
1006
|
}, 1000);
|
|
@@ -1002,8 +1013,7 @@ export function useSaveFrontstageSettings(frontstageDef) {
|
|
|
1002
1013
|
React.useEffect(() => {
|
|
1003
1014
|
if (!nineZone || nineZone.draggedTab)
|
|
1004
1015
|
return;
|
|
1005
|
-
|
|
1006
|
-
saveSetting(frontstageDef, nineZone, savedWidgets);
|
|
1016
|
+
saveSetting(frontstageDef, nineZone);
|
|
1007
1017
|
}, [frontstageDef, nineZone, saveSetting]);
|
|
1008
1018
|
}
|
|
1009
1019
|
/** @internal */
|
|
@@ -1132,6 +1142,7 @@ export function useItemsManager(frontstageDef) {
|
|
|
1132
1142
|
const refreshNineZoneState = (def) => {
|
|
1133
1143
|
// Fired for both registered/unregistered. Update definitions and remove/add missing widgets.
|
|
1134
1144
|
def.updateWidgetDefs();
|
|
1145
|
+
restoreSavedWidgets(def);
|
|
1135
1146
|
let state = def.nineZoneState;
|
|
1136
1147
|
if (!state)
|
|
1137
1148
|
return;
|