@itwin/imodel-components-react 5.27.0 → 5.28.0

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,5 +1,22 @@
1
1
  # Change Log - @itwin/imodel-components-react
2
2
 
3
+ ## 5.28.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [3585ac3]
8
+ - Updated dependencies [6962fcf]
9
+ - @itwin/components-react@5.28.0
10
+ - @itwin/core-react@5.28.0
11
+
12
+ ## 5.27.1
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [47cf43f]
17
+ - @itwin/core-react@5.27.1
18
+ - @itwin/components-react@5.27.1
19
+
3
20
  ## 5.27.0
4
21
 
5
22
  ### Patch Changes
@@ -450,7 +450,7 @@ export class DrawingNavigationAid extends React.Component {
450
450
  };
451
451
  /** @internal */
452
452
  static getDefaultOpenedMapSize = (paddingX = 0, paddingY = 0) => {
453
- return Vector3d.create(window.innerWidth / 3 - 2 * (window.innerWidth - paddingX), window.innerHeight / 3 - 2 * paddingY);
453
+ return Vector3d.create(Math.abs(window.innerWidth / 3 - 2 * (window.innerWidth - paddingX)), Math.abs(window.innerHeight / 3 - 2 * paddingY));
454
454
  };
455
455
  _getClosedMapSize = () => {
456
456
  if (this.props.closeSize === undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingNavigationAid.js","sourceRoot":"","sources":["../../../src/imodel-components-react/navigationaids/DrawingNavigationAid.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 NavigationAids\n */\n\nimport \"./DrawingNavigationAid.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Key } from \"ts-key-enum\";\nimport {\n Constant,\n Geometry,\n Matrix3d,\n Point2d,\n Point3d,\n Point4d,\n Vector3d,\n} from \"@itwin/core-geometry\";\nimport type {\n IModelConnection,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Icon } from \"@itwin/core-react\";\nimport { UiIModelComponents } from \"../UiIModelComponents.js\";\nimport { ViewportComponentEvents } from \"../viewport/ViewportComponentEvents.js\";\nimport {\n SvgAdd,\n SvgRemove,\n SvgRotateLeft,\n SvgSortUp,\n} from \"@itwin/itwinui-icons-react\";\n\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\n/**\n * Enum for mode that minimap is currently in\n * @internal\n */\nexport enum MapMode {\n Opened = \"map-opened\",\n Closed = \"map-closed\",\n}\n\n/** Properties for the [[DrawingNavigationAid]] component\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface DrawingNavigationAidProps extends CommonProps {\n iModelConnection: IModelConnection;\n viewport?: Viewport;\n\n // used only in testing\n\n /** @internal */\n animationTime?: number;\n /** @internal */\n openSize?: Vector3d;\n /** @internal */\n closeSize?: Vector3d;\n /** @internal */\n initialMapMode?: MapMode;\n /** @internal */\n onAnimationEnd?: () => void;\n /** @internal */\n initialRotateMinimapWithView?: boolean;\n /** @internal */\n initialView?: ViewState;\n /** @internal */\n viewManagerOverride?: ViewManager;\n /** @internal */\n screenViewportOverride?: typeof ScreenViewport;\n}\n\n/** @internal */\ninterface DrawingNavigationAidState {\n startOrigin: Point3d;\n origin: Point3d;\n extents: Vector3d;\n startRotation: Matrix3d;\n rotation: Matrix3d;\n\n startMapOrigin: Point3d;\n mapOrigin: Point3d;\n startMapExtents: Vector3d;\n mapExtents: Vector3d;\n\n mouseStart: Point2d;\n panningDirection: Vector3d;\n startDrawingZoom: number;\n drawingZoom: number;\n\n mode: MapMode;\n animation: number;\n\n isMoving: boolean;\n isPanning: boolean;\n\n viewId: string;\n view: ViewState | undefined;\n\n rotateMinimapWithView: boolean;\n}\n\n/** A Drawing Navigation Aid.\n * @public\n */\nexport class DrawingNavigationAid extends React.Component<\n DrawingNavigationAidProps,\n DrawingNavigationAidState\n> {\n private _rootElement = React.createRef<HTMLDivElement>();\n private _viewContainerElement = React.createRef<HTMLDivElement>();\n private _viewElement = React.createRef<HTMLDivElement>();\n private _rootOffset: DOMRect = DOMRect.fromRect({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n private _viewport: Viewport | undefined;\n private _animationFrame: any;\n private _mounted: boolean = false;\n\n public override readonly state: Readonly<DrawingNavigationAidState>;\n\n constructor(props: DrawingNavigationAidProps) {\n super(props);\n const mode = props.initialMapMode || MapMode.Closed;\n const mapExtents =\n mode === MapMode.Closed\n ? this._getClosedMapSize()\n : this._getOpenedMapSize();\n const startMapExtents = mapExtents;\n\n this.state = {\n startOrigin: Point3d.createZero(),\n origin: Point3d.createZero(),\n extents: Vector3d.create(1, 1, 1),\n startRotation: Matrix3d.createIdentity(),\n rotation: Matrix3d.createIdentity(),\n\n startMapOrigin: Point3d.createZero(),\n mapOrigin: Point3d.createZero(),\n startMapExtents,\n mapExtents,\n\n mouseStart: Point2d.createZero(),\n panningDirection: Vector3d.createZero(),\n startDrawingZoom: 1.0,\n drawingZoom: 1.0,\n\n mode,\n animation: 1.0,\n\n viewId: props.initialView !== undefined ? props.initialView.id : \"\",\n view: props.initialView,\n\n isMoving: false,\n isPanning: false,\n rotateMinimapWithView:\n props.initialRotateMinimapWithView !== undefined\n ? props.initialRotateMinimapWithView\n : false,\n };\n }\n\n public override render(): React.ReactNode {\n const {\n startOrigin,\n origin,\n extents,\n startRotation,\n rotation,\n startMapOrigin,\n mapOrigin,\n startMapExtents,\n mapExtents,\n startDrawingZoom,\n drawingZoom,\n animation,\n viewId,\n mode,\n rotateMinimapWithView,\n } = this.state;\n\n const a = DrawingNavigationAid._animationFn(animation);\n const rot = Matrix3d.createFromQuaternion(\n Point4d.interpolateQuaternions(\n startRotation.toQuaternion(),\n a,\n rotation.toQuaternion()\n )\n );\n const or = startOrigin.interpolate(a, origin);\n const map = startMapOrigin.interpolate(a, mapOrigin);\n const sz = startMapExtents.interpolate(a, mapExtents);\n const dz = Geometry.interpolate(startDrawingZoom, a, drawingZoom);\n\n const rootStyle: React.CSSProperties = {\n width: sz.x,\n height: sz.y,\n ...this.props.style,\n };\n const is3D = this._isViewport3D();\n\n const tOr =\n rotateMinimapWithView || is3D\n ? rotation.multiplyVector(Vector3d.createFrom(or))\n : Vector3d.createFrom(or);\n const tMap =\n rotateMinimapWithView || is3D\n ? rotation.multiplyVector(Vector3d.createFrom(map))\n : Vector3d.createFrom(map);\n\n const tPosX = (tOr.x - extents.x / 2 - tMap.x) * dz + sz.x / 2;\n const tPosY = (-tOr.y - extents.y / 2 + tMap.y) * dz + sz.y / 2;\n const viewWindowStyle = {\n transform: `translate(${tPosX}px, ${tPosY}px)`,\n height: extents.y * dz,\n width: extents.x * dz,\n };\n if (!rotateMinimapWithView && !is3D)\n viewWindowStyle.transform =\n \"matrix3d(\" +\n `${rot.at(0, 0)}, ${rot.at(1, 0)}, ${rot.at(2, 0)}, 0, ` +\n `${rot.at(0, 1)}, ${rot.at(1, 1)}, ${rot.at(2, 1)}, 0, ` +\n `${rot.at(0, 2)}, ${rot.at(1, 2)}, ${rot.at(2, 2)}, 0, ` +\n `${tPosX}, ${tPosY}, 0, 1)`;\n const isAnimating =\n animation !== 1 && !startMapExtents.isExactEqual(mapExtents);\n if (mode === MapMode.Opened || isAnimating) {\n rootStyle.position = \"fixed\";\n rootStyle.right = window.innerWidth - this._rootOffset.right;\n rootStyle.top = this._rootOffset.top;\n }\n\n const halfExtents = extents.scale(0.5);\n const offset =\n rotateMinimapWithView || is3D\n ? Vector3d.createZero()\n : rotation.multiplyTransposeVector(halfExtents).minus(halfExtents);\n\n const e = sz.scale(1 / dz);\n const halfMapExtents = e.scale(0.5);\n const mapOffset =\n rotateMinimapWithView || is3D\n ? rotation.multiplyTransposeVector(halfMapExtents)\n : halfMapExtents;\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n const screenViewport = this.props.screenViewportOverride\n ? this.props.screenViewportOverride\n : ScreenViewport;\n const nodes = (\n <div\n className={classnames(\n \"components-drawing-navigation-aid\",\n this.props.className\n )}\n data-testid=\"components-drawing-navigation-aid\"\n ref={this._rootElement}\n onWheel={this._handleWheel}\n onMouseDown={this._handleDrawingMouseDown}\n style={rootStyle}\n role=\"presentation\"\n >\n <DrawingNavigationCanvas\n view={this.state.view}\n viewManagerOverride={viewManager}\n screenViewportOverride={screenViewport}\n viewId={viewId}\n origin={map.plus(offset).minus(mapOffset)}\n extents={e}\n zoom={dz}\n rotation={\n rotateMinimapWithView || is3D ? rotation : Matrix3d.createIdentity()\n }\n />\n <div\n className=\"drawing-container\"\n data-testid=\"drawing-container\"\n ref={this._viewContainerElement}\n >\n <div\n className=\"drawing-view-window\"\n data-testid=\"drawing-view-window\"\n onMouseDown={this._handleWindowMouseDown}\n onTouchStart={this._handleWindowTouchStart}\n style={viewWindowStyle}\n ref={this._viewElement}\n role=\"presentation\"\n />\n {!is3D && (\n <div\n className={classnames(\"toggle-rotate-style\", \"icon\", {\n checked: rotateMinimapWithView,\n })}\n data-testid=\"toggle-rotate-style\"\n style={\n mode === MapMode.Closed && !isAnimating\n ? { bottom: 2, left: 2 }\n : {}\n }\n title={UiIModelComponents.translate(\"drawing.rotateStyle\")}\n onClick={this._toggleRotationMode}\n role=\"presentation\"\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgRotateLeft />} />\n </div>\n )}\n {!rot.isIdentity && (\n <div\n className=\"unrotate-button\"\n data-testid=\"drawing-unrotate-button\"\n style={mode === MapMode.Closed && !isAnimating ? { top: 2 } : {}}\n onClick={this._handleUnrotate}\n role=\"button\"\n tabIndex={-1}\n >\n {UiIModelComponents.translate(\"drawing.unrotate\")}\n </div>\n )}\n {mode === MapMode.Opened && !isAnimating && (\n <>\n <div\n className=\"close\"\n data-testid=\"drawing-close-button\"\n onClick={this._closeLargeMap}\n role=\"button\"\n tabIndex={-1}\n >\n <div className=\"close-icon icon\">\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgSortUp />} />\n </div>\n </div>\n <div className=\"zoom\">\n <div\n className=\"zoom-button icon\"\n data-testid=\"drawing-zoom-in-button\"\n onClick={this._handleZoomIn}\n role=\"button\"\n tabIndex={-1}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgAdd />} />\n </div>\n <div\n className=\"zoom-button icon\"\n data-testid=\"drawing-zoom-out-button\"\n onClick={this._handleZoomOut}\n role=\"button\"\n tabIndex={-1}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgRemove />} />\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n );\n if (\n mode === MapMode.Closed &&\n (animation === 1.0 || startMapExtents.isExactEqual(mapExtents))\n ) {\n return nodes;\n } else {\n let drawingPortal = document.querySelector(\"#components-drawing-portal\");\n if (!drawingPortal) {\n drawingPortal = document.createElement(\"div\");\n drawingPortal.id = \"components-drawing-portal\";\n document.body.appendChild(drawingPortal);\n }\n return ReactDOM.createPortal(nodes, drawingPortal);\n }\n }\n\n private _isViewport3D = () => {\n return this.state.view !== undefined && this.state.view.is3d();\n };\n\n private _lastTime: number | undefined;\n\n private static _animationFn = (t: number) =>\n t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t;\n\n private _animation = () => {\n const t = Date.now();\n const delta = this._lastTime ? t - this._lastTime : 16;\n this._lastTime = t;\n if (this.state.animation !== 1) {\n const animation = Math.min(\n 1,\n this.state.animation +\n delta / (1000 * (this.props.animationTime || 0.4))\n );\n this._updateFrustum();\n\n if (this._mounted) {\n this.setState({ animation }, () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n });\n }\n } else {\n this._lastTime = undefined;\n this._animationEnd();\n }\n };\n\n private _animationEnd = () => {\n const hasViewportMoved =\n !this.state.origin.isAlmostEqual(this.state.startOrigin) ||\n !this.state.rotation.isAlmostEqual(this.state.startRotation);\n const startMapOrigin = Point3d.createFrom(this.state.mapOrigin);\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\n const startDrawingZoom = this.state.drawingZoom;\n const startOrigin = this.state.origin;\n const startRotation = this.state.rotation;\n if (this._mounted) {\n this.setState(\n {\n startMapOrigin,\n startDrawingZoom,\n startOrigin,\n startRotation,\n startMapExtents,\n },\n () => {\n if (this.props.onAnimationEnd) this.props.onAnimationEnd();\n if (hasViewportMoved) this._updateFrustum(true);\n }\n );\n }\n };\n\n private _lastPanTime: number | undefined;\n\n private _panAnimation = () => {\n const t = Date.now();\n if (this._lastPanTime === undefined) this._lastPanTime = t - 16.667;\n const delta = t - this._lastPanTime;\n this._lastPanTime = t;\n if (!this.state.panningDirection.isAlmostZero && this.state.isMoving) {\n const { panningDirection } = this.state;\n const offset = panningDirection.scale(\n delta / 1000 / this.state.drawingZoom\n );\n const mapOrigin = this.state.mapOrigin.plus(offset);\n\n const origin = this.state.origin.plus(offset);\n this._updateFrustum();\n if (this._mounted) {\n this.setState({ mapOrigin, origin, panningDirection }, () => {\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\n });\n }\n } else {\n this._lastPanTime = undefined;\n this._updateFrustum(true);\n }\n };\n\n public override componentDidMount() {\n this._mounted = true;\n ViewportComponentEvents.onViewRotationChangeEvent.addListener(\n this._handleViewRotationChangeEvent\n );\n window.addEventListener(\"mousedown\", this._handleMouseDown as any);\n window.addEventListener(\"mouseup\", this._handleMouseDragEnd as any);\n window.addEventListener(\"mousemove\", this._handleMouseDrag as any);\n window.addEventListener(\"keyup\", this._handleKeyUp as any);\n }\n\n public override componentWillUnmount() {\n ViewportComponentEvents.onViewRotationChangeEvent.removeListener(\n this._handleViewRotationChangeEvent\n );\n window.removeEventListener(\"mousedown\", this._handleMouseDown as any);\n window.removeEventListener(\"mouseup\", this._handleMouseDragEnd as any);\n window.removeEventListener(\"mousemove\", this._handleMouseDrag as any);\n window.removeEventListener(\"keyup\", this._handleKeyUp as any);\n clearTimeout(this._animationFrame);\n if (this.props.onAnimationEnd) this.props.onAnimationEnd();\n\n const rt = document.getElementById(\n \"components-drawing-portal\"\n ) as HTMLDivElement;\n if (rt && rt.parentElement !== null && rt.children.length === 0) {\n rt.parentElement.removeChild(rt);\n }\n this._mounted = false;\n }\n\n // Synchronize with rotation coming from the Viewport\n private _handleViewRotationChangeEvent: ListenerType<\n typeof ViewportComponentEvents.onViewRotationChangeEvent\n > = (args) => {\n if (\n !this.state.isMoving &&\n !this.state.isPanning &&\n this.props.viewport === args.viewport\n ) {\n const extents = args.viewport.view.getExtents().clone();\n const rotation = args.viewport.view.getRotation().clone();\n const halfExtents = extents.scale(0.5);\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? rotation.multiplyTransposeVector(halfExtents)\n : halfExtents;\n const origin = args.viewport.view.getOrigin().plus(offset);\n const deltaZoom =\n (this.state.extents.x - extents.x) / this.state.extents.x;\n let drawingZoom = this.state.drawingZoom / (1 - deltaZoom);\n const deltaOrigin = origin.minus(this.state.origin);\n let mapOrigin = this.state.mapOrigin.plus(deltaOrigin);\n mapOrigin = mapOrigin.plus(\n Vector3d.createFrom(origin.minus(mapOrigin)).scale(deltaZoom)\n );\n if (this.state.viewId !== args.viewport.view.id) {\n const rect =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? extents\n : DrawingNavigationAid.findRotatedWindowDimensions(\n extents,\n rotation\n );\n const maxRectDim = Math.max(rect.y, rect.x);\n const maxExtentDim = Math.max(\n this.state.mapExtents.x,\n this.state.mapExtents.y\n );\n drawingZoom = maxExtentDim / (3 * maxRectDim);\n mapOrigin = origin.clone();\n this._viewport = args.viewport;\n this.setState({\n viewId: args.viewport.view.id,\n view: args.viewport.view.clone(),\n });\n }\n if (this._mounted) {\n this.setState({\n startOrigin: origin,\n origin,\n extents,\n startRotation: rotation,\n rotation,\n startMapOrigin: mapOrigin,\n mapOrigin,\n startDrawingZoom: drawingZoom,\n drawingZoom,\n });\n }\n }\n };\n\n private _updateFrustum = (complete: boolean = false) => {\n const halfExtents = this.state.extents.scale(0.5);\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.rotation.multiplyTransposeVector(halfExtents)\n : halfExtents;\n const origin = this.state.origin.minus(offset);\n ViewportComponentEvents.setDrawingViewportState(\n origin,\n this.state.rotation,\n complete\n );\n };\n\n private _toggleRotationMode = () => {\n const rotateMinimapWithView = !this.state.rotateMinimapWithView;\n this.setState({ rotateMinimapWithView }, () => {\n if (this._viewport)\n this._handleViewRotationChangeEvent({ viewport: this._viewport });\n });\n };\n\n private _handleKeyUp = (event: React.KeyboardEvent) => {\n if (\n event.key === Key.Escape.valueOf() &&\n this.state.mode === MapMode.Opened\n ) {\n this._closeLargeMap();\n }\n };\n\n private _lastClientXY: Point2d = Point2d.createZero();\n\n private _processWindowDrag(movement: Point2d) {\n const vect = Vector3d.create(\n movement.x / this.state.drawingZoom,\n -movement.y / this.state.drawingZoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const origin = this.state.origin.plus(offset);\n const panningDirection = this._getPanVector();\n const wasAlmostZero = this.state.panningDirection.isAlmostZero;\n this.setState(\n { startOrigin: origin, origin, panningDirection, isPanning: false },\n () => {\n this._updateFrustum();\n if (wasAlmostZero && !this.state.panningDirection.isAlmostZero) {\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\n }\n }\n );\n }\n\n private _processWindowEndDrag() {\n this.setState({ isMoving: false });\n this._updateFrustum(true);\n if (this.state.mode === MapMode.Closed) {\n setTimeout(() => {\n const startMapOrigin = this.state.mapOrigin;\n const mapOrigin = this.state.origin.clone();\n if (this._mounted) {\n this.setState({ startMapOrigin, mapOrigin, animation: 0 }, () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n });\n }\n }, 0);\n }\n }\n\n private _handleMouseDown = (event: React.MouseEvent) => {\n // Used only to determine if mouse was moved between mousedown and mouseup\n const mouseStart = Point2d.create(event.clientX, event.clientY);\n this.setState({ mouseStart });\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\n };\n\n private _handleDrawingMouseDown = (event: React.MouseEvent) => {\n if (this.state.mode === MapMode.Opened) {\n event.preventDefault();\n this.setState({ isPanning: true });\n }\n };\n\n private _handleWindowMouseDown = (event: React.MouseEvent) => {\n event.preventDefault();\n this.setState({ isMoving: true });\n };\n\n private _handleMouseDrag = (event: React.MouseEvent) => {\n const mouse = Point2d.create(event.clientX, event.clientY);\n const movement = mouse.minus(this._lastClientXY);\n if (this.state.isMoving) {\n // add scaled mouse movement\n this._processWindowDrag(movement);\n } else {\n if (this.state.isPanning && this.state.mode === MapMode.Opened) {\n const vect = Vector3d.create(\n movement.x / this.state.drawingZoom,\n -movement.y / this.state.drawingZoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const mapOrigin = this.state.mapOrigin.minus(offset);\n this.setState({ startMapOrigin: mapOrigin, mapOrigin });\n }\n }\n this._lastClientXY = mouse;\n };\n\n private _handleMouseDragEnd = (event: React.MouseEvent) => {\n const mouse = Point2d.create(event.clientX, event.clientY);\n if (\n mouse.isAlmostEqual(this.state.mouseStart) &&\n this.state.mode === MapMode.Closed &&\n (event.target === this._viewContainerElement.current ||\n event.target === this._viewElement.current)\n ) {\n this._openLargeMap();\n } else if (this.state.isMoving) {\n this._processWindowEndDrag();\n } else if (this.state.isPanning) {\n if (this.state.mode === MapMode.Opened) {\n event.stopPropagation();\n this.setState({ isPanning: false });\n }\n } else if (\n (!(event.target instanceof Node) ||\n (this._rootElement.current &&\n !this._rootElement.current.contains(event.target))) &&\n mouse.isAlmostEqual(this.state.mouseStart)\n ) {\n this._closeLargeMap();\n }\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\n };\n\n private _handleWindowTouchStart = (event: any) => {\n if (1 !== event.targetTouches.length) return;\n window.addEventListener(\"touchmove\", this._onTouchMove, false);\n window.addEventListener(\"touchend\", this._onTouchEnd, false);\n const mouseStart = Point2d.create(\n event.targetTouches[0].clientX,\n event.targetTouches[0].clientY\n );\n this.setState({ mouseStart });\n this._lastClientXY = mouseStart.clone();\n this.setState({ isMoving: true });\n };\n\n private _onTouchMove = (event: TouchEvent) => {\n if (1 !== event.targetTouches.length) return;\n const mouse = Point2d.create(\n event.targetTouches[0].clientX,\n event.targetTouches[0].clientY\n );\n const movement = mouse.minus(this._lastClientXY);\n // add scaled mouse movement\n this._processWindowDrag(movement);\n this._lastClientXY = mouse;\n };\n\n private _onTouchEnd = (event: TouchEvent) => {\n if (0 !== event.targetTouches.length) return;\n this._processWindowEndDrag();\n if (0 !== event.changedTouches.length)\n this._lastClientXY = Point2d.create(\n event.changedTouches[0].clientX,\n event.changedTouches[0].clientY\n ); // Doesn't seem necessary...but _handleMouseDragEnd sets it...\n window.removeEventListener(\"touchmove\", this._onTouchMove);\n window.removeEventListener(\"touchend\", this._onTouchEnd);\n };\n\n /** @internal */\n public static getDefaultClosedMapSize = (): Vector3d => {\n return Vector3d.create(96, 96);\n };\n\n /** @internal */\n public static getDefaultOpenedMapSize = (\n paddingX: number = 0,\n paddingY: number = 0\n ): Vector3d => {\n return Vector3d.create(\n window.innerWidth / 3 - 2 * (window.innerWidth - paddingX),\n window.innerHeight / 3 - 2 * paddingY\n );\n };\n\n private _getClosedMapSize = (): Vector3d => {\n if (this.props.closeSize === undefined)\n return DrawingNavigationAid.getDefaultClosedMapSize();\n return this.props.closeSize;\n };\n\n private _getOpenedMapSize = (): Vector3d => {\n if (this.props.openSize === undefined)\n return DrawingNavigationAid.getDefaultOpenedMapSize(\n this._rootOffset.right,\n this._rootOffset.top\n );\n return this.props.openSize;\n };\n\n private _openLargeMap = () => {\n if (this.state.mode === MapMode.Closed && this.state.animation === 1.0) {\n if (this._rootElement.current) {\n const rect = this._rootElement.current.getBoundingClientRect();\n this._rootOffset = rect;\n }\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\n const mapExtents = this._getOpenedMapSize();\n this.setState(\n {\n mode: MapMode.Opened,\n isMoving: false,\n isPanning: false,\n mapExtents,\n startMapExtents,\n animation: 0,\n },\n () => {\n this._animationFrame = setTimeout(this._animation);\n }\n );\n }\n };\n\n private _closeLargeMap = () => {\n if (this.state.mode === MapMode.Opened && this.state.animation === 1.0) {\n const startMapOrigin = this.state.mapOrigin;\n const mapOrigin = this.state.origin.clone();\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\n const mapExtents = this._getClosedMapSize();\n const rect =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.extents\n : DrawingNavigationAid.findRotatedWindowDimensions(\n this.state.extents,\n this.state.rotation\n );\n const maxRectDim = Math.max(rect.y, rect.x);\n const maxExtentDim = Math.max(mapExtents.x, mapExtents.y);\n const drawingZoom = maxExtentDim / (3 * maxRectDim);\n const startDrawingZoom = this.state.drawingZoom;\n this.setState(\n {\n mode: MapMode.Closed,\n startMapOrigin,\n mapOrigin,\n startDrawingZoom,\n drawingZoom,\n isMoving: false,\n isPanning: false,\n startMapExtents,\n mapExtents,\n panningDirection: Vector3d.createZero(),\n animation: 0,\n },\n () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n }\n );\n }\n };\n\n private _getPanVector = () => {\n const is3D = this._isViewport3D();\n const rect =\n this.state.rotateMinimapWithView || is3D\n ? this.state.extents\n : DrawingNavigationAid.findRotatedWindowDimensions(\n this.state.extents,\n this.state.rotation\n );\n\n const mapExtents = this.state.mapExtents.scale(1 / this.state.drawingZoom);\n\n const maxMagnitude = 80; // maximum acceleration\n const magnitudeTravel = 30; // How far, in pixels, that magnitude increases from 0 to max acceleration\n\n const diff = Vector3d.createFrom(\n this.state.origin.minus(this.state.mapOrigin)\n );\n const diffVector =\n this.state.rotateMinimapWithView || is3D\n ? this.state.rotation.multiplyVector(diff)\n : diff;\n\n // capture any values\n const magnitudeVector = Vector3d.create(\n Math.max(0, Math.abs(diffVector.x) - (mapExtents.x - rect.x) / 2),\n Math.max(0, Math.abs(diffVector.y) - (mapExtents.y - rect.y) / 2)\n );\n if (magnitudeVector.isAlmostZero) return Vector3d.createZero();\n const magnitude =\n (Math.min(\n magnitudeVector.magnitude() * this.state.drawingZoom,\n magnitudeTravel\n ) /\n magnitudeTravel) *\n maxMagnitude;\n\n const vect = Vector3d.createFrom(\n this.state.origin.minus(this.state.mapOrigin)\n ); // vect will never be zero or magnitude would also be zero\n const norm = vect.normalize();\n return norm!.scale(magnitude); // norm is only undefined when vect is zero, in which it would have returned at magnitudeVector.isAlmostZero\n };\n\n private _handleWheel = (event: React.WheelEvent) => {\n if (this.state.mode === MapMode.Opened && this.state.animation === 1) {\n const { mapOrigin, drawingZoom } = this.state;\n const mapSize = this._getOpenedMapSize();\n\n const mouseX = event.clientX - this._rootOffset.right + mapSize.x / 2;\n const mouseY = event.clientY - this._rootOffset.top - mapSize.y / 2;\n const is3D = this._isViewport3D();\n if (event.deltaY < 0) {\n const zoom = drawingZoom * 1.1;\n const vect = Vector3d.create(\n (mouseX * 0.1) / zoom,\n (-mouseY * 0.1) / zoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || is3D\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const m = mapOrigin.plus(offset);\n this.setState({ mapOrigin: m, drawingZoom: zoom });\n }\n if (event.deltaY > 0) {\n const zoom = drawingZoom / 1.1;\n const vect = Vector3d.create(\n (mouseX * 0.1) / drawingZoom,\n (-mouseY * 0.1) / drawingZoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || is3D\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const m = mapOrigin.minus(offset);\n this.setState({ mapOrigin: m, drawingZoom: zoom });\n }\n }\n };\n\n private _handleZoomIn = () => {\n const zoom = this.state.drawingZoom * 1.4;\n this.setState({ drawingZoom: zoom });\n };\n\n private _handleZoomOut = () => {\n const zoom = this.state.drawingZoom / 1.4;\n this.setState({ drawingZoom: zoom });\n };\n\n private _handleUnrotate = () => {\n const startRotation = this.state.rotation;\n const halfExtents = this.state.extents.scale(0.5);\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? Vector3d.createZero()\n : this.state.rotation\n .multiplyTransposeVector(halfExtents)\n .minus(halfExtents);\n const startOrigin = this.state.origin;\n const origin = this.state.origin.plus(offset);\n const startMapOrigin = this.state.mapOrigin;\n const mapOrigin = this.state.mapOrigin.plus(offset);\n this.setState(\n {\n animation: 0,\n startOrigin,\n origin,\n startMapOrigin,\n mapOrigin,\n startRotation,\n rotation: Matrix3d.createIdentity(),\n },\n () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n }\n );\n };\n\n /** @internal */\n public static findRotatedWindowDimensions = (\n extents: Vector3d,\n rotation: Matrix3d\n ) => {\n const cos = rotation.at(0, 0);\n const sin = rotation.at(1, 0);\n // extents.x/y should be divided in half, but we don't have to do that immediately.\n const cosWidth = cos * extents.x;\n const sinHeight = sin * extents.y;\n\n const sinWidth = cos * extents.x;\n const cosHeight = sin * extents.y;\n\n const a = Math.atan2(sin, cos);\n\n if (a % Math.PI >= 0 && a % Math.PI < Math.PI / 2) {\n const y1 = -cosHeight - sinWidth;\n const x2 = cosWidth + sinHeight;\n const y3 = cosHeight + sinWidth;\n const x4 = -cosWidth - sinHeight;\n // Instead, divide total difference\n return Vector3d.create(Math.abs(x2 - x4) / 2, Math.abs(y1 - y3) / 2);\n } else {\n const x1 = -cosWidth + sinHeight;\n const y2 = -cosHeight + sinWidth;\n const x3 = cosWidth - sinHeight;\n const y4 = cosHeight - sinWidth;\n return Vector3d.create(Math.abs(x1 - x3) / 2, Math.abs(y2 - y4) / 2);\n }\n };\n}\n\n/** @internal */\nexport interface DrawingNavigationCanvasProps {\n view: ViewState | undefined;\n viewId?: string;\n origin: Point3d;\n extents: Vector3d;\n zoom: number;\n rotation: Matrix3d;\n viewManagerOverride?: ViewManager;\n screenViewportOverride?: typeof ScreenViewport;\n canvasSizeOverride?: boolean;\n}\n\n/** @internal */\nexport class DrawingNavigationCanvas extends React.Component<DrawingNavigationCanvasProps> {\n private _canvasElement = React.createRef<HTMLDivElement>();\n private _vp?: ScreenViewport;\n\n public override render(): React.ReactNode {\n return (\n <div\n className=\"drawing-canvas\"\n data-testid=\"drawing-canvas\"\n ref={this._canvasElement}\n ></div>\n );\n }\n\n public override componentDidMount() {\n if (this._canvasElement.current && this.props.view !== undefined) {\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n\n const screenViewport = this.props.screenViewportOverride\n ? this.props.screenViewportOverride\n : ScreenViewport;\n const previousView = viewManager.selectedView;\n this._vp = screenViewport.create(\n this._canvasElement.current,\n this.props.view\n );\n this.customizeViewport(this._vp);\n viewManager.addViewport(this._vp);\n void viewManager.setSelectedView(previousView); // switch to original viewport\n this._update();\n }\n }\n\n private customizeViewport(vp: ScreenViewport): void {\n if (vp.logo.style) vp.logo.style.display = \"none\";\n\n if (vp.viewFlags.acsTriad)\n vp.viewFlags = vp.viewFlags.with(\"acsTriad\", false);\n }\n\n private _update = () => {\n if (this._vp) {\n const max = Math.max(this.props.extents.x, this.props.extents.y);\n this._vp.view.extentLimits = { max, min: Constant.oneMillimeter };\n this._vp.view.setOrigin(this.props.origin);\n this._vp.view.setRotation(this.props.rotation);\n this._vp.view.setExtents(this.props.extents);\n this._vp.applyViewState(this._vp.view);\n }\n };\n\n public override componentDidUpdate(oldProps: DrawingNavigationCanvasProps) {\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n if (this.props.view !== undefined) {\n if (oldProps.view !== this.props.view) {\n const screenViewport = this.props.screenViewportOverride\n ? this.props.screenViewportOverride\n : ScreenViewport;\n if (\n oldProps !== undefined &&\n oldProps.viewId !== \"\" &&\n oldProps.viewId !== this.props.viewId &&\n this._vp\n ) {\n viewManager.dropViewport(this._vp, true);\n }\n if (\n this._canvasElement.current &&\n (this.props.canvasSizeOverride ||\n (this._canvasElement.current.clientWidth !== 0 &&\n this._canvasElement.current.clientHeight !== 0))\n ) {\n const previousView = viewManager.selectedView;\n this._vp = screenViewport.create(\n this._canvasElement.current,\n this.props.view.clone()\n );\n this.customizeViewport(this._vp);\n viewManager.addViewport(this._vp);\n void viewManager.setSelectedView(previousView); // switch to original viewport\n this._update();\n }\n } else if (\n !this.props.origin.isExactEqual(oldProps.origin) ||\n !this.props.extents.isExactEqual(oldProps.extents) ||\n this.props.zoom !== oldProps.zoom ||\n !this.props.rotation.isExactEqual(oldProps.rotation)\n ) {\n this._update();\n }\n }\n }\n\n public override componentWillUnmount() {\n if (this._vp) {\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n viewManager.dropViewport(this._vp, true);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"DrawingNavigationAid.js","sourceRoot":"","sources":["../../../src/imodel-components-react/navigationaids/DrawingNavigationAid.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 NavigationAids\n */\n\nimport \"./DrawingNavigationAid.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Key } from \"ts-key-enum\";\nimport {\n Constant,\n Geometry,\n Matrix3d,\n Point2d,\n Point3d,\n Point4d,\n Vector3d,\n} from \"@itwin/core-geometry\";\nimport type {\n IModelConnection,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type { ListenerType } from \"@itwin/core-react/internal\";\nimport { Icon } from \"@itwin/core-react\";\nimport { UiIModelComponents } from \"../UiIModelComponents.js\";\nimport { ViewportComponentEvents } from \"../viewport/ViewportComponentEvents.js\";\nimport {\n SvgAdd,\n SvgRemove,\n SvgRotateLeft,\n SvgSortUp,\n} from \"@itwin/itwinui-icons-react\";\n\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\n/**\n * Enum for mode that minimap is currently in\n * @internal\n */\nexport enum MapMode {\n Opened = \"map-opened\",\n Closed = \"map-closed\",\n}\n\n/** Properties for the [[DrawingNavigationAid]] component\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface DrawingNavigationAidProps extends CommonProps {\n iModelConnection: IModelConnection;\n viewport?: Viewport;\n\n // used only in testing\n\n /** @internal */\n animationTime?: number;\n /** @internal */\n openSize?: Vector3d;\n /** @internal */\n closeSize?: Vector3d;\n /** @internal */\n initialMapMode?: MapMode;\n /** @internal */\n onAnimationEnd?: () => void;\n /** @internal */\n initialRotateMinimapWithView?: boolean;\n /** @internal */\n initialView?: ViewState;\n /** @internal */\n viewManagerOverride?: ViewManager;\n /** @internal */\n screenViewportOverride?: typeof ScreenViewport;\n}\n\n/** @internal */\ninterface DrawingNavigationAidState {\n startOrigin: Point3d;\n origin: Point3d;\n extents: Vector3d;\n startRotation: Matrix3d;\n rotation: Matrix3d;\n\n startMapOrigin: Point3d;\n mapOrigin: Point3d;\n startMapExtents: Vector3d;\n mapExtents: Vector3d;\n\n mouseStart: Point2d;\n panningDirection: Vector3d;\n startDrawingZoom: number;\n drawingZoom: number;\n\n mode: MapMode;\n animation: number;\n\n isMoving: boolean;\n isPanning: boolean;\n\n viewId: string;\n view: ViewState | undefined;\n\n rotateMinimapWithView: boolean;\n}\n\n/** A Drawing Navigation Aid.\n * @public\n */\nexport class DrawingNavigationAid extends React.Component<\n DrawingNavigationAidProps,\n DrawingNavigationAidState\n> {\n private _rootElement = React.createRef<HTMLDivElement>();\n private _viewContainerElement = React.createRef<HTMLDivElement>();\n private _viewElement = React.createRef<HTMLDivElement>();\n private _rootOffset: DOMRect = DOMRect.fromRect({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n private _viewport: Viewport | undefined;\n private _animationFrame: any;\n private _mounted: boolean = false;\n\n public override readonly state: Readonly<DrawingNavigationAidState>;\n\n constructor(props: DrawingNavigationAidProps) {\n super(props);\n const mode = props.initialMapMode || MapMode.Closed;\n const mapExtents =\n mode === MapMode.Closed\n ? this._getClosedMapSize()\n : this._getOpenedMapSize();\n const startMapExtents = mapExtents;\n\n this.state = {\n startOrigin: Point3d.createZero(),\n origin: Point3d.createZero(),\n extents: Vector3d.create(1, 1, 1),\n startRotation: Matrix3d.createIdentity(),\n rotation: Matrix3d.createIdentity(),\n\n startMapOrigin: Point3d.createZero(),\n mapOrigin: Point3d.createZero(),\n startMapExtents,\n mapExtents,\n\n mouseStart: Point2d.createZero(),\n panningDirection: Vector3d.createZero(),\n startDrawingZoom: 1.0,\n drawingZoom: 1.0,\n\n mode,\n animation: 1.0,\n\n viewId: props.initialView !== undefined ? props.initialView.id : \"\",\n view: props.initialView,\n\n isMoving: false,\n isPanning: false,\n rotateMinimapWithView:\n props.initialRotateMinimapWithView !== undefined\n ? props.initialRotateMinimapWithView\n : false,\n };\n }\n\n public override render(): React.ReactNode {\n const {\n startOrigin,\n origin,\n extents,\n startRotation,\n rotation,\n startMapOrigin,\n mapOrigin,\n startMapExtents,\n mapExtents,\n startDrawingZoom,\n drawingZoom,\n animation,\n viewId,\n mode,\n rotateMinimapWithView,\n } = this.state;\n\n const a = DrawingNavigationAid._animationFn(animation);\n const rot = Matrix3d.createFromQuaternion(\n Point4d.interpolateQuaternions(\n startRotation.toQuaternion(),\n a,\n rotation.toQuaternion()\n )\n );\n const or = startOrigin.interpolate(a, origin);\n const map = startMapOrigin.interpolate(a, mapOrigin);\n const sz = startMapExtents.interpolate(a, mapExtents);\n const dz = Geometry.interpolate(startDrawingZoom, a, drawingZoom);\n\n const rootStyle: React.CSSProperties = {\n width: sz.x,\n height: sz.y,\n ...this.props.style,\n };\n const is3D = this._isViewport3D();\n\n const tOr =\n rotateMinimapWithView || is3D\n ? rotation.multiplyVector(Vector3d.createFrom(or))\n : Vector3d.createFrom(or);\n const tMap =\n rotateMinimapWithView || is3D\n ? rotation.multiplyVector(Vector3d.createFrom(map))\n : Vector3d.createFrom(map);\n\n const tPosX = (tOr.x - extents.x / 2 - tMap.x) * dz + sz.x / 2;\n const tPosY = (-tOr.y - extents.y / 2 + tMap.y) * dz + sz.y / 2;\n const viewWindowStyle = {\n transform: `translate(${tPosX}px, ${tPosY}px)`,\n height: extents.y * dz,\n width: extents.x * dz,\n };\n if (!rotateMinimapWithView && !is3D)\n viewWindowStyle.transform =\n \"matrix3d(\" +\n `${rot.at(0, 0)}, ${rot.at(1, 0)}, ${rot.at(2, 0)}, 0, ` +\n `${rot.at(0, 1)}, ${rot.at(1, 1)}, ${rot.at(2, 1)}, 0, ` +\n `${rot.at(0, 2)}, ${rot.at(1, 2)}, ${rot.at(2, 2)}, 0, ` +\n `${tPosX}, ${tPosY}, 0, 1)`;\n const isAnimating =\n animation !== 1 && !startMapExtents.isExactEqual(mapExtents);\n if (mode === MapMode.Opened || isAnimating) {\n rootStyle.position = \"fixed\";\n rootStyle.right = window.innerWidth - this._rootOffset.right;\n rootStyle.top = this._rootOffset.top;\n }\n\n const halfExtents = extents.scale(0.5);\n const offset =\n rotateMinimapWithView || is3D\n ? Vector3d.createZero()\n : rotation.multiplyTransposeVector(halfExtents).minus(halfExtents);\n\n const e = sz.scale(1 / dz);\n const halfMapExtents = e.scale(0.5);\n const mapOffset =\n rotateMinimapWithView || is3D\n ? rotation.multiplyTransposeVector(halfMapExtents)\n : halfMapExtents;\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n const screenViewport = this.props.screenViewportOverride\n ? this.props.screenViewportOverride\n : ScreenViewport;\n const nodes = (\n <div\n className={classnames(\n \"components-drawing-navigation-aid\",\n this.props.className\n )}\n data-testid=\"components-drawing-navigation-aid\"\n ref={this._rootElement}\n onWheel={this._handleWheel}\n onMouseDown={this._handleDrawingMouseDown}\n style={rootStyle}\n role=\"presentation\"\n >\n <DrawingNavigationCanvas\n view={this.state.view}\n viewManagerOverride={viewManager}\n screenViewportOverride={screenViewport}\n viewId={viewId}\n origin={map.plus(offset).minus(mapOffset)}\n extents={e}\n zoom={dz}\n rotation={\n rotateMinimapWithView || is3D ? rotation : Matrix3d.createIdentity()\n }\n />\n <div\n className=\"drawing-container\"\n data-testid=\"drawing-container\"\n ref={this._viewContainerElement}\n >\n <div\n className=\"drawing-view-window\"\n data-testid=\"drawing-view-window\"\n onMouseDown={this._handleWindowMouseDown}\n onTouchStart={this._handleWindowTouchStart}\n style={viewWindowStyle}\n ref={this._viewElement}\n role=\"presentation\"\n />\n {!is3D && (\n <div\n className={classnames(\"toggle-rotate-style\", \"icon\", {\n checked: rotateMinimapWithView,\n })}\n data-testid=\"toggle-rotate-style\"\n style={\n mode === MapMode.Closed && !isAnimating\n ? { bottom: 2, left: 2 }\n : {}\n }\n title={UiIModelComponents.translate(\"drawing.rotateStyle\")}\n onClick={this._toggleRotationMode}\n role=\"presentation\"\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgRotateLeft />} />\n </div>\n )}\n {!rot.isIdentity && (\n <div\n className=\"unrotate-button\"\n data-testid=\"drawing-unrotate-button\"\n style={mode === MapMode.Closed && !isAnimating ? { top: 2 } : {}}\n onClick={this._handleUnrotate}\n role=\"button\"\n tabIndex={-1}\n >\n {UiIModelComponents.translate(\"drawing.unrotate\")}\n </div>\n )}\n {mode === MapMode.Opened && !isAnimating && (\n <>\n <div\n className=\"close\"\n data-testid=\"drawing-close-button\"\n onClick={this._closeLargeMap}\n role=\"button\"\n tabIndex={-1}\n >\n <div className=\"close-icon icon\">\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgSortUp />} />\n </div>\n </div>\n <div className=\"zoom\">\n <div\n className=\"zoom-button icon\"\n data-testid=\"drawing-zoom-in-button\"\n onClick={this._handleZoomIn}\n role=\"button\"\n tabIndex={-1}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgAdd />} />\n </div>\n <div\n className=\"zoom-button icon\"\n data-testid=\"drawing-zoom-out-button\"\n onClick={this._handleZoomOut}\n role=\"button\"\n tabIndex={-1}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgRemove />} />\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n );\n if (\n mode === MapMode.Closed &&\n (animation === 1.0 || startMapExtents.isExactEqual(mapExtents))\n ) {\n return nodes;\n } else {\n let drawingPortal = document.querySelector(\"#components-drawing-portal\");\n if (!drawingPortal) {\n drawingPortal = document.createElement(\"div\");\n drawingPortal.id = \"components-drawing-portal\";\n document.body.appendChild(drawingPortal);\n }\n return ReactDOM.createPortal(nodes, drawingPortal);\n }\n }\n\n private _isViewport3D = () => {\n return this.state.view !== undefined && this.state.view.is3d();\n };\n\n private _lastTime: number | undefined;\n\n private static _animationFn = (t: number) =>\n t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t;\n\n private _animation = () => {\n const t = Date.now();\n const delta = this._lastTime ? t - this._lastTime : 16;\n this._lastTime = t;\n if (this.state.animation !== 1) {\n const animation = Math.min(\n 1,\n this.state.animation +\n delta / (1000 * (this.props.animationTime || 0.4))\n );\n this._updateFrustum();\n\n if (this._mounted) {\n this.setState({ animation }, () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n });\n }\n } else {\n this._lastTime = undefined;\n this._animationEnd();\n }\n };\n\n private _animationEnd = () => {\n const hasViewportMoved =\n !this.state.origin.isAlmostEqual(this.state.startOrigin) ||\n !this.state.rotation.isAlmostEqual(this.state.startRotation);\n const startMapOrigin = Point3d.createFrom(this.state.mapOrigin);\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\n const startDrawingZoom = this.state.drawingZoom;\n const startOrigin = this.state.origin;\n const startRotation = this.state.rotation;\n if (this._mounted) {\n this.setState(\n {\n startMapOrigin,\n startDrawingZoom,\n startOrigin,\n startRotation,\n startMapExtents,\n },\n () => {\n if (this.props.onAnimationEnd) this.props.onAnimationEnd();\n if (hasViewportMoved) this._updateFrustum(true);\n }\n );\n }\n };\n\n private _lastPanTime: number | undefined;\n\n private _panAnimation = () => {\n const t = Date.now();\n if (this._lastPanTime === undefined) this._lastPanTime = t - 16.667;\n const delta = t - this._lastPanTime;\n this._lastPanTime = t;\n if (!this.state.panningDirection.isAlmostZero && this.state.isMoving) {\n const { panningDirection } = this.state;\n const offset = panningDirection.scale(\n delta / 1000 / this.state.drawingZoom\n );\n const mapOrigin = this.state.mapOrigin.plus(offset);\n\n const origin = this.state.origin.plus(offset);\n this._updateFrustum();\n if (this._mounted) {\n this.setState({ mapOrigin, origin, panningDirection }, () => {\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\n });\n }\n } else {\n this._lastPanTime = undefined;\n this._updateFrustum(true);\n }\n };\n\n public override componentDidMount() {\n this._mounted = true;\n ViewportComponentEvents.onViewRotationChangeEvent.addListener(\n this._handleViewRotationChangeEvent\n );\n window.addEventListener(\"mousedown\", this._handleMouseDown as any);\n window.addEventListener(\"mouseup\", this._handleMouseDragEnd as any);\n window.addEventListener(\"mousemove\", this._handleMouseDrag as any);\n window.addEventListener(\"keyup\", this._handleKeyUp as any);\n }\n\n public override componentWillUnmount() {\n ViewportComponentEvents.onViewRotationChangeEvent.removeListener(\n this._handleViewRotationChangeEvent\n );\n window.removeEventListener(\"mousedown\", this._handleMouseDown as any);\n window.removeEventListener(\"mouseup\", this._handleMouseDragEnd as any);\n window.removeEventListener(\"mousemove\", this._handleMouseDrag as any);\n window.removeEventListener(\"keyup\", this._handleKeyUp as any);\n clearTimeout(this._animationFrame);\n if (this.props.onAnimationEnd) this.props.onAnimationEnd();\n\n const rt = document.getElementById(\n \"components-drawing-portal\"\n ) as HTMLDivElement;\n if (rt && rt.parentElement !== null && rt.children.length === 0) {\n rt.parentElement.removeChild(rt);\n }\n this._mounted = false;\n }\n\n // Synchronize with rotation coming from the Viewport\n private _handleViewRotationChangeEvent: ListenerType<\n typeof ViewportComponentEvents.onViewRotationChangeEvent\n > = (args) => {\n if (\n !this.state.isMoving &&\n !this.state.isPanning &&\n this.props.viewport === args.viewport\n ) {\n const extents = args.viewport.view.getExtents().clone();\n const rotation = args.viewport.view.getRotation().clone();\n const halfExtents = extents.scale(0.5);\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? rotation.multiplyTransposeVector(halfExtents)\n : halfExtents;\n const origin = args.viewport.view.getOrigin().plus(offset);\n const deltaZoom =\n (this.state.extents.x - extents.x) / this.state.extents.x;\n let drawingZoom = this.state.drawingZoom / (1 - deltaZoom);\n const deltaOrigin = origin.minus(this.state.origin);\n let mapOrigin = this.state.mapOrigin.plus(deltaOrigin);\n mapOrigin = mapOrigin.plus(\n Vector3d.createFrom(origin.minus(mapOrigin)).scale(deltaZoom)\n );\n if (this.state.viewId !== args.viewport.view.id) {\n const rect =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? extents\n : DrawingNavigationAid.findRotatedWindowDimensions(\n extents,\n rotation\n );\n const maxRectDim = Math.max(rect.y, rect.x);\n const maxExtentDim = Math.max(\n this.state.mapExtents.x,\n this.state.mapExtents.y\n );\n drawingZoom = maxExtentDim / (3 * maxRectDim);\n mapOrigin = origin.clone();\n this._viewport = args.viewport;\n this.setState({\n viewId: args.viewport.view.id,\n view: args.viewport.view.clone(),\n });\n }\n if (this._mounted) {\n this.setState({\n startOrigin: origin,\n origin,\n extents,\n startRotation: rotation,\n rotation,\n startMapOrigin: mapOrigin,\n mapOrigin,\n startDrawingZoom: drawingZoom,\n drawingZoom,\n });\n }\n }\n };\n\n private _updateFrustum = (complete: boolean = false) => {\n const halfExtents = this.state.extents.scale(0.5);\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.rotation.multiplyTransposeVector(halfExtents)\n : halfExtents;\n const origin = this.state.origin.minus(offset);\n ViewportComponentEvents.setDrawingViewportState(\n origin,\n this.state.rotation,\n complete\n );\n };\n\n private _toggleRotationMode = () => {\n const rotateMinimapWithView = !this.state.rotateMinimapWithView;\n this.setState({ rotateMinimapWithView }, () => {\n if (this._viewport)\n this._handleViewRotationChangeEvent({ viewport: this._viewport });\n });\n };\n\n private _handleKeyUp = (event: React.KeyboardEvent) => {\n if (\n event.key === Key.Escape.valueOf() &&\n this.state.mode === MapMode.Opened\n ) {\n this._closeLargeMap();\n }\n };\n\n private _lastClientXY: Point2d = Point2d.createZero();\n\n private _processWindowDrag(movement: Point2d) {\n const vect = Vector3d.create(\n movement.x / this.state.drawingZoom,\n -movement.y / this.state.drawingZoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const origin = this.state.origin.plus(offset);\n const panningDirection = this._getPanVector();\n const wasAlmostZero = this.state.panningDirection.isAlmostZero;\n this.setState(\n { startOrigin: origin, origin, panningDirection, isPanning: false },\n () => {\n this._updateFrustum();\n if (wasAlmostZero && !this.state.panningDirection.isAlmostZero) {\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\n }\n }\n );\n }\n\n private _processWindowEndDrag() {\n this.setState({ isMoving: false });\n this._updateFrustum(true);\n if (this.state.mode === MapMode.Closed) {\n setTimeout(() => {\n const startMapOrigin = this.state.mapOrigin;\n const mapOrigin = this.state.origin.clone();\n if (this._mounted) {\n this.setState({ startMapOrigin, mapOrigin, animation: 0 }, () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n });\n }\n }, 0);\n }\n }\n\n private _handleMouseDown = (event: React.MouseEvent) => {\n // Used only to determine if mouse was moved between mousedown and mouseup\n const mouseStart = Point2d.create(event.clientX, event.clientY);\n this.setState({ mouseStart });\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\n };\n\n private _handleDrawingMouseDown = (event: React.MouseEvent) => {\n if (this.state.mode === MapMode.Opened) {\n event.preventDefault();\n this.setState({ isPanning: true });\n }\n };\n\n private _handleWindowMouseDown = (event: React.MouseEvent) => {\n event.preventDefault();\n this.setState({ isMoving: true });\n };\n\n private _handleMouseDrag = (event: React.MouseEvent) => {\n const mouse = Point2d.create(event.clientX, event.clientY);\n const movement = mouse.minus(this._lastClientXY);\n if (this.state.isMoving) {\n // add scaled mouse movement\n this._processWindowDrag(movement);\n } else {\n if (this.state.isPanning && this.state.mode === MapMode.Opened) {\n const vect = Vector3d.create(\n movement.x / this.state.drawingZoom,\n -movement.y / this.state.drawingZoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const mapOrigin = this.state.mapOrigin.minus(offset);\n this.setState({ startMapOrigin: mapOrigin, mapOrigin });\n }\n }\n this._lastClientXY = mouse;\n };\n\n private _handleMouseDragEnd = (event: React.MouseEvent) => {\n const mouse = Point2d.create(event.clientX, event.clientY);\n if (\n mouse.isAlmostEqual(this.state.mouseStart) &&\n this.state.mode === MapMode.Closed &&\n (event.target === this._viewContainerElement.current ||\n event.target === this._viewElement.current)\n ) {\n this._openLargeMap();\n } else if (this.state.isMoving) {\n this._processWindowEndDrag();\n } else if (this.state.isPanning) {\n if (this.state.mode === MapMode.Opened) {\n event.stopPropagation();\n this.setState({ isPanning: false });\n }\n } else if (\n (!(event.target instanceof Node) ||\n (this._rootElement.current &&\n !this._rootElement.current.contains(event.target))) &&\n mouse.isAlmostEqual(this.state.mouseStart)\n ) {\n this._closeLargeMap();\n }\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\n };\n\n private _handleWindowTouchStart = (event: any) => {\n if (1 !== event.targetTouches.length) return;\n window.addEventListener(\"touchmove\", this._onTouchMove, false);\n window.addEventListener(\"touchend\", this._onTouchEnd, false);\n const mouseStart = Point2d.create(\n event.targetTouches[0].clientX,\n event.targetTouches[0].clientY\n );\n this.setState({ mouseStart });\n this._lastClientXY = mouseStart.clone();\n this.setState({ isMoving: true });\n };\n\n private _onTouchMove = (event: TouchEvent) => {\n if (1 !== event.targetTouches.length) return;\n const mouse = Point2d.create(\n event.targetTouches[0].clientX,\n event.targetTouches[0].clientY\n );\n const movement = mouse.minus(this._lastClientXY);\n // add scaled mouse movement\n this._processWindowDrag(movement);\n this._lastClientXY = mouse;\n };\n\n private _onTouchEnd = (event: TouchEvent) => {\n if (0 !== event.targetTouches.length) return;\n this._processWindowEndDrag();\n if (0 !== event.changedTouches.length)\n this._lastClientXY = Point2d.create(\n event.changedTouches[0].clientX,\n event.changedTouches[0].clientY\n ); // Doesn't seem necessary...but _handleMouseDragEnd sets it...\n window.removeEventListener(\"touchmove\", this._onTouchMove);\n window.removeEventListener(\"touchend\", this._onTouchEnd);\n };\n\n /** @internal */\n public static getDefaultClosedMapSize = (): Vector3d => {\n return Vector3d.create(96, 96);\n };\n\n /** @internal */\n public static getDefaultOpenedMapSize = (\n paddingX: number = 0,\n paddingY: number = 0\n ): Vector3d => {\n return Vector3d.create(\n Math.abs(window.innerWidth / 3 - 2 * (window.innerWidth - paddingX)),\n Math.abs(window.innerHeight / 3 - 2 * paddingY)\n );\n };\n\n private _getClosedMapSize = (): Vector3d => {\n if (this.props.closeSize === undefined)\n return DrawingNavigationAid.getDefaultClosedMapSize();\n return this.props.closeSize;\n };\n\n private _getOpenedMapSize = (): Vector3d => {\n if (this.props.openSize === undefined)\n return DrawingNavigationAid.getDefaultOpenedMapSize(\n this._rootOffset.right,\n this._rootOffset.top\n );\n return this.props.openSize;\n };\n\n private _openLargeMap = () => {\n if (this.state.mode === MapMode.Closed && this.state.animation === 1.0) {\n if (this._rootElement.current) {\n const rect = this._rootElement.current.getBoundingClientRect();\n this._rootOffset = rect;\n }\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\n const mapExtents = this._getOpenedMapSize();\n this.setState(\n {\n mode: MapMode.Opened,\n isMoving: false,\n isPanning: false,\n mapExtents,\n startMapExtents,\n animation: 0,\n },\n () => {\n this._animationFrame = setTimeout(this._animation);\n }\n );\n }\n };\n\n private _closeLargeMap = () => {\n if (this.state.mode === MapMode.Opened && this.state.animation === 1.0) {\n const startMapOrigin = this.state.mapOrigin;\n const mapOrigin = this.state.origin.clone();\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\n const mapExtents = this._getClosedMapSize();\n const rect =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? this.state.extents\n : DrawingNavigationAid.findRotatedWindowDimensions(\n this.state.extents,\n this.state.rotation\n );\n const maxRectDim = Math.max(rect.y, rect.x);\n const maxExtentDim = Math.max(mapExtents.x, mapExtents.y);\n const drawingZoom = maxExtentDim / (3 * maxRectDim);\n const startDrawingZoom = this.state.drawingZoom;\n this.setState(\n {\n mode: MapMode.Closed,\n startMapOrigin,\n mapOrigin,\n startDrawingZoom,\n drawingZoom,\n isMoving: false,\n isPanning: false,\n startMapExtents,\n mapExtents,\n panningDirection: Vector3d.createZero(),\n animation: 0,\n },\n () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n }\n );\n }\n };\n\n private _getPanVector = () => {\n const is3D = this._isViewport3D();\n const rect =\n this.state.rotateMinimapWithView || is3D\n ? this.state.extents\n : DrawingNavigationAid.findRotatedWindowDimensions(\n this.state.extents,\n this.state.rotation\n );\n\n const mapExtents = this.state.mapExtents.scale(1 / this.state.drawingZoom);\n\n const maxMagnitude = 80; // maximum acceleration\n const magnitudeTravel = 30; // How far, in pixels, that magnitude increases from 0 to max acceleration\n\n const diff = Vector3d.createFrom(\n this.state.origin.minus(this.state.mapOrigin)\n );\n const diffVector =\n this.state.rotateMinimapWithView || is3D\n ? this.state.rotation.multiplyVector(diff)\n : diff;\n\n // capture any values\n const magnitudeVector = Vector3d.create(\n Math.max(0, Math.abs(diffVector.x) - (mapExtents.x - rect.x) / 2),\n Math.max(0, Math.abs(diffVector.y) - (mapExtents.y - rect.y) / 2)\n );\n if (magnitudeVector.isAlmostZero) return Vector3d.createZero();\n const magnitude =\n (Math.min(\n magnitudeVector.magnitude() * this.state.drawingZoom,\n magnitudeTravel\n ) /\n magnitudeTravel) *\n maxMagnitude;\n\n const vect = Vector3d.createFrom(\n this.state.origin.minus(this.state.mapOrigin)\n ); // vect will never be zero or magnitude would also be zero\n const norm = vect.normalize();\n return norm!.scale(magnitude); // norm is only undefined when vect is zero, in which it would have returned at magnitudeVector.isAlmostZero\n };\n\n private _handleWheel = (event: React.WheelEvent) => {\n if (this.state.mode === MapMode.Opened && this.state.animation === 1) {\n const { mapOrigin, drawingZoom } = this.state;\n const mapSize = this._getOpenedMapSize();\n\n const mouseX = event.clientX - this._rootOffset.right + mapSize.x / 2;\n const mouseY = event.clientY - this._rootOffset.top - mapSize.y / 2;\n const is3D = this._isViewport3D();\n if (event.deltaY < 0) {\n const zoom = drawingZoom * 1.1;\n const vect = Vector3d.create(\n (mouseX * 0.1) / zoom,\n (-mouseY * 0.1) / zoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || is3D\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const m = mapOrigin.plus(offset);\n this.setState({ mapOrigin: m, drawingZoom: zoom });\n }\n if (event.deltaY > 0) {\n const zoom = drawingZoom / 1.1;\n const vect = Vector3d.create(\n (mouseX * 0.1) / drawingZoom,\n (-mouseY * 0.1) / drawingZoom,\n 0\n );\n const offset =\n this.state.rotateMinimapWithView || is3D\n ? this.state.rotation.multiplyTransposeVector(vect)\n : vect;\n const m = mapOrigin.minus(offset);\n this.setState({ mapOrigin: m, drawingZoom: zoom });\n }\n }\n };\n\n private _handleZoomIn = () => {\n const zoom = this.state.drawingZoom * 1.4;\n this.setState({ drawingZoom: zoom });\n };\n\n private _handleZoomOut = () => {\n const zoom = this.state.drawingZoom / 1.4;\n this.setState({ drawingZoom: zoom });\n };\n\n private _handleUnrotate = () => {\n const startRotation = this.state.rotation;\n const halfExtents = this.state.extents.scale(0.5);\n const offset =\n this.state.rotateMinimapWithView || this._isViewport3D()\n ? Vector3d.createZero()\n : this.state.rotation\n .multiplyTransposeVector(halfExtents)\n .minus(halfExtents);\n const startOrigin = this.state.origin;\n const origin = this.state.origin.plus(offset);\n const startMapOrigin = this.state.mapOrigin;\n const mapOrigin = this.state.mapOrigin.plus(offset);\n this.setState(\n {\n animation: 0,\n startOrigin,\n origin,\n startMapOrigin,\n mapOrigin,\n startRotation,\n rotation: Matrix3d.createIdentity(),\n },\n () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n }\n );\n };\n\n /** @internal */\n public static findRotatedWindowDimensions = (\n extents: Vector3d,\n rotation: Matrix3d\n ) => {\n const cos = rotation.at(0, 0);\n const sin = rotation.at(1, 0);\n // extents.x/y should be divided in half, but we don't have to do that immediately.\n const cosWidth = cos * extents.x;\n const sinHeight = sin * extents.y;\n\n const sinWidth = cos * extents.x;\n const cosHeight = sin * extents.y;\n\n const a = Math.atan2(sin, cos);\n\n if (a % Math.PI >= 0 && a % Math.PI < Math.PI / 2) {\n const y1 = -cosHeight - sinWidth;\n const x2 = cosWidth + sinHeight;\n const y3 = cosHeight + sinWidth;\n const x4 = -cosWidth - sinHeight;\n // Instead, divide total difference\n return Vector3d.create(Math.abs(x2 - x4) / 2, Math.abs(y1 - y3) / 2);\n } else {\n const x1 = -cosWidth + sinHeight;\n const y2 = -cosHeight + sinWidth;\n const x3 = cosWidth - sinHeight;\n const y4 = cosHeight - sinWidth;\n return Vector3d.create(Math.abs(x1 - x3) / 2, Math.abs(y2 - y4) / 2);\n }\n };\n}\n\n/** @internal */\nexport interface DrawingNavigationCanvasProps {\n view: ViewState | undefined;\n viewId?: string;\n origin: Point3d;\n extents: Vector3d;\n zoom: number;\n rotation: Matrix3d;\n viewManagerOverride?: ViewManager;\n screenViewportOverride?: typeof ScreenViewport;\n canvasSizeOverride?: boolean;\n}\n\n/** @internal */\nexport class DrawingNavigationCanvas extends React.Component<DrawingNavigationCanvasProps> {\n private _canvasElement = React.createRef<HTMLDivElement>();\n private _vp?: ScreenViewport;\n\n public override render(): React.ReactNode {\n return (\n <div\n className=\"drawing-canvas\"\n data-testid=\"drawing-canvas\"\n ref={this._canvasElement}\n ></div>\n );\n }\n\n public override componentDidMount() {\n if (this._canvasElement.current && this.props.view !== undefined) {\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n\n const screenViewport = this.props.screenViewportOverride\n ? this.props.screenViewportOverride\n : ScreenViewport;\n const previousView = viewManager.selectedView;\n this._vp = screenViewport.create(\n this._canvasElement.current,\n this.props.view\n );\n this.customizeViewport(this._vp);\n viewManager.addViewport(this._vp);\n void viewManager.setSelectedView(previousView); // switch to original viewport\n this._update();\n }\n }\n\n private customizeViewport(vp: ScreenViewport): void {\n if (vp.logo.style) vp.logo.style.display = \"none\";\n\n if (vp.viewFlags.acsTriad)\n vp.viewFlags = vp.viewFlags.with(\"acsTriad\", false);\n }\n\n private _update = () => {\n if (this._vp) {\n const max = Math.max(this.props.extents.x, this.props.extents.y);\n this._vp.view.extentLimits = { max, min: Constant.oneMillimeter };\n this._vp.view.setOrigin(this.props.origin);\n this._vp.view.setRotation(this.props.rotation);\n this._vp.view.setExtents(this.props.extents);\n this._vp.applyViewState(this._vp.view);\n }\n };\n\n public override componentDidUpdate(oldProps: DrawingNavigationCanvasProps) {\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n if (this.props.view !== undefined) {\n if (oldProps.view !== this.props.view) {\n const screenViewport = this.props.screenViewportOverride\n ? this.props.screenViewportOverride\n : ScreenViewport;\n if (\n oldProps !== undefined &&\n oldProps.viewId !== \"\" &&\n oldProps.viewId !== this.props.viewId &&\n this._vp\n ) {\n viewManager.dropViewport(this._vp, true);\n }\n if (\n this._canvasElement.current &&\n (this.props.canvasSizeOverride ||\n (this._canvasElement.current.clientWidth !== 0 &&\n this._canvasElement.current.clientHeight !== 0))\n ) {\n const previousView = viewManager.selectedView;\n this._vp = screenViewport.create(\n this._canvasElement.current,\n this.props.view.clone()\n );\n this.customizeViewport(this._vp);\n viewManager.addViewport(this._vp);\n void viewManager.setSelectedView(previousView); // switch to original viewport\n this._update();\n }\n } else if (\n !this.props.origin.isExactEqual(oldProps.origin) ||\n !this.props.extents.isExactEqual(oldProps.extents) ||\n this.props.zoom !== oldProps.zoom ||\n !this.props.rotation.isExactEqual(oldProps.rotation)\n ) {\n this._update();\n }\n }\n }\n\n public override componentWillUnmount() {\n if (this._vp) {\n const viewManager = this.props.viewManagerOverride\n ? this.props.viewManagerOverride\n : IModelApp.viewManager;\n viewManager.dropViewport(this._vp, true);\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/imodel-components-react",
3
- "version": "5.27.0",
3
+ "version": "5.28.0",
4
4
  "description": "A react component library of iTwin.js UI iModel components",
5
5
  "type": "module",
6
6
  "types": "./lib/imodel-components-react.d.ts",
@@ -44,68 +44,71 @@
44
44
  "@itwin/itwinui-react": "^3.15.0",
45
45
  "react": "^18.0.0 || ^19.0.0",
46
46
  "react-dom": "^18.0.0 || ^19.0.0",
47
- "@itwin/components-react": "5.27.0",
48
- "@itwin/core-react": "5.27.0"
47
+ "@itwin/components-react": "5.28.0",
48
+ "@itwin/core-react": "5.28.0"
49
49
  },
50
50
  "devDependencies": {
51
- "@itwin/appui-abstract": "^5.1.0",
52
- "@itwin/build-tools": "^5.7.0",
53
- "@itwin/core-bentley": "^5.1.0",
54
- "@itwin/core-common": "^5.1.0",
55
- "@itwin/core-frontend": "^5.1.0",
56
- "@itwin/core-geometry": "^5.1.0",
57
- "@itwin/core-orbitgt": "^5.1.0",
58
- "@itwin/core-quantity": "^5.1.0",
59
- "@itwin/ecschema-metadata": "^5.1.0",
51
+ "@itwin/appui-abstract": "^5.8.1",
52
+ "@itwin/build-tools": "^5.8.1",
53
+ "@itwin/core-bentley": "^5.8.1",
54
+ "@itwin/core-common": "^5.8.1",
55
+ "@itwin/core-frontend": "^5.8.1",
56
+ "@itwin/core-geometry": "^5.8.1",
57
+ "@itwin/core-orbitgt": "^5.8.1",
58
+ "@itwin/core-quantity": "^5.8.1",
59
+ "@itwin/ecschema-metadata": "^5.8.1",
60
60
  "@itwin/eslint-plugin": "^6.0.0",
61
- "@itwin/itwinui-react": "^3.20.1",
62
- "@itwin/webgl-compatibility": "^5.1.0",
61
+ "@itwin/itwinui-react": "^3.20.2",
62
+ "@itwin/webgl-compatibility": "^5.8.1",
63
63
  "@testing-library/dom": "^10.4.1",
64
- "@testing-library/react": "^16.3.0",
64
+ "@testing-library/react": "^16.3.2",
65
65
  "@testing-library/user-event": "^14.6.1",
66
- "@types/react": "^19.2.7",
66
+ "@types/react": "^19.2.14",
67
67
  "@types/react-dom": "^19.2.3",
68
- "@vitest/coverage-v8": "^3.0.6",
69
- "cpx2": "^3.0.0",
70
- "cross-env": "^5.1.4",
71
- "eslint": "^9.39.2",
68
+ "@vitest/coverage-v8": "^3.2.4",
69
+ "cpx2": "^3.0.2",
70
+ "cross-env": "^5.2.1",
71
+ "eslint": "^9.39.4",
72
72
  "eslint-config-prettier": "^10.1.8",
73
73
  "ignore-styles": "^5.0.1",
74
- "inversify": "^6.0.1",
75
- "jsdom": "^24.0.0",
74
+ "inversify": "^7.11.0",
75
+ "jsdom": "^24.1.3",
76
76
  "npm-run-all": "^4.1.5",
77
- "raf": "^3.4.0",
78
- "react": "^19.2.1",
79
- "react-dom": "^19.2.1",
80
- "reflect-metadata": "^0.1.13",
81
- "rimraf": "^6.1.0",
77
+ "raf": "^3.4.1",
78
+ "react": "^19.2.5",
79
+ "react-dom": "^19.2.5",
80
+ "reflect-metadata": "^0.2.2",
81
+ "rimraf": "^6.1.3",
82
82
  "typemoq": "^2.1.0",
83
- "typescript": "~5.6.2",
83
+ "typescript": "~5.6.3",
84
84
  "upath": "^2.0.1",
85
85
  "vitest": "^3.2.4",
86
- "@itwin/components-react": "5.27.0",
87
- "@itwin/core-react": "5.27.0"
86
+ "@itwin/components-react": "5.28.0",
87
+ "@itwin/core-react": "5.28.0"
88
88
  },
89
89
  "dependencies": {
90
- "@itwin/itwinui-icons-react": "^2.8.0",
90
+ "@itwin/itwinui-icons-react": "^2.11.0",
91
91
  "classnames": "2.5.1",
92
- "ts-key-enum": "~2.0.12"
92
+ "ts-key-enum": "~2.0.13"
93
93
  },
94
94
  "scripts": {
95
- "start": "run-p -l \"build -- -w\" \"copy:** -- -w\"",
96
- "build": "npm run copy:css && npm run compat:css && npm run copy:locale && tsc",
97
- "copy:css": "cpx \"./src/**/*.*css\" ./lib",
98
- "copy:locale": "cpx ./src/imodel-components-react/UiIModelComponents.json ./lib/public/locales/en",
99
- "compat:css": "npm run compat:cjs && npm run compat:esm",
100
- "compat:cjs": "cpx \"./src/**/*.{*css,svg}\" ./lib/cjs",
101
- "compat:esm": "cpx \"./src/**/*.{*css,svg}\" ./lib/esm",
95
+ "dev": "pnpm \"/^dev:.*/\"",
96
+ "dev:css": "pnpm build:css -w",
97
+ "dev:locale": "pnpm build:locale -w",
98
+ "dev:tsc": "tsc -w --preserveWatchOutput",
99
+ "build": "pnpm \"/^build:.*/\"",
100
+ "build:compat:cjs": "cpx \"./src/**/*.{*css,svg}\" ./lib/cjs",
101
+ "build:compat:esm": "cpx \"./src/**/*.{*css,svg}\" ./lib/esm",
102
+ "build:locale": "cpx ./src/imodel-components-react/UiIModelComponents.json ./lib/public/locales/en",
103
+ "build:css": "cpx \"./src/**/*.*css\" ./lib",
104
+ "build:tsc": "tsc",
102
105
  "clean": "rimraf -g lib",
103
106
  "cover": "vitest run --coverage",
104
107
  "lint": "eslint \"./src/**/*.{ts,tsx}\"",
105
- "lint:fix": "npm run -s lint -- --fix",
108
+ "lint:fix": "pnpm lint --fix",
106
109
  "extract-api": "betools extract-api --entry=./lib/imodel-components-react --apiReportFolder=../../common/api --apiReportTempFolder=../../common/temp/api --apiSummaryFolder=../../common/api/summary",
107
110
  "test": "vitest",
108
- "docs": "npm run -s docs:reference && npm run -s docs:changelog",
111
+ "docs": "pnpm \"/^docs:.*/\"",
109
112
  "docs:changelog": "cpx ./CHANGELOG.md ../../generated-docs/reference/imodel-components-react",
110
113
  "docs:reference": "cross-env NODE_PROJECT_ROOT_DIRECTORY=../../ betools docs --includes=../../generated-docs/extract --json=../../generated-docs/reference/imodel-components-react/file.json --tsIndexFile=./imodel-components-react.ts --onlyJson"
111
114
  }