@itwin/appui-react 4.16.0 → 4.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Change Log - @itwin/appui-react
2
2
 
3
- This log was last generated on Wed, 07 Aug 2024 12:38:32 GMT and should not be manually modified.
3
+ This log was last generated on Fri, 16 Aug 2024 08:18:13 GMT and should not be manually modified.
4
+
5
+ ## 4.16.1
6
+ Fri, 16 Aug 2024 08:18:13 GMT
7
+
8
+ ### Updates
9
+
10
+ - Render default navigation aid only if content control is not used.
11
+ - Fix `useConditionalValue` to handle event ids as case insensitive.
12
+ - Fix `useActiveViewport` to correctly return the active viewport.
4
13
 
5
14
  ## 4.16.0
6
15
  Wed, 07 Aug 2024 12:38:32 GMT
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveViewport.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAa9D"}
1
+ {"version":3,"file":"useActiveViewport.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAG9D"}
@@ -8,18 +8,19 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.useActiveViewport = void 0;
11
- const react_1 = require("react");
12
11
  const core_frontend_1 = require("@itwin/core-frontend");
12
+ const shim_1 = require("use-sync-external-store/shim");
13
+ const subscribe = (onStoreChange) => {
14
+ return core_frontend_1.IModelApp.viewManager.onSelectedViewportChanged.addListener(onStoreChange);
15
+ };
16
+ const getSnapshot = () => {
17
+ return core_frontend_1.IModelApp.viewManager.selectedView;
18
+ };
13
19
  /** React hook that maintains the active viewport.
14
20
  * @public
15
21
  */
16
22
  function useActiveViewport() {
17
- const [activeViewport, setActiveViewport] = (0, react_1.useState)(core_frontend_1.IModelApp.viewManager.selectedView);
18
- (0, react_1.useEffect)(() => {
19
- return core_frontend_1.IModelApp.viewManager.onSelectedViewportChanged.addListener((args) => {
20
- setActiveViewport(args.current);
21
- });
22
- }, []);
23
+ const activeViewport = (0, shim_1.useSyncExternalStore)(subscribe, getSnapshot);
23
24
  return activeViewport;
24
25
  }
25
26
  exports.useActiveViewport = useActiveViewport;
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveViewport.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,iCAA4C;AAE5C,wDAAiD;AAEjD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,IAAA,gBAAQ,EAClD,yBAAS,CAAC,WAAW,CAAC,YAAY,CACnC,CAAC;IACF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,yBAAS,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAChE,CAAC,IAAI,EAAE,EAAE;YACP,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,cAAc,CAAC;AACxB,CAAC;AAbD,8CAaC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Hooks\n */\n\nimport { useEffect, useState } from \"react\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\n\n/** React hook that maintains the active viewport.\n * @public\n */\nexport function useActiveViewport(): ScreenViewport | undefined {\n const [activeViewport, setActiveViewport] = useState(\n IModelApp.viewManager.selectedView\n );\n useEffect(() => {\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args) => {\n setActiveViewport(args.current);\n }\n );\n }, []);\n\n return activeViewport;\n}\n"]}
1
+ {"version":3,"file":"useActiveViewport.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,wDAAiD;AACjD,uDAAoE;AAEpE,MAAM,SAAS,GAAG,CAAC,aAAyB,EAAE,EAAE;IAC9C,OAAO,yBAAS,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAChE,aAAa,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,OAAO,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC;AAC5C,CAAC,CAAC;AAEF;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,cAAc,GAAG,IAAA,2BAAoB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpE,OAAO,cAAc,CAAC;AACxB,CAAC;AAHD,8CAGC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Hooks\n */\n\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\n\nconst subscribe = (onStoreChange: () => void) => {\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n onStoreChange\n );\n};\n\nconst getSnapshot = () => {\n return IModelApp.viewManager.selectedView;\n};\n\n/** React hook that maintains the active viewport.\n * @public\n */\nexport function useActiveViewport(): ScreenViewport | undefined {\n const activeViewport = useSyncExternalStore(subscribe, getSnapshot);\n return activeViewport;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useConditionalValue.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAqB3E"}
1
+ {"version":3,"file":"useConditionalValue.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KA2B3E"}
@@ -26,7 +26,7 @@ function useConditionalValue(getValue, eventIds) {
26
26
  }, [eventIds]);
27
27
  React.useEffect(() => {
28
28
  return SyncUiEventDispatcher_1.SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {
29
- if (!eventIdsRef.current.some((id) => args.eventIds.has(id)))
29
+ if (!SyncUiEventDispatcher_1.SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, eventIdsRef.current))
30
30
  return;
31
31
  setValue(getValueRef.current());
32
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useConditionalValue.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,+BAA+B;AAC/B,2EAAwE;AAExE;;;GAGG;AACH,SAAgB,mBAAmB,CAAI,QAAiB,EAAE,QAAkB;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,6CAAqB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAAE,OAAO;YACrE,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAK,CAAC;AACf,CAAC;AArBD,kDAqBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\n\nimport * as React from \"react\";\nimport { SyncUiEventDispatcher } from \"../syncui/SyncUiEventDispatcher\";\n\n/** Hook that allows to get a value that depends on some sync UI events.\n * @note This can be used as a replacement for a deprecated {@link @itwin/core-react#ConditionalIconItem}.\n * @alpha\n */\nexport function useConditionalValue<T>(getValue: () => T, eventIds: string[]) {\n const [value, setValue] = React.useState(() => getValue());\n\n const getValueRef = React.useRef(getValue);\n React.useEffect(() => {\n getValueRef.current = getValue;\n }, [getValue]);\n\n const eventIdsRef = React.useRef(eventIds);\n React.useEffect(() => {\n eventIdsRef.current = eventIds;\n }, [eventIds]);\n\n React.useEffect(() => {\n return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {\n if (!eventIdsRef.current.some((id) => args.eventIds.has(id))) return;\n setValue(getValueRef.current());\n });\n }, []);\n\n return value;\n}\n"]}
1
+ {"version":3,"file":"useConditionalValue.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,+BAA+B;AAC/B,2EAAwE;AAExE;;;GAGG;AACH,SAAgB,mBAAmB,CAAI,QAAiB,EAAE,QAAkB;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,6CAAqB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9D,IACE,CAAC,6CAAqB,CAAC,kBAAkB,CACvC,IAAI,CAAC,QAAQ,EACb,WAAW,CAAC,OAAO,CACpB;gBAED,OAAO;YACT,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAK,CAAC;AACf,CAAC;AA3BD,kDA2BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\n\nimport * as React from \"react\";\nimport { SyncUiEventDispatcher } from \"../syncui/SyncUiEventDispatcher\";\n\n/** Hook that allows to get a value that depends on some sync UI events.\n * @note This can be used as a replacement for a deprecated {@link @itwin/core-react#ConditionalIconItem}.\n * @alpha\n */\nexport function useConditionalValue<T>(getValue: () => T, eventIds: string[]) {\n const [value, setValue] = React.useState(() => getValue());\n\n const getValueRef = React.useRef(getValue);\n React.useEffect(() => {\n getValueRef.current = getValue;\n }, [getValue]);\n\n const eventIdsRef = React.useRef(eventIds);\n React.useEffect(() => {\n eventIdsRef.current = eventIds;\n }, [eventIds]);\n\n React.useEffect(() => {\n return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {\n if (\n !SyncUiEventDispatcher.hasEventOfInterest(\n args.eventIds,\n eventIdsRef.current\n )\n )\n return;\n setValue(getValueRef.current());\n });\n }, []);\n\n return value;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationWidgetComposer.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgDrD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,qBAwG9D;AA8BD;;GAEG;AAEH,MAAM,WAAW,6BAA8B,SAAQ,WAAW;IAChE,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,gCAAgC;IAChC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,qBAyC5E"}
1
+ {"version":3,"file":"NavigationWidgetComposer.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgDrD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,qBA0G9D;AA8BD;;GAEG;AAEH,MAAM,WAAW,6BAA8B,SAAQ,WAAW;IAChE,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,gCAAgC;IAChC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,qBAwC5E"}
@@ -105,7 +105,7 @@ function NavigationAidHost(props) {
105
105
  const navigationAidOpacity = 0.3 * proximityScale + 0.7;
106
106
  divStyle.opacity = `${navigationAidOpacity}`;
107
107
  }
108
- const navigationAid = navigationAidControl?.reactNode ?? (React.createElement(DefaultNavigationAid, null));
108
+ const navigationAid = activeContentControl ? (navigationAidControl?.reactNode) : (React.createElement(DefaultNavigationAid, null));
109
109
  return (React.createElement("div", { style: divStyle, ref: ref }, navigationAid));
110
110
  }
111
111
  exports.NavigationAidHost = NavigationAidHost;
@@ -139,8 +139,7 @@ function NavigationWidgetComposer(props) {
139
139
  const proximityScale = (0, core_react_1.useProximityToMouse)(elementSet, UiFramework_1.UiFramework.visibility.snapWidgetOpacity);
140
140
  const navigationAid = hideNavigationAid
141
141
  ? undefined
142
- : // eslint-disable-next-line deprecation/deprecation
143
- navigationAidHost ?? React.createElement(NavigationAidHost, null);
142
+ : navigationAidHost ?? React.createElement(NavigationAidHost, null);
144
143
  return (React.createElement(core_react_1.WidgetOpacityContext.Provider, { value: {
145
144
  onElementRef: handleChildRef,
146
145
  proximityScale,
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationWidgetComposer.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\nimport * as React from \"react\";\nimport { ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n DrawingViewState,\n OrthographicViewState,\n type ScreenViewport,\n SheetViewState,\n SpatialViewState,\n} from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport {\n useProximityToMouse,\n useWidgetOpacityContext,\n WidgetElementSet,\n WidgetOpacityContext,\n} from \"@itwin/core-react\";\nimport {\n CubeNavigationAid,\n DrawingNavigationAid,\n ViewportComponentEvents,\n} from \"@itwin/imodel-components-react\";\nimport type { ContentControl } from \"../content/ContentControl\";\nimport { NavigationArea } from \"../layout/widget/NavigationArea\";\nimport type { NavigationAidControl } from \"../navigationaids/NavigationAidControl\";\nimport { UiFramework } from \"../UiFramework\";\nimport { useActiveViewport } from \"../hooks/useActiveViewport\";\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\nimport { SheetNavigationAid } from \"../navigationaids/SheetNavigationAid\";\n\nfunction createNavigationAidControl(\n // eslint-disable-next-line deprecation/deprecation\n activeContentControl: ContentControl | undefined,\n navigationAidId: string,\n activeViewport: ScreenViewport | undefined\n // eslint-disable-next-line deprecation/deprecation\n): NavigationAidControl | undefined {\n if (\n !activeContentControl ||\n !navigationAidId ||\n activeViewport !== activeContentControl.viewport\n )\n return undefined;\n\n const viewport = activeContentControl.viewport;\n const imodel = viewport ? viewport.iModel : UiFramework.getIModelConnection();\n // eslint-disable-next-line deprecation/deprecation\n const navigationAidControl = UiFramework.controls.create(\n navigationAidId,\n navigationAidId,\n { imodel, viewport }\n // eslint-disable-next-line deprecation/deprecation\n ) as NavigationAidControl;\n\n navigationAidControl.initialize();\n return navigationAidControl;\n}\n\n/** Properties for the [[NavigationAidHost]] React component\n * @public\n */\nexport interface NavigationAidHostProps {\n /** Navigation Aid Host minimum width. Defaults to \"64px\". */\n minWidth?: string;\n /** Navigation Aid Host minimum height. Defaults to \"64px\". */\n minHeight?: string;\n}\n\n/** Component that is used as a default navigation aid.\n * Uses registered navigation aids and the active content control to determine if or which navigation aid to display.\n * If an active content is defined without a content control (`classId` is set to an empty string) renders a default navigation aid based on an active viewport view state.\n * @public\n */\nexport function NavigationAidHost(props: NavigationAidHostProps) {\n const [activeContentControl, setActiveContentControl] = React.useState(() =>\n // eslint-disable-next-line deprecation/deprecation\n UiFramework.content.getActiveContentControl()\n );\n const [activeContentViewport, setActiveContentViewport] = React.useState(\n () => activeContentControl?.viewport\n );\n const [navigationAidId, setNavigationAidId] = React.useState(() =>\n activeContentControl ? activeContentControl.navigationAidControl : \"\"\n );\n\n React.useEffect(() => {\n // eslint-disable-next-line deprecation/deprecation\n return UiFramework.frontstages.onContentControlActivatedEvent.addListener(\n (args) => {\n setActiveContentControl(args.activeContentControl);\n setActiveContentViewport(args.activeContentControl.viewport);\n setNavigationAidId(args.activeContentControl.navigationAidControl);\n }\n );\n }, []);\n React.useEffect(() => {\n return UiFramework.content.onActiveContentChangedEvent.addListener(\n (args) => {\n args.id;\n const frontstageDef = UiFramework.frontstages.activeFrontstageDef;\n if (!frontstageDef) return;\n\n const contentGroup = frontstageDef.contentGroup;\n if (!contentGroup) return;\n\n const content = contentGroup.contentPropsList.find(\n (contentProps) => contentProps.id === args.id\n );\n if (!content?.content) return;\n\n // Content w/o a control is activated - reset the navigation.\n setActiveContentControl(undefined);\n setActiveContentViewport(undefined);\n setNavigationAidId(\"\");\n }\n );\n }, []);\n\n const [activeViewClass, setActiveViewClass] = React.useState(() => {\n // eslint-disable-next-line deprecation/deprecation\n const content = UiFramework.content.getActiveContentControl();\n if (content && content.viewport) return content.viewport.view.classFullName;\n return \"\";\n });\n\n React.useEffect(() => {\n return ViewportComponentEvents.onViewClassFullNameChangedEvent.addListener(\n (args) => {\n setActiveViewClass(args.newName);\n }\n );\n }, [activeViewClass]);\n\n const navigationAidControl = React.useMemo(\n () =>\n createNavigationAidControl(\n activeContentControl,\n navigationAidId,\n activeContentViewport\n ),\n [activeContentControl, navigationAidId, activeContentViewport]\n );\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const isInitialMount = React.useRef(true);\n const { onElementRef, proximityScale } = useWidgetOpacityContext();\n\n React.useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n onElementRef(ref);\n }\n }, [onElementRef]);\n\n const divStyle: React.CSSProperties = {\n minWidth: props.minWidth ? props.minWidth : \"64px\",\n minHeight: props.minHeight ? props.minHeight : \"64px\",\n };\n\n if (\n (UiFramework.visibility.useProximityOpacity || // eslint-disable-line deprecation/deprecation\n UiFramework.visibility.snapWidgetOpacity) &&\n !ProcessDetector.isMobileBrowser\n ) {\n const navigationAidOpacity = 0.3 * proximityScale + 0.7;\n divStyle.opacity = `${navigationAidOpacity}`;\n }\n\n const navigationAid = navigationAidControl?.reactNode ?? (\n <DefaultNavigationAid />\n );\n return (\n <div style={divStyle} ref={ref}>\n {navigationAid}\n </div>\n );\n}\n\nfunction DefaultNavigationAid() {\n const viewport = useActiveViewport();\n if (!viewport) return null;\n\n const className = ViewUtilities.getBisBaseClass(viewport.view.classFullName);\n switch (className) {\n case SheetViewState.className:\n return <SheetNavigationAid iModelConnection={viewport.iModel} />;\n case DrawingViewState.className:\n return (\n <DrawingNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n case SpatialViewState.className:\n case OrthographicViewState.className:\n return (\n <CubeNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n }\n\n return null;\n}\n\n/** Properties for the [[NavigationWidgetComposer]] React components\n * @public\n */\n// eslint-disable-next-line deprecation/deprecation\nexport interface NavigationWidgetComposerProps extends CommonProps {\n /** Optional horizontal toolbar */\n horizontalToolbar?: React.ReactNode;\n /** Optional vertical toolbar */\n verticalToolbar?: React.ReactNode;\n /** Optional navigation aid to override the default {@link NavigationAidHost}. */\n navigationAidHost?: React.ReactNode;\n /** If true no navigation aid will be shown. Defaults to `false`. */\n hideNavigationAid?: boolean;\n}\n\n/**\n * Component that Composes a NavigationWidget typically using toolbars generated via [[ToolbarComposer]] class. The Navigation widget is shown in the top right of the content area\n * and typically holds tools to visually navigate, orient, and zoom to specific content.\n * @public\n */\nexport function NavigationWidgetComposer(props: NavigationWidgetComposerProps) {\n const {\n navigationAidHost,\n horizontalToolbar,\n verticalToolbar,\n hideNavigationAid,\n ...otherProps\n } = props;\n const [elementSet] = React.useState(new WidgetElementSet());\n const handleChildRef = React.useCallback(\n (elementRef: React.RefObject<Element>) => {\n elementSet.add(elementRef);\n },\n [elementSet]\n );\n const proximityScale = useProximityToMouse(\n elementSet,\n UiFramework.visibility.snapWidgetOpacity\n );\n\n const navigationAid = hideNavigationAid\n ? undefined\n : // eslint-disable-next-line deprecation/deprecation\n navigationAidHost ?? <NavigationAidHost />;\n\n return (\n <WidgetOpacityContext.Provider\n value={{\n onElementRef: handleChildRef,\n proximityScale,\n }}\n >\n <NavigationArea\n navigationAid={navigationAid}\n horizontalToolbar={horizontalToolbar}\n verticalToolbar={verticalToolbar}\n {...otherProps}\n onMouseEnter={UiFramework.visibility.handleWidgetMouseEnter}\n />\n </WidgetOpacityContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"NavigationWidgetComposer.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\nimport * as React from \"react\";\nimport { ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n DrawingViewState,\n OrthographicViewState,\n type ScreenViewport,\n SheetViewState,\n SpatialViewState,\n} from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport {\n useProximityToMouse,\n useWidgetOpacityContext,\n WidgetElementSet,\n WidgetOpacityContext,\n} from \"@itwin/core-react\";\nimport {\n CubeNavigationAid,\n DrawingNavigationAid,\n ViewportComponentEvents,\n} from \"@itwin/imodel-components-react\";\nimport type { ContentControl } from \"../content/ContentControl\";\nimport { NavigationArea } from \"../layout/widget/NavigationArea\";\nimport type { NavigationAidControl } from \"../navigationaids/NavigationAidControl\";\nimport { UiFramework } from \"../UiFramework\";\nimport { useActiveViewport } from \"../hooks/useActiveViewport\";\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\nimport { SheetNavigationAid } from \"../navigationaids/SheetNavigationAid\";\n\nfunction createNavigationAidControl(\n // eslint-disable-next-line deprecation/deprecation\n activeContentControl: ContentControl | undefined,\n navigationAidId: string,\n activeViewport: ScreenViewport | undefined\n // eslint-disable-next-line deprecation/deprecation\n): NavigationAidControl | undefined {\n if (\n !activeContentControl ||\n !navigationAidId ||\n activeViewport !== activeContentControl.viewport\n )\n return undefined;\n\n const viewport = activeContentControl.viewport;\n const imodel = viewport ? viewport.iModel : UiFramework.getIModelConnection();\n // eslint-disable-next-line deprecation/deprecation\n const navigationAidControl = UiFramework.controls.create(\n navigationAidId,\n navigationAidId,\n { imodel, viewport }\n // eslint-disable-next-line deprecation/deprecation\n ) as NavigationAidControl;\n\n navigationAidControl.initialize();\n return navigationAidControl;\n}\n\n/** Properties for the [[NavigationAidHost]] React component\n * @public\n */\nexport interface NavigationAidHostProps {\n /** Navigation Aid Host minimum width. Defaults to \"64px\". */\n minWidth?: string;\n /** Navigation Aid Host minimum height. Defaults to \"64px\". */\n minHeight?: string;\n}\n\n/** Component that is used as a default navigation aid.\n * Uses registered navigation aids and the active content control to determine if or which navigation aid to display.\n * If an active content is defined without a content control (`classId` is set to an empty string) renders a default navigation aid based on an active viewport view state.\n * @public\n */\nexport function NavigationAidHost(props: NavigationAidHostProps) {\n const [activeContentControl, setActiveContentControl] = React.useState(() =>\n // eslint-disable-next-line deprecation/deprecation\n UiFramework.content.getActiveContentControl()\n );\n const [activeContentViewport, setActiveContentViewport] = React.useState(\n () => activeContentControl?.viewport\n );\n const [navigationAidId, setNavigationAidId] = React.useState(() =>\n activeContentControl ? activeContentControl.navigationAidControl : \"\"\n );\n\n React.useEffect(() => {\n // eslint-disable-next-line deprecation/deprecation\n return UiFramework.frontstages.onContentControlActivatedEvent.addListener(\n (args) => {\n setActiveContentControl(args.activeContentControl);\n setActiveContentViewport(args.activeContentControl.viewport);\n setNavigationAidId(args.activeContentControl.navigationAidControl);\n }\n );\n }, []);\n React.useEffect(() => {\n return UiFramework.content.onActiveContentChangedEvent.addListener(\n (args) => {\n args.id;\n const frontstageDef = UiFramework.frontstages.activeFrontstageDef;\n if (!frontstageDef) return;\n\n const contentGroup = frontstageDef.contentGroup;\n if (!contentGroup) return;\n\n const content = contentGroup.contentPropsList.find(\n (contentProps) => contentProps.id === args.id\n );\n if (!content?.content) return;\n\n // Content w/o a control is activated - reset the navigation.\n setActiveContentControl(undefined);\n setActiveContentViewport(undefined);\n setNavigationAidId(\"\");\n }\n );\n }, []);\n\n const [activeViewClass, setActiveViewClass] = React.useState(() => {\n // eslint-disable-next-line deprecation/deprecation\n const content = UiFramework.content.getActiveContentControl();\n if (content && content.viewport) return content.viewport.view.classFullName;\n return \"\";\n });\n\n React.useEffect(() => {\n return ViewportComponentEvents.onViewClassFullNameChangedEvent.addListener(\n (args) => {\n setActiveViewClass(args.newName);\n }\n );\n }, [activeViewClass]);\n\n const navigationAidControl = React.useMemo(\n () =>\n createNavigationAidControl(\n activeContentControl,\n navigationAidId,\n activeContentViewport\n ),\n [activeContentControl, navigationAidId, activeContentViewport]\n );\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const isInitialMount = React.useRef(true);\n const { onElementRef, proximityScale } = useWidgetOpacityContext();\n\n React.useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n onElementRef(ref);\n }\n }, [onElementRef]);\n\n const divStyle: React.CSSProperties = {\n minWidth: props.minWidth ? props.minWidth : \"64px\",\n minHeight: props.minHeight ? props.minHeight : \"64px\",\n };\n\n if (\n (UiFramework.visibility.useProximityOpacity || // eslint-disable-line deprecation/deprecation\n UiFramework.visibility.snapWidgetOpacity) &&\n !ProcessDetector.isMobileBrowser\n ) {\n const navigationAidOpacity = 0.3 * proximityScale + 0.7;\n divStyle.opacity = `${navigationAidOpacity}`;\n }\n\n const navigationAid = activeContentControl ? (\n navigationAidControl?.reactNode\n ) : (\n <DefaultNavigationAid />\n );\n return (\n <div style={divStyle} ref={ref}>\n {navigationAid}\n </div>\n );\n}\n\nfunction DefaultNavigationAid() {\n const viewport = useActiveViewport();\n if (!viewport) return null;\n\n const className = ViewUtilities.getBisBaseClass(viewport.view.classFullName);\n switch (className) {\n case SheetViewState.className:\n return <SheetNavigationAid iModelConnection={viewport.iModel} />;\n case DrawingViewState.className:\n return (\n <DrawingNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n case SpatialViewState.className:\n case OrthographicViewState.className:\n return (\n <CubeNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n }\n\n return null;\n}\n\n/** Properties for the [[NavigationWidgetComposer]] React components\n * @public\n */\n// eslint-disable-next-line deprecation/deprecation\nexport interface NavigationWidgetComposerProps extends CommonProps {\n /** Optional horizontal toolbar */\n horizontalToolbar?: React.ReactNode;\n /** Optional vertical toolbar */\n verticalToolbar?: React.ReactNode;\n /** Optional navigation aid to override the default {@link NavigationAidHost}. */\n navigationAidHost?: React.ReactNode;\n /** If true no navigation aid will be shown. Defaults to `false`. */\n hideNavigationAid?: boolean;\n}\n\n/**\n * Component that Composes a NavigationWidget typically using toolbars generated via [[ToolbarComposer]] class. The Navigation widget is shown in the top right of the content area\n * and typically holds tools to visually navigate, orient, and zoom to specific content.\n * @public\n */\nexport function NavigationWidgetComposer(props: NavigationWidgetComposerProps) {\n const {\n navigationAidHost,\n horizontalToolbar,\n verticalToolbar,\n hideNavigationAid,\n ...otherProps\n } = props;\n const [elementSet] = React.useState(new WidgetElementSet());\n const handleChildRef = React.useCallback(\n (elementRef: React.RefObject<Element>) => {\n elementSet.add(elementRef);\n },\n [elementSet]\n );\n const proximityScale = useProximityToMouse(\n elementSet,\n UiFramework.visibility.snapWidgetOpacity\n );\n\n const navigationAid = hideNavigationAid\n ? undefined\n : navigationAidHost ?? <NavigationAidHost />;\n\n return (\n <WidgetOpacityContext.Provider\n value={{\n onElementRef: handleChildRef,\n proximityScale,\n }}\n >\n <NavigationArea\n navigationAid={navigationAid}\n horizontalToolbar={horizontalToolbar}\n verticalToolbar={verticalToolbar}\n {...otherProps}\n onMouseEnter={UiFramework.visibility.handleWidgetMouseEnter}\n />\n </WidgetOpacityContext.Provider>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveViewport.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAa9D"}
1
+ {"version":3,"file":"useActiveViewport.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAc3D;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAG9D"}
@@ -5,18 +5,19 @@
5
5
  /** @packageDocumentation
6
6
  * @module Hooks
7
7
  */
8
- import { useEffect, useState } from "react";
9
8
  import { IModelApp } from "@itwin/core-frontend";
9
+ import { useSyncExternalStore } from "use-sync-external-store/shim";
10
+ const subscribe = (onStoreChange) => {
11
+ return IModelApp.viewManager.onSelectedViewportChanged.addListener(onStoreChange);
12
+ };
13
+ const getSnapshot = () => {
14
+ return IModelApp.viewManager.selectedView;
15
+ };
10
16
  /** React hook that maintains the active viewport.
11
17
  * @public
12
18
  */
13
19
  export function useActiveViewport() {
14
- const [activeViewport, setActiveViewport] = useState(IModelApp.viewManager.selectedView);
15
- useEffect(() => {
16
- return IModelApp.viewManager.onSelectedViewportChanged.addListener((args) => {
17
- setActiveViewport(args.current);
18
- });
19
- }, []);
20
+ const activeViewport = useSyncExternalStore(subscribe, getSnapshot);
20
21
  return activeViewport;
21
22
  }
22
23
  //# sourceMappingURL=useActiveViewport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveViewport.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,SAAS,CAAC,WAAW,CAAC,YAAY,CACnC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,SAAS,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAChE,CAAC,IAAI,EAAE,EAAE;YACP,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,cAAc,CAAC;AACxB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Hooks\n */\n\nimport { useEffect, useState } from \"react\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\n\n/** React hook that maintains the active viewport.\n * @public\n */\nexport function useActiveViewport(): ScreenViewport | undefined {\n const [activeViewport, setActiveViewport] = useState(\n IModelApp.viewManager.selectedView\n );\n useEffect(() => {\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args) => {\n setActiveViewport(args.current);\n }\n );\n }, []);\n\n return activeViewport;\n}\n"]}
1
+ {"version":3,"file":"useActiveViewport.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useActiveViewport.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,SAAS,GAAG,CAAC,aAAyB,EAAE,EAAE;IAC9C,OAAO,SAAS,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAChE,aAAa,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,OAAO,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC;AAC5C,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpE,OAAO,cAAc,CAAC;AACxB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Hooks\n */\n\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { useSyncExternalStore } from \"use-sync-external-store/shim\";\n\nconst subscribe = (onStoreChange: () => void) => {\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n onStoreChange\n );\n};\n\nconst getSnapshot = () => {\n return IModelApp.viewManager.selectedView;\n};\n\n/** React hook that maintains the active viewport.\n * @public\n */\nexport function useActiveViewport(): ScreenViewport | undefined {\n const activeViewport = useSyncExternalStore(subscribe, getSnapshot);\n return activeViewport;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useConditionalValue.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAqB3E"}
1
+ {"version":3,"file":"useConditionalValue.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAKH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KA2B3E"}
@@ -23,7 +23,7 @@ export function useConditionalValue(getValue, eventIds) {
23
23
  }, [eventIds]);
24
24
  React.useEffect(() => {
25
25
  return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {
26
- if (!eventIdsRef.current.some((id) => args.eventIds.has(id)))
26
+ if (!SyncUiEventDispatcher.hasEventOfInterest(args.eventIds, eventIdsRef.current))
27
27
  return;
28
28
  setValue(getValueRef.current());
29
29
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useConditionalValue.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAI,QAAiB,EAAE,QAAkB;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,qBAAqB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAAE,OAAO;YACrE,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\n\nimport * as React from \"react\";\nimport { SyncUiEventDispatcher } from \"../syncui/SyncUiEventDispatcher\";\n\n/** Hook that allows to get a value that depends on some sync UI events.\n * @note This can be used as a replacement for a deprecated {@link @itwin/core-react#ConditionalIconItem}.\n * @alpha\n */\nexport function useConditionalValue<T>(getValue: () => T, eventIds: string[]) {\n const [value, setValue] = React.useState(() => getValue());\n\n const getValueRef = React.useRef(getValue);\n React.useEffect(() => {\n getValueRef.current = getValue;\n }, [getValue]);\n\n const eventIdsRef = React.useRef(eventIds);\n React.useEffect(() => {\n eventIdsRef.current = eventIds;\n }, [eventIds]);\n\n React.useEffect(() => {\n return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {\n if (!eventIdsRef.current.some((id) => args.eventIds.has(id))) return;\n setValue(getValueRef.current());\n });\n }, []);\n\n return value;\n}\n"]}
1
+ {"version":3,"file":"useConditionalValue.js","sourceRoot":"","sources":["../../../../src/appui-react/hooks/useConditionalValue.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAI,QAAiB,EAAE,QAAkB;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,qBAAqB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9D,IACE,CAAC,qBAAqB,CAAC,kBAAkB,CACvC,IAAI,CAAC,QAAQ,EACb,WAAW,CAAC,OAAO,CACpB;gBAED,OAAO;YACT,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utilities\n */\n\nimport * as React from \"react\";\nimport { SyncUiEventDispatcher } from \"../syncui/SyncUiEventDispatcher\";\n\n/** Hook that allows to get a value that depends on some sync UI events.\n * @note This can be used as a replacement for a deprecated {@link @itwin/core-react#ConditionalIconItem}.\n * @alpha\n */\nexport function useConditionalValue<T>(getValue: () => T, eventIds: string[]) {\n const [value, setValue] = React.useState(() => getValue());\n\n const getValueRef = React.useRef(getValue);\n React.useEffect(() => {\n getValueRef.current = getValue;\n }, [getValue]);\n\n const eventIdsRef = React.useRef(eventIds);\n React.useEffect(() => {\n eventIdsRef.current = eventIds;\n }, [eventIds]);\n\n React.useEffect(() => {\n return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {\n if (\n !SyncUiEventDispatcher.hasEventOfInterest(\n args.eventIds,\n eventIdsRef.current\n )\n )\n return;\n setValue(getValueRef.current());\n });\n }, []);\n\n return value;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationWidgetComposer.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgDrD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,qBAwG9D;AA8BD;;GAEG;AAEH,MAAM,WAAW,6BAA8B,SAAQ,WAAW;IAChE,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,gCAAgC;IAChC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,qBAyC5E"}
1
+ {"version":3,"file":"NavigationWidgetComposer.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgDrD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,qBA0G9D;AA8BD;;GAEG;AAEH,MAAM,WAAW,6BAA8B,SAAQ,WAAW;IAChE,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,gCAAgC;IAChC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,qBAwC5E"}
@@ -102,7 +102,7 @@ export function NavigationAidHost(props) {
102
102
  const navigationAidOpacity = 0.3 * proximityScale + 0.7;
103
103
  divStyle.opacity = `${navigationAidOpacity}`;
104
104
  }
105
- const navigationAid = navigationAidControl?.reactNode ?? (React.createElement(DefaultNavigationAid, null));
105
+ const navigationAid = activeContentControl ? (navigationAidControl?.reactNode) : (React.createElement(DefaultNavigationAid, null));
106
106
  return (React.createElement("div", { style: divStyle, ref: ref }, navigationAid));
107
107
  }
108
108
  function DefaultNavigationAid() {
@@ -135,8 +135,7 @@ export function NavigationWidgetComposer(props) {
135
135
  const proximityScale = useProximityToMouse(elementSet, UiFramework.visibility.snapWidgetOpacity);
136
136
  const navigationAid = hideNavigationAid
137
137
  ? undefined
138
- : // eslint-disable-next-line deprecation/deprecation
139
- navigationAidHost ?? React.createElement(NavigationAidHost, null);
138
+ : navigationAidHost ?? React.createElement(NavigationAidHost, null);
140
139
  return (React.createElement(WidgetOpacityContext.Provider, { value: {
141
140
  onElementRef: handleChildRef,
142
141
  proximityScale,
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationWidgetComposer.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\nimport * as React from \"react\";\nimport { ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n DrawingViewState,\n OrthographicViewState,\n type ScreenViewport,\n SheetViewState,\n SpatialViewState,\n} from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport {\n useProximityToMouse,\n useWidgetOpacityContext,\n WidgetElementSet,\n WidgetOpacityContext,\n} from \"@itwin/core-react\";\nimport {\n CubeNavigationAid,\n DrawingNavigationAid,\n ViewportComponentEvents,\n} from \"@itwin/imodel-components-react\";\nimport type { ContentControl } from \"../content/ContentControl\";\nimport { NavigationArea } from \"../layout/widget/NavigationArea\";\nimport type { NavigationAidControl } from \"../navigationaids/NavigationAidControl\";\nimport { UiFramework } from \"../UiFramework\";\nimport { useActiveViewport } from \"../hooks/useActiveViewport\";\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\nimport { SheetNavigationAid } from \"../navigationaids/SheetNavigationAid\";\n\nfunction createNavigationAidControl(\n // eslint-disable-next-line deprecation/deprecation\n activeContentControl: ContentControl | undefined,\n navigationAidId: string,\n activeViewport: ScreenViewport | undefined\n // eslint-disable-next-line deprecation/deprecation\n): NavigationAidControl | undefined {\n if (\n !activeContentControl ||\n !navigationAidId ||\n activeViewport !== activeContentControl.viewport\n )\n return undefined;\n\n const viewport = activeContentControl.viewport;\n const imodel = viewport ? viewport.iModel : UiFramework.getIModelConnection();\n // eslint-disable-next-line deprecation/deprecation\n const navigationAidControl = UiFramework.controls.create(\n navigationAidId,\n navigationAidId,\n { imodel, viewport }\n // eslint-disable-next-line deprecation/deprecation\n ) as NavigationAidControl;\n\n navigationAidControl.initialize();\n return navigationAidControl;\n}\n\n/** Properties for the [[NavigationAidHost]] React component\n * @public\n */\nexport interface NavigationAidHostProps {\n /** Navigation Aid Host minimum width. Defaults to \"64px\". */\n minWidth?: string;\n /** Navigation Aid Host minimum height. Defaults to \"64px\". */\n minHeight?: string;\n}\n\n/** Component that is used as a default navigation aid.\n * Uses registered navigation aids and the active content control to determine if or which navigation aid to display.\n * If an active content is defined without a content control (`classId` is set to an empty string) renders a default navigation aid based on an active viewport view state.\n * @public\n */\nexport function NavigationAidHost(props: NavigationAidHostProps) {\n const [activeContentControl, setActiveContentControl] = React.useState(() =>\n // eslint-disable-next-line deprecation/deprecation\n UiFramework.content.getActiveContentControl()\n );\n const [activeContentViewport, setActiveContentViewport] = React.useState(\n () => activeContentControl?.viewport\n );\n const [navigationAidId, setNavigationAidId] = React.useState(() =>\n activeContentControl ? activeContentControl.navigationAidControl : \"\"\n );\n\n React.useEffect(() => {\n // eslint-disable-next-line deprecation/deprecation\n return UiFramework.frontstages.onContentControlActivatedEvent.addListener(\n (args) => {\n setActiveContentControl(args.activeContentControl);\n setActiveContentViewport(args.activeContentControl.viewport);\n setNavigationAidId(args.activeContentControl.navigationAidControl);\n }\n );\n }, []);\n React.useEffect(() => {\n return UiFramework.content.onActiveContentChangedEvent.addListener(\n (args) => {\n args.id;\n const frontstageDef = UiFramework.frontstages.activeFrontstageDef;\n if (!frontstageDef) return;\n\n const contentGroup = frontstageDef.contentGroup;\n if (!contentGroup) return;\n\n const content = contentGroup.contentPropsList.find(\n (contentProps) => contentProps.id === args.id\n );\n if (!content?.content) return;\n\n // Content w/o a control is activated - reset the navigation.\n setActiveContentControl(undefined);\n setActiveContentViewport(undefined);\n setNavigationAidId(\"\");\n }\n );\n }, []);\n\n const [activeViewClass, setActiveViewClass] = React.useState(() => {\n // eslint-disable-next-line deprecation/deprecation\n const content = UiFramework.content.getActiveContentControl();\n if (content && content.viewport) return content.viewport.view.classFullName;\n return \"\";\n });\n\n React.useEffect(() => {\n return ViewportComponentEvents.onViewClassFullNameChangedEvent.addListener(\n (args) => {\n setActiveViewClass(args.newName);\n }\n );\n }, [activeViewClass]);\n\n const navigationAidControl = React.useMemo(\n () =>\n createNavigationAidControl(\n activeContentControl,\n navigationAidId,\n activeContentViewport\n ),\n [activeContentControl, navigationAidId, activeContentViewport]\n );\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const isInitialMount = React.useRef(true);\n const { onElementRef, proximityScale } = useWidgetOpacityContext();\n\n React.useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n onElementRef(ref);\n }\n }, [onElementRef]);\n\n const divStyle: React.CSSProperties = {\n minWidth: props.minWidth ? props.minWidth : \"64px\",\n minHeight: props.minHeight ? props.minHeight : \"64px\",\n };\n\n if (\n (UiFramework.visibility.useProximityOpacity || // eslint-disable-line deprecation/deprecation\n UiFramework.visibility.snapWidgetOpacity) &&\n !ProcessDetector.isMobileBrowser\n ) {\n const navigationAidOpacity = 0.3 * proximityScale + 0.7;\n divStyle.opacity = `${navigationAidOpacity}`;\n }\n\n const navigationAid = navigationAidControl?.reactNode ?? (\n <DefaultNavigationAid />\n );\n return (\n <div style={divStyle} ref={ref}>\n {navigationAid}\n </div>\n );\n}\n\nfunction DefaultNavigationAid() {\n const viewport = useActiveViewport();\n if (!viewport) return null;\n\n const className = ViewUtilities.getBisBaseClass(viewport.view.classFullName);\n switch (className) {\n case SheetViewState.className:\n return <SheetNavigationAid iModelConnection={viewport.iModel} />;\n case DrawingViewState.className:\n return (\n <DrawingNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n case SpatialViewState.className:\n case OrthographicViewState.className:\n return (\n <CubeNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n }\n\n return null;\n}\n\n/** Properties for the [[NavigationWidgetComposer]] React components\n * @public\n */\n// eslint-disable-next-line deprecation/deprecation\nexport interface NavigationWidgetComposerProps extends CommonProps {\n /** Optional horizontal toolbar */\n horizontalToolbar?: React.ReactNode;\n /** Optional vertical toolbar */\n verticalToolbar?: React.ReactNode;\n /** Optional navigation aid to override the default {@link NavigationAidHost}. */\n navigationAidHost?: React.ReactNode;\n /** If true no navigation aid will be shown. Defaults to `false`. */\n hideNavigationAid?: boolean;\n}\n\n/**\n * Component that Composes a NavigationWidget typically using toolbars generated via [[ToolbarComposer]] class. The Navigation widget is shown in the top right of the content area\n * and typically holds tools to visually navigate, orient, and zoom to specific content.\n * @public\n */\nexport function NavigationWidgetComposer(props: NavigationWidgetComposerProps) {\n const {\n navigationAidHost,\n horizontalToolbar,\n verticalToolbar,\n hideNavigationAid,\n ...otherProps\n } = props;\n const [elementSet] = React.useState(new WidgetElementSet());\n const handleChildRef = React.useCallback(\n (elementRef: React.RefObject<Element>) => {\n elementSet.add(elementRef);\n },\n [elementSet]\n );\n const proximityScale = useProximityToMouse(\n elementSet,\n UiFramework.visibility.snapWidgetOpacity\n );\n\n const navigationAid = hideNavigationAid\n ? undefined\n : // eslint-disable-next-line deprecation/deprecation\n navigationAidHost ?? <NavigationAidHost />;\n\n return (\n <WidgetOpacityContext.Provider\n value={{\n onElementRef: handleChildRef,\n proximityScale,\n }}\n >\n <NavigationArea\n navigationAid={navigationAid}\n horizontalToolbar={horizontalToolbar}\n verticalToolbar={verticalToolbar}\n {...otherProps}\n onMouseEnter={UiFramework.visibility.handleWidgetMouseEnter}\n />\n </WidgetOpacityContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"NavigationWidgetComposer.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/NavigationWidgetComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\nimport * as React from \"react\";\nimport { ProcessDetector } from \"@itwin/core-bentley\";\nimport {\n DrawingViewState,\n OrthographicViewState,\n type ScreenViewport,\n SheetViewState,\n SpatialViewState,\n} from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport {\n useProximityToMouse,\n useWidgetOpacityContext,\n WidgetElementSet,\n WidgetOpacityContext,\n} from \"@itwin/core-react\";\nimport {\n CubeNavigationAid,\n DrawingNavigationAid,\n ViewportComponentEvents,\n} from \"@itwin/imodel-components-react\";\nimport type { ContentControl } from \"../content/ContentControl\";\nimport { NavigationArea } from \"../layout/widget/NavigationArea\";\nimport type { NavigationAidControl } from \"../navigationaids/NavigationAidControl\";\nimport { UiFramework } from \"../UiFramework\";\nimport { useActiveViewport } from \"../hooks/useActiveViewport\";\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\nimport { SheetNavigationAid } from \"../navigationaids/SheetNavigationAid\";\n\nfunction createNavigationAidControl(\n // eslint-disable-next-line deprecation/deprecation\n activeContentControl: ContentControl | undefined,\n navigationAidId: string,\n activeViewport: ScreenViewport | undefined\n // eslint-disable-next-line deprecation/deprecation\n): NavigationAidControl | undefined {\n if (\n !activeContentControl ||\n !navigationAidId ||\n activeViewport !== activeContentControl.viewport\n )\n return undefined;\n\n const viewport = activeContentControl.viewport;\n const imodel = viewport ? viewport.iModel : UiFramework.getIModelConnection();\n // eslint-disable-next-line deprecation/deprecation\n const navigationAidControl = UiFramework.controls.create(\n navigationAidId,\n navigationAidId,\n { imodel, viewport }\n // eslint-disable-next-line deprecation/deprecation\n ) as NavigationAidControl;\n\n navigationAidControl.initialize();\n return navigationAidControl;\n}\n\n/** Properties for the [[NavigationAidHost]] React component\n * @public\n */\nexport interface NavigationAidHostProps {\n /** Navigation Aid Host minimum width. Defaults to \"64px\". */\n minWidth?: string;\n /** Navigation Aid Host minimum height. Defaults to \"64px\". */\n minHeight?: string;\n}\n\n/** Component that is used as a default navigation aid.\n * Uses registered navigation aids and the active content control to determine if or which navigation aid to display.\n * If an active content is defined without a content control (`classId` is set to an empty string) renders a default navigation aid based on an active viewport view state.\n * @public\n */\nexport function NavigationAidHost(props: NavigationAidHostProps) {\n const [activeContentControl, setActiveContentControl] = React.useState(() =>\n // eslint-disable-next-line deprecation/deprecation\n UiFramework.content.getActiveContentControl()\n );\n const [activeContentViewport, setActiveContentViewport] = React.useState(\n () => activeContentControl?.viewport\n );\n const [navigationAidId, setNavigationAidId] = React.useState(() =>\n activeContentControl ? activeContentControl.navigationAidControl : \"\"\n );\n\n React.useEffect(() => {\n // eslint-disable-next-line deprecation/deprecation\n return UiFramework.frontstages.onContentControlActivatedEvent.addListener(\n (args) => {\n setActiveContentControl(args.activeContentControl);\n setActiveContentViewport(args.activeContentControl.viewport);\n setNavigationAidId(args.activeContentControl.navigationAidControl);\n }\n );\n }, []);\n React.useEffect(() => {\n return UiFramework.content.onActiveContentChangedEvent.addListener(\n (args) => {\n args.id;\n const frontstageDef = UiFramework.frontstages.activeFrontstageDef;\n if (!frontstageDef) return;\n\n const contentGroup = frontstageDef.contentGroup;\n if (!contentGroup) return;\n\n const content = contentGroup.contentPropsList.find(\n (contentProps) => contentProps.id === args.id\n );\n if (!content?.content) return;\n\n // Content w/o a control is activated - reset the navigation.\n setActiveContentControl(undefined);\n setActiveContentViewport(undefined);\n setNavigationAidId(\"\");\n }\n );\n }, []);\n\n const [activeViewClass, setActiveViewClass] = React.useState(() => {\n // eslint-disable-next-line deprecation/deprecation\n const content = UiFramework.content.getActiveContentControl();\n if (content && content.viewport) return content.viewport.view.classFullName;\n return \"\";\n });\n\n React.useEffect(() => {\n return ViewportComponentEvents.onViewClassFullNameChangedEvent.addListener(\n (args) => {\n setActiveViewClass(args.newName);\n }\n );\n }, [activeViewClass]);\n\n const navigationAidControl = React.useMemo(\n () =>\n createNavigationAidControl(\n activeContentControl,\n navigationAidId,\n activeContentViewport\n ),\n [activeContentControl, navigationAidId, activeContentViewport]\n );\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n const isInitialMount = React.useRef(true);\n const { onElementRef, proximityScale } = useWidgetOpacityContext();\n\n React.useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n onElementRef(ref);\n }\n }, [onElementRef]);\n\n const divStyle: React.CSSProperties = {\n minWidth: props.minWidth ? props.minWidth : \"64px\",\n minHeight: props.minHeight ? props.minHeight : \"64px\",\n };\n\n if (\n (UiFramework.visibility.useProximityOpacity || // eslint-disable-line deprecation/deprecation\n UiFramework.visibility.snapWidgetOpacity) &&\n !ProcessDetector.isMobileBrowser\n ) {\n const navigationAidOpacity = 0.3 * proximityScale + 0.7;\n divStyle.opacity = `${navigationAidOpacity}`;\n }\n\n const navigationAid = activeContentControl ? (\n navigationAidControl?.reactNode\n ) : (\n <DefaultNavigationAid />\n );\n return (\n <div style={divStyle} ref={ref}>\n {navigationAid}\n </div>\n );\n}\n\nfunction DefaultNavigationAid() {\n const viewport = useActiveViewport();\n if (!viewport) return null;\n\n const className = ViewUtilities.getBisBaseClass(viewport.view.classFullName);\n switch (className) {\n case SheetViewState.className:\n return <SheetNavigationAid iModelConnection={viewport.iModel} />;\n case DrawingViewState.className:\n return (\n <DrawingNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n case SpatialViewState.className:\n case OrthographicViewState.className:\n return (\n <CubeNavigationAid\n iModelConnection={viewport.iModel}\n viewport={viewport}\n />\n );\n }\n\n return null;\n}\n\n/** Properties for the [[NavigationWidgetComposer]] React components\n * @public\n */\n// eslint-disable-next-line deprecation/deprecation\nexport interface NavigationWidgetComposerProps extends CommonProps {\n /** Optional horizontal toolbar */\n horizontalToolbar?: React.ReactNode;\n /** Optional vertical toolbar */\n verticalToolbar?: React.ReactNode;\n /** Optional navigation aid to override the default {@link NavigationAidHost}. */\n navigationAidHost?: React.ReactNode;\n /** If true no navigation aid will be shown. Defaults to `false`. */\n hideNavigationAid?: boolean;\n}\n\n/**\n * Component that Composes a NavigationWidget typically using toolbars generated via [[ToolbarComposer]] class. The Navigation widget is shown in the top right of the content area\n * and typically holds tools to visually navigate, orient, and zoom to specific content.\n * @public\n */\nexport function NavigationWidgetComposer(props: NavigationWidgetComposerProps) {\n const {\n navigationAidHost,\n horizontalToolbar,\n verticalToolbar,\n hideNavigationAid,\n ...otherProps\n } = props;\n const [elementSet] = React.useState(new WidgetElementSet());\n const handleChildRef = React.useCallback(\n (elementRef: React.RefObject<Element>) => {\n elementSet.add(elementRef);\n },\n [elementSet]\n );\n const proximityScale = useProximityToMouse(\n elementSet,\n UiFramework.visibility.snapWidgetOpacity\n );\n\n const navigationAid = hideNavigationAid\n ? undefined\n : navigationAidHost ?? <NavigationAidHost />;\n\n return (\n <WidgetOpacityContext.Provider\n value={{\n onElementRef: handleChildRef,\n proximityScale,\n }}\n >\n <NavigationArea\n navigationAid={navigationAid}\n horizontalToolbar={horizontalToolbar}\n verticalToolbar={verticalToolbar}\n {...otherProps}\n onMouseEnter={UiFramework.visibility.handleWidgetMouseEnter}\n />\n </WidgetOpacityContext.Provider>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/appui-react",
3
- "version": "4.16.0",
3
+ "version": "4.16.1",
4
4
  "description": "UI framework",
5
5
  "main": "lib/cjs/appui-react.js",
6
6
  "module": "lib/esm/appui-react.js",
@@ -23,15 +23,15 @@
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@itwin/appui-abstract": "^3.7.0 || ^4.0.0",
26
- "@itwin/components-react": "^4.16.0",
26
+ "@itwin/components-react": "^4.16.1",
27
27
  "@itwin/core-bentley": "^3.7.0 || ^4.0.0",
28
28
  "@itwin/core-common": "^3.7.0 || ^4.0.0",
29
29
  "@itwin/core-frontend": "^3.7.0 || ^4.0.0",
30
30
  "@itwin/core-geometry": "^3.7.0 || ^4.0.0",
31
31
  "@itwin/core-quantity": "^3.7.0 || ^4.0.0",
32
- "@itwin/core-react": "^4.16.0",
32
+ "@itwin/core-react": "^4.16.1",
33
33
  "@itwin/core-telemetry": "^3.7.0 || ^4.0.0",
34
- "@itwin/imodel-components-react": "^4.16.0",
34
+ "@itwin/imodel-components-react": "^4.16.1",
35
35
  "react": "^17.0.0 || ^18.0.0",
36
36
  "react-dom": "^17.0.0 || ^18.0.0",
37
37
  "react-redux": "^7.2.2",
@@ -85,9 +85,9 @@
85
85
  "typescript": "~5.3.3",
86
86
  "upath": "^2.0.1",
87
87
  "vitest": "^1.6.0",
88
- "@itwin/components-react": "4.16.0",
89
- "@itwin/imodel-components-react": "4.16.0",
90
- "@itwin/core-react": "4.16.0"
88
+ "@itwin/components-react": "4.16.1",
89
+ "@itwin/imodel-components-react": "4.16.1",
90
+ "@itwin/core-react": "4.16.1"
91
91
  },
92
92
  "//dependencies": [
93
93
  "NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API",