@itwin/imodel-components-react 4.0.0-dev.1 → 4.0.0-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +1 -91
  2. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts +1 -1
  3. package/lib/cjs/imodel-components-react/UiIModelComponents.js +1 -1
  4. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  5. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  6. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +3 -2
  7. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  8. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +19 -21
  9. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +2 -2
  10. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +1 -1
  11. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  12. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +2 -2
  13. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  14. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +5 -3
  15. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  16. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +15 -17
  17. package/lib/cjs/imodel-components-react/color/Swatch.scss +5 -7
  18. package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +4 -5
  19. package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +4 -5
  20. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  21. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +5 -2
  22. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  23. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +6 -7
  24. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +7 -8
  25. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +12 -13
  26. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +3 -3
  27. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  28. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +14 -10
  29. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  30. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +18 -21
  31. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  32. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +10 -4
  33. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  34. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +9 -8
  35. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +11 -13
  36. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  37. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +3 -2
  38. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  39. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts.map +1 -1
  40. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +10 -19
  41. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  42. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +2 -2
  43. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  44. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +7 -3
  45. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  46. package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +11 -9
  47. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +13 -15
  48. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  49. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +8 -4
  50. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  51. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +49 -48
  52. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  53. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +13 -6
  54. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  55. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +23 -26
  56. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +1 -1
  57. package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
  58. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +1 -1
  59. package/lib/esm/imodel-components-react/UiIModelComponents.js +1 -1
  60. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  61. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  62. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +4 -3
  63. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  64. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +19 -21
  65. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +2 -2
  66. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +1 -1
  67. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  68. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +2 -2
  69. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  70. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +6 -4
  71. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  72. package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +15 -17
  73. package/lib/esm/imodel-components-react/color/Swatch.scss +5 -7
  74. package/lib/esm/imodel-components-react/editors/ColorEditor.scss +4 -5
  75. package/lib/esm/imodel-components-react/editors/WeightEditor.scss +4 -5
  76. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  77. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +6 -3
  78. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  79. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +6 -7
  80. package/lib/esm/imodel-components-react/lineweight/Swatch.scss +7 -8
  81. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +12 -13
  82. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +3 -3
  83. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  84. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +14 -10
  85. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  86. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +18 -21
  87. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  88. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +10 -4
  89. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  90. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +9 -8
  91. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +11 -13
  92. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  93. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +4 -3
  94. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  95. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts.map +1 -1
  96. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js +11 -20
  97. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  98. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +2 -2
  99. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  100. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +7 -3
  101. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  102. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +11 -9
  103. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +13 -15
  104. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  105. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +10 -6
  106. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  107. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +49 -48
  108. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  109. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +13 -6
  110. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  111. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +23 -26
  112. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +1 -1
  113. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  114. package/package.json +35 -42
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingNavigationAid.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/navigationaids/DrawingNavigationAid.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NavigationAids\r\n */\r\n\r\nimport \"./DrawingNavigationAid.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { Constant, Geometry, Matrix3d, Point2d, Point3d, Point4d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { IModelApp, IModelConnection, ScreenViewport, ViewManager, Viewport, ViewState } from \"@itwin/core-frontend\";\r\nimport { SpecialKey } from \"@itwin/appui-abstract\";\r\nimport { CommonProps } from \"@itwin/core-react\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\nimport { ViewportComponentEvents, ViewRotationChangeEventArgs } from \"../viewport/ViewportComponentEvents\";\r\n\r\n// cSpell:ignore Quaternion Quaternions unrotate\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n\r\n/**\r\n * Enum for mode that minimap is currently in\r\n * @internal\r\n */\r\nexport enum MapMode {\r\n Opened = \"map-opened\",\r\n Closed = \"map-closed\",\r\n}\r\n\r\n/** Properties for the [[DrawingNavigationAid]] component\r\n * @public\r\n */\r\nexport interface DrawingNavigationAidProps extends CommonProps {\r\n iModelConnection: IModelConnection;\r\n viewport?: Viewport;\r\n\r\n // used only in testing\r\n\r\n /** @internal */\r\n animationTime?: number;\r\n /** @internal */\r\n openSize?: Vector3d;\r\n /** @internal */\r\n closeSize?: Vector3d;\r\n /** @internal */\r\n initialMapMode?: MapMode;\r\n /** @internal */\r\n onAnimationEnd?: () => void;\r\n /** @internal */\r\n initialRotateMinimapWithView?: boolean;\r\n /** @internal */\r\n initialView?: ViewState;\r\n /** @internal */\r\n viewManagerOverride?: ViewManager;\r\n /** @internal */\r\n screenViewportOverride?: typeof ScreenViewport;\r\n}\r\n\r\n/** @internal */\r\ninterface DrawingNavigationAidState {\r\n startOrigin: Point3d;\r\n origin: Point3d;\r\n extents: Vector3d;\r\n startRotation: Matrix3d;\r\n rotation: Matrix3d;\r\n\r\n startMapOrigin: Point3d;\r\n mapOrigin: Point3d;\r\n startMapExtents: Vector3d;\r\n mapExtents: Vector3d;\r\n\r\n mouseStart: Point2d;\r\n panningDirection: Vector3d;\r\n startDrawingZoom: number;\r\n drawingZoom: number;\r\n\r\n mode: MapMode;\r\n animation: number;\r\n\r\n isMoving: boolean;\r\n isPanning: boolean;\r\n\r\n viewId: string;\r\n view: ViewState | undefined;\r\n\r\n rotateMinimapWithView: boolean;\r\n}\r\n\r\n/**\r\n * A Drawing Navigation Aid.\r\n * @public\r\n */\r\nexport class DrawingNavigationAid extends React.Component<DrawingNavigationAidProps, DrawingNavigationAidState> {\r\n private _rootElement = React.createRef<HTMLDivElement>();\r\n private _viewContainerElement = React.createRef<HTMLDivElement>();\r\n private _viewElement = React.createRef<HTMLDivElement>();\r\n private _rootOffset: DOMRect = DOMRect.fromRect({ x: 0, y: 0, width: 0, height: 0 });\r\n private _viewport: Viewport | undefined;\r\n private _animationFrame: any;\r\n private _mounted: boolean = false;\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<DrawingNavigationAidState>;\r\n\r\n constructor(props: DrawingNavigationAidProps) {\r\n super(props);\r\n const mode = props.initialMapMode || MapMode.Closed;\r\n const mapExtents = mode === MapMode.Closed ? this._getClosedMapSize() : this._getOpenedMapSize();\r\n const startMapExtents = mapExtents;\r\n\r\n this.state = {\r\n startOrigin: Point3d.createZero(),\r\n origin: Point3d.createZero(),\r\n extents: Vector3d.create(1, 1, 1),\r\n startRotation: Matrix3d.createIdentity(),\r\n rotation: Matrix3d.createIdentity(),\r\n\r\n startMapOrigin: Point3d.createZero(),\r\n mapOrigin: Point3d.createZero(),\r\n startMapExtents,\r\n mapExtents,\r\n\r\n mouseStart: Point2d.createZero(),\r\n panningDirection: Vector3d.createZero(),\r\n startDrawingZoom: 1.0,\r\n drawingZoom: 1.0,\r\n\r\n mode,\r\n animation: 1.0,\r\n\r\n viewId: props.initialView !== undefined ? props.initialView.id : \"\",\r\n view: props.initialView,\r\n\r\n isMoving: false,\r\n isPanning: false,\r\n rotateMinimapWithView: props.initialRotateMinimapWithView !== undefined ? props.initialRotateMinimapWithView : false,\r\n };\r\n }\r\n\r\n /** @internal */\r\n public override render(): React.ReactNode {\r\n const {\r\n startOrigin, origin, extents,\r\n startRotation, rotation,\r\n startMapOrigin, mapOrigin,\r\n startMapExtents, mapExtents,\r\n startDrawingZoom, drawingZoom,\r\n animation,\r\n viewId,\r\n mode, rotateMinimapWithView,\r\n } = this.state;\r\n\r\n const a = DrawingNavigationAid._animationFn(animation);\r\n const rot = Matrix3d.createFromQuaternion(Point4d.interpolateQuaternions(startRotation.toQuaternion(), a, rotation.toQuaternion()));\r\n const or = startOrigin.interpolate(a, origin);\r\n const map = startMapOrigin.interpolate(a, mapOrigin);\r\n const sz = startMapExtents.interpolate(a, mapExtents);\r\n const dz = Geometry.interpolate(startDrawingZoom, a, drawingZoom);\r\n\r\n const rootStyle: React.CSSProperties = {\r\n width: sz.x, height: sz.y,\r\n ...this.props.style,\r\n };\r\n const is3D = this._isViewport3D();\r\n\r\n const tOr = rotateMinimapWithView || is3D ? rotation.multiplyVector(Vector3d.createFrom(or)) : Vector3d.createFrom(or);\r\n const tMap = rotateMinimapWithView || is3D ? rotation.multiplyVector(Vector3d.createFrom(map)) : Vector3d.createFrom(map);\r\n\r\n const tPosX = (tOr.x - extents.x / 2 - tMap.x) * dz + sz.x / 2;\r\n const tPosY = (-tOr.y - extents.y / 2 + tMap.y) * dz + sz.y / 2;\r\n const viewWindowStyle = {\r\n transform: `translate(${tPosX}px, ${tPosY}px)`,\r\n height: extents.y * dz,\r\n width: extents.x * dz,\r\n };\r\n if (!rotateMinimapWithView && !is3D)\r\n viewWindowStyle.transform =\r\n \"matrix3d(\" +\r\n `${rot.at(0, 0)}, ${rot.at(1, 0)}, ${rot.at(2, 0)}, 0, ` +\r\n `${rot.at(0, 1)}, ${rot.at(1, 1)}, ${rot.at(2, 1)}, 0, ` +\r\n `${rot.at(0, 2)}, ${rot.at(1, 2)}, ${rot.at(2, 2)}, 0, ` +\r\n `${tPosX}, ${tPosY}, 0, 1)`;\r\n const isAnimating = animation !== 1 && !startMapExtents.isExactEqual(mapExtents);\r\n if (mode === MapMode.Opened || isAnimating) {\r\n rootStyle.position = \"fixed\";\r\n rootStyle.right = window.innerWidth - this._rootOffset.right;\r\n rootStyle.top = this._rootOffset.top;\r\n }\r\n\r\n const halfExtents = extents.scale(.5);\r\n const offset = rotateMinimapWithView || is3D ? Vector3d.createZero() : rotation.multiplyTransposeVector(halfExtents).minus(halfExtents);\r\n\r\n const unrotateLabel = UiIModelComponents.translate(\"drawing.unrotate\");\r\n const e = sz.scale(1 / dz);\r\n const halfMapExtents = e.scale(.5);\r\n const mapOffset = rotateMinimapWithView || is3D ? rotation.multiplyTransposeVector(halfMapExtents) : halfMapExtents;\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n const screenViewport = this.props.screenViewportOverride ? this.props.screenViewportOverride : /* istanbul ignore next */ ScreenViewport;\r\n const nodes = (\r\n <div className={classnames(\"components-drawing-navigation-aid\", this.props.className)}\r\n data-testid=\"components-drawing-navigation-aid\"\r\n ref={this._rootElement}\r\n onWheel={this._handleWheel}\r\n onMouseDown={this._handleDrawingMouseDown}\r\n style={rootStyle}\r\n role=\"presentation\">\r\n <DrawingNavigationCanvas view={this.state.view} viewManagerOverride={viewManager} screenViewportOverride={screenViewport} viewId={viewId} origin={map.plus(offset).minus(mapOffset)} extents={e} zoom={dz} rotation={rotateMinimapWithView || is3D ? rotation : Matrix3d.createIdentity()} />\r\n <div className=\"drawing-container\"\r\n data-testid=\"drawing-container\"\r\n ref={this._viewContainerElement}>\r\n <div className=\"drawing-view-window\"\r\n data-testid=\"drawing-view-window\"\r\n onMouseDown={this._handleWindowMouseDown}\r\n onTouchStart={this._handleWindowTouchStart}\r\n style={viewWindowStyle}\r\n ref={this._viewElement}\r\n role=\"presentation\" />\r\n {!is3D &&\r\n <div className={classnames(\"toggle-rotate-style\", \"icon\", \"icon-rotate-left\", { checked: rotateMinimapWithView })} data-testid=\"toggle-rotate-style\"\r\n style={mode === MapMode.Closed && !isAnimating ? { bottom: 2, left: 2 } : {}}\r\n title={UiIModelComponents.translate(\"drawing.rotateStyle\")}\r\n onClick={this._toggleRotationMode}\r\n role=\"presentation\" />}\r\n {!rot.isIdentity &&\r\n <div className=\"unrotate-button\" data-testid=\"drawing-unrotate-button\" style={mode === MapMode.Closed && !isAnimating ? { top: 2 } : {}} onClick={this._handleUnrotate}\r\n role=\"button\" tabIndex={-1}\r\n >\r\n {unrotateLabel}\r\n </div>\r\n }\r\n {mode === MapMode.Opened && !isAnimating && <>\r\n <div className=\"close\" data-testid=\"drawing-close-button\" onClick={this._closeLargeMap} role=\"button\" tabIndex={-1}>\r\n <div className=\"close-icon icon icon-sort-up\" />\r\n </div>\r\n <div className=\"zoom\">\r\n <div className=\"zoom-button icon icon-add\" data-testid=\"drawing-zoom-in-button\" onClick={this._handleZoomIn} role=\"button\" tabIndex={-1} />\r\n <div className=\"zoom-button icon icon-remove-2\" data-testid=\"drawing-zoom-out-button\" onClick={this._handleZoomOut} role=\"button\" tabIndex={-1} />\r\n </div>\r\n </>}\r\n </div>\r\n </div>\r\n );\r\n if (mode === MapMode.Closed && (animation === 1.0 || startMapExtents.isExactEqual(mapExtents))) {\r\n return nodes;\r\n } else {\r\n let drawingPortal = document.querySelector(\"#components-drawing-portal\");\r\n if (!drawingPortal) {\r\n drawingPortal = document.createElement(\"div\");\r\n drawingPortal.id = \"components-drawing-portal\";\r\n document.body.appendChild(drawingPortal);\r\n }\r\n return ReactDOM.createPortal(nodes, drawingPortal);\r\n }\r\n }\r\n\r\n private _isViewport3D = () => {\r\n return this.state.view !== undefined && this.state.view.is3d();\r\n };\r\n\r\n private _lastTime: number | undefined;\r\n\r\n private static _animationFn = (t: number) => t < .5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t;\r\n\r\n private _animation = () => {\r\n const t = Date.now();\r\n const delta = this._lastTime ? t - this._lastTime : 16;\r\n this._lastTime = t;\r\n if (this.state.animation !== 1) {\r\n const animation = Math.min(1, this.state.animation + delta / (1000 * (this.props.animationTime || 0.4)));\r\n this._updateFrustum();\r\n\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ animation }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n } else {\r\n this._lastTime = undefined;\r\n this._animationEnd();\r\n }\r\n };\r\n\r\n private _animationEnd = () => {\r\n const hasViewportMoved = !this.state.origin.isAlmostEqual(this.state.startOrigin) ||\r\n !this.state.rotation.isAlmostEqual(this.state.startRotation);\r\n const startMapOrigin = Point3d.createFrom(this.state.mapOrigin);\r\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\r\n const startDrawingZoom = this.state.drawingZoom;\r\n const startOrigin = this.state.origin;\r\n const startRotation = this.state.rotation;\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ startMapOrigin, startDrawingZoom, startOrigin, startRotation, startMapExtents }, () => {\r\n // istanbul ignore else\r\n if (this.props.onAnimationEnd)\r\n this.props.onAnimationEnd();\r\n if (hasViewportMoved)\r\n this._updateFrustum(true);\r\n });\r\n }\r\n };\r\n\r\n private _lastPanTime: number | undefined;\r\n\r\n private _panAnimation = () => {\r\n const t = Date.now();\r\n if (this._lastPanTime === undefined)\r\n this._lastPanTime = t - 16.667;\r\n const delta = t - this._lastPanTime;\r\n this._lastPanTime = t;\r\n // istanbul ignore else\r\n if (!this.state.panningDirection.isAlmostZero && this.state.isMoving) {\r\n const { panningDirection } = this.state;\r\n const offset = panningDirection.scale(delta / 1000 / this.state.drawingZoom);\r\n const mapOrigin = this.state.mapOrigin.plus(offset);\r\n\r\n const origin = this.state.origin.plus(offset);\r\n this._updateFrustum();\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ mapOrigin, origin, panningDirection }, () => {\r\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\r\n });\r\n }\r\n } else {\r\n this._lastPanTime = undefined;\r\n this._updateFrustum(true);\r\n }\r\n };\r\n\r\n public override componentDidMount() {\r\n this._mounted = true;\r\n ViewportComponentEvents.onViewRotationChangeEvent.addListener(this._handleViewRotationChangeEvent);\r\n window.addEventListener(\"mousedown\", this._handleMouseDown as any);\r\n window.addEventListener(\"mouseup\", this._handleMouseDragEnd as any);\r\n window.addEventListener(\"mousemove\", this._handleMouseDrag as any);\r\n window.addEventListener(\"keyup\", this._handleKeyUp as any);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n ViewportComponentEvents.onViewRotationChangeEvent.removeListener(this._handleViewRotationChangeEvent);\r\n window.removeEventListener(\"mousedown\", this._handleMouseDown as any);\r\n window.removeEventListener(\"mouseup\", this._handleMouseDragEnd as any);\r\n window.removeEventListener(\"mousemove\", this._handleMouseDrag as any);\r\n window.removeEventListener(\"keyup\", this._handleKeyUp as any);\r\n clearTimeout(this._animationFrame);\r\n if (this.props.onAnimationEnd)\r\n this.props.onAnimationEnd();\r\n\r\n const rt = document.getElementById(\"components-drawing-portal\") as HTMLDivElement;\r\n if (rt && rt.parentElement !== null && rt.children.length === 0) {\r\n rt.parentElement.removeChild(rt);\r\n }\r\n this._mounted = false;\r\n }\r\n\r\n // Synchronize with rotation coming from the Viewport\r\n private _handleViewRotationChangeEvent = (args: ViewRotationChangeEventArgs) => {\r\n // istanbul ignore else\r\n if (!this.state.isMoving && !this.state.isPanning && this.props.viewport === args.viewport) {\r\n const extents = args.viewport.view.getExtents().clone();\r\n const rotation = args.viewport.view.getRotation().clone();\r\n const halfExtents = extents.scale(.5);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? rotation.multiplyTransposeVector(halfExtents) : halfExtents;\r\n const origin = args.viewport.view.getOrigin().plus(offset);\r\n const deltaZoom = (this.state.extents.x - extents.x) / this.state.extents.x;\r\n let drawingZoom = this.state.drawingZoom / (1 - deltaZoom);\r\n const deltaOrigin = origin.minus(this.state.origin);\r\n let mapOrigin = this.state.mapOrigin.plus(deltaOrigin);\r\n mapOrigin = mapOrigin.plus(Vector3d.createFrom(origin.minus(mapOrigin)).scale(deltaZoom));\r\n if (this.state.viewId !== args.viewport.view.id) {\r\n const rect = this.state.rotateMinimapWithView || this._isViewport3D() ? extents : DrawingNavigationAid.findRotatedWindowDimensions(extents, rotation);\r\n const maxRectDim = Math.max(rect.y, rect.x);\r\n const maxExtentDim = Math.max(this.state.mapExtents.x, this.state.mapExtents.y);\r\n drawingZoom = maxExtentDim / (3 * maxRectDim);\r\n mapOrigin = origin.clone();\r\n this._viewport = args.viewport;\r\n this.setState({ viewId: args.viewport.view.id, view: args.viewport.view.clone() });\r\n }\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({\r\n startOrigin: origin, origin, extents,\r\n startRotation: rotation, rotation,\r\n startMapOrigin: mapOrigin, mapOrigin,\r\n startDrawingZoom: drawingZoom, drawingZoom,\r\n });\r\n }\r\n }\r\n };\r\n\r\n private _updateFrustum = (complete: boolean = false) => {\r\n const halfExtents = this.state.extents.scale(.5);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.rotation.multiplyTransposeVector(halfExtents) : halfExtents;\r\n const origin = this.state.origin.minus(offset);\r\n ViewportComponentEvents.setDrawingViewportState(origin, this.state.rotation, complete);\r\n };\r\n\r\n private _toggleRotationMode = () => {\r\n const rotateMinimapWithView = !this.state.rotateMinimapWithView;\r\n this.setState({ rotateMinimapWithView }, () => {\r\n if (this._viewport)\r\n this._handleViewRotationChangeEvent({ viewport: this._viewport });\r\n });\r\n };\r\n\r\n private _handleKeyUp = (event: React.KeyboardEvent) => {\r\n // istanbul ignore else\r\n if (event.key === SpecialKey.Escape && this.state.mode === MapMode.Opened) {\r\n this._closeLargeMap();\r\n }\r\n };\r\n\r\n private _lastClientXY: Point2d = Point2d.createZero();\r\n\r\n private _processWindowDrag(movement: Point2d) {\r\n const vect = Vector3d.create(movement.x / this.state.drawingZoom, -movement.y / this.state.drawingZoom, 0);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const origin = this.state.origin.plus(offset);\r\n const panningDirection = this._getPanVector();\r\n const wasAlmostZero = this.state.panningDirection.isAlmostZero;\r\n this.setState({ startOrigin: origin, origin, panningDirection, isPanning: false }, () => {\r\n this._updateFrustum();\r\n if (wasAlmostZero && !this.state.panningDirection.isAlmostZero) {\r\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\r\n }\r\n });\r\n }\r\n\r\n private _processWindowEndDrag() {\r\n this.setState({ isMoving: false });\r\n this._updateFrustum(true);\r\n if (this.state.mode === MapMode.Closed) {\r\n setTimeout(() => {\r\n const startMapOrigin = this.state.mapOrigin;\r\n const mapOrigin = this.state.origin.clone();\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ startMapOrigin, mapOrigin, animation: 0 }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n }, 0);\r\n }\r\n }\r\n\r\n private _handleMouseDown = (event: React.MouseEvent) => {\r\n // Used only to determine if mouse was moved between mousedown and mouseup\r\n const mouseStart = Point2d.create(event.clientX, event.clientY);\r\n this.setState({ mouseStart });\r\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\r\n };\r\n\r\n private _handleDrawingMouseDown = (event: React.MouseEvent) => {\r\n if (this.state.mode === MapMode.Opened) {\r\n event.preventDefault();\r\n this.setState({ isPanning: true });\r\n }\r\n };\r\n\r\n private _handleWindowMouseDown = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n this.setState({ isMoving: true });\r\n };\r\n\r\n private _handleMouseDrag = (event: React.MouseEvent) => {\r\n const mouse = Point2d.create(event.clientX, event.clientY);\r\n const movement = mouse.minus(this._lastClientXY);\r\n if (this.state.isMoving) {\r\n // add scaled mouse movement\r\n this._processWindowDrag(movement);\r\n } else {\r\n // istanbul ignore else\r\n if (this.state.isPanning && this.state.mode === MapMode.Opened) {\r\n const vect = Vector3d.create(movement.x / this.state.drawingZoom, -movement.y / this.state.drawingZoom, 0);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const mapOrigin = this.state.mapOrigin.minus(offset);\r\n this.setState({ startMapOrigin: mapOrigin, mapOrigin });\r\n }\r\n }\r\n this._lastClientXY = mouse;\r\n };\r\n\r\n private _handleMouseDragEnd = (event: React.MouseEvent) => {\r\n const mouse = Point2d.create(event.clientX, event.clientY);\r\n if (mouse.isAlmostEqual(this.state.mouseStart) &&\r\n this.state.mode === MapMode.Closed &&\r\n (event.target === this._viewContainerElement.current || event.target === this._viewElement.current)) {\r\n this._openLargeMap();\r\n } else if (this.state.isMoving) {\r\n this._processWindowEndDrag();\r\n } else if (this.state.isPanning) {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Opened) {\r\n event.stopPropagation();\r\n this.setState({ isPanning: false });\r\n }\r\n } else if ((!(event.target instanceof Node) || this._rootElement.current && !this._rootElement.current.contains(event.target)) && mouse.isAlmostEqual(this.state.mouseStart)) {\r\n this._closeLargeMap();\r\n }\r\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _handleWindowTouchStart = (event: any) => {\r\n if (1 !== event.targetTouches.length)\r\n return;\r\n window.addEventListener(\"touchmove\", this._onTouchMove, false);\r\n window.addEventListener(\"touchend\", this._onTouchEnd, false);\r\n const mouseStart = Point2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n this.setState({ mouseStart });\r\n this._lastClientXY = mouseStart.clone();\r\n this.setState({ isMoving: true });\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _onTouchMove = (event: TouchEvent) => {\r\n if (1 !== event.targetTouches.length)\r\n return;\r\n const mouse = Point2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n const movement = mouse.minus(this._lastClientXY);\r\n // add scaled mouse movement\r\n this._processWindowDrag(movement);\r\n this._lastClientXY = mouse;\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _onTouchEnd = (event: TouchEvent) => {\r\n if (0 !== event.targetTouches.length)\r\n return;\r\n this._processWindowEndDrag();\r\n if (0 !== event.changedTouches.length)\r\n this._lastClientXY = Point2d.create(event.changedTouches[0].clientX, event.changedTouches[0].clientY); // Doesn't seem necessary...but _handleMouseDragEnd sets it...\r\n window.removeEventListener(\"touchmove\", this._onTouchMove);\r\n window.removeEventListener(\"touchend\", this._onTouchEnd);\r\n };\r\n\r\n /** @internal */\r\n public static getDefaultClosedMapSize = (): Vector3d => {\r\n return Vector3d.create(96, 96);\r\n };\r\n\r\n /** @internal */\r\n public static getDefaultOpenedMapSize = (paddingX: number = 0, paddingY: number = 0): Vector3d => {\r\n return Vector3d.create(window.innerWidth / 3 - 2 * (window.innerWidth - paddingX), window.innerHeight / 3 - 2 * paddingY);\r\n };\r\n\r\n private _getClosedMapSize = (): Vector3d => {\r\n if (this.props.closeSize === undefined)\r\n return DrawingNavigationAid.getDefaultClosedMapSize();\r\n return this.props.closeSize;\r\n };\r\n\r\n private _getOpenedMapSize = (): Vector3d => {\r\n if (this.props.openSize === undefined)\r\n return DrawingNavigationAid.getDefaultOpenedMapSize(this._rootOffset.right, this._rootOffset.top);\r\n return this.props.openSize;\r\n };\r\n\r\n private _openLargeMap = () => {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Closed && this.state.animation === 1.0) {\r\n // istanbul ignore else\r\n if (this._rootElement.current) {\r\n const rect = this._rootElement.current.getBoundingClientRect();\r\n this._rootOffset = rect;\r\n }\r\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\r\n const mapExtents = this._getOpenedMapSize();\r\n this.setState({\r\n mode: MapMode.Opened,\r\n isMoving: false, isPanning: false,\r\n mapExtents, startMapExtents,\r\n animation: 0,\r\n }, () => {\r\n this._animationFrame = setTimeout(this._animation);\r\n });\r\n }\r\n };\r\n\r\n private _closeLargeMap = () => {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Opened && this.state.animation === 1.0) {\r\n const startMapOrigin = this.state.mapOrigin;\r\n const mapOrigin = this.state.origin.clone();\r\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\r\n const mapExtents = this._getClosedMapSize();\r\n const rect = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.extents : DrawingNavigationAid.findRotatedWindowDimensions(this.state.extents, this.state.rotation);\r\n const maxRectDim = Math.max(rect.y, rect.x);\r\n const maxExtentDim = Math.max(mapExtents.x, mapExtents.y);\r\n const drawingZoom = maxExtentDim / (3 * maxRectDim);\r\n const startDrawingZoom = this.state.drawingZoom;\r\n this.setState({\r\n mode: MapMode.Closed,\r\n startMapOrigin, mapOrigin,\r\n startDrawingZoom, drawingZoom,\r\n isMoving: false, isPanning: false,\r\n startMapExtents, mapExtents,\r\n panningDirection: Vector3d.createZero(),\r\n animation: 0,\r\n }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n };\r\n\r\n private _getPanVector = () => {\r\n const is3D = this._isViewport3D();\r\n const rect = this.state.rotateMinimapWithView || is3D ? this.state.extents : DrawingNavigationAid.findRotatedWindowDimensions(this.state.extents, this.state.rotation);\r\n\r\n const mapExtents = this.state.mapExtents.scale(1 / this.state.drawingZoom);\r\n\r\n const maxMagnitude = 80; // maximum acceleration\r\n const magnitudeTravel = 30; // How far, in pixels, that magnitude increases from 0 to max acceleration\r\n\r\n const diff = Vector3d.createFrom(this.state.origin.minus(this.state.mapOrigin));\r\n const diffVector = this.state.rotateMinimapWithView || is3D ? this.state.rotation.multiplyVector(diff) : diff;\r\n\r\n // capture any values\r\n const magnitudeVector = Vector3d.create(\r\n Math.max(0, Math.abs(diffVector.x) - (mapExtents.x - rect.x) / 2),\r\n Math.max(0, Math.abs(diffVector.y) - (mapExtents.y - rect.y) / 2),\r\n );\r\n if (magnitudeVector.isAlmostZero)\r\n return Vector3d.createZero();\r\n const magnitude = Math.min(magnitudeVector.magnitude() * this.state.drawingZoom, magnitudeTravel) / magnitudeTravel * maxMagnitude;\r\n\r\n const vect = Vector3d.createFrom(this.state.origin.minus(this.state.mapOrigin)); // vect will never be zero or magnitude would also be zero\r\n const norm = vect.normalize();\r\n return norm!.scale(magnitude); // norm is only undefined when vect is zero, in which it would have returned at magnitudeVector.isAlmostZero\r\n };\r\n\r\n private _handleWheel = (event: React.WheelEvent) => {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Opened && this.state.animation === 1) {\r\n const { mapOrigin, drawingZoom } = this.state;\r\n const mapSize = this._getOpenedMapSize();\r\n\r\n const mouseX = event.clientX - this._rootOffset.right + mapSize.x / 2;\r\n const mouseY = event.clientY - this._rootOffset.top - mapSize.y / 2;\r\n const is3D = this._isViewport3D();\r\n if (event.deltaY < 0) {\r\n const zoom = drawingZoom * 1.1;\r\n const vect = Vector3d.create(mouseX * 0.1 / zoom, -mouseY * 0.1 / zoom, 0);\r\n const offset = this.state.rotateMinimapWithView || is3D ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const m = mapOrigin.plus(offset);\r\n this.setState({ mapOrigin: m, drawingZoom: zoom });\r\n }\r\n if (event.deltaY > 0) {\r\n const zoom = drawingZoom / 1.1;\r\n const vect = Vector3d.create(mouseX * 0.1 / drawingZoom, -mouseY * 0.1 / drawingZoom, 0);\r\n const offset = this.state.rotateMinimapWithView || is3D ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const m = mapOrigin.minus(offset);\r\n this.setState({ mapOrigin: m, drawingZoom: zoom });\r\n }\r\n }\r\n };\r\n\r\n private _handleZoomIn = () => {\r\n const zoom = this.state.drawingZoom * 1.4;\r\n this.setState({ drawingZoom: zoom });\r\n };\r\n\r\n private _handleZoomOut = () => {\r\n const zoom = this.state.drawingZoom / 1.4;\r\n this.setState({ drawingZoom: zoom });\r\n };\r\n\r\n private _handleUnrotate = () => {\r\n const startRotation = this.state.rotation;\r\n const halfExtents = this.state.extents.scale(.5);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? Vector3d.createZero() : this.state.rotation.multiplyTransposeVector(halfExtents).minus(halfExtents);\r\n const startOrigin = this.state.origin;\r\n const origin = this.state.origin.plus(offset);\r\n const startMapOrigin = this.state.mapOrigin;\r\n const mapOrigin = this.state.mapOrigin.plus(offset);\r\n this.setState({ animation: 0, startOrigin, origin, startMapOrigin, mapOrigin, startRotation, rotation: Matrix3d.createIdentity() }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n };\r\n\r\n /** @internal */\r\n public static findRotatedWindowDimensions = (extents: Vector3d, rotation: Matrix3d) => {\r\n const cos = rotation.at(0, 0);\r\n const sin = rotation.at(1, 0);\r\n // extents.x/y should be divided in half, but we don't have to do that immediately.\r\n const cosWidth = cos * extents.x;\r\n const sinHeight = sin * extents.y;\r\n\r\n const sinWidth = cos * extents.x;\r\n const cosHeight = sin * extents.y;\r\n\r\n const a = Math.atan2(sin, cos);\r\n\r\n if (a % Math.PI >= 0 && a % Math.PI < Math.PI / 2) {\r\n const y1 = -cosHeight - sinWidth;\r\n const x2 = cosWidth + sinHeight;\r\n const y3 = cosHeight + sinWidth;\r\n const x4 = -cosWidth - sinHeight;\r\n // Instead, divide total difference\r\n return Vector3d.create(Math.abs(x2 - x4) / 2, Math.abs(y1 - y3) / 2);\r\n } else {\r\n const x1 = -cosWidth + sinHeight;\r\n const y2 = -cosHeight + sinWidth;\r\n const x3 = cosWidth - sinHeight;\r\n const y4 = cosHeight - sinWidth;\r\n return Vector3d.create(Math.abs(x1 - x3) / 2, Math.abs(y2 - y4) / 2);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface DrawingNavigationCanvasProps {\r\n view: ViewState | undefined;\r\n viewId?: string;\r\n origin: Point3d;\r\n extents: Vector3d;\r\n zoom: number;\r\n rotation: Matrix3d;\r\n viewManagerOverride?: ViewManager;\r\n screenViewportOverride?: typeof ScreenViewport;\r\n canvasSizeOverride?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class DrawingNavigationCanvas extends React.Component<DrawingNavigationCanvasProps> {\r\n private _canvasElement = React.createRef<HTMLDivElement>();\r\n private _vp?: ScreenViewport;\r\n\r\n public override render(): React.ReactNode {\r\n return (\r\n <div className=\"drawing-canvas\"\r\n data-testid=\"drawing-canvas\"\r\n ref={this._canvasElement}>\r\n </div>\r\n );\r\n }\r\n\r\n public override componentDidMount() {\r\n if (this._canvasElement.current && this.props.view !== undefined) {\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n /* istanbul ignore next */\r\n const screenViewport = this.props.screenViewportOverride ? this.props.screenViewportOverride : /* istanbul ignore next */ ScreenViewport;\r\n const previousView = viewManager.selectedView;\r\n this._vp = screenViewport.create(this._canvasElement.current, this.props.view);\r\n this.customizeViewport(this._vp);\r\n viewManager.addViewport(this._vp);\r\n void viewManager.setSelectedView(previousView); // switch to original viewport\r\n this._update();\r\n }\r\n }\r\n\r\n private customizeViewport(vp: ScreenViewport): void {\r\n /* istanbul ignore next */\r\n if (vp.logo.style)\r\n vp.logo.style.display = \"none\";\r\n\r\n /* istanbul ignore next */\r\n if (vp.viewFlags.acsTriad)\r\n vp.viewFlags = vp.viewFlags.with(\"acsTriad\", false);\r\n }\r\n\r\n private _update = () => {\r\n // istanbul ignore else\r\n if (this._vp) {\r\n const max = Math.max(this.props.extents.x, this.props.extents.y);\r\n this._vp.view.extentLimits = { max, min: Constant.oneMillimeter };\r\n this._vp.view.setOrigin(this.props.origin);\r\n this._vp.view.setRotation(this.props.rotation);\r\n this._vp.view.setExtents(this.props.extents);\r\n this._vp.applyViewState(this._vp.view);\r\n }\r\n };\r\n\r\n public override componentDidUpdate(oldProps: DrawingNavigationCanvasProps) {\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n if (this.props.view !== undefined) {\r\n if (oldProps.view !== this.props.view) {\r\n const screenViewport = this.props.screenViewportOverride ? this.props.screenViewportOverride : /* istanbul ignore next */ ScreenViewport;\r\n if (oldProps !== undefined && oldProps.viewId !== \"\" && oldProps.viewId !== this.props.viewId && this._vp) {\r\n viewManager.dropViewport(this._vp, true);\r\n }\r\n // istanbul ignore else\r\n if (this._canvasElement.current &&\r\n (this.props.canvasSizeOverride ||\r\n ( /* istanbul ignore next */ this._canvasElement.current.clientWidth !== 0 && /* istanbul ignore next */ this._canvasElement.current.clientHeight !== 0))) {\r\n const previousView = viewManager.selectedView;\r\n this._vp = screenViewport.create(this._canvasElement.current, this.props.view.clone());\r\n this.customizeViewport(this._vp);\r\n viewManager.addViewport(this._vp);\r\n void viewManager.setSelectedView(previousView); // switch to original viewport\r\n this._update();\r\n }\r\n } else if (!this.props.origin.isExactEqual(oldProps.origin) || !this.props.extents.isExactEqual(oldProps.extents) || this.props.zoom !== oldProps.zoom || !this.props.rotation.isExactEqual(oldProps.rotation)) {\r\n this._update();\r\n }\r\n }\r\n }\r\n\r\n public override componentWillUnmount() {\r\n if (this._vp) {\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n viewManager.dropViewport(this._vp, true);\r\n }\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"DrawingNavigationAid.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/navigationaids/DrawingNavigationAid.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NavigationAids\r\n */\r\n\r\nimport \"./DrawingNavigationAid.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { Constant, Geometry, Matrix3d, Point2d, Point3d, Point4d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { IModelApp, IModelConnection, ScreenViewport, ViewManager, Viewport, ViewState } from \"@itwin/core-frontend\";\r\nimport { SpecialKey } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, Icon } from \"@itwin/core-react\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\nimport { ViewportComponentEvents, ViewRotationChangeEventArgs } from \"../viewport/ViewportComponentEvents\";\r\nimport { SvgAdd, SvgRemove, SvgRotateLeft, SvgSortUp } from \"@itwin/itwinui-icons-react\";\r\n\r\n// cSpell:ignore Quaternion Quaternions unrotate\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n\r\n/**\r\n * Enum for mode that minimap is currently in\r\n * @internal\r\n */\r\nexport enum MapMode {\r\n Opened = \"map-opened\",\r\n Closed = \"map-closed\",\r\n}\r\n\r\n/** Properties for the [[DrawingNavigationAid]] component\r\n * @public\r\n */\r\nexport interface DrawingNavigationAidProps extends CommonProps {\r\n iModelConnection: IModelConnection;\r\n viewport?: Viewport;\r\n\r\n // used only in testing\r\n\r\n /** @internal */\r\n animationTime?: number;\r\n /** @internal */\r\n openSize?: Vector3d;\r\n /** @internal */\r\n closeSize?: Vector3d;\r\n /** @internal */\r\n initialMapMode?: MapMode;\r\n /** @internal */\r\n onAnimationEnd?: () => void;\r\n /** @internal */\r\n initialRotateMinimapWithView?: boolean;\r\n /** @internal */\r\n initialView?: ViewState;\r\n /** @internal */\r\n viewManagerOverride?: ViewManager;\r\n /** @internal */\r\n screenViewportOverride?: typeof ScreenViewport;\r\n}\r\n\r\n/** @internal */\r\ninterface DrawingNavigationAidState {\r\n startOrigin: Point3d;\r\n origin: Point3d;\r\n extents: Vector3d;\r\n startRotation: Matrix3d;\r\n rotation: Matrix3d;\r\n\r\n startMapOrigin: Point3d;\r\n mapOrigin: Point3d;\r\n startMapExtents: Vector3d;\r\n mapExtents: Vector3d;\r\n\r\n mouseStart: Point2d;\r\n panningDirection: Vector3d;\r\n startDrawingZoom: number;\r\n drawingZoom: number;\r\n\r\n mode: MapMode;\r\n animation: number;\r\n\r\n isMoving: boolean;\r\n isPanning: boolean;\r\n\r\n viewId: string;\r\n view: ViewState | undefined;\r\n\r\n rotateMinimapWithView: boolean;\r\n}\r\n\r\n/**\r\n * A Drawing Navigation Aid.\r\n * @public\r\n */\r\nexport class DrawingNavigationAid extends React.Component<DrawingNavigationAidProps, DrawingNavigationAidState> {\r\n private _rootElement = React.createRef<HTMLDivElement>();\r\n private _viewContainerElement = React.createRef<HTMLDivElement>();\r\n private _viewElement = React.createRef<HTMLDivElement>();\r\n private _rootOffset: DOMRect = DOMRect.fromRect({ x: 0, y: 0, width: 0, height: 0 });\r\n private _viewport: Viewport | undefined;\r\n private _animationFrame: any;\r\n private _mounted: boolean = false;\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<DrawingNavigationAidState>;\r\n\r\n constructor(props: DrawingNavigationAidProps) {\r\n super(props);\r\n const mode = props.initialMapMode || MapMode.Closed;\r\n const mapExtents = mode === MapMode.Closed ? this._getClosedMapSize() : this._getOpenedMapSize();\r\n const startMapExtents = mapExtents;\r\n\r\n this.state = {\r\n startOrigin: Point3d.createZero(),\r\n origin: Point3d.createZero(),\r\n extents: Vector3d.create(1, 1, 1),\r\n startRotation: Matrix3d.createIdentity(),\r\n rotation: Matrix3d.createIdentity(),\r\n\r\n startMapOrigin: Point3d.createZero(),\r\n mapOrigin: Point3d.createZero(),\r\n startMapExtents,\r\n mapExtents,\r\n\r\n mouseStart: Point2d.createZero(),\r\n panningDirection: Vector3d.createZero(),\r\n startDrawingZoom: 1.0,\r\n drawingZoom: 1.0,\r\n\r\n mode,\r\n animation: 1.0,\r\n\r\n viewId: props.initialView !== undefined ? props.initialView.id : \"\",\r\n view: props.initialView,\r\n\r\n isMoving: false,\r\n isPanning: false,\r\n rotateMinimapWithView: props.initialRotateMinimapWithView !== undefined ? props.initialRotateMinimapWithView : false,\r\n };\r\n }\r\n\r\n /** @internal */\r\n public override render(): React.ReactNode {\r\n const {\r\n startOrigin, origin, extents,\r\n startRotation, rotation,\r\n startMapOrigin, mapOrigin,\r\n startMapExtents, mapExtents,\r\n startDrawingZoom, drawingZoom,\r\n animation,\r\n viewId,\r\n mode, rotateMinimapWithView,\r\n } = this.state;\r\n\r\n const a = DrawingNavigationAid._animationFn(animation);\r\n const rot = Matrix3d.createFromQuaternion(Point4d.interpolateQuaternions(startRotation.toQuaternion(), a, rotation.toQuaternion()));\r\n const or = startOrigin.interpolate(a, origin);\r\n const map = startMapOrigin.interpolate(a, mapOrigin);\r\n const sz = startMapExtents.interpolate(a, mapExtents);\r\n const dz = Geometry.interpolate(startDrawingZoom, a, drawingZoom);\r\n\r\n const rootStyle: React.CSSProperties = {\r\n width: sz.x, height: sz.y,\r\n ...this.props.style,\r\n };\r\n const is3D = this._isViewport3D();\r\n\r\n const tOr = rotateMinimapWithView || is3D ? rotation.multiplyVector(Vector3d.createFrom(or)) : Vector3d.createFrom(or);\r\n const tMap = rotateMinimapWithView || is3D ? rotation.multiplyVector(Vector3d.createFrom(map)) : Vector3d.createFrom(map);\r\n\r\n const tPosX = (tOr.x - extents.x / 2 - tMap.x) * dz + sz.x / 2;\r\n const tPosY = (-tOr.y - extents.y / 2 + tMap.y) * dz + sz.y / 2;\r\n const viewWindowStyle = {\r\n transform: `translate(${tPosX}px, ${tPosY}px)`,\r\n height: extents.y * dz,\r\n width: extents.x * dz,\r\n };\r\n if (!rotateMinimapWithView && !is3D)\r\n viewWindowStyle.transform =\r\n \"matrix3d(\" +\r\n `${rot.at(0, 0)}, ${rot.at(1, 0)}, ${rot.at(2, 0)}, 0, ` +\r\n `${rot.at(0, 1)}, ${rot.at(1, 1)}, ${rot.at(2, 1)}, 0, ` +\r\n `${rot.at(0, 2)}, ${rot.at(1, 2)}, ${rot.at(2, 2)}, 0, ` +\r\n `${tPosX}, ${tPosY}, 0, 1)`;\r\n const isAnimating = animation !== 1 && !startMapExtents.isExactEqual(mapExtents);\r\n if (mode === MapMode.Opened || isAnimating) {\r\n rootStyle.position = \"fixed\";\r\n rootStyle.right = window.innerWidth - this._rootOffset.right;\r\n rootStyle.top = this._rootOffset.top;\r\n }\r\n\r\n const halfExtents = extents.scale(.5);\r\n const offset = rotateMinimapWithView || is3D ? Vector3d.createZero() : rotation.multiplyTransposeVector(halfExtents).minus(halfExtents);\r\n\r\n const unrotateLabel = UiIModelComponents.translate(\"drawing.unrotate\");\r\n const e = sz.scale(1 / dz);\r\n const halfMapExtents = e.scale(.5);\r\n const mapOffset = rotateMinimapWithView || is3D ? rotation.multiplyTransposeVector(halfMapExtents) : halfMapExtents;\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n const screenViewport = this.props.screenViewportOverride ? this.props.screenViewportOverride : /* istanbul ignore next */ ScreenViewport;\r\n const nodes = (\r\n <div className={classnames(\"components-drawing-navigation-aid\", this.props.className)}\r\n data-testid=\"components-drawing-navigation-aid\"\r\n ref={this._rootElement}\r\n onWheel={this._handleWheel}\r\n onMouseDown={this._handleDrawingMouseDown}\r\n style={rootStyle}\r\n role=\"presentation\">\r\n <DrawingNavigationCanvas view={this.state.view} viewManagerOverride={viewManager} screenViewportOverride={screenViewport} viewId={viewId} origin={map.plus(offset).minus(mapOffset)} extents={e} zoom={dz} rotation={rotateMinimapWithView || is3D ? rotation : Matrix3d.createIdentity()} />\r\n <div className=\"drawing-container\"\r\n data-testid=\"drawing-container\"\r\n ref={this._viewContainerElement}>\r\n <div className=\"drawing-view-window\"\r\n data-testid=\"drawing-view-window\"\r\n onMouseDown={this._handleWindowMouseDown}\r\n onTouchStart={this._handleWindowTouchStart}\r\n style={viewWindowStyle}\r\n ref={this._viewElement}\r\n role=\"presentation\" />\r\n {!is3D &&\r\n <div className={classnames(\"toggle-rotate-style\", \"icon\", { checked: rotateMinimapWithView })} data-testid=\"toggle-rotate-style\"\r\n style={mode === MapMode.Closed && !isAnimating ? { bottom: 2, left: 2 } : {}}\r\n title={UiIModelComponents.translate(\"drawing.rotateStyle\")}\r\n onClick={this._toggleRotationMode}\r\n role=\"presentation\"><Icon iconSpec={<SvgRotateLeft />} /></div>}\r\n {!rot.isIdentity &&\r\n <div className=\"unrotate-button\" data-testid=\"drawing-unrotate-button\" style={mode === MapMode.Closed && !isAnimating ? { top: 2 } : {}} onClick={this._handleUnrotate}\r\n role=\"button\" tabIndex={-1}\r\n >\r\n {unrotateLabel}\r\n </div>\r\n }\r\n {mode === MapMode.Opened && !isAnimating && <>\r\n <div className=\"close\" data-testid=\"drawing-close-button\" onClick={this._closeLargeMap} role=\"button\" tabIndex={-1}>\r\n <div className=\"close-icon icon\"><Icon iconSpec={<SvgSortUp />} /></div>\r\n </div>\r\n <div className=\"zoom\">\r\n <div className=\"zoom-button icon\" data-testid=\"drawing-zoom-in-button\" onClick={this._handleZoomIn} role=\"button\" tabIndex={-1}>\r\n <Icon iconSpec={<SvgAdd />} />\r\n </div>\r\n <div className=\"zoom-button icon\" data-testid=\"drawing-zoom-out-button\" onClick={this._handleZoomOut} role=\"button\" tabIndex={-1}>\r\n <Icon iconSpec={<SvgRemove />} />\r\n </div>\r\n </div>\r\n </>}\r\n </div>\r\n </div>\r\n );\r\n if (mode === MapMode.Closed && (animation === 1.0 || startMapExtents.isExactEqual(mapExtents))) {\r\n return nodes;\r\n } else {\r\n let drawingPortal = document.querySelector(\"#components-drawing-portal\");\r\n if (!drawingPortal) {\r\n drawingPortal = document.createElement(\"div\");\r\n drawingPortal.id = \"components-drawing-portal\";\r\n document.body.appendChild(drawingPortal);\r\n }\r\n return ReactDOM.createPortal(nodes, drawingPortal);\r\n }\r\n }\r\n\r\n private _isViewport3D = () => {\r\n return this.state.view !== undefined && this.state.view.is3d();\r\n };\r\n\r\n private _lastTime: number | undefined;\r\n\r\n private static _animationFn = (t: number) => t < .5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t;\r\n\r\n private _animation = () => {\r\n const t = Date.now();\r\n const delta = this._lastTime ? t - this._lastTime : 16;\r\n this._lastTime = t;\r\n if (this.state.animation !== 1) {\r\n const animation = Math.min(1, this.state.animation + delta / (1000 * (this.props.animationTime || 0.4)));\r\n this._updateFrustum();\r\n\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ animation }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n } else {\r\n this._lastTime = undefined;\r\n this._animationEnd();\r\n }\r\n };\r\n\r\n private _animationEnd = () => {\r\n const hasViewportMoved = !this.state.origin.isAlmostEqual(this.state.startOrigin) ||\r\n !this.state.rotation.isAlmostEqual(this.state.startRotation);\r\n const startMapOrigin = Point3d.createFrom(this.state.mapOrigin);\r\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\r\n const startDrawingZoom = this.state.drawingZoom;\r\n const startOrigin = this.state.origin;\r\n const startRotation = this.state.rotation;\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ startMapOrigin, startDrawingZoom, startOrigin, startRotation, startMapExtents }, () => {\r\n // istanbul ignore else\r\n if (this.props.onAnimationEnd)\r\n this.props.onAnimationEnd();\r\n if (hasViewportMoved)\r\n this._updateFrustum(true);\r\n });\r\n }\r\n };\r\n\r\n private _lastPanTime: number | undefined;\r\n\r\n private _panAnimation = () => {\r\n const t = Date.now();\r\n if (this._lastPanTime === undefined)\r\n this._lastPanTime = t - 16.667;\r\n const delta = t - this._lastPanTime;\r\n this._lastPanTime = t;\r\n // istanbul ignore else\r\n if (!this.state.panningDirection.isAlmostZero && this.state.isMoving) {\r\n const { panningDirection } = this.state;\r\n const offset = panningDirection.scale(delta / 1000 / this.state.drawingZoom);\r\n const mapOrigin = this.state.mapOrigin.plus(offset);\r\n\r\n const origin = this.state.origin.plus(offset);\r\n this._updateFrustum();\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ mapOrigin, origin, panningDirection }, () => {\r\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\r\n });\r\n }\r\n } else {\r\n this._lastPanTime = undefined;\r\n this._updateFrustum(true);\r\n }\r\n };\r\n\r\n public override componentDidMount() {\r\n this._mounted = true;\r\n ViewportComponentEvents.onViewRotationChangeEvent.addListener(this._handleViewRotationChangeEvent);\r\n window.addEventListener(\"mousedown\", this._handleMouseDown as any);\r\n window.addEventListener(\"mouseup\", this._handleMouseDragEnd as any);\r\n window.addEventListener(\"mousemove\", this._handleMouseDrag as any);\r\n window.addEventListener(\"keyup\", this._handleKeyUp as any);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n ViewportComponentEvents.onViewRotationChangeEvent.removeListener(this._handleViewRotationChangeEvent);\r\n window.removeEventListener(\"mousedown\", this._handleMouseDown as any);\r\n window.removeEventListener(\"mouseup\", this._handleMouseDragEnd as any);\r\n window.removeEventListener(\"mousemove\", this._handleMouseDrag as any);\r\n window.removeEventListener(\"keyup\", this._handleKeyUp as any);\r\n clearTimeout(this._animationFrame);\r\n if (this.props.onAnimationEnd)\r\n this.props.onAnimationEnd();\r\n\r\n const rt = document.getElementById(\"components-drawing-portal\") as HTMLDivElement;\r\n if (rt && rt.parentElement !== null && rt.children.length === 0) {\r\n rt.parentElement.removeChild(rt);\r\n }\r\n this._mounted = false;\r\n }\r\n\r\n // Synchronize with rotation coming from the Viewport\r\n private _handleViewRotationChangeEvent = (args: ViewRotationChangeEventArgs) => {\r\n // istanbul ignore else\r\n if (!this.state.isMoving && !this.state.isPanning && this.props.viewport === args.viewport) {\r\n const extents = args.viewport.view.getExtents().clone();\r\n const rotation = args.viewport.view.getRotation().clone();\r\n const halfExtents = extents.scale(.5);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? rotation.multiplyTransposeVector(halfExtents) : halfExtents;\r\n const origin = args.viewport.view.getOrigin().plus(offset);\r\n const deltaZoom = (this.state.extents.x - extents.x) / this.state.extents.x;\r\n let drawingZoom = this.state.drawingZoom / (1 - deltaZoom);\r\n const deltaOrigin = origin.minus(this.state.origin);\r\n let mapOrigin = this.state.mapOrigin.plus(deltaOrigin);\r\n mapOrigin = mapOrigin.plus(Vector3d.createFrom(origin.minus(mapOrigin)).scale(deltaZoom));\r\n if (this.state.viewId !== args.viewport.view.id) {\r\n const rect = this.state.rotateMinimapWithView || this._isViewport3D() ? extents : DrawingNavigationAid.findRotatedWindowDimensions(extents, rotation);\r\n const maxRectDim = Math.max(rect.y, rect.x);\r\n const maxExtentDim = Math.max(this.state.mapExtents.x, this.state.mapExtents.y);\r\n drawingZoom = maxExtentDim / (3 * maxRectDim);\r\n mapOrigin = origin.clone();\r\n this._viewport = args.viewport;\r\n this.setState({ viewId: args.viewport.view.id, view: args.viewport.view.clone() });\r\n }\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({\r\n startOrigin: origin, origin, extents,\r\n startRotation: rotation, rotation,\r\n startMapOrigin: mapOrigin, mapOrigin,\r\n startDrawingZoom: drawingZoom, drawingZoom,\r\n });\r\n }\r\n }\r\n };\r\n\r\n private _updateFrustum = (complete: boolean = false) => {\r\n const halfExtents = this.state.extents.scale(.5);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.rotation.multiplyTransposeVector(halfExtents) : halfExtents;\r\n const origin = this.state.origin.minus(offset);\r\n ViewportComponentEvents.setDrawingViewportState(origin, this.state.rotation, complete);\r\n };\r\n\r\n private _toggleRotationMode = () => {\r\n const rotateMinimapWithView = !this.state.rotateMinimapWithView;\r\n this.setState({ rotateMinimapWithView }, () => {\r\n if (this._viewport)\r\n this._handleViewRotationChangeEvent({ viewport: this._viewport });\r\n });\r\n };\r\n\r\n private _handleKeyUp = (event: React.KeyboardEvent) => {\r\n // istanbul ignore else\r\n if (event.key === SpecialKey.Escape && this.state.mode === MapMode.Opened) {\r\n this._closeLargeMap();\r\n }\r\n };\r\n\r\n private _lastClientXY: Point2d = Point2d.createZero();\r\n\r\n private _processWindowDrag(movement: Point2d) {\r\n const vect = Vector3d.create(movement.x / this.state.drawingZoom, -movement.y / this.state.drawingZoom, 0);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const origin = this.state.origin.plus(offset);\r\n const panningDirection = this._getPanVector();\r\n const wasAlmostZero = this.state.panningDirection.isAlmostZero;\r\n this.setState({ startOrigin: origin, origin, panningDirection, isPanning: false }, () => {\r\n this._updateFrustum();\r\n if (wasAlmostZero && !this.state.panningDirection.isAlmostZero) {\r\n this._animationFrame = setTimeout(this._panAnimation, 16.667);\r\n }\r\n });\r\n }\r\n\r\n private _processWindowEndDrag() {\r\n this.setState({ isMoving: false });\r\n this._updateFrustum(true);\r\n if (this.state.mode === MapMode.Closed) {\r\n setTimeout(() => {\r\n const startMapOrigin = this.state.mapOrigin;\r\n const mapOrigin = this.state.origin.clone();\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ startMapOrigin, mapOrigin, animation: 0 }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n }, 0);\r\n }\r\n }\r\n\r\n private _handleMouseDown = (event: React.MouseEvent) => {\r\n // Used only to determine if mouse was moved between mousedown and mouseup\r\n const mouseStart = Point2d.create(event.clientX, event.clientY);\r\n this.setState({ mouseStart });\r\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\r\n };\r\n\r\n private _handleDrawingMouseDown = (event: React.MouseEvent) => {\r\n if (this.state.mode === MapMode.Opened) {\r\n event.preventDefault();\r\n this.setState({ isPanning: true });\r\n }\r\n };\r\n\r\n private _handleWindowMouseDown = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n this.setState({ isMoving: true });\r\n };\r\n\r\n private _handleMouseDrag = (event: React.MouseEvent) => {\r\n const mouse = Point2d.create(event.clientX, event.clientY);\r\n const movement = mouse.minus(this._lastClientXY);\r\n if (this.state.isMoving) {\r\n // add scaled mouse movement\r\n this._processWindowDrag(movement);\r\n } else {\r\n // istanbul ignore else\r\n if (this.state.isPanning && this.state.mode === MapMode.Opened) {\r\n const vect = Vector3d.create(movement.x / this.state.drawingZoom, -movement.y / this.state.drawingZoom, 0);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const mapOrigin = this.state.mapOrigin.minus(offset);\r\n this.setState({ startMapOrigin: mapOrigin, mapOrigin });\r\n }\r\n }\r\n this._lastClientXY = mouse;\r\n };\r\n\r\n private _handleMouseDragEnd = (event: React.MouseEvent) => {\r\n const mouse = Point2d.create(event.clientX, event.clientY);\r\n if (mouse.isAlmostEqual(this.state.mouseStart) &&\r\n this.state.mode === MapMode.Closed &&\r\n (event.target === this._viewContainerElement.current || event.target === this._viewElement.current)) {\r\n this._openLargeMap();\r\n } else if (this.state.isMoving) {\r\n this._processWindowEndDrag();\r\n } else if (this.state.isPanning) {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Opened) {\r\n event.stopPropagation();\r\n this.setState({ isPanning: false });\r\n }\r\n } else if ((!(event.target instanceof Node) || this._rootElement.current && !this._rootElement.current.contains(event.target)) && mouse.isAlmostEqual(this.state.mouseStart)) {\r\n this._closeLargeMap();\r\n }\r\n this._lastClientXY = Point2d.create(event.clientX, event.clientY);\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _handleWindowTouchStart = (event: any) => {\r\n if (1 !== event.targetTouches.length)\r\n return;\r\n window.addEventListener(\"touchmove\", this._onTouchMove, false);\r\n window.addEventListener(\"touchend\", this._onTouchEnd, false);\r\n const mouseStart = Point2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n this.setState({ mouseStart });\r\n this._lastClientXY = mouseStart.clone();\r\n this.setState({ isMoving: true });\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _onTouchMove = (event: TouchEvent) => {\r\n if (1 !== event.targetTouches.length)\r\n return;\r\n const mouse = Point2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n const movement = mouse.minus(this._lastClientXY);\r\n // add scaled mouse movement\r\n this._processWindowDrag(movement);\r\n this._lastClientXY = mouse;\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _onTouchEnd = (event: TouchEvent) => {\r\n if (0 !== event.targetTouches.length)\r\n return;\r\n this._processWindowEndDrag();\r\n if (0 !== event.changedTouches.length)\r\n this._lastClientXY = Point2d.create(event.changedTouches[0].clientX, event.changedTouches[0].clientY); // Doesn't seem necessary...but _handleMouseDragEnd sets it...\r\n window.removeEventListener(\"touchmove\", this._onTouchMove);\r\n window.removeEventListener(\"touchend\", this._onTouchEnd);\r\n };\r\n\r\n /** @internal */\r\n public static getDefaultClosedMapSize = (): Vector3d => {\r\n return Vector3d.create(96, 96);\r\n };\r\n\r\n /** @internal */\r\n public static getDefaultOpenedMapSize = (paddingX: number = 0, paddingY: number = 0): Vector3d => {\r\n return Vector3d.create(window.innerWidth / 3 - 2 * (window.innerWidth - paddingX), window.innerHeight / 3 - 2 * paddingY);\r\n };\r\n\r\n private _getClosedMapSize = (): Vector3d => {\r\n if (this.props.closeSize === undefined)\r\n return DrawingNavigationAid.getDefaultClosedMapSize();\r\n return this.props.closeSize;\r\n };\r\n\r\n private _getOpenedMapSize = (): Vector3d => {\r\n if (this.props.openSize === undefined)\r\n return DrawingNavigationAid.getDefaultOpenedMapSize(this._rootOffset.right, this._rootOffset.top);\r\n return this.props.openSize;\r\n };\r\n\r\n private _openLargeMap = () => {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Closed && this.state.animation === 1.0) {\r\n // istanbul ignore else\r\n if (this._rootElement.current) {\r\n const rect = this._rootElement.current.getBoundingClientRect();\r\n this._rootOffset = rect;\r\n }\r\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\r\n const mapExtents = this._getOpenedMapSize();\r\n this.setState({\r\n mode: MapMode.Opened,\r\n isMoving: false, isPanning: false,\r\n mapExtents, startMapExtents,\r\n animation: 0,\r\n }, () => {\r\n this._animationFrame = setTimeout(this._animation);\r\n });\r\n }\r\n };\r\n\r\n private _closeLargeMap = () => {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Opened && this.state.animation === 1.0) {\r\n const startMapOrigin = this.state.mapOrigin;\r\n const mapOrigin = this.state.origin.clone();\r\n const startMapExtents = Vector3d.createFrom(this.state.mapExtents);\r\n const mapExtents = this._getClosedMapSize();\r\n const rect = this.state.rotateMinimapWithView || this._isViewport3D() ? this.state.extents : DrawingNavigationAid.findRotatedWindowDimensions(this.state.extents, this.state.rotation);\r\n const maxRectDim = Math.max(rect.y, rect.x);\r\n const maxExtentDim = Math.max(mapExtents.x, mapExtents.y);\r\n const drawingZoom = maxExtentDim / (3 * maxRectDim);\r\n const startDrawingZoom = this.state.drawingZoom;\r\n this.setState({\r\n mode: MapMode.Closed,\r\n startMapOrigin, mapOrigin,\r\n startDrawingZoom, drawingZoom,\r\n isMoving: false, isPanning: false,\r\n startMapExtents, mapExtents,\r\n panningDirection: Vector3d.createZero(),\r\n animation: 0,\r\n }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n };\r\n\r\n private _getPanVector = () => {\r\n const is3D = this._isViewport3D();\r\n const rect = this.state.rotateMinimapWithView || is3D ? this.state.extents : DrawingNavigationAid.findRotatedWindowDimensions(this.state.extents, this.state.rotation);\r\n\r\n const mapExtents = this.state.mapExtents.scale(1 / this.state.drawingZoom);\r\n\r\n const maxMagnitude = 80; // maximum acceleration\r\n const magnitudeTravel = 30; // How far, in pixels, that magnitude increases from 0 to max acceleration\r\n\r\n const diff = Vector3d.createFrom(this.state.origin.minus(this.state.mapOrigin));\r\n const diffVector = this.state.rotateMinimapWithView || is3D ? this.state.rotation.multiplyVector(diff) : diff;\r\n\r\n // capture any values\r\n const magnitudeVector = Vector3d.create(\r\n Math.max(0, Math.abs(diffVector.x) - (mapExtents.x - rect.x) / 2),\r\n Math.max(0, Math.abs(diffVector.y) - (mapExtents.y - rect.y) / 2),\r\n );\r\n if (magnitudeVector.isAlmostZero)\r\n return Vector3d.createZero();\r\n const magnitude = Math.min(magnitudeVector.magnitude() * this.state.drawingZoom, magnitudeTravel) / magnitudeTravel * maxMagnitude;\r\n\r\n const vect = Vector3d.createFrom(this.state.origin.minus(this.state.mapOrigin)); // vect will never be zero or magnitude would also be zero\r\n const norm = vect.normalize();\r\n return norm!.scale(magnitude); // norm is only undefined when vect is zero, in which it would have returned at magnitudeVector.isAlmostZero\r\n };\r\n\r\n private _handleWheel = (event: React.WheelEvent) => {\r\n // istanbul ignore else\r\n if (this.state.mode === MapMode.Opened && this.state.animation === 1) {\r\n const { mapOrigin, drawingZoom } = this.state;\r\n const mapSize = this._getOpenedMapSize();\r\n\r\n const mouseX = event.clientX - this._rootOffset.right + mapSize.x / 2;\r\n const mouseY = event.clientY - this._rootOffset.top - mapSize.y / 2;\r\n const is3D = this._isViewport3D();\r\n if (event.deltaY < 0) {\r\n const zoom = drawingZoom * 1.1;\r\n const vect = Vector3d.create(mouseX * 0.1 / zoom, -mouseY * 0.1 / zoom, 0);\r\n const offset = this.state.rotateMinimapWithView || is3D ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const m = mapOrigin.plus(offset);\r\n this.setState({ mapOrigin: m, drawingZoom: zoom });\r\n }\r\n if (event.deltaY > 0) {\r\n const zoom = drawingZoom / 1.1;\r\n const vect = Vector3d.create(mouseX * 0.1 / drawingZoom, -mouseY * 0.1 / drawingZoom, 0);\r\n const offset = this.state.rotateMinimapWithView || is3D ? this.state.rotation.multiplyTransposeVector(vect) : vect;\r\n const m = mapOrigin.minus(offset);\r\n this.setState({ mapOrigin: m, drawingZoom: zoom });\r\n }\r\n }\r\n };\r\n\r\n private _handleZoomIn = () => {\r\n const zoom = this.state.drawingZoom * 1.4;\r\n this.setState({ drawingZoom: zoom });\r\n };\r\n\r\n private _handleZoomOut = () => {\r\n const zoom = this.state.drawingZoom / 1.4;\r\n this.setState({ drawingZoom: zoom });\r\n };\r\n\r\n private _handleUnrotate = () => {\r\n const startRotation = this.state.rotation;\r\n const halfExtents = this.state.extents.scale(.5);\r\n const offset = this.state.rotateMinimapWithView || this._isViewport3D() ? Vector3d.createZero() : this.state.rotation.multiplyTransposeVector(halfExtents).minus(halfExtents);\r\n const startOrigin = this.state.origin;\r\n const origin = this.state.origin.plus(offset);\r\n const startMapOrigin = this.state.mapOrigin;\r\n const mapOrigin = this.state.mapOrigin.plus(offset);\r\n this.setState({ animation: 0, startOrigin, origin, startMapOrigin, mapOrigin, startRotation, rotation: Matrix3d.createIdentity() }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n };\r\n\r\n /** @internal */\r\n public static findRotatedWindowDimensions = (extents: Vector3d, rotation: Matrix3d) => {\r\n const cos = rotation.at(0, 0);\r\n const sin = rotation.at(1, 0);\r\n // extents.x/y should be divided in half, but we don't have to do that immediately.\r\n const cosWidth = cos * extents.x;\r\n const sinHeight = sin * extents.y;\r\n\r\n const sinWidth = cos * extents.x;\r\n const cosHeight = sin * extents.y;\r\n\r\n const a = Math.atan2(sin, cos);\r\n\r\n if (a % Math.PI >= 0 && a % Math.PI < Math.PI / 2) {\r\n const y1 = -cosHeight - sinWidth;\r\n const x2 = cosWidth + sinHeight;\r\n const y3 = cosHeight + sinWidth;\r\n const x4 = -cosWidth - sinHeight;\r\n // Instead, divide total difference\r\n return Vector3d.create(Math.abs(x2 - x4) / 2, Math.abs(y1 - y3) / 2);\r\n } else {\r\n const x1 = -cosWidth + sinHeight;\r\n const y2 = -cosHeight + sinWidth;\r\n const x3 = cosWidth - sinHeight;\r\n const y4 = cosHeight - sinWidth;\r\n return Vector3d.create(Math.abs(x1 - x3) / 2, Math.abs(y2 - y4) / 2);\r\n }\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface DrawingNavigationCanvasProps {\r\n view: ViewState | undefined;\r\n viewId?: string;\r\n origin: Point3d;\r\n extents: Vector3d;\r\n zoom: number;\r\n rotation: Matrix3d;\r\n viewManagerOverride?: ViewManager;\r\n screenViewportOverride?: typeof ScreenViewport;\r\n canvasSizeOverride?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class DrawingNavigationCanvas extends React.Component<DrawingNavigationCanvasProps> {\r\n private _canvasElement = React.createRef<HTMLDivElement>();\r\n private _vp?: ScreenViewport;\r\n\r\n public override render(): React.ReactNode {\r\n return (\r\n <div className=\"drawing-canvas\"\r\n data-testid=\"drawing-canvas\"\r\n ref={this._canvasElement}>\r\n </div>\r\n );\r\n }\r\n\r\n public override componentDidMount() {\r\n if (this._canvasElement.current && this.props.view !== undefined) {\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n /* istanbul ignore next */\r\n const screenViewport = this.props.screenViewportOverride ? this.props.screenViewportOverride : /* istanbul ignore next */ ScreenViewport;\r\n const previousView = viewManager.selectedView;\r\n this._vp = screenViewport.create(this._canvasElement.current, this.props.view);\r\n this.customizeViewport(this._vp);\r\n viewManager.addViewport(this._vp);\r\n void viewManager.setSelectedView(previousView); // switch to original viewport\r\n this._update();\r\n }\r\n }\r\n\r\n private customizeViewport(vp: ScreenViewport): void {\r\n /* istanbul ignore next */\r\n if (vp.logo.style)\r\n vp.logo.style.display = \"none\";\r\n\r\n /* istanbul ignore next */\r\n if (vp.viewFlags.acsTriad)\r\n vp.viewFlags = vp.viewFlags.with(\"acsTriad\", false);\r\n }\r\n\r\n private _update = () => {\r\n // istanbul ignore else\r\n if (this._vp) {\r\n const max = Math.max(this.props.extents.x, this.props.extents.y);\r\n this._vp.view.extentLimits = { max, min: Constant.oneMillimeter };\r\n this._vp.view.setOrigin(this.props.origin);\r\n this._vp.view.setRotation(this.props.rotation);\r\n this._vp.view.setExtents(this.props.extents);\r\n this._vp.applyViewState(this._vp.view);\r\n }\r\n };\r\n\r\n public override componentDidUpdate(oldProps: DrawingNavigationCanvasProps) {\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n if (this.props.view !== undefined) {\r\n if (oldProps.view !== this.props.view) {\r\n const screenViewport = this.props.screenViewportOverride ? this.props.screenViewportOverride : /* istanbul ignore next */ ScreenViewport;\r\n if (oldProps !== undefined && oldProps.viewId !== \"\" && oldProps.viewId !== this.props.viewId && this._vp) {\r\n viewManager.dropViewport(this._vp, true);\r\n }\r\n // istanbul ignore else\r\n if (this._canvasElement.current &&\r\n (this.props.canvasSizeOverride ||\r\n ( /* istanbul ignore next */ this._canvasElement.current.clientWidth !== 0 && /* istanbul ignore next */ this._canvasElement.current.clientHeight !== 0))) {\r\n const previousView = viewManager.selectedView;\r\n this._vp = screenViewport.create(this._canvasElement.current, this.props.view.clone());\r\n this.customizeViewport(this._vp);\r\n viewManager.addViewport(this._vp);\r\n void viewManager.setSelectedView(previousView); // switch to original viewport\r\n this._update();\r\n }\r\n } else if (!this.props.origin.isExactEqual(oldProps.origin) || !this.props.extents.isExactEqual(oldProps.extents) || this.props.zoom !== oldProps.zoom || !this.props.rotation.isExactEqual(oldProps.rotation)) {\r\n this._update();\r\n }\r\n }\r\n }\r\n\r\n public override componentWillUnmount() {\r\n if (this._vp) {\r\n const viewManager = this.props.viewManagerOverride ? this.props.viewManagerOverride : /* istanbul ignore next */ IModelApp.viewManager;\r\n viewManager.dropViewport(this._vp, true);\r\n }\r\n }\r\n\r\n}\r\n"]}
@@ -12,7 +12,8 @@
12
12
  .components-drawing-navigation-aid {
13
13
  position: relative;
14
14
  overflow: hidden;
15
- box-shadow: 0 0 0 1px $buic-inputs-border, 0 0 0 2px $buic-text-color;
15
+ box-shadow: 0 0 0 1px var(--iui-color-border-foreground),
16
+ 0 0 0 2px var(--iui-color-text);
16
17
  height: 96px;
17
18
  width: 96px;
18
19
 
@@ -46,7 +47,7 @@
46
47
  background-color: $buic-background-control;
47
48
  border: 1px solid $buic-background-toolbutton-stroke;
48
49
  cursor: pointer;
49
- border-radius: 3px;
50
+ border-radius: var(--iui-border-radius-1);
50
51
  top: 10px;
51
52
  left: 0px;
52
53
  right: 0px;
@@ -67,7 +68,7 @@
67
68
  cursor: pointer;
68
69
  background-color: $buic-background-control;
69
70
  border: 1px solid $buic-background-toolbutton-stroke;
70
- border-radius: 3px;
71
+ border-radius: var(--iui-border-radius-1);
71
72
  right: 10px;
72
73
  top: 10px;
73
74
 
@@ -86,17 +87,17 @@
86
87
  cursor: pointer;
87
88
  background-color: $buic-background-control;
88
89
  opacity: 0.5;
89
- color: $buic-foreground-body;
90
+ color: var(--iui-color-text);
90
91
 
91
92
  &.checked {
92
- color: $buic-foreground-primary;
93
+ color: var(--iui-color-text-accent);
93
94
  }
94
95
 
95
96
  &:hover {
96
97
  opacity: 1;
97
98
  }
98
99
 
99
- border-radius: 3px;
100
+ border-radius: var(--iui-border-radius-1);
100
101
  bottom: 10px;
101
102
  left: 10px;
102
103
  height: 16px;
@@ -109,7 +110,7 @@
109
110
  .zoom {
110
111
  position: absolute;
111
112
  border: 1px solid $buic-background-toolbutton-stroke;
112
- border-radius: 3px;
113
+ border-radius: var(--iui-border-radius-1);
113
114
  right: 10px;
114
115
  bottom: 10px;
115
116
 
@@ -131,4 +132,4 @@
131
132
  }
132
133
  }
133
134
  }
134
- }
135
+ }
@@ -3,8 +3,6 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  @import "~@itwin/core-react/lib/cjs/core-react/inputs/variables";
6
- @import "~@itwin/core-react/lib/cjs/core-react/select/select";
7
- @import "~@itwin/itwinui-css/scss/style/typography";
8
6
 
9
7
  .components-quantityFormat-panel {
10
8
  display: grid;
@@ -13,28 +11,28 @@
13
11
  column-gap: 6px;
14
12
  align-items: center;
15
13
 
16
- >.uicore-label {
17
- font-size: $iui-font-size;
14
+ > .uicore-label {
15
+ font-size: var(--iui-font-size-1);
18
16
  margin: 4.4px 0;
19
17
 
20
18
  /* match margin on other select controls so it spaces properly in grid */
21
19
  &.uicore-disabled {
22
- color: $buic-text-color-disabled;
20
+ color: var(--iui-color-text-disabled);
23
21
  }
24
22
  }
25
23
 
26
- >span.components-inline {
24
+ > span.components-inline {
27
25
  display: flex;
28
26
  flex-direction: row;
29
27
  align-items: center;
30
28
  gap: 4px;
31
29
  }
32
30
 
33
- >label.core-checkbox.core-checkbox-no-label {
31
+ > label.core-checkbox.core-checkbox-no-label {
34
32
  min-height: 1.57em;
35
33
  }
36
34
 
37
- >button.components-quantityFormat-more-button {
35
+ > button.components-quantityFormat-more-button {
38
36
  grid-column: 1 / span 2;
39
37
  border: none;
40
38
  outline: none;
@@ -42,12 +40,12 @@
42
40
  }
43
41
 
44
42
  .components-quantityFormat-more-button-label {
45
- margin-right: .25em;
43
+ margin-right: 0.25em;
46
44
  }
47
45
 
48
- >a.components-quantityFormat-more-less {
49
- font-size: $iui-font-size;
50
- color: $buic-foreground-alert;
46
+ > a.components-quantityFormat-more-less {
47
+ font-size: var(--iui-font-size-1);
48
+ color: var(--iui-color-text-negative);
51
49
  -webkit-transition: text-decoration 1s ease;
52
50
  -moz-transition: text-decoration 1s ease;
53
51
  -o-transition: text-decoration 1s ease;
@@ -62,4 +60,4 @@
62
60
  .iui-input {
63
61
  padding: $uicore-iui-input-padding;
64
62
  }
65
- }
63
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"FormatSample.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/quantityformat/FormatSample.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAI7D;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,eAuDpD"}
1
+ {"version":3,"file":"FormatSample.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/quantityformat/FormatSample.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAQ,MAAM,mBAAmB,CAAC;AAKtD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,eAuDpD"}
@@ -7,9 +7,10 @@
7
7
  */
8
8
  import * as React from "react";
9
9
  import { SpecialKey } from "@itwin/appui-abstract";
10
- import { WebFontIcon } from "@itwin/core-react";
10
+ import { Icon } from "@itwin/core-react";
11
11
  import { Input } from "@itwin/itwinui-react";
12
12
  import { UiIModelComponents } from "../UiIModelComponents";
13
+ import { SvgProgressForward } from "@itwin/itwinui-icons-react";
13
14
  /** Component to show the persistence value and formatted value given a FormatterSpec.
14
15
  * @alpha
15
16
  */
@@ -54,8 +55,8 @@ export function FormatSample(props) {
54
55
  React.createElement(Input, { "data-testid": "format-sample-input", className: "components-quantity-persistence-input", value: sampleValue, onChange: handleOnValueChange, onKeyDown: handleKeyDown, onBlur: handleOnValueBlur, size: "small" }),
55
56
  activePersistenceUnitLabel),
56
57
  !hideLabels && React.createElement("span", { className: "uicore-label" }, formattedLabel.current),
57
- React.createElement("span", null,
58
- hideLabels && (formattedValue.length > 0) && React.createElement(WebFontIcon, { iconName: "icon-progress-forward-2" }),
58
+ React.createElement("span", { "data-testid": "progress-forward" },
59
+ hideLabels && (formattedValue.length > 0) && React.createElement(Icon, { iconSpec: React.createElement(SvgProgressForward, null) }),
59
60
  React.createElement("span", { "data-testid": "format-sample-formatted", className: "uicore-label components-quantity-formatted-sample" }, formattedValue))));
60
61
  }
61
62
  //# sourceMappingURL=FormatSample.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormatSample.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/quantityformat/FormatSample.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module QuantityFormat\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { FormatterSpec } from \"@itwin/core-quantity\";\r\nimport { SpecialKey } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, WebFontIcon } from \"@itwin/core-react\";\r\nimport { Input } from \"@itwin/itwinui-react\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\n\r\n/** Properties of [[FormatSample]] component.\r\n * @alpha\r\n */\r\nexport interface FormatSampleProps extends CommonProps {\r\n formatSpec?: FormatterSpec;\r\n initialMagnitude?: number;\r\n hideLabels?: boolean;\r\n}\r\n\r\n/** Component to show the persistence value and formatted value given a FormatterSpec.\r\n * @alpha\r\n */\r\nexport function FormatSample(props: FormatSampleProps) {\r\n const { initialMagnitude, formatSpec, hideLabels } = props;\r\n const initialValue = initialMagnitude ?? 0;\r\n const [magnitude, setMagnitude] = React.useState(initialValue);\r\n const [sampleValue, setSampleValue] = React.useState(initialValue.toString());\r\n\r\n React.useEffect(() => {\r\n const value = initialMagnitude ?? 0;\r\n setMagnitude(value);\r\n setSampleValue(value.toString());\r\n }, [initialMagnitude]);\r\n\r\n const handleOnValueBlur = React.useCallback(() => {\r\n let newValue = Number.parseFloat(sampleValue);\r\n if (Number.isNaN(newValue))\r\n newValue = 0;\r\n setMagnitude(newValue);\r\n setSampleValue(newValue.toString());\r\n }, [sampleValue]);\r\n\r\n const handleOnValueChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSampleValue(event.target.value);\r\n }, []);\r\n\r\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLInputElement>) => {\r\n // istanbul ignore else\r\n if (e.key === SpecialKey.Enter) {\r\n let newValue = Number.parseFloat(sampleValue);\r\n if (Number.isNaN(newValue))\r\n newValue = 0;\r\n setMagnitude(newValue);\r\n setSampleValue(newValue.toString());\r\n e.preventDefault();\r\n }\r\n }, [sampleValue]);\r\n\r\n const activePersistenceUnitLabel = formatSpec ? formatSpec.persistenceUnit.label : \"\";\r\n const formattedValue = formatSpec ? formatSpec.applyFormatting(magnitude) : \"\";\r\n\r\n const valueLabel = React.useRef(UiIModelComponents.translate(\"QuantityFormat.labels.value\"));\r\n const formattedLabel = React.useRef(UiIModelComponents.translate(\"QuantityFormat.labels.formatted\"));\r\n\r\n return (\r\n <>\r\n {!hideLabels && <span className={\"uicore-label\"}>{valueLabel.current}</span>}\r\n <span className=\"components-inline\">\r\n <Input data-testid=\"format-sample-input\" className={\"components-quantity-persistence-input\"} value={sampleValue} onChange={handleOnValueChange} onKeyDown={handleKeyDown} onBlur={handleOnValueBlur} size=\"small\" />{activePersistenceUnitLabel}\r\n </span>\r\n {!hideLabels && <span className={\"uicore-label\"}>{formattedLabel.current}</span>}\r\n <span>\r\n {hideLabels && (formattedValue.length > 0) && <WebFontIcon iconName=\"icon-progress-forward-2\" />}\r\n <span data-testid=\"format-sample-formatted\" className={\"uicore-label components-quantity-formatted-sample\"}>{formattedValue}</span>\r\n </span>\r\n </>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"FormatSample.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/quantityformat/FormatSample.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module QuantityFormat\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { FormatterSpec } from \"@itwin/core-quantity\";\r\nimport { SpecialKey } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, Icon } from \"@itwin/core-react\";\r\nimport { Input } from \"@itwin/itwinui-react\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\nimport { SvgProgressForward } from \"@itwin/itwinui-icons-react\";\r\n\r\n/** Properties of [[FormatSample]] component.\r\n * @alpha\r\n */\r\nexport interface FormatSampleProps extends CommonProps {\r\n formatSpec?: FormatterSpec;\r\n initialMagnitude?: number;\r\n hideLabels?: boolean;\r\n}\r\n\r\n/** Component to show the persistence value and formatted value given a FormatterSpec.\r\n * @alpha\r\n */\r\nexport function FormatSample(props: FormatSampleProps) {\r\n const { initialMagnitude, formatSpec, hideLabels } = props;\r\n const initialValue = initialMagnitude ?? 0;\r\n const [magnitude, setMagnitude] = React.useState(initialValue);\r\n const [sampleValue, setSampleValue] = React.useState(initialValue.toString());\r\n\r\n React.useEffect(() => {\r\n const value = initialMagnitude ?? 0;\r\n setMagnitude(value);\r\n setSampleValue(value.toString());\r\n }, [initialMagnitude]);\r\n\r\n const handleOnValueBlur = React.useCallback(() => {\r\n let newValue = Number.parseFloat(sampleValue);\r\n if (Number.isNaN(newValue))\r\n newValue = 0;\r\n setMagnitude(newValue);\r\n setSampleValue(newValue.toString());\r\n }, [sampleValue]);\r\n\r\n const handleOnValueChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSampleValue(event.target.value);\r\n }, []);\r\n\r\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLInputElement>) => {\r\n // istanbul ignore else\r\n if (e.key === SpecialKey.Enter) {\r\n let newValue = Number.parseFloat(sampleValue);\r\n if (Number.isNaN(newValue))\r\n newValue = 0;\r\n setMagnitude(newValue);\r\n setSampleValue(newValue.toString());\r\n e.preventDefault();\r\n }\r\n }, [sampleValue]);\r\n\r\n const activePersistenceUnitLabel = formatSpec ? formatSpec.persistenceUnit.label : \"\";\r\n const formattedValue = formatSpec ? formatSpec.applyFormatting(magnitude) : \"\";\r\n\r\n const valueLabel = React.useRef(UiIModelComponents.translate(\"QuantityFormat.labels.value\"));\r\n const formattedLabel = React.useRef(UiIModelComponents.translate(\"QuantityFormat.labels.formatted\"));\r\n\r\n return (\r\n <>\r\n {!hideLabels && <span className={\"uicore-label\"}>{valueLabel.current}</span>}\r\n <span className=\"components-inline\">\r\n <Input data-testid=\"format-sample-input\" className={\"components-quantity-persistence-input\"} value={sampleValue} onChange={handleOnValueChange} onKeyDown={handleKeyDown} onBlur={handleOnValueBlur} size=\"small\" />{activePersistenceUnitLabel}\r\n </span>\r\n {!hideLabels && <span className={\"uicore-label\"}>{formattedLabel.current}</span>}\r\n <span data-testid=\"progress-forward\">\r\n {hideLabels && (formattedValue.length > 0) && <Icon iconSpec={<SvgProgressForward />} />}\r\n <span data-testid=\"format-sample-formatted\" className={\"uicore-label components-quantity-formatted-sample\"}>{formattedValue}</span>\r\n </span>\r\n </>\r\n );\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"QuantityFormatPanel.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/quantityformat/QuantityFormatPanel.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,EAE8D,eAAe,EACnF,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAA4B,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAU,MAAM,mBAAmB,CAAC;AAgExD;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,eA2GlE"}
1
+ {"version":3,"file":"QuantityFormatPanel.d.ts","sourceRoot":"","sources":["../../../../src/imodel-components-react/quantityformat/QuantityFormatPanel.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,EAE8D,eAAe,EACnF,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAA4B,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA8DhD;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,qDAAqD;IACrD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,eAkGlE"}
@@ -7,8 +7,7 @@
7
7
  */
8
8
  import * as React from "react";
9
9
  import { getQuantityTypeKey, IModelApp, isCheckboxFormatPropEditorSpec, isCustomQuantityTypeDefinition, isTextInputFormatPropEditorSpec, isTextSelectFormatPropEditorSpec, } from "@itwin/core-frontend";
10
- import { Select } from "@itwin/core-react";
11
- import { Checkbox, Input } from "@itwin/itwinui-react";
10
+ import { Checkbox, Input, Select } from "@itwin/itwinui-react";
12
11
  import { FormatPanel } from "./FormatPanel";
13
12
  import { DeepCompare } from "@itwin/core-geometry";
14
13
  function createTextInputFormatPropEditor(key, label, inProps, getString, setString, fireFormatChange) {
@@ -24,8 +23,8 @@ function createSelectFormatPropEditor(key, label, options, inProps, getString, s
24
23
  const value = getString(inProps);
25
24
  return (React.createElement(React.Fragment, { key: `${key}` },
26
25
  React.createElement("span", { key: `${key}-label`, className: "uicore-label" }, label),
27
- React.createElement(Select, { "data-testid": `${key}-editor`, key: `${key}-editor`, value: value, options: options, onChange: (e) => {
28
- const newProps = setString(inProps, e.currentTarget.value);
26
+ React.createElement(Select, { "data-testid": `${key}-editor`, key: `${key}-editor`, value: value, options: options, size: "small", onChange: (newValue) => {
27
+ const newProps = setString(inProps, newValue);
29
28
  fireFormatChange(newProps);
30
29
  } })));
31
30
  }
@@ -49,21 +48,20 @@ export function QuantityFormatPanel(props) {
49
48
  const { quantityType, onFormatChange, ...otherProps } = props;
50
49
  const [formatProps, setFormatProps] = React.useState();
51
50
  const initialFormatProps = React.useRef();
52
- const [persistenceUnit, setPersistenceUnit] = React.useState(() => {
53
- const quantityTypeKey = getQuantityTypeKey(quantityType);
54
- const quantityTypeDefinition = IModelApp.quantityFormatter.quantityTypesRegistry.get(quantityTypeKey);
55
- // istanbul ignore else
56
- if (quantityTypeDefinition)
57
- return quantityTypeDefinition.persistenceUnit;
58
- else
59
- throw Error(`Unable to locate a quantity type with type ${quantityType}`);
60
- });
51
+ const [persistenceUnit, setPersistenceUnit] = React.useState();
61
52
  React.useEffect(() => {
62
53
  const newFormatProps = IModelApp.quantityFormatter.getFormatPropsByQuantityType(quantityType);
63
54
  // istanbul ignore else
64
55
  if (!initialFormatProps.current)
65
56
  initialFormatProps.current = newFormatProps;
66
57
  setFormatProps(newFormatProps);
58
+ const quantityTypeKey = getQuantityTypeKey(quantityType);
59
+ const quantityTypeDefinition = IModelApp.quantityFormatter.quantityTypesRegistry.get(quantityTypeKey);
60
+ // istanbul ignore else
61
+ if (quantityTypeDefinition)
62
+ setPersistenceUnit(quantityTypeDefinition.persistenceUnit);
63
+ else
64
+ throw Error(`Unable to locate a quantity type with type ${quantityType}`);
67
65
  }, [quantityType]); // no dependencies defined as we want this to run on every render
68
66
  // handle case where quantityType does not change but the formatProps for that quantity type has (ie after a Set or Clear)
69
67
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -77,13 +75,6 @@ export function QuantityFormatPanel(props) {
77
75
  }
78
76
  }
79
77
  }); // no dependencies defined as we want this to run on every render
80
- React.useEffect(() => {
81
- const quantityTypeKey = getQuantityTypeKey(quantityType);
82
- const quantityTypeDefinition = IModelApp.quantityFormatter.quantityTypesRegistry.get(quantityTypeKey);
83
- // istanbul ignore else
84
- if (quantityTypeDefinition)
85
- setPersistenceUnit(quantityTypeDefinition.persistenceUnit);
86
- }, [quantityType]);
87
78
  const handleOnFormatChanged = React.useCallback(async (newProps) => {
88
79
  setFormatProps(newProps);
89
80
  onFormatChange && onFormatChange(newProps);