@itwin/appui-react 5.3.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/lib/appui-react/UiFramework.d.ts +6 -2
  3. package/lib/appui-react/UiFramework.d.ts.map +1 -1
  4. package/lib/appui-react/UiFramework.js +29 -2
  5. package/lib/appui-react/UiFramework.js.map +1 -1
  6. package/lib/appui-react/accudraw/AccuDrawFieldContainer.d.ts.map +1 -1
  7. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js +4 -4
  8. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
  9. package/lib/appui-react/accudraw/AccuDrawPopupManager.d.ts.map +1 -1
  10. package/lib/appui-react/accudraw/AccuDrawPopupManager.js +10 -6
  11. package/lib/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  12. package/lib/appui-react/accudraw/Calculator.js +2 -2
  13. package/lib/appui-react/accudraw/Calculator.js.map +1 -1
  14. package/lib/appui-react/childwindow/ChildWindowRenderer.d.ts +2 -0
  15. package/lib/appui-react/childwindow/ChildWindowRenderer.d.ts.map +1 -1
  16. package/lib/appui-react/childwindow/ChildWindowRenderer.js +15 -10
  17. package/lib/appui-react/childwindow/ChildWindowRenderer.js.map +1 -1
  18. package/lib/appui-react/childwindow/InternalChildWindowManager.d.ts.map +1 -1
  19. package/lib/appui-react/childwindow/InternalChildWindowManager.js +8 -0
  20. package/lib/appui-react/childwindow/InternalChildWindowManager.js.map +1 -1
  21. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +23 -1
  22. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  23. package/lib/appui-react/configurableui/ConfigurableUiContent.js +20 -12
  24. package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  25. package/lib/appui-react/content/ContentLayout.d.ts.map +1 -1
  26. package/lib/appui-react/content/ContentLayout.js +10 -11
  27. package/lib/appui-react/content/ContentLayout.js.map +1 -1
  28. package/lib/appui-react/content/ContentOverlay.d.ts +1 -0
  29. package/lib/appui-react/content/ContentOverlay.d.ts.map +1 -1
  30. package/lib/appui-react/content/ContentOverlay.js +3 -1
  31. package/lib/appui-react/content/ContentOverlay.js.map +1 -1
  32. package/lib/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
  33. package/lib/appui-react/content/FloatingViewportContent.js +1 -1
  34. package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
  35. package/lib/appui-react/cursor/CursorInformation.d.ts +4 -1
  36. package/lib/appui-react/cursor/CursorInformation.d.ts.map +1 -1
  37. package/lib/appui-react/cursor/CursorInformation.js +6 -1
  38. package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
  39. package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts +1 -24
  40. package/lib/appui-react/cursor/cursormenu/CursorMenu.d.ts.map +1 -1
  41. package/lib/appui-react/cursor/cursormenu/CursorMenu.js +37 -58
  42. package/lib/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  43. package/lib/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
  44. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +8 -22
  45. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
  46. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +109 -116
  47. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  48. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +12 -15
  49. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
  50. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +85 -48
  51. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  52. package/lib/appui-react/framework/FrameworkFrontstages.d.ts +47 -0
  53. package/lib/appui-react/framework/FrameworkFrontstages.d.ts.map +1 -1
  54. package/lib/appui-react/framework/FrameworkFrontstages.js +136 -0
  55. package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
  56. package/lib/appui-react/framework/FrameworkVisibility.d.ts +2 -0
  57. package/lib/appui-react/framework/FrameworkVisibility.d.ts.map +1 -1
  58. package/lib/appui-react/framework/FrameworkVisibility.js.map +1 -1
  59. package/lib/appui-react/frontstage/InternalFrontstageManager.d.ts.map +1 -1
  60. package/lib/appui-react/frontstage/InternalFrontstageManager.js +121 -115
  61. package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  62. package/lib/appui-react/hooks/useActiveTool.d.ts +9 -0
  63. package/lib/appui-react/hooks/useActiveTool.d.ts.map +1 -0
  64. package/lib/appui-react/hooks/useActiveTool.js +23 -0
  65. package/lib/appui-react/hooks/useActiveTool.js.map +1 -0
  66. package/lib/appui-react/icons/SvgAngle.d.ts +7 -0
  67. package/lib/appui-react/icons/SvgAngle.d.ts.map +1 -0
  68. package/lib/appui-react/icons/SvgAngle.js +15 -0
  69. package/lib/appui-react/icons/SvgAngle.js.map +1 -0
  70. package/lib/appui-react/icons/SvgBackspace.d.ts +7 -0
  71. package/lib/appui-react/icons/SvgBackspace.d.ts.map +1 -0
  72. package/lib/appui-react/icons/SvgBackspace.js +14 -0
  73. package/lib/appui-react/icons/SvgBackspace.js.map +1 -0
  74. package/lib/appui-react/icons/SvgDistance.d.ts +7 -0
  75. package/lib/appui-react/icons/SvgDistance.d.ts.map +1 -0
  76. package/lib/appui-react/icons/SvgDistance.js +16 -0
  77. package/lib/appui-react/icons/SvgDistance.js.map +1 -0
  78. package/lib/appui-react/icons/SvgHeight.d.ts +7 -0
  79. package/lib/appui-react/icons/SvgHeight.d.ts.map +1 -0
  80. package/lib/appui-react/icons/SvgHeight.js +17 -0
  81. package/lib/appui-react/icons/SvgHeight.js.map +1 -0
  82. package/lib/appui-react/icons/SvgMouseClickLeftDrag.d.ts +7 -0
  83. package/lib/appui-react/icons/SvgMouseClickLeftDrag.d.ts.map +1 -0
  84. package/lib/appui-react/icons/SvgMouseClickLeftDrag.js +15 -0
  85. package/lib/appui-react/icons/SvgMouseClickLeftDrag.js.map +1 -0
  86. package/lib/appui-react/icons/SvgMouseClickRightDrag.d.ts +7 -0
  87. package/lib/appui-react/icons/SvgMouseClickRightDrag.d.ts.map +1 -0
  88. package/lib/appui-react/icons/SvgMouseClickRightDrag.js +15 -0
  89. package/lib/appui-react/icons/SvgMouseClickRightDrag.js.map +1 -0
  90. package/lib/appui-react/icons/SvgMouseClickWheelDrag.d.ts +7 -0
  91. package/lib/appui-react/icons/SvgMouseClickWheelDrag.d.ts.map +1 -0
  92. package/lib/appui-react/icons/SvgMouseClickWheelDrag.js +15 -0
  93. package/lib/appui-react/icons/SvgMouseClickWheelDrag.js.map +1 -0
  94. package/lib/appui-react/icons/SvgTouchCursorPan.d.ts +7 -0
  95. package/lib/appui-react/icons/SvgTouchCursorPan.d.ts.map +1 -0
  96. package/lib/appui-react/icons/SvgTouchCursorPan.js +15 -0
  97. package/lib/appui-react/icons/SvgTouchCursorPan.js.map +1 -0
  98. package/lib/appui-react/icons/SvgTouchCursorPoint.d.ts +7 -0
  99. package/lib/appui-react/icons/SvgTouchCursorPoint.d.ts.map +1 -0
  100. package/lib/appui-react/icons/SvgTouchCursorPoint.js +16 -0
  101. package/lib/appui-react/icons/SvgTouchCursorPoint.js.map +1 -0
  102. package/lib/appui-react/layout/StandardLayout.scss +3 -8
  103. package/lib/appui-react/layout/base/DragManager.d.ts.map +1 -1
  104. package/lib/appui-react/layout/base/DragManager.js +10 -15
  105. package/lib/appui-react/layout/base/DragManager.js.map +1 -1
  106. package/lib/appui-react/layout/state/NineZoneAction.d.ts +1 -0
  107. package/lib/appui-react/layout/state/NineZoneAction.d.ts.map +1 -1
  108. package/lib/appui-react/layout/state/NineZoneAction.js.map +1 -1
  109. package/lib/appui-react/layout/state/NineZoneStateReducer.d.ts.map +1 -1
  110. package/lib/appui-react/layout/state/NineZoneStateReducer.js +23 -16
  111. package/lib/appui-react/layout/state/NineZoneStateReducer.js.map +1 -1
  112. package/lib/appui-react/layout/widget/NavigationArea.d.ts +1 -2
  113. package/lib/appui-react/layout/widget/NavigationArea.d.ts.map +1 -1
  114. package/lib/appui-react/layout/widget/NavigationArea.js +2 -3
  115. package/lib/appui-react/layout/widget/NavigationArea.js.map +1 -1
  116. package/lib/appui-react/layout/widget/NavigationArea.scss +16 -4
  117. package/lib/appui-react/layout/widget/ToolsArea.d.ts +1 -2
  118. package/lib/appui-react/layout/widget/ToolsArea.d.ts.map +1 -1
  119. package/lib/appui-react/layout/widget/ToolsArea.js +2 -3
  120. package/lib/appui-react/layout/widget/ToolsArea.js.map +1 -1
  121. package/lib/appui-react/layout/widget/ToolsArea.scss +10 -4
  122. package/lib/appui-react/shared/MenuItem.d.ts +3 -0
  123. package/lib/appui-react/shared/MenuItem.d.ts.map +1 -1
  124. package/lib/appui-react/shared/MenuItem.js +2 -3
  125. package/lib/appui-react/shared/MenuItem.js.map +1 -1
  126. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +2 -55
  127. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  128. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js +333 -403
  129. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  130. package/lib/appui-react/toolbar/Toolbar.d.ts.map +1 -1
  131. package/lib/appui-react/toolbar/Toolbar.js +4 -3
  132. package/lib/appui-react/toolbar/Toolbar.js.map +1 -1
  133. package/lib/appui-react/toolbar/new-toolbars/ActionItem.d.ts.map +1 -1
  134. package/lib/appui-react/toolbar/new-toolbars/ActionItem.js +3 -0
  135. package/lib/appui-react/toolbar/new-toolbars/ActionItem.js.map +1 -1
  136. package/lib/appui-react/toolbar/new-toolbars/GroupItem.d.ts.map +1 -1
  137. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js +2 -0
  138. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js.map +1 -1
  139. package/lib/appui-react/toolbar/new-toolbars/Toolbar.d.ts +6 -3
  140. package/lib/appui-react/toolbar/new-toolbars/Toolbar.d.ts.map +1 -1
  141. package/lib/appui-react/toolbar/new-toolbars/Toolbar.js +4 -3
  142. package/lib/appui-react/toolbar/new-toolbars/Toolbar.js.map +1 -1
  143. package/lib/appui-react/utils/InternalUiShowHideManager.d.ts +2 -0
  144. package/lib/appui-react/utils/InternalUiShowHideManager.d.ts.map +1 -1
  145. package/lib/appui-react/utils/InternalUiShowHideManager.js +6 -0
  146. package/lib/appui-react/utils/InternalUiShowHideManager.js.map +1 -1
  147. package/lib/appui-react/widget-panels/Frontstage.d.ts +7 -2
  148. package/lib/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  149. package/lib/appui-react/widget-panels/Frontstage.js +29 -12
  150. package/lib/appui-react/widget-panels/Frontstage.js.map +1 -1
  151. package/lib/appui-react/widgets/BackstageAppButton.scss +8 -3
  152. package/lib/appui-react.d.ts +1 -1
  153. package/lib/appui-react.d.ts.map +1 -1
  154. package/lib/appui-react.js +1 -1
  155. package/lib/appui-react.js.map +1 -1
  156. package/lib/cjs/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
  157. package/lib/cjs/appui-react/layout/StandardLayout.scss +3 -8
  158. package/lib/cjs/appui-react/layout/widget/NavigationArea.scss +16 -4
  159. package/lib/cjs/appui-react/layout/widget/ToolsArea.scss +10 -4
  160. package/lib/cjs/appui-react/widgets/BackstageAppButton.scss +8 -3
  161. package/lib/esm/appui-react/cursor/cursorpopup/CursorPopup.scss +3 -0
  162. package/lib/esm/appui-react/layout/StandardLayout.scss +3 -8
  163. package/lib/esm/appui-react/layout/widget/NavigationArea.scss +16 -4
  164. package/lib/esm/appui-react/layout/widget/ToolsArea.scss +10 -4
  165. package/lib/esm/appui-react/widgets/BackstageAppButton.scss +8 -3
  166. package/package.json +8 -10
  167. package/lib/appui-react/accudraw/angle.svg +0 -1
  168. package/lib/appui-react/accudraw/backspace.svg +0 -9
  169. package/lib/appui-react/accudraw/constraint-2d.svg +0 -11
  170. package/lib/appui-react/accudraw/distance.svg +0 -1
  171. package/lib/appui-react/accudraw/height-2.svg +0 -10
  172. package/lib/appui-react/accudraw/height.svg +0 -11
  173. package/lib/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
  174. package/lib/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
  175. package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
  176. package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
  177. package/lib/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
  178. package/lib/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
  179. package/lib/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
  180. package/lib/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
  181. package/lib/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
  182. package/lib/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
  183. package/lib/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
  184. package/lib/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
  185. package/lib/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
  186. package/lib/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
  187. package/lib/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
  188. package/lib/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
  189. package/lib/cjs/appui-react/accudraw/angle.svg +0 -1
  190. package/lib/cjs/appui-react/accudraw/backspace.svg +0 -9
  191. package/lib/cjs/appui-react/accudraw/constraint-2d.svg +0 -11
  192. package/lib/cjs/appui-react/accudraw/distance.svg +0 -1
  193. package/lib/cjs/appui-react/accudraw/height-2.svg +0 -10
  194. package/lib/cjs/appui-react/accudraw/height.svg +0 -11
  195. package/lib/cjs/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
  196. package/lib/cjs/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
  197. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
  198. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
  199. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
  200. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
  201. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
  202. package/lib/cjs/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
  203. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
  204. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
  205. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
  206. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
  207. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
  208. package/lib/cjs/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
  209. package/lib/cjs/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
  210. package/lib/cjs/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
  211. package/lib/esm/appui-react/accudraw/angle.svg +0 -1
  212. package/lib/esm/appui-react/accudraw/backspace.svg +0 -9
  213. package/lib/esm/appui-react/accudraw/constraint-2d.svg +0 -11
  214. package/lib/esm/appui-react/accudraw/distance.svg +0 -1
  215. package/lib/esm/appui-react/accudraw/height-2.svg +0 -10
  216. package/lib/esm/appui-react/accudraw/height.svg +0 -11
  217. package/lib/esm/appui-react/statusfields/toolassistance/accept-point.svg +0 -1
  218. package/lib/esm/appui-react/statusfields/toolassistance/cursor-click.svg +0 -1
  219. package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-drag.svg +0 -1
  220. package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-tap-double.svg +0 -1
  221. package/lib/esm/appui-react/statusfields/toolassistance/gesture-one-finger-tap.svg +0 -1
  222. package/lib/esm/appui-react/statusfields/toolassistance/gesture-pinch.svg +0 -1
  223. package/lib/esm/appui-react/statusfields/toolassistance/gesture-two-finger-drag.svg +0 -1
  224. package/lib/esm/appui-react/statusfields/toolassistance/gesture-two-finger-tap.svg +0 -1
  225. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-left-drag.svg +0 -1
  226. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-left.svg +0 -1
  227. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-right-drag.svg +0 -1
  228. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-right.svg +0 -1
  229. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-wheel-drag.svg +0 -1
  230. package/lib/esm/appui-react/statusfields/toolassistance/mouse-click-wheel.svg +0 -1
  231. package/lib/esm/appui-react/statusfields/toolassistance/touch-cursor-pan.svg +0 -1
  232. package/lib/esm/appui-react/statusfields/toolassistance/touch-cursor-point.svg +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AccuDrawFieldContainer.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawFieldContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccuDraw\n */\n\nimport \"./AccuDrawFieldContainer.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Orientation } from \"@itwin/components-react\";\nimport type { ColorDef } from \"@itwin/core-common\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { CompassMode, IModelApp, ItemField } from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { getCSSColorFromDef } from \"@itwin/imodel-components-react/internal\";\nimport { AccuDrawInputField } from \"./AccuDrawInputField.js\";\nimport { FrameworkAccuDraw } from \"./FrameworkAccuDraw.js\";\nimport type { AccuDrawUiSettings } from \"./AccuDrawUiSettings.js\";\nimport angleIconSvg from \"./angle.svg\";\nimport distanceIconSvg from \"./distance.svg\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { UiStateStorage } from \"../uistate/UiStateStorage.js\";\n\n/** Properties for [[AccuDrawFieldContainer]] component\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof AccuDrawFieldContainer>`\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface AccuDrawFieldContainerProps extends CommonProps {\n /** Orientation of the fields */\n orientation: Orientation;\n /** Optional parameter for persistent UI settings. Defaults to LocalStateStorage. */\n uiSettingsStorage?: UiStateStorage;\n /** @internal */\n showZOverride?: boolean;\n /** Indicates whether the field is displaying a bearing angles. */\n isBearingAngle?: boolean;\n}\n\nlet AccuDrawContainerIndex = 0;\n\nfunction determineShowZ(vp?: ScreenViewport): boolean {\n const showZ = vp !== undefined ? vp.view.is3d() : false;\n return showZ;\n}\n\nconst defaultXLabel = \"X\";\nconst defaultYLabel = \"Y\";\nconst defaultZLabel = \"Z\";\n\n/** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function AccuDrawFieldContainer(props: AccuDrawFieldContainerProps) {\n const {\n className,\n style,\n orientation,\n uiSettingsStorage,\n showZOverride,\n isBearingAngle = false,\n ...otherProps\n } = props;\n\n const [containerIndex] = React.useState(() => ++AccuDrawContainerIndex);\n const xInputRef = React.useRef<HTMLInputElement>(null);\n const yInputRef = React.useRef<HTMLInputElement>(null);\n const zInputRef = React.useRef<HTMLInputElement>(null);\n const angleInputRef = React.useRef<HTMLInputElement>(null);\n const distanceInputRef = React.useRef<HTMLInputElement>(null);\n const focusField = React.useRef<ItemField | undefined>(undefined);\n const [mode, setMode] = React.useState(() => IModelApp.accuDraw.compassMode);\n const [xLock, setXLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.X_Item)\n );\n const [yLock, setYLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Y_Item)\n );\n const [zLock, setZLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Z_Item)\n );\n const [angleLock, setAngleLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.ANGLE_Item)\n );\n const [distanceLock, setDistanceLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.DIST_Item)\n );\n const [showZ, setShowZ] = React.useState(true);\n\n const [uiSettings, setUiSettings] = React.useState<\n AccuDrawUiSettings | undefined\n >(FrameworkAccuDraw.uiStateStorage);\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawUiSettingsChangedEvent.addListener(\n () => {\n setUiSettings(FrameworkAccuDraw.uiStateStorage);\n }\n );\n }, []);\n\n const getFieldInput = (field: ItemField) => {\n switch (field) {\n case ItemField.X_Item:\n return getCurrent(xInputRef);\n case ItemField.Y_Item:\n return getCurrent(yInputRef);\n case ItemField.Z_Item:\n return getCurrent(zInputRef);\n case ItemField.ANGLE_Item:\n return getCurrent(angleInputRef);\n case ItemField.DIST_Item:\n return getCurrent(distanceInputRef);\n }\n };\n\n const getInputToFocus = React.useCallback((field: ItemField | undefined) => {\n const fieldInput = field === undefined ? undefined : getFieldInput(field);\n if (fieldInput) {\n if (document.activeElement === fieldInput) return undefined;\n return fieldInput;\n }\n\n const focusedInput = [\n xInputRef,\n yInputRef,\n zInputRef,\n angleInputRef,\n distanceInputRef,\n ].find((inputRef) => document.activeElement === inputRef.current);\n\n // One of AccuDraw input fields is focused already.\n if (focusedInput) return undefined;\n\n // Focus one of fallback fields.\n let fallbackInput = getFieldInput(ItemField.DIST_Item);\n if (fallbackInput) return fallbackInput;\n\n fallbackInput = getFieldInput(ItemField.X_Item);\n return fallbackInput;\n }, []);\n\n // Moves focus to `field` input if not focused OR fallbacks to default field if none of accudraw fields are focused.\n const setFocusToField = React.useCallback(\n (field: ItemField | undefined) => {\n const input = getInputToFocus(field);\n if (!input) return;\n\n input.focus();\n input.select();\n },\n [getInputToFocus]\n );\n\n React.useEffect(() => {\n // Set the focus to the first input field when the component is mounted and when the compass mode changes.\n const itemToFocus =\n mode === CompassMode.Polar ? ItemField.DIST_Item : ItemField.X_Item;\n IModelApp.accuDraw.setFocusItem(itemToFocus);\n setFocusToField(itemToFocus);\n const inputToFocus =\n mode === CompassMode.Rectangular\n ? getFieldInput(ItemField.X_Item)\n : getFieldInput(ItemField.DIST_Item);\n if (!inputToFocus) return;\n const timeoutId = setTimeout(() => {\n // Timeout to force an highlight on the field.\n inputToFocus.focus();\n inputToFocus.select();\n }, 1);\n return () => {\n clearTimeout(timeoutId);\n };\n }, [mode, setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldLockEvent.addListener((args) => {\n switch (args.field) {\n case ItemField.X_Item:\n setXLock(args.lock);\n break;\n case ItemField.Y_Item:\n setYLock(args.lock);\n break;\n case ItemField.Z_Item:\n setZLock(args.lock);\n break;\n case ItemField.ANGLE_Item:\n setAngleLock(args.lock);\n break;\n case ItemField.DIST_Item:\n setDistanceLock(args.lock);\n break;\n }\n });\n }, []);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldFocusEvent.addListener(\n (args) => {\n focusField.current = args.field;\n setFocusToField(focusField.current);\n }\n );\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawGrabInputFocusEvent.addListener(() => {\n setFocusToField(focusField.current);\n });\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetCompassModeEvent.addListener(\n (args) => {\n setMode(args.mode);\n }\n );\n }, []);\n\n const handleValueChanged = React.useCallback(\n (field: ItemField, stringValue: string) => {\n FrameworkAccuDraw.setFieldValueFromUi(field, stringValue);\n },\n []\n );\n\n const handleEscPressed = React.useCallback(() => {\n UiFramework.keyboardShortcuts.setFocusToHome();\n }, []);\n\n React.useEffect(() => {\n setShowZ(\n showZOverride || determineShowZ(IModelApp.viewManager.selectedView)\n );\n\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args) => {\n setShowZ(determineShowZ(args.current));\n }\n );\n }, [showZOverride]);\n\n const createFieldStyle = (\n inStyle: React.CSSProperties | undefined,\n backgroundColor: ColorDef | string | undefined,\n foregroundColor: ColorDef | string | undefined\n ): React.CSSProperties | undefined => {\n let fieldStyle: React.CSSProperties | undefined;\n let rgbaString = \"\";\n if (inStyle || backgroundColor || foregroundColor) {\n fieldStyle = inStyle ? inStyle : {};\n if (backgroundColor) {\n rgbaString =\n typeof backgroundColor === \"string\"\n ? backgroundColor\n : getCSSColorFromDef(backgroundColor);\n fieldStyle = { ...fieldStyle, backgroundColor: rgbaString };\n }\n if (foregroundColor) {\n rgbaString =\n typeof foregroundColor === \"string\"\n ? foregroundColor\n : getCSSColorFromDef(foregroundColor);\n fieldStyle = { ...fieldStyle, color: rgbaString };\n }\n }\n return fieldStyle;\n };\n\n const xStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.xStyle,\n uiSettings.xBackgroundColor,\n uiSettings.xForegroundColor\n );\n }, [uiSettings]);\n const yStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.yStyle,\n uiSettings.yBackgroundColor,\n uiSettings.yForegroundColor\n );\n }, [uiSettings]);\n const zStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.zStyle,\n uiSettings.zBackgroundColor,\n uiSettings.zForegroundColor\n );\n }, [uiSettings]);\n const angleStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.angleStyle,\n uiSettings.angleBackgroundColor,\n uiSettings.angleForegroundColor\n );\n }, [uiSettings]);\n const distanceStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.distanceStyle,\n uiSettings.distanceBackgroundColor,\n uiSettings.distanceForegroundColor\n );\n }, [uiSettings]);\n const xLabel = uiSettings?.xLabel ?? defaultXLabel;\n const yLabel = uiSettings?.yLabel ?? defaultYLabel;\n const zLabel = uiSettings?.zLabel ?? defaultZLabel;\n const angleLabel = uiSettings?.angleLabel;\n const distanceLabel = uiSettings?.distanceLabel;\n\n const classNames = classnames(\n \"uifw-accudraw-field-container\",\n orientation === Orientation.Vertical ? \"uifw-vertical\" : \"uifw-horizontal\",\n className\n );\n\n const labelCentered =\n xLabel !== undefined &&\n xLabel.length === 1 &&\n yLabel !== undefined &&\n yLabel.length === 1 &&\n zLabel !== undefined &&\n zLabel.length === 1;\n\n return (\n <div className={classNames} style={style} {...otherProps}>\n {mode === CompassMode.Rectangular && (\n <>\n <AccuDrawInputField\n ref={xInputRef}\n isLocked={xLock}\n style={xStyle}\n field={ItemField.X_Item}\n id={`uifw-accudraw-x-${containerIndex}`}\n data-testid=\"uifw-accudraw-x\"\n label={xLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.xIcon}\n icon={uiSettings?.xIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.X_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.Y_Item)\n }\n />\n <AccuDrawInputField\n ref={yInputRef}\n isLocked={yLock}\n style={yStyle}\n field={ItemField.Y_Item}\n id={`uifw-accudraw-y-${containerIndex}`}\n data-testid=\"uifw-accudraw-y\"\n label={yLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.yIcon}\n icon={uiSettings?.yIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Y_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n showZ\n ? IModelApp.accuDraw.setFocusItem(ItemField.Z_Item)\n : IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n {showZ && (\n <AccuDrawInputField\n ref={zInputRef}\n isLocked={zLock}\n style={zStyle}\n field={ItemField.Z_Item}\n id={`uifw-accudraw-z-${containerIndex}`}\n data-testid=\"uifw-accudraw-z\"\n label={zLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.zIcon}\n icon={uiSettings?.zIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Z_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n )}\n </>\n )}\n {mode === CompassMode.Polar && (\n <>\n <AccuDrawInputField\n ref={distanceInputRef}\n isLocked={distanceLock}\n style={distanceStyle}\n field={ItemField.DIST_Item}\n id={`uifw-accudraw-distance-${containerIndex}`}\n data-testid=\"uifw-accudraw-distance\"\n label={distanceLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.distanceIcon ?? distanceIconSvg}\n icon={uiSettings?.distanceIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.DIST_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.ANGLE_Item)\n }\n />\n <AccuDrawInputField\n ref={angleInputRef}\n isLocked={angleLock}\n isBearingAngle={isBearingAngle}\n style={angleStyle}\n field={ItemField.ANGLE_Item}\n id={`uifw-accudraw-angle-${containerIndex}`}\n data-testid=\"uifw-accudraw-angle\"\n label={angleLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.angleIcon ?? angleIconSvg}\n icon={uiSettings?.angleIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.ANGLE_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.DIST_Item)\n }\n />\n </>\n )}\n </div>\n );\n}\n\nfunction getCurrent<T>(ref: React.RefObject<T>) {\n if (ref.current === null) return undefined;\n return ref.current;\n}\n"]}
1
+ {"version":3,"file":"AccuDrawFieldContainer.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawFieldContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccuDraw\n */\n\nimport \"./AccuDrawFieldContainer.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Orientation } from \"@itwin/components-react\";\nimport type { ColorDef } from \"@itwin/core-common\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { CompassMode, IModelApp, ItemField } from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { getCSSColorFromDef } from \"@itwin/imodel-components-react/internal\";\nimport { AccuDrawInputField } from \"./AccuDrawInputField.js\";\nimport { FrameworkAccuDraw } from \"./FrameworkAccuDraw.js\";\nimport type { AccuDrawUiSettings } from \"./AccuDrawUiSettings.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { UiStateStorage } from \"../uistate/UiStateStorage.js\";\nimport { SvgDistance } from \"../icons/SvgDistance.js\";\nimport { SvgAngle } from \"../icons/SvgAngle.js\";\n\n/** Properties for [[AccuDrawFieldContainer]] component\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof AccuDrawFieldContainer>`\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface AccuDrawFieldContainerProps extends CommonProps {\n /** Orientation of the fields */\n orientation: Orientation;\n /** Optional parameter for persistent UI settings. Defaults to LocalStateStorage. */\n uiSettingsStorage?: UiStateStorage;\n /** @internal */\n showZOverride?: boolean;\n /** Indicates whether the field is displaying a bearing angles. */\n isBearingAngle?: boolean;\n}\n\nlet AccuDrawContainerIndex = 0;\n\nfunction determineShowZ(vp?: ScreenViewport): boolean {\n const showZ = vp !== undefined ? vp.view.is3d() : false;\n return showZ;\n}\n\nconst defaultXLabel = \"X\";\nconst defaultYLabel = \"Y\";\nconst defaultZLabel = \"Z\";\n\n/** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function AccuDrawFieldContainer(props: AccuDrawFieldContainerProps) {\n const {\n className,\n style,\n orientation,\n uiSettingsStorage,\n showZOverride,\n isBearingAngle = false,\n ...otherProps\n } = props;\n\n const [containerIndex] = React.useState(() => ++AccuDrawContainerIndex);\n const xInputRef = React.useRef<HTMLInputElement>(null);\n const yInputRef = React.useRef<HTMLInputElement>(null);\n const zInputRef = React.useRef<HTMLInputElement>(null);\n const angleInputRef = React.useRef<HTMLInputElement>(null);\n const distanceInputRef = React.useRef<HTMLInputElement>(null);\n const focusField = React.useRef<ItemField | undefined>(undefined);\n const [mode, setMode] = React.useState(() => IModelApp.accuDraw.compassMode);\n const [xLock, setXLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.X_Item)\n );\n const [yLock, setYLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Y_Item)\n );\n const [zLock, setZLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Z_Item)\n );\n const [angleLock, setAngleLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.ANGLE_Item)\n );\n const [distanceLock, setDistanceLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.DIST_Item)\n );\n const [showZ, setShowZ] = React.useState(true);\n\n const [uiSettings, setUiSettings] = React.useState<\n AccuDrawUiSettings | undefined\n >(FrameworkAccuDraw.uiStateStorage);\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawUiSettingsChangedEvent.addListener(\n () => {\n setUiSettings(FrameworkAccuDraw.uiStateStorage);\n }\n );\n }, []);\n\n const getFieldInput = (field: ItemField) => {\n switch (field) {\n case ItemField.X_Item:\n return getCurrent(xInputRef);\n case ItemField.Y_Item:\n return getCurrent(yInputRef);\n case ItemField.Z_Item:\n return getCurrent(zInputRef);\n case ItemField.ANGLE_Item:\n return getCurrent(angleInputRef);\n case ItemField.DIST_Item:\n return getCurrent(distanceInputRef);\n }\n };\n\n const getInputToFocus = React.useCallback((field: ItemField | undefined) => {\n const fieldInput = field === undefined ? undefined : getFieldInput(field);\n if (fieldInput) {\n if (document.activeElement === fieldInput) return undefined;\n return fieldInput;\n }\n\n const focusedInput = [\n xInputRef,\n yInputRef,\n zInputRef,\n angleInputRef,\n distanceInputRef,\n ].find((inputRef) => document.activeElement === inputRef.current);\n\n // One of AccuDraw input fields is focused already.\n if (focusedInput) return undefined;\n\n // Focus one of fallback fields.\n let fallbackInput = getFieldInput(ItemField.DIST_Item);\n if (fallbackInput) return fallbackInput;\n\n fallbackInput = getFieldInput(ItemField.X_Item);\n return fallbackInput;\n }, []);\n\n // Moves focus to `field` input if not focused OR fallbacks to default field if none of accudraw fields are focused.\n const setFocusToField = React.useCallback(\n (field: ItemField | undefined) => {\n const input = getInputToFocus(field);\n if (!input) return;\n\n input.focus();\n input.select();\n },\n [getInputToFocus]\n );\n\n React.useEffect(() => {\n // Set the focus to the first input field when the component is mounted and when the compass mode changes.\n const itemToFocus =\n mode === CompassMode.Polar ? ItemField.DIST_Item : ItemField.X_Item;\n IModelApp.accuDraw.setFocusItem(itemToFocus);\n setFocusToField(itemToFocus);\n const inputToFocus =\n mode === CompassMode.Rectangular\n ? getFieldInput(ItemField.X_Item)\n : getFieldInput(ItemField.DIST_Item);\n if (!inputToFocus) return;\n const timeoutId = setTimeout(() => {\n // Timeout to force an highlight on the field.\n inputToFocus.focus();\n inputToFocus.select();\n }, 1);\n return () => {\n clearTimeout(timeoutId);\n };\n }, [mode, setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldLockEvent.addListener((args) => {\n switch (args.field) {\n case ItemField.X_Item:\n setXLock(args.lock);\n break;\n case ItemField.Y_Item:\n setYLock(args.lock);\n break;\n case ItemField.Z_Item:\n setZLock(args.lock);\n break;\n case ItemField.ANGLE_Item:\n setAngleLock(args.lock);\n break;\n case ItemField.DIST_Item:\n setDistanceLock(args.lock);\n break;\n }\n });\n }, []);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldFocusEvent.addListener(\n (args) => {\n focusField.current = args.field;\n setFocusToField(focusField.current);\n }\n );\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawGrabInputFocusEvent.addListener(() => {\n setFocusToField(focusField.current);\n });\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetCompassModeEvent.addListener(\n (args) => {\n setMode(args.mode);\n }\n );\n }, []);\n\n const handleValueChanged = React.useCallback(\n (field: ItemField, stringValue: string) => {\n FrameworkAccuDraw.setFieldValueFromUi(field, stringValue);\n },\n []\n );\n\n const handleEscPressed = React.useCallback(() => {\n UiFramework.keyboardShortcuts.setFocusToHome();\n }, []);\n\n React.useEffect(() => {\n setShowZ(\n showZOverride || determineShowZ(IModelApp.viewManager.selectedView)\n );\n\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args) => {\n setShowZ(determineShowZ(args.current));\n }\n );\n }, [showZOverride]);\n\n const createFieldStyle = (\n inStyle: React.CSSProperties | undefined,\n backgroundColor: ColorDef | string | undefined,\n foregroundColor: ColorDef | string | undefined\n ): React.CSSProperties | undefined => {\n let fieldStyle: React.CSSProperties | undefined;\n let rgbaString = \"\";\n if (inStyle || backgroundColor || foregroundColor) {\n fieldStyle = inStyle ? inStyle : {};\n if (backgroundColor) {\n rgbaString =\n typeof backgroundColor === \"string\"\n ? backgroundColor\n : getCSSColorFromDef(backgroundColor);\n fieldStyle = { ...fieldStyle, backgroundColor: rgbaString };\n }\n if (foregroundColor) {\n rgbaString =\n typeof foregroundColor === \"string\"\n ? foregroundColor\n : getCSSColorFromDef(foregroundColor);\n fieldStyle = { ...fieldStyle, color: rgbaString };\n }\n }\n return fieldStyle;\n };\n\n const xStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.xStyle,\n uiSettings.xBackgroundColor,\n uiSettings.xForegroundColor\n );\n }, [uiSettings]);\n const yStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.yStyle,\n uiSettings.yBackgroundColor,\n uiSettings.yForegroundColor\n );\n }, [uiSettings]);\n const zStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.zStyle,\n uiSettings.zBackgroundColor,\n uiSettings.zForegroundColor\n );\n }, [uiSettings]);\n const angleStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.angleStyle,\n uiSettings.angleBackgroundColor,\n uiSettings.angleForegroundColor\n );\n }, [uiSettings]);\n const distanceStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.distanceStyle,\n uiSettings.distanceBackgroundColor,\n uiSettings.distanceForegroundColor\n );\n }, [uiSettings]);\n const xLabel = uiSettings?.xLabel ?? defaultXLabel;\n const yLabel = uiSettings?.yLabel ?? defaultYLabel;\n const zLabel = uiSettings?.zLabel ?? defaultZLabel;\n const angleLabel = uiSettings?.angleLabel;\n const distanceLabel = uiSettings?.distanceLabel;\n\n const classNames = classnames(\n \"uifw-accudraw-field-container\",\n orientation === Orientation.Vertical ? \"uifw-vertical\" : \"uifw-horizontal\",\n className\n );\n\n const labelCentered =\n xLabel !== undefined &&\n xLabel.length === 1 &&\n yLabel !== undefined &&\n yLabel.length === 1 &&\n zLabel !== undefined &&\n zLabel.length === 1;\n\n return (\n <div className={classNames} style={style} {...otherProps}>\n {mode === CompassMode.Rectangular && (\n <>\n <AccuDrawInputField\n ref={xInputRef}\n isLocked={xLock}\n style={xStyle}\n field={ItemField.X_Item}\n id={`uifw-accudraw-x-${containerIndex}`}\n data-testid=\"uifw-accudraw-x\"\n label={xLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.xIcon}\n icon={uiSettings?.xIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.X_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.Y_Item)\n }\n />\n <AccuDrawInputField\n ref={yInputRef}\n isLocked={yLock}\n style={yStyle}\n field={ItemField.Y_Item}\n id={`uifw-accudraw-y-${containerIndex}`}\n data-testid=\"uifw-accudraw-y\"\n label={yLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.yIcon}\n icon={uiSettings?.yIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Y_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n showZ\n ? IModelApp.accuDraw.setFocusItem(ItemField.Z_Item)\n : IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n {showZ && (\n <AccuDrawInputField\n ref={zInputRef}\n isLocked={zLock}\n style={zStyle}\n field={ItemField.Z_Item}\n id={`uifw-accudraw-z-${containerIndex}`}\n data-testid=\"uifw-accudraw-z\"\n label={zLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.zIcon}\n icon={uiSettings?.zIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Z_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n )}\n </>\n )}\n {mode === CompassMode.Polar && (\n <>\n <AccuDrawInputField\n ref={distanceInputRef}\n isLocked={distanceLock}\n style={distanceStyle}\n field={ItemField.DIST_Item}\n id={`uifw-accudraw-distance-${containerIndex}`}\n data-testid=\"uifw-accudraw-distance\"\n label={distanceLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.distanceIcon ?? <SvgDistance />}\n icon={uiSettings?.distanceIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.DIST_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.ANGLE_Item)\n }\n />\n <AccuDrawInputField\n ref={angleInputRef}\n isLocked={angleLock}\n isBearingAngle={isBearingAngle}\n style={angleStyle}\n field={ItemField.ANGLE_Item}\n id={`uifw-accudraw-angle-${containerIndex}`}\n data-testid=\"uifw-accudraw-angle\"\n label={angleLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.angleIcon ?? <SvgAngle />}\n icon={uiSettings?.angleIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.ANGLE_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.DIST_Item)\n }\n />\n </>\n )}\n </div>\n );\n}\n\nfunction getCurrent<T>(ref: React.RefObject<T>) {\n if (ref.current === null) return undefined;\n return ref.current;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"AccuDrawPopupManager.d.ts","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawPopupManager.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AASjE;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAgB;WAE9B,cAAc,CAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,cAAc,EAAE,mBAAmB,EAAE,GACpC,OAAO;WA4BI,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;WAInC,cAAc,CAC1B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAC7B,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;WA4BI,cAAc,IAAI,OAAO;WAIzB,eAAe,CAC3B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;IAgBV,gBAAgB;WACF,mBAAmB,CAC/B,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI;WAqBR,gBAAgB,CAC5B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;WAgBI,gBAAgB,CAC5B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;CAeX"}
1
+ {"version":3,"file":"AccuDrawPopupManager.d.ts","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawPopupManager.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AASjE;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAgB;WAE9B,cAAc,CAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,cAAc,EAAE,mBAAmB,EAAE,GACpC,OAAO;WA4BI,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;WAInC,cAAc,CAC1B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAC7B,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;WA4BI,cAAc,IAAI,OAAO;WAIzB,eAAe,CAC3B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;IAaV,gBAAgB;WACF,mBAAmB,CAC/B,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAC9B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI;WAqBR,gBAAgB,CAC5B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;WAaI,gBAAgB,CAC5B,EAAE,EAAE,WAAW,EACf,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,GACnB,OAAO;CAYX"}
@@ -11,9 +11,10 @@ import { PopupManager } from "../popup/PopupManager.js";
11
11
  import { MenuItemHelpers } from "../shared/MenuItem.js";
12
12
  import { CalculatorPopup } from "./CalculatorPopup.js";
13
13
  import { MenuButtonPopup } from "./MenuButtonPopup.js";
14
- import angleIcon from "./angle.svg";
15
- import lengthIcon from "./distance.svg";
16
- import heightIcon from "./height-2.svg";
14
+ import { SvgDistance } from "../icons/SvgDistance.js";
15
+ import { SvgAngle } from "../icons/SvgAngle.js";
16
+ import { addIconNodeParam } from "@itwin/components-react/internal";
17
+ import { SvgHeight } from "../icons/SvgHeight.js";
17
18
  /** AccuDraw Popup Manager class
18
19
  * @public
19
20
  */
@@ -56,7 +57,8 @@ export class AccuDrawPopupManager {
56
57
  return PopupManager.removePopup(AccuDrawPopupManager._calculatorId);
57
58
  }
58
59
  static showAngleEditor(el, pt, value, onCommit, onCancel) {
59
- const propertyDescription = new AngleDescription(undefined, undefined, angleIcon);
60
+ const propertyDescription = new AngleDescription();
61
+ addIconNodeParam(propertyDescription, React.createElement(SvgAngle, null));
60
62
  return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit, onCancel);
61
63
  }
62
64
  /** @internal */
@@ -67,11 +69,13 @@ export class AccuDrawPopupManager {
67
69
  return AccuDrawPopupManager.showLengthEditor(el, pt, value, onCommit, onCancel);
68
70
  }
69
71
  static showLengthEditor(el, pt, value, onCommit, onCancel) {
70
- const propertyDescription = new LengthDescription(undefined, undefined, lengthIcon);
72
+ const propertyDescription = new LengthDescription();
73
+ addIconNodeParam(propertyDescription, React.createElement(SvgDistance, null));
71
74
  return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit, onCancel);
72
75
  }
73
76
  static showHeightEditor(el, pt, value, onCommit, onCancel) {
74
- const propertyDescription = new LengthDescription(undefined, undefined, heightIcon);
77
+ const propertyDescription = new LengthDescription();
78
+ addIconNodeParam(propertyDescription, React.createElement(SvgHeight, null));
75
79
  return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit, onCancel);
76
80
  }
77
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AccuDrawPopupManager.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccuDraw\n */\n\nimport * as React from \"react\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport { AngleDescription, LengthDescription } from \"@itwin/core-frontend\";\nimport type { OnValueCommitFunc } from \"@itwin/appui-abstract\";\nimport type { PopupInfo } from \"../popup/PopupManager.js\";\nimport { PopupManager } from \"../popup/PopupManager.js\";\nimport type { CursorMenuItemProps } from \"../shared/MenuItem.js\";\nimport { MenuItemHelpers } from \"../shared/MenuItem.js\";\nimport { CalculatorPopup } from \"./CalculatorPopup.js\";\nimport { MenuButtonPopup } from \"./MenuButtonPopup.js\";\n\nimport angleIcon from \"./angle.svg\";\nimport lengthIcon from \"./distance.svg\";\nimport heightIcon from \"./height-2.svg\";\n\n/** AccuDraw Popup Manager class\n * @public\n */\nexport class AccuDrawPopupManager {\n private static _calculatorId = \"Calculator\";\n\n public static showMenuButton(\n id: string,\n el: HTMLElement,\n pt: XAndY,\n menuItemsProps: CursorMenuItemProps[]\n ): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const menuItems = MenuItemHelpers.createMenuItems(menuItemsProps);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const menuContent = MenuItemHelpers.createMenuItemNodes(menuItems);\n\n const component = (\n <MenuButtonPopup\n id={id}\n el={el}\n pt={pt}\n offset={PopupManager.defaultOffset}\n content={menuContent}\n />\n );\n\n const popupInfo: PopupInfo = {\n id,\n pt,\n component,\n parentDocument: el.ownerDocument,\n parent: el.ownerDocument,\n };\n PopupManager.addOrUpdatePopup(popupInfo);\n\n return true;\n }\n\n public static hideMenuButton(id: string): boolean {\n return PopupManager.removePopup(id);\n }\n\n public static showCalculator(\n el: HTMLElement,\n pt: XAndY,\n initialValue: number,\n resultIcon: string,\n onOk: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const id = AccuDrawPopupManager._calculatorId;\n const component = (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <CalculatorPopup\n id={id}\n el={el}\n pt={pt}\n offset={PopupManager.defaultOffset}\n initialValue={initialValue}\n resultIcon={resultIcon}\n onOk={onOk}\n onCancel={onCancel}\n />\n );\n\n const popupInfo: PopupInfo = {\n id,\n pt,\n component,\n parentDocument: el.ownerDocument,\n parent: el.ownerDocument,\n };\n PopupManager.addOrUpdatePopup(popupInfo);\n\n return true;\n }\n\n public static hideCalculator(): boolean {\n return PopupManager.removePopup(AccuDrawPopupManager._calculatorId);\n }\n\n public static showAngleEditor(\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const propertyDescription = new AngleDescription(\n undefined,\n undefined,\n angleIcon\n );\n return PopupManager.showInputEditor(\n el,\n pt,\n value,\n propertyDescription,\n onCommit as OnValueCommitFunc,\n onCancel\n );\n }\n\n /** @internal */\n public static showDimensionEditor(\n dimension: \"height\" | \"length\",\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ) {\n if (dimension === \"height\") {\n return AccuDrawPopupManager.showHeightEditor(\n el,\n pt,\n value,\n onCommit,\n onCancel\n );\n }\n\n return AccuDrawPopupManager.showLengthEditor(\n el,\n pt,\n value,\n onCommit,\n onCancel\n );\n }\n\n public static showLengthEditor(\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const propertyDescription = new LengthDescription(\n undefined,\n undefined,\n lengthIcon\n );\n return PopupManager.showInputEditor(\n el,\n pt,\n value,\n propertyDescription,\n onCommit as OnValueCommitFunc,\n onCancel\n );\n }\n\n public static showHeightEditor(\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const propertyDescription = new LengthDescription(\n undefined,\n undefined,\n heightIcon\n );\n return PopupManager.showInputEditor(\n el,\n pt,\n value,\n propertyDescription,\n onCommit as OnValueCommitFunc,\n onCancel\n );\n }\n}\n"]}
1
+ {"version":3,"file":"AccuDrawPopupManager.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccuDraw\n */\n\nimport * as React from \"react\";\nimport type { XAndY } from \"@itwin/core-geometry\";\nimport { AngleDescription, LengthDescription } from \"@itwin/core-frontend\";\nimport type { OnValueCommitFunc } from \"@itwin/appui-abstract\";\nimport type { PopupInfo } from \"../popup/PopupManager.js\";\nimport { PopupManager } from \"../popup/PopupManager.js\";\nimport type { CursorMenuItemProps } from \"../shared/MenuItem.js\";\nimport { MenuItemHelpers } from \"../shared/MenuItem.js\";\nimport { CalculatorPopup } from \"./CalculatorPopup.js\";\nimport { MenuButtonPopup } from \"./MenuButtonPopup.js\";\nimport { SvgDistance } from \"../icons/SvgDistance.js\";\nimport { SvgAngle } from \"../icons/SvgAngle.js\";\nimport { addIconNodeParam } from \"@itwin/components-react/internal\";\nimport { SvgHeight } from \"../icons/SvgHeight.js\";\n\n/** AccuDraw Popup Manager class\n * @public\n */\nexport class AccuDrawPopupManager {\n private static _calculatorId = \"Calculator\";\n\n public static showMenuButton(\n id: string,\n el: HTMLElement,\n pt: XAndY,\n menuItemsProps: CursorMenuItemProps[]\n ): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const menuItems = MenuItemHelpers.createMenuItems(menuItemsProps);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const menuContent = MenuItemHelpers.createMenuItemNodes(menuItems);\n\n const component = (\n <MenuButtonPopup\n id={id}\n el={el}\n pt={pt}\n offset={PopupManager.defaultOffset}\n content={menuContent}\n />\n );\n\n const popupInfo: PopupInfo = {\n id,\n pt,\n component,\n parentDocument: el.ownerDocument,\n parent: el.ownerDocument,\n };\n PopupManager.addOrUpdatePopup(popupInfo);\n\n return true;\n }\n\n public static hideMenuButton(id: string): boolean {\n return PopupManager.removePopup(id);\n }\n\n public static showCalculator(\n el: HTMLElement,\n pt: XAndY,\n initialValue: number,\n resultIcon: string,\n onOk: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const id = AccuDrawPopupManager._calculatorId;\n const component = (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <CalculatorPopup\n id={id}\n el={el}\n pt={pt}\n offset={PopupManager.defaultOffset}\n initialValue={initialValue}\n resultIcon={resultIcon}\n onOk={onOk}\n onCancel={onCancel}\n />\n );\n\n const popupInfo: PopupInfo = {\n id,\n pt,\n component,\n parentDocument: el.ownerDocument,\n parent: el.ownerDocument,\n };\n PopupManager.addOrUpdatePopup(popupInfo);\n\n return true;\n }\n\n public static hideCalculator(): boolean {\n return PopupManager.removePopup(AccuDrawPopupManager._calculatorId);\n }\n\n public static showAngleEditor(\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const propertyDescription = new AngleDescription();\n addIconNodeParam(propertyDescription, <SvgAngle />);\n return PopupManager.showInputEditor(\n el,\n pt,\n value,\n propertyDescription,\n onCommit as OnValueCommitFunc,\n onCancel\n );\n }\n\n /** @internal */\n public static showDimensionEditor(\n dimension: \"height\" | \"length\",\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ) {\n if (dimension === \"height\") {\n return AccuDrawPopupManager.showHeightEditor(\n el,\n pt,\n value,\n onCommit,\n onCancel\n );\n }\n\n return AccuDrawPopupManager.showLengthEditor(\n el,\n pt,\n value,\n onCommit,\n onCancel\n );\n }\n\n public static showLengthEditor(\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const propertyDescription = new LengthDescription();\n addIconNodeParam(propertyDescription, <SvgDistance />);\n return PopupManager.showInputEditor(\n el,\n pt,\n value,\n propertyDescription,\n onCommit as OnValueCommitFunc,\n onCancel\n );\n }\n\n public static showHeightEditor(\n el: HTMLElement,\n pt: XAndY,\n value: number,\n onCommit: (value: number) => void,\n onCancel: () => void\n ): boolean {\n const propertyDescription = new LengthDescription();\n addIconNodeParam(propertyDescription, <SvgHeight />);\n return PopupManager.showInputEditor(\n el,\n pt,\n value,\n propertyDescription,\n onCommit as OnValueCommitFunc,\n onCancel\n );\n }\n}\n"]}
@@ -14,7 +14,7 @@ import { Button, Input } from "@itwin/itwinui-react";
14
14
  import { CalculatorEngine, CalculatorOperator } from "./CalculatorEngine.js";
15
15
  import { SquareButton } from "./SquareButton.js";
16
16
  import { SvgCheckmark, SvgRemove } from "@itwin/itwinui-icons-react";
17
- import backspaceIcon from "./backspace.svg";
17
+ import { SvgBackspace } from "../icons/SvgBackspace.js";
18
18
  /** @public */
19
19
  export class Calculator extends React.PureComponent {
20
20
  constructor(props) {
@@ -161,7 +161,7 @@ class CalculatorKeyPad extends React.PureComponent {
161
161
  React.createElement(OperatorButton, { operator: CalculatorOperator.Clear, onClick: this.props.onOperatorClick }, "C"),
162
162
  React.createElement(OperatorButton, { operator: CalculatorOperator.Backspace, onClick: this.props.onOperatorClick },
163
163
  React.createElement("div", { className: "uifw-calculator-button-svg" },
164
- React.createElement(Icon, { iconSpec: backspaceIcon }))),
164
+ React.createElement(Icon, { iconSpec: React.createElement(SvgBackspace, null) }))),
165
165
  React.createElement(OperatorButton, { operator: CalculatorOperator.Divide, onClick: this.props.onOperatorClick, className: "uifw-calculator-large-font" }, "\u00F7"),
166
166
  React.createElement(ValueButton, { keyChar: "7", onClick: this.props.onValueClick }),
167
167
  React.createElement(ValueButton, { keyChar: "8", onClick: this.props.onValueClick }),
@@ -1 +1 @@
1
- {"version":3,"file":"Calculator.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/Calculator.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccuDraw\n */\n\nimport \"./Calculator.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport type { OnCancelFunc, OnNumberCommitFunc } from \"@itwin/appui-abstract\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Icon, IconInput } from \"@itwin/core-react\";\nimport { Button, Input } from \"@itwin/itwinui-react\";\nimport { CalculatorEngine, CalculatorOperator } from \"./CalculatorEngine.js\";\nimport { SquareButton } from \"./SquareButton.js\";\nimport { SvgCheckmark, SvgRemove } from \"@itwin/itwinui-icons-react\";\nimport backspaceIcon from \"./backspace.svg\";\n\ntype SquareButtonProps = React.ComponentProps<typeof SquareButton>;\n\n/** @public */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface CalculatorProps extends CommonProps {\n /** Initial value */\n initialValue?: number;\n /** Icon to display beside the calculated result */\n resultIcon?: React.ReactNode;\n /** A function to be run when the OK button is clicked */\n onOk?: OnNumberCommitFunc;\n /** A function to be run when the Cancel button is clicked */\n onCancel?: OnCancelFunc;\n\n /** @internal Calculator state machine. */\n engine: CalculatorEngine;\n}\n\ninterface CalculatorState {\n displayValue: string;\n}\n\n/** @public */\nexport class Calculator extends React.PureComponent<\n CalculatorProps,\n CalculatorState\n> {\n private _mainDiv = React.createRef<HTMLDivElement>();\n private _equalsClicked = false;\n\n public static readonly defaultProps: Pick<CalculatorProps, \"engine\"> = {\n engine: new CalculatorEngine(),\n };\n\n constructor(props: CalculatorProps) {\n super(props);\n\n let displayValue = \"0\";\n if (this.props.initialValue)\n displayValue = this.props.engine.processValue(\n this.props.initialValue.toString()\n );\n\n this.state = {\n displayValue,\n };\n }\n\n private _onValueButtonClick = (keyChar: string) => {\n const displayValue = this.props.engine.processValue(keyChar);\n this._mainDivFocus();\n this.setState({ displayValue });\n };\n\n private _onOperatorButtonClick = (operator: CalculatorOperator) => {\n if (operator === CalculatorOperator.Clear && this._equalsClicked)\n operator = CalculatorOperator.ClearAll;\n\n const displayValue = this.props.engine.processOperator(operator);\n this._mainDivFocus();\n this.setState({ displayValue });\n\n if (operator === CalculatorOperator.Equals) this._equalsClicked = true;\n else if (operator === CalculatorOperator.ClearAll)\n this._equalsClicked = false;\n };\n\n private _handleOk = (_event: React.MouseEvent): void => {\n this._ok();\n };\n\n private _ok() {\n if (this.props.onOk) {\n this.props.onOk(this.props.engine.result);\n }\n this._clearAll();\n }\n\n private _handleCancel = (_event: React.MouseEvent): void => {\n this._cancel();\n };\n\n private _cancel() {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n this._clearAll();\n }\n\n private _clearAll() {\n this.props.engine.clearAll();\n this._equalsClicked = false;\n }\n\n public override componentDidMount() {\n this._mainDivFocus();\n }\n\n private _mainDivFocus() {\n if (this._mainDiv.current) this._mainDiv.current.focus();\n }\n\n public override render() {\n const { className, resultIcon, onOk, onCancel, initialValue, ...props } =\n this.props;\n\n const classNames = classnames(\"uifw-calculator\", className);\n\n const topSection = resultIcon ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <IconInput\n containerClassName=\"uifw-calculator-top-input\"\n value={this.state.displayValue}\n readOnly={true}\n icon={resultIcon}\n />\n ) : (\n <Input value={this.state.displayValue} readOnly={true} size=\"small\" />\n );\n\n return (\n // The event handler is only being used to capture bubbled events\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n {...props}\n ref={this._mainDiv}\n tabIndex={-1}\n className={classNames}\n onKeyDown={this._handleKeyDown}\n >\n <div className=\"uifw-calculator-top\">{topSection}</div>\n <CalculatorKeyPad\n onValueClick={this._onValueButtonClick}\n onOperatorClick={this._onOperatorButtonClick}\n />\n <div className=\"uifw-calculator-bottom-buttons\">\n <Button\n className={classnames(\n \"uifw-calculator-large-button\",\n \"uifw-calculator-ok-button\"\n )}\n styleType=\"cta\"\n onClick={this._handleOk}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgCheckmark />} />\n </Button>\n <Button\n className={classnames(\n \"uifw-calculator-large-button\",\n \"uifw-calculator-cancel-button\"\n )}\n onClick={this._handleCancel}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgRemove />} />\n </Button>\n </div>\n </div>\n );\n }\n\n private _handleKeyDown = (\n event: React.KeyboardEvent<HTMLDivElement>\n ): void => {\n switch (event.key) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n this._onValueButtonClick(event.key);\n break;\n case \"a\":\n case \"A\":\n this._onOperatorButtonClick(CalculatorOperator.ClearAll);\n break;\n case \"c\":\n case \"C\":\n case Key.Clear.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Clear);\n break;\n case Key.Escape.valueOf():\n this._cancel();\n break;\n case Key.Backspace.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Backspace);\n break;\n case \"/\":\n case Key.Divide.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Divide);\n break;\n case \"*\":\n case Key.Multiply.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Multiply);\n break;\n case \"-\":\n case Key.Subtract.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Subtract);\n break;\n case \"+\":\n case Key.Add.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Add);\n break;\n case \".\":\n case Key.Decimal.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Decimal);\n break;\n case \"=\":\n this._onOperatorButtonClick(CalculatorOperator.Equals);\n break;\n case Key.Enter.valueOf():\n if (!this._equalsClicked)\n this._onOperatorButtonClick(CalculatorOperator.Equals);\n this._ok();\n break;\n }\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\ninterface CalculatorKeyPadProps extends CommonProps {\n /** A function to be run when a value is clicked */\n onValueClick: (key: string) => void;\n /** A function to be run when a value is clicked */\n onOperatorClick: (operator: CalculatorOperator) => void;\n}\n\nclass CalculatorKeyPad extends React.PureComponent<CalculatorKeyPadProps> {\n public override render() {\n return (\n <div className={classnames(\"uifw-calculator-button-grid\")}>\n <OperatorButton\n operator={CalculatorOperator.ClearAll}\n onClick={this.props.onOperatorClick}\n >\n AC\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Clear}\n onClick={this.props.onOperatorClick}\n >\n C\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Backspace}\n onClick={this.props.onOperatorClick}\n >\n <div className=\"uifw-calculator-button-svg\">\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={backspaceIcon} />\n </div>\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Divide}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &divide;\n </OperatorButton>\n\n <ValueButton keyChar=\"7\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"8\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"9\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.Multiply}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &times;\n </OperatorButton>\n\n <ValueButton keyChar=\"4\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"5\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"6\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.Subtract}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &minus;\n </OperatorButton>\n\n <ValueButton keyChar=\"1\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"2\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"3\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.Add}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &#43;\n </OperatorButton>\n\n <ValueButton keyChar=\"0\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.NegPos}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &plusmn;\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Decimal}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n .\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Equals}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &#61;\n </OperatorButton>\n <span />\n </div>\n );\n }\n}\n\ninterface ValueButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\n /** Key to display */\n keyChar: string;\n /** A function to be run when the element is clicked */\n onClick: (key: string) => void;\n}\n\nclass ValueButton extends React.PureComponent<ValueButtonProps> {\n private _handleOnClick = (\n _event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => {\n this.props.onClick(this.props.keyChar);\n };\n\n public override render() {\n const { className, keyChar, onClick, ...props } = this.props;\n\n const itemClassNames = classnames(\"uifw-calculator-item\", className);\n\n return (\n <SquareButton\n {...props}\n className={itemClassNames}\n onClick={this._handleOnClick}\n >\n {keyChar}\n </SquareButton>\n );\n }\n}\n\ninterface OperatorButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\n /** Key to display */\n operator: CalculatorOperator;\n /** A function to be run when the element is clicked */\n onClick: (operator: CalculatorOperator) => void;\n}\n\nclass OperatorButton extends React.PureComponent<OperatorButtonProps> {\n private _handleOnClick = (\n _event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => {\n this.props.onClick(this.props.operator);\n };\n\n public override render() {\n const { className, children, operator, onClick, ...props } = this.props;\n\n const itemClassNames = classnames(\"uifw-calculator-item\", className);\n\n return (\n <SquareButton\n {...props}\n className={itemClassNames}\n onClick={this._handleOnClick}\n >\n {children}\n </SquareButton>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"Calculator.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/Calculator.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccuDraw\n */\n\nimport \"./Calculator.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport type { OnCancelFunc, OnNumberCommitFunc } from \"@itwin/appui-abstract\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Icon, IconInput } from \"@itwin/core-react\";\nimport { Button, Input } from \"@itwin/itwinui-react\";\nimport { CalculatorEngine, CalculatorOperator } from \"./CalculatorEngine.js\";\nimport { SquareButton } from \"./SquareButton.js\";\nimport { SvgCheckmark, SvgRemove } from \"@itwin/itwinui-icons-react\";\nimport { SvgBackspace } from \"../icons/SvgBackspace.js\";\n\ntype SquareButtonProps = React.ComponentProps<typeof SquareButton>;\n\n/** @public */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface CalculatorProps extends CommonProps {\n /** Initial value */\n initialValue?: number;\n /** Icon to display beside the calculated result */\n resultIcon?: React.ReactNode;\n /** A function to be run when the OK button is clicked */\n onOk?: OnNumberCommitFunc;\n /** A function to be run when the Cancel button is clicked */\n onCancel?: OnCancelFunc;\n\n /** @internal Calculator state machine. */\n engine: CalculatorEngine;\n}\n\ninterface CalculatorState {\n displayValue: string;\n}\n\n/** @public */\nexport class Calculator extends React.PureComponent<\n CalculatorProps,\n CalculatorState\n> {\n private _mainDiv = React.createRef<HTMLDivElement>();\n private _equalsClicked = false;\n\n public static readonly defaultProps: Pick<CalculatorProps, \"engine\"> = {\n engine: new CalculatorEngine(),\n };\n\n constructor(props: CalculatorProps) {\n super(props);\n\n let displayValue = \"0\";\n if (this.props.initialValue)\n displayValue = this.props.engine.processValue(\n this.props.initialValue.toString()\n );\n\n this.state = {\n displayValue,\n };\n }\n\n private _onValueButtonClick = (keyChar: string) => {\n const displayValue = this.props.engine.processValue(keyChar);\n this._mainDivFocus();\n this.setState({ displayValue });\n };\n\n private _onOperatorButtonClick = (operator: CalculatorOperator) => {\n if (operator === CalculatorOperator.Clear && this._equalsClicked)\n operator = CalculatorOperator.ClearAll;\n\n const displayValue = this.props.engine.processOperator(operator);\n this._mainDivFocus();\n this.setState({ displayValue });\n\n if (operator === CalculatorOperator.Equals) this._equalsClicked = true;\n else if (operator === CalculatorOperator.ClearAll)\n this._equalsClicked = false;\n };\n\n private _handleOk = (_event: React.MouseEvent): void => {\n this._ok();\n };\n\n private _ok() {\n if (this.props.onOk) {\n this.props.onOk(this.props.engine.result);\n }\n this._clearAll();\n }\n\n private _handleCancel = (_event: React.MouseEvent): void => {\n this._cancel();\n };\n\n private _cancel() {\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n this._clearAll();\n }\n\n private _clearAll() {\n this.props.engine.clearAll();\n this._equalsClicked = false;\n }\n\n public override componentDidMount() {\n this._mainDivFocus();\n }\n\n private _mainDivFocus() {\n if (this._mainDiv.current) this._mainDiv.current.focus();\n }\n\n public override render() {\n const { className, resultIcon, onOk, onCancel, initialValue, ...props } =\n this.props;\n\n const classNames = classnames(\"uifw-calculator\", className);\n\n const topSection = resultIcon ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <IconInput\n containerClassName=\"uifw-calculator-top-input\"\n value={this.state.displayValue}\n readOnly={true}\n icon={resultIcon}\n />\n ) : (\n <Input value={this.state.displayValue} readOnly={true} size=\"small\" />\n );\n\n return (\n // The event handler is only being used to capture bubbled events\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n {...props}\n ref={this._mainDiv}\n tabIndex={-1}\n className={classNames}\n onKeyDown={this._handleKeyDown}\n >\n <div className=\"uifw-calculator-top\">{topSection}</div>\n <CalculatorKeyPad\n onValueClick={this._onValueButtonClick}\n onOperatorClick={this._onOperatorButtonClick}\n />\n <div className=\"uifw-calculator-bottom-buttons\">\n <Button\n className={classnames(\n \"uifw-calculator-large-button\",\n \"uifw-calculator-ok-button\"\n )}\n styleType=\"cta\"\n onClick={this._handleOk}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgCheckmark />} />\n </Button>\n <Button\n className={classnames(\n \"uifw-calculator-large-button\",\n \"uifw-calculator-cancel-button\"\n )}\n onClick={this._handleCancel}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgRemove />} />\n </Button>\n </div>\n </div>\n );\n }\n\n private _handleKeyDown = (\n event: React.KeyboardEvent<HTMLDivElement>\n ): void => {\n switch (event.key) {\n case \"0\":\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n this._onValueButtonClick(event.key);\n break;\n case \"a\":\n case \"A\":\n this._onOperatorButtonClick(CalculatorOperator.ClearAll);\n break;\n case \"c\":\n case \"C\":\n case Key.Clear.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Clear);\n break;\n case Key.Escape.valueOf():\n this._cancel();\n break;\n case Key.Backspace.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Backspace);\n break;\n case \"/\":\n case Key.Divide.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Divide);\n break;\n case \"*\":\n case Key.Multiply.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Multiply);\n break;\n case \"-\":\n case Key.Subtract.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Subtract);\n break;\n case \"+\":\n case Key.Add.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Add);\n break;\n case \".\":\n case Key.Decimal.valueOf():\n this._onOperatorButtonClick(CalculatorOperator.Decimal);\n break;\n case \"=\":\n this._onOperatorButtonClick(CalculatorOperator.Equals);\n break;\n case Key.Enter.valueOf():\n if (!this._equalsClicked)\n this._onOperatorButtonClick(CalculatorOperator.Equals);\n this._ok();\n break;\n }\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\ninterface CalculatorKeyPadProps extends CommonProps {\n /** A function to be run when a value is clicked */\n onValueClick: (key: string) => void;\n /** A function to be run when a value is clicked */\n onOperatorClick: (operator: CalculatorOperator) => void;\n}\n\nclass CalculatorKeyPad extends React.PureComponent<CalculatorKeyPadProps> {\n public override render() {\n return (\n <div className={classnames(\"uifw-calculator-button-grid\")}>\n <OperatorButton\n operator={CalculatorOperator.ClearAll}\n onClick={this.props.onOperatorClick}\n >\n AC\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Clear}\n onClick={this.props.onOperatorClick}\n >\n C\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Backspace}\n onClick={this.props.onOperatorClick}\n >\n <div className=\"uifw-calculator-button-svg\">\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={<SvgBackspace />} />\n </div>\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Divide}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &divide;\n </OperatorButton>\n\n <ValueButton keyChar=\"7\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"8\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"9\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.Multiply}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &times;\n </OperatorButton>\n\n <ValueButton keyChar=\"4\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"5\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"6\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.Subtract}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &minus;\n </OperatorButton>\n\n <ValueButton keyChar=\"1\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"2\" onClick={this.props.onValueClick} />\n <ValueButton keyChar=\"3\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.Add}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &#43;\n </OperatorButton>\n\n <ValueButton keyChar=\"0\" onClick={this.props.onValueClick} />\n <OperatorButton\n operator={CalculatorOperator.NegPos}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &plusmn;\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Decimal}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n .\n </OperatorButton>\n <OperatorButton\n operator={CalculatorOperator.Equals}\n onClick={this.props.onOperatorClick}\n className=\"uifw-calculator-large-font\"\n >\n &#61;\n </OperatorButton>\n <span />\n </div>\n );\n }\n}\n\ninterface ValueButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\n /** Key to display */\n keyChar: string;\n /** A function to be run when the element is clicked */\n onClick: (key: string) => void;\n}\n\nclass ValueButton extends React.PureComponent<ValueButtonProps> {\n private _handleOnClick = (\n _event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => {\n this.props.onClick(this.props.keyChar);\n };\n\n public override render() {\n const { className, keyChar, onClick, ...props } = this.props;\n\n const itemClassNames = classnames(\"uifw-calculator-item\", className);\n\n return (\n <SquareButton\n {...props}\n className={itemClassNames}\n onClick={this._handleOnClick}\n >\n {keyChar}\n </SquareButton>\n );\n }\n}\n\ninterface OperatorButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\n /** Key to display */\n operator: CalculatorOperator;\n /** A function to be run when the element is clicked */\n onClick: (operator: CalculatorOperator) => void;\n}\n\nclass OperatorButton extends React.PureComponent<OperatorButtonProps> {\n private _handleOnClick = (\n _event: React.MouseEvent<HTMLButtonElement, MouseEvent>\n ) => {\n this.props.onClick(this.props.operator);\n };\n\n public override render() {\n const { className, children, operator, onClick, ...props } = this.props;\n\n const itemClassNames = classnames(\"uifw-calculator-item\", className);\n\n return (\n <SquareButton\n {...props}\n className={itemClassNames}\n onClick={this._handleOnClick}\n >\n {children}\n </SquareButton>\n );\n }\n}\n"]}
@@ -9,5 +9,7 @@ interface ChildWindowRendererProps {
9
9
  }
10
10
  /** @internal */
11
11
  export declare function ChildWindowRenderer({ windowManager, }: ChildWindowRendererProps): React.JSX.Element;
12
+ /** @internal */
13
+ export declare const ChildWindowContext: React.Context<Window | undefined>;
12
14
  export {};
13
15
  //# sourceMappingURL=ChildWindowRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChildWindowRenderer.d.ts","sourceRoot":"","sources":["../../../src/appui-react/childwindow/ChildWindowRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,4BAA4B,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,iCAAiC,CAAC;AAUzC,UAAU,wBAAwB;IAChC,aAAa,EAAE,0BAA0B,CAAC;CAC3C;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,GACd,EAAE,wBAAwB,qBAuB1B"}
1
+ {"version":3,"file":"ChildWindowRenderer.d.ts","sourceRoot":"","sources":["../../../src/appui-react/childwindow/ChildWindowRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,4BAA4B,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,iCAAiC,CAAC;AAWzC,UAAU,wBAAwB;IAChC,aAAa,EAAE,0BAA0B,CAAC;CAC3C;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,GACd,EAAE,wBAAwB,qBAuB1B;AAuED,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,mCAE9B,CAAC"}
@@ -16,6 +16,7 @@ import { ModelessDialogRenderer } from "../dialog/ModelessDialogManager.js";
16
16
  import { CursorPopupMenu } from "../cursor/cursormenu/CursorMenu.js";
17
17
  import { copyStyles } from "./CopyStyles.js";
18
18
  import { ConfigurableUiContext } from "../configurableui/ConfigurableUiContent.js";
19
+ import { CursorPopupRenderer } from "../../appui-react.js";
19
20
  /** @internal */
20
21
  export function ChildWindowRenderer({ windowManager, }) {
21
22
  const [childWindows, setChildWindows] = React.useState(windowManager.openChildWindows);
@@ -45,16 +46,18 @@ function ChildWindow({ content, tabId, window }) {
45
46
  if (!styled)
46
47
  return null;
47
48
  const ChildWindowWrapper = childWindow ?? DefaultChildWindowWrapper;
48
- return ReactDOM.createPortal(React.createElement(TabIdContext.Provider, { value: tabId },
49
- React.createElement(ThemeManager, null,
50
- React.createElement(ChildWindowWrapper, null,
51
- React.createElement("div", { className: "uifw-child-window-container-host" },
52
- React.createElement(PopupRenderer, null),
53
- React.createElement(ModalDialogRenderer, null),
54
- React.createElement(ModelessDialogRenderer, null),
55
- React.createElement(CursorPopupMenu, null),
56
- React.createElement("div", { className: "uifw-child-window-container nz-widget-widget" }, content)),
57
- React.createElement("div", { className: "uifw-childwindow-internalChildWindowManager_portalContainer" })))), container);
49
+ return ReactDOM.createPortal(React.createElement(ChildWindowContext.Provider, { value: window },
50
+ React.createElement(TabIdContext.Provider, { value: tabId },
51
+ React.createElement(ThemeManager, null,
52
+ React.createElement(ChildWindowWrapper, null,
53
+ React.createElement("div", { className: "uifw-child-window-container-host" },
54
+ React.createElement(PopupRenderer, null),
55
+ React.createElement(ModalDialogRenderer, null),
56
+ React.createElement(ModelessDialogRenderer, null),
57
+ React.createElement(CursorPopupMenu, null),
58
+ React.createElement("div", { className: "uifw-child-window-container nz-widget-widget" }, content),
59
+ React.createElement(CursorPopupRenderer, null)),
60
+ React.createElement("div", { className: "uifw-childwindow-internalChildWindowManager_portalContainer" }))))), container);
58
61
  }
59
62
  const stylesUtils = (() => {
60
63
  // eslint-disable-next-line @typescript-eslint/promise-function-async
@@ -77,4 +80,6 @@ const stylesUtils = (() => {
77
80
  function DefaultChildWindowWrapper(props) {
78
81
  return React.createElement(React.Fragment, null, props.children);
79
82
  }
83
+ /** @internal */
84
+ export const ChildWindowContext = React.createContext(undefined);
80
85
  //# sourceMappingURL=ChildWindowRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChildWindowRenderer.js","sourceRoot":"","sources":["../../../src/appui-react/childwindow/ChildWindowRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ChildWindowManager\n */\n\nimport \"./ChildWindowRenderer.scss\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n InternalChildWindowManager,\n InternalOpenChildWindowInfo,\n} from \"./InternalChildWindowManager.js\";\nimport { TabIdContext } from \"../layout/widget/ContentRenderer.js\";\nimport { ThemeManager } from \"../theme/ThemeManager.js\";\nimport { PopupRenderer } from \"../popup/PopupManager.js\";\nimport { ModalDialogRenderer } from \"../dialog/ModalDialogManager.js\";\nimport { ModelessDialogRenderer } from \"../dialog/ModelessDialogManager.js\";\nimport { CursorPopupMenu } from \"../cursor/cursormenu/CursorMenu.js\";\nimport { copyStyles } from \"./CopyStyles.js\";\nimport { ConfigurableUiContext } from \"../configurableui/ConfigurableUiContent.js\";\n\ninterface ChildWindowRendererProps {\n windowManager: InternalChildWindowManager;\n}\n\n/** @internal */\nexport function ChildWindowRenderer({\n windowManager,\n}: ChildWindowRendererProps) {\n const [childWindows, setChildWindows] = React.useState(\n windowManager.openChildWindows\n );\n React.useEffect(() => {\n return windowManager.onChildWindowsChanged.addListener(() => {\n setChildWindows([...windowManager.openChildWindows]);\n });\n }, [windowManager]);\n return (\n <>\n {childWindows.map((childWindow) => {\n return (\n <ChildWindow\n key={childWindow.childWindowId}\n content={childWindow.content}\n tabId={childWindow.tabId}\n window={childWindow.window}\n />\n );\n })}\n </>\n );\n}\n\ntype ChildWindowProps = Pick<\n InternalOpenChildWindowInfo,\n \"content\" | \"tabId\" | \"window\"\n>;\n\nfunction ChildWindow({ content, tabId, window }: ChildWindowProps) {\n const { childWindow } = React.useContext(ConfigurableUiContext);\n const container = React.useMemo(() => {\n return window.document.getElementById(\"root\");\n }, [window]);\n const [styled, setStyled] = React.useState(false);\n React.useEffect(() => {\n void (async () => {\n await stylesUtils.copyStyles(window);\n setStyled(true);\n })();\n }, [window]);\n\n if (!container) return null;\n if (!styled) return null;\n\n const ChildWindowWrapper = childWindow ?? DefaultChildWindowWrapper;\n return ReactDOM.createPortal(\n <TabIdContext.Provider value={tabId}>\n <ThemeManager>\n <ChildWindowWrapper>\n <div className=\"uifw-child-window-container-host\">\n <PopupRenderer />\n <ModalDialogRenderer />\n <ModelessDialogRenderer />\n <CursorPopupMenu />\n <div className=\"uifw-child-window-container nz-widget-widget\">\n {content}\n </div>\n </div>\n <div className=\"uifw-childwindow-internalChildWindowManager_portalContainer\" />\n </ChildWindowWrapper>\n </ThemeManager>\n </TabIdContext.Provider>,\n container\n );\n}\n\nconst stylesUtils = (() => {\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n const getCopyStylesPromise = (window: Window) => {\n const w = window as any;\n return w.__appui_copy_styles as Promise<void> | undefined;\n };\n return {\n copyStyles: async (window: Window) => {\n let copyStylesPromise = getCopyStylesPromise(window);\n if (copyStylesPromise === undefined) {\n copyStylesPromise = copyStyles(window.document);\n const w = window as any;\n w.__appui_copy_styles = copyStylesPromise;\n }\n return copyStylesPromise;\n },\n };\n})();\n\nfunction DefaultChildWindowWrapper(props: React.PropsWithChildren) {\n return <>{props.children}</>;\n}\n"]}
1
+ {"version":3,"file":"ChildWindowRenderer.js","sourceRoot":"","sources":["../../../src/appui-react/childwindow/ChildWindowRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ChildWindowManager\n */\n\nimport \"./ChildWindowRenderer.scss\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport type {\n InternalChildWindowManager,\n InternalOpenChildWindowInfo,\n} from \"./InternalChildWindowManager.js\";\nimport { TabIdContext } from \"../layout/widget/ContentRenderer.js\";\nimport { ThemeManager } from \"../theme/ThemeManager.js\";\nimport { PopupRenderer } from \"../popup/PopupManager.js\";\nimport { ModalDialogRenderer } from \"../dialog/ModalDialogManager.js\";\nimport { ModelessDialogRenderer } from \"../dialog/ModelessDialogManager.js\";\nimport { CursorPopupMenu } from \"../cursor/cursormenu/CursorMenu.js\";\nimport { copyStyles } from \"./CopyStyles.js\";\nimport { ConfigurableUiContext } from \"../configurableui/ConfigurableUiContent.js\";\nimport { CursorPopupRenderer } from \"../../appui-react.js\";\n\ninterface ChildWindowRendererProps {\n windowManager: InternalChildWindowManager;\n}\n\n/** @internal */\nexport function ChildWindowRenderer({\n windowManager,\n}: ChildWindowRendererProps) {\n const [childWindows, setChildWindows] = React.useState(\n windowManager.openChildWindows\n );\n React.useEffect(() => {\n return windowManager.onChildWindowsChanged.addListener(() => {\n setChildWindows([...windowManager.openChildWindows]);\n });\n }, [windowManager]);\n return (\n <>\n {childWindows.map((childWindow) => {\n return (\n <ChildWindow\n key={childWindow.childWindowId}\n content={childWindow.content}\n tabId={childWindow.tabId}\n window={childWindow.window}\n />\n );\n })}\n </>\n );\n}\n\ntype ChildWindowProps = Pick<\n InternalOpenChildWindowInfo,\n \"content\" | \"tabId\" | \"window\"\n>;\n\nfunction ChildWindow({ content, tabId, window }: ChildWindowProps) {\n const { childWindow } = React.useContext(ConfigurableUiContext);\n const container = React.useMemo(() => {\n return window.document.getElementById(\"root\");\n }, [window]);\n const [styled, setStyled] = React.useState(false);\n React.useEffect(() => {\n void (async () => {\n await stylesUtils.copyStyles(window);\n setStyled(true);\n })();\n }, [window]);\n\n if (!container) return null;\n if (!styled) return null;\n\n const ChildWindowWrapper = childWindow ?? DefaultChildWindowWrapper;\n return ReactDOM.createPortal(\n <ChildWindowContext.Provider value={window}>\n <TabIdContext.Provider value={tabId}>\n <ThemeManager>\n <ChildWindowWrapper>\n <div className=\"uifw-child-window-container-host\">\n <PopupRenderer />\n <ModalDialogRenderer />\n <ModelessDialogRenderer />\n <CursorPopupMenu />\n <div className=\"uifw-child-window-container nz-widget-widget\">\n {content}\n </div>\n <CursorPopupRenderer />\n </div>\n <div className=\"uifw-childwindow-internalChildWindowManager_portalContainer\" />\n </ChildWindowWrapper>\n </ThemeManager>\n </TabIdContext.Provider>\n </ChildWindowContext.Provider>,\n container\n );\n}\n\nconst stylesUtils = (() => {\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n const getCopyStylesPromise = (window: Window) => {\n const w = window as any;\n return w.__appui_copy_styles as Promise<void> | undefined;\n };\n return {\n copyStyles: async (window: Window) => {\n let copyStylesPromise = getCopyStylesPromise(window);\n if (copyStylesPromise === undefined) {\n copyStylesPromise = copyStyles(window.document);\n const w = window as any;\n w.__appui_copy_styles = copyStylesPromise;\n }\n return copyStylesPromise;\n },\n };\n})();\n\nfunction DefaultChildWindowWrapper(props: React.PropsWithChildren) {\n return <>{props.children}</>;\n}\n\n/** @internal */\nexport const ChildWindowContext = React.createContext<Window | undefined>(\n undefined\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"InternalChildWindowManager.d.ts","sourceRoot":"","sources":["../../../src/appui-react/childwindow/InternalChildWindowManager.tsx"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAiC5D,gBAAgB;AAChB,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,qBAAqB;IACtE,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,wBAAwB,CAG5B;IAEJ,SAAgB,qBAAqB,gBAAqB,IAAI,EAAI;IAElE,IAAW,gBAAgB,kCAE1B;IAED;;;;OAIG;IACI,IAAI,CACT,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,mBAAmB,GAAG,SAAS;IAQlC;;;;OAIG;IACI,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS;IAS3E,OAAO,CAAC,yBAAyB;IAmBjC,gGAAgG;IACzF,QAAQ;IAUf;;;;;OAKG;IACI,KAAK,kBAAmB,MAAM,2CAsBnC;IAEF,OAAO,CAAC,oBAAoB;IAU5B;;;;;;;;OAQG;IACI,IAAI,CACT,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC,SAAS,EACxB,QAAQ,EAAE,wBAAwB,EAClC,mBAAmB,CAAC,EAAE,OAAO;IAY/B,gEAAgE;IACzD,UAAU,CAAC,EAChB,aAAa,EACb,QAAQ,EACR,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,KAAK,GACN,EAAE,cAAc;CAsDlB"}
1
+ {"version":3,"file":"InternalChildWindowManager.d.ts","sourceRoot":"","sources":["../../../src/appui-react/childwindow/InternalChildWindowManager.tsx"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AA0C5D,gBAAgB;AAChB,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,qBAAqB;IACtE,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,wBAAwB,CAG5B;IAEJ,SAAgB,qBAAqB,gBAAqB,IAAI,EAAI;IAElE,IAAW,gBAAgB,kCAE1B;IAED;;;;OAIG;IACI,IAAI,CACT,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,mBAAmB,GAAG,SAAS;IAQlC;;;;OAIG;IACI,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS;IAS3E,OAAO,CAAC,yBAAyB;IAmBjC,gGAAgG;IACzF,QAAQ;IAUf;;;;;OAKG;IACI,KAAK,kBAAmB,MAAM,2CAsBnC;IAEF,OAAO,CAAC,oBAAoB;IAU5B;;;;;;;;OAQG;IACI,IAAI,CACT,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC,SAAS,EACxB,QAAQ,EAAE,wBAAwB,EAClC,mBAAmB,CAAC,EAAE,OAAO;IAY/B,gEAAgE;IACzD,UAAU,CAAC,EAChB,aAAa,EACb,QAAQ,EACR,mBAAmB,EACnB,OAAO,EACP,KAAK,EACL,KAAK,GACN,EAAE,cAAc;CAsDlB"}
@@ -24,6 +24,14 @@ function addChildHTML(window) {
24
24
  }
25
25
  `;
26
26
  doc.head.appendChild(style);
27
+ // Fixes a FF specific issue where document.baseURI is "about:blank"
28
+ const opener = window.opener;
29
+ const baseURI = opener?.document.baseURI;
30
+ if (doc.baseURI === "about:blank" && baseURI) {
31
+ const base = doc.createElement("base");
32
+ base.href = baseURI;
33
+ doc.head.appendChild(base);
34
+ }
27
35
  const noScript = doc.createElement("noscript");
28
36
  noScript.textContent = "You need to enable JavaScript to run this app.";
29
37
  doc.body.appendChild(noScript);
@@ -1 +1 @@
1
- {"version":3,"file":"InternalChildWindowManager.js","sourceRoot":"","sources":["../../../src/appui-react/childwindow/InternalChildWindowManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ChildWindowManager\n */\n\nimport type * as React from \"react\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type {\n ChildWindowLocationProps,\n FrameworkChildWindows,\n OpenChildWindowInfo,\n} from \"../framework/FrameworkChildWindows.js\";\nimport { usePopoutsStore } from \"../preview/reparent-popout-widgets/usePopoutsStore.js\";\nimport type { TabState } from \"../layout/state/TabState.js\";\n\nfunction addChildHTML(window: Window) {\n const doc = window.document;\n\n const meta = doc.createElement(\"meta\");\n meta.setAttribute(\"charset\", \"utf-8\");\n doc.head.appendChild(meta);\n\n const style = doc.createElement(\"style\");\n style.textContent = `\n html,\n body {\n height: 100%;\n width: 100%;\n margin: 0;\n overflow: hidden;\n }\n #root {\n height: 100%;\n }\n `;\n doc.head.appendChild(style);\n\n const noScript = doc.createElement(\"noscript\");\n noScript.textContent = \"You need to enable JavaScript to run this app.\";\n doc.body.appendChild(noScript);\n\n const root = doc.createElement(\"div\");\n root.id = \"root\";\n doc.body.appendChild(root);\n}\n\n/** @internal */\nexport interface InternalOpenChildWindowInfo extends OpenChildWindowInfo {\n content?: React.ReactNode;\n tabId?: TabState[\"id\"];\n}\n\ninterface OpenWindowArgs {\n childWindowId: string;\n title: string;\n content: React.ReactNode;\n location: ChildWindowLocationProps;\n useDefaultPopoutUrl: boolean;\n tabId?: TabState[\"id\"];\n}\n\n/** Supports opening a child browser window from the main application window. The child window is managed by the main application\n * and is running in the same security context. The application must deliver the html file iTwinPopup.html along side its index.html.\n * See also: [Child Window Manager]($docs/learning/ui/appui-react/ChildWindows.md)\n * @internal\n */\nexport class InternalChildWindowManager implements FrameworkChildWindows {\n private _openChildWindows: InternalOpenChildWindowInfo[] = [];\n private _childWindowToUnregister = new Map<\n InternalOpenChildWindowInfo[\"childWindowId\"],\n () => void\n >();\n\n public readonly onChildWindowsChanged = new BeEvent<() => void>();\n\n public get openChildWindows() {\n return this._openChildWindows;\n }\n\n /**\n * Returns the OpenChildWindowInfo for the related id.\n * @param childWindowId Id of the window to retrieve.\n * @returns undefined if not found.\n */\n public find(\n childWindowId: string | undefined\n ): OpenChildWindowInfo | undefined {\n if (undefined === childWindowId) return undefined;\n\n return this.openChildWindows.find(\n (openWindow) => openWindow.childWindowId === childWindowId\n );\n }\n\n /**\n * Return the childWindowId of the provided window.\n * @param contentWindow Window element to identify\n * @returns undefined if not found\n */\n public findId(contentWindow: Window | undefined | null): string | undefined {\n if (!contentWindow) return undefined;\n\n const childWindow = this.openChildWindows.find(\n (openWindow) => openWindow.window === contentWindow\n );\n return childWindow?.childWindowId;\n }\n\n private renderChildWindowContents(\n childWindow: Window,\n childWindowId: string,\n content: React.ReactNode,\n title: string,\n tabId?: TabState[\"id\"]\n ) {\n childWindow.document.title = title;\n\n this._openChildWindows.push({\n childWindowId,\n window: childWindow,\n parentWindow: window,\n content,\n tabId,\n });\n this.onChildWindowsChanged.raiseEvent();\n }\n\n /** Close all child/pop-out windows. This typically is called when the frontstage is changed. */\n public closeAll() {\n this.openChildWindows.forEach((openChildWindow) =>\n openChildWindow.window.close()\n );\n this._childWindowToUnregister.forEach((unregister) => unregister());\n this._childWindowToUnregister.clear();\n this._openChildWindows = [];\n this.onChildWindowsChanged.raiseEvent();\n }\n\n /**\n * Close a specific child window.\n * @param childWindowId Id of the window to close.\n * @param processWindowClose should the `close` method be called on the closing window. (defaults to true).\n * @returns false if the window could not be found.\n */\n public close = (childWindowId: string, processWindowClose = true) => {\n const windowIndex = this.openChildWindows.findIndex(\n (openWindow) => openWindow.childWindowId === childWindowId\n );\n if (windowIndex === -1) return false;\n const { onClosePopoutWidget } = usePopoutsStore.getState();\n onClosePopoutWidget.raiseEvent({ windowId: childWindowId });\n\n const childWindow = this.openChildWindows[windowIndex];\n this._openChildWindows.splice(windowIndex, 1);\n this._childWindowToUnregister.get(childWindowId)?.();\n this._childWindowToUnregister.delete(childWindowId);\n\n this.onChildWindowsChanged.raiseEvent();\n if (processWindowClose) {\n childWindow.window.close();\n } else {\n // call the following to convert popout to docked widget\n const frontStageDef = UiFramework.frontstages.activeFrontstageDef;\n frontStageDef?.dockWidgetContainerByContainerId(childWindowId);\n }\n return true;\n };\n\n private adjustWindowLocation(location: ChildWindowLocationProps) {\n // If no location is provided, child window will open in the center of the current window.\n if (location.top === 0 && location.left === 0) {\n location.left =\n window.outerWidth / 2 + window.screenX - location.width / 2;\n location.top =\n window.outerHeight / 2 + window.screenY - location.height / 2;\n }\n }\n\n /**\n * Open a new child window.\n * @param childWindowId Id to assign to the newly created window.\n * @param title Title to display on the window.\n * @param content ReactNode to be rendered in the window.\n * @param location Position and size information\n * @param useDefaultPopoutUrl use \"/iTwinPopup.html\" as the window Url, \"\" otherwise.\n * @returns true if the window is opened successfully.\n */\n public open(\n childWindowId: string,\n title: string,\n content: React.ReactNode,\n location: ChildWindowLocationProps,\n useDefaultPopoutUrl?: boolean\n ) {\n const childWindow = this.openWindow({\n childWindowId,\n title,\n content,\n location,\n useDefaultPopoutUrl: useDefaultPopoutUrl ?? false,\n });\n return !!childWindow;\n }\n\n /** Used internally to open child windows and popout widgets. */\n public openWindow({\n childWindowId,\n location,\n useDefaultPopoutUrl,\n content,\n title,\n tabId,\n }: OpenWindowArgs) {\n if (this.find(childWindowId)) return undefined;\n\n this.adjustWindowLocation(location);\n const url = useDefaultPopoutUrl ? \"/iTwinPopup.html\" : \"\";\n const childWindow = window.open(\n url,\n \"\",\n `width=${location.width},height=${location.height},left=${location.left},top=${location.top},menubar=no,resizable=yes,scrollbars=no,status=no,location=no`\n );\n if (!childWindow) return undefined;\n\n const onPageHide = () => {\n const frontStageDef = UiFramework.frontstages.activeFrontstageDef;\n if (!frontStageDef) return;\n frontStageDef.saveChildWindowSizeAndPosition(childWindowId, childWindow);\n\n // Trigger first so popout can be converted back to main window widget\n this.close(childWindowId, false);\n };\n childWindow.addEventListener(\"pagehide\", onPageHide);\n\n const onDOMContentLoaded = () => {\n this.renderChildWindowContents(\n childWindow,\n childWindowId,\n content,\n title,\n tabId\n );\n };\n if (url.length === 0) {\n addChildHTML(childWindow);\n onDOMContentLoaded();\n } else {\n childWindow.addEventListener(\"DOMContentLoaded\", onDOMContentLoaded);\n }\n\n const onUnload = () => {\n const frontStageDef = UiFramework.frontstages.activeFrontstageDef;\n if (frontStageDef) {\n this.close(childWindowId, true);\n }\n };\n window.addEventListener(\"unload\", onUnload);\n\n this._childWindowToUnregister.set(childWindowId, () => {\n childWindow.removeEventListener(\"pagehide\", onPageHide);\n childWindow.removeEventListener(\"DOMContentLoaded\", onDOMContentLoaded);\n window.removeEventListener(\"unload\", onUnload);\n });\n\n return childWindow;\n }\n}\n"]}
1
+ {"version":3,"file":"InternalChildWindowManager.js","sourceRoot":"","sources":["../../../src/appui-react/childwindow/InternalChildWindowManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module ChildWindowManager\n */\n\nimport type * as React from \"react\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type {\n ChildWindowLocationProps,\n FrameworkChildWindows,\n OpenChildWindowInfo,\n} from \"../framework/FrameworkChildWindows.js\";\nimport { usePopoutsStore } from \"../preview/reparent-popout-widgets/usePopoutsStore.js\";\nimport type { TabState } from \"../layout/state/TabState.js\";\n\nfunction addChildHTML(window: Window) {\n const doc = window.document;\n\n const meta = doc.createElement(\"meta\");\n meta.setAttribute(\"charset\", \"utf-8\");\n doc.head.appendChild(meta);\n\n const style = doc.createElement(\"style\");\n style.textContent = `\n html,\n body {\n height: 100%;\n width: 100%;\n margin: 0;\n overflow: hidden;\n }\n #root {\n height: 100%;\n }\n `;\n doc.head.appendChild(style);\n\n // Fixes a FF specific issue where document.baseURI is \"about:blank\"\n const opener: Window | undefined = window.opener;\n const baseURI = opener?.document.baseURI;\n if (doc.baseURI === \"about:blank\" && baseURI) {\n const base = doc.createElement(\"base\");\n base.href = baseURI;\n doc.head.appendChild(base);\n }\n\n const noScript = doc.createElement(\"noscript\");\n noScript.textContent = \"You need to enable JavaScript to run this app.\";\n doc.body.appendChild(noScript);\n\n const root = doc.createElement(\"div\");\n root.id = \"root\";\n doc.body.appendChild(root);\n}\n\n/** @internal */\nexport interface InternalOpenChildWindowInfo extends OpenChildWindowInfo {\n content?: React.ReactNode;\n tabId?: TabState[\"id\"];\n}\n\ninterface OpenWindowArgs {\n childWindowId: string;\n title: string;\n content: React.ReactNode;\n location: ChildWindowLocationProps;\n useDefaultPopoutUrl: boolean;\n tabId?: TabState[\"id\"];\n}\n\n/** Supports opening a child browser window from the main application window. The child window is managed by the main application\n * and is running in the same security context. The application must deliver the html file iTwinPopup.html along side its index.html.\n * See also: [Child Window Manager]($docs/learning/ui/appui-react/ChildWindows.md)\n * @internal\n */\nexport class InternalChildWindowManager implements FrameworkChildWindows {\n private _openChildWindows: InternalOpenChildWindowInfo[] = [];\n private _childWindowToUnregister = new Map<\n InternalOpenChildWindowInfo[\"childWindowId\"],\n () => void\n >();\n\n public readonly onChildWindowsChanged = new BeEvent<() => void>();\n\n public get openChildWindows() {\n return this._openChildWindows;\n }\n\n /**\n * Returns the OpenChildWindowInfo for the related id.\n * @param childWindowId Id of the window to retrieve.\n * @returns undefined if not found.\n */\n public find(\n childWindowId: string | undefined\n ): OpenChildWindowInfo | undefined {\n if (undefined === childWindowId) return undefined;\n\n return this.openChildWindows.find(\n (openWindow) => openWindow.childWindowId === childWindowId\n );\n }\n\n /**\n * Return the childWindowId of the provided window.\n * @param contentWindow Window element to identify\n * @returns undefined if not found\n */\n public findId(contentWindow: Window | undefined | null): string | undefined {\n if (!contentWindow) return undefined;\n\n const childWindow = this.openChildWindows.find(\n (openWindow) => openWindow.window === contentWindow\n );\n return childWindow?.childWindowId;\n }\n\n private renderChildWindowContents(\n childWindow: Window,\n childWindowId: string,\n content: React.ReactNode,\n title: string,\n tabId?: TabState[\"id\"]\n ) {\n childWindow.document.title = title;\n\n this._openChildWindows.push({\n childWindowId,\n window: childWindow,\n parentWindow: window,\n content,\n tabId,\n });\n this.onChildWindowsChanged.raiseEvent();\n }\n\n /** Close all child/pop-out windows. This typically is called when the frontstage is changed. */\n public closeAll() {\n this.openChildWindows.forEach((openChildWindow) =>\n openChildWindow.window.close()\n );\n this._childWindowToUnregister.forEach((unregister) => unregister());\n this._childWindowToUnregister.clear();\n this._openChildWindows = [];\n this.onChildWindowsChanged.raiseEvent();\n }\n\n /**\n * Close a specific child window.\n * @param childWindowId Id of the window to close.\n * @param processWindowClose should the `close` method be called on the closing window. (defaults to true).\n * @returns false if the window could not be found.\n */\n public close = (childWindowId: string, processWindowClose = true) => {\n const windowIndex = this.openChildWindows.findIndex(\n (openWindow) => openWindow.childWindowId === childWindowId\n );\n if (windowIndex === -1) return false;\n const { onClosePopoutWidget } = usePopoutsStore.getState();\n onClosePopoutWidget.raiseEvent({ windowId: childWindowId });\n\n const childWindow = this.openChildWindows[windowIndex];\n this._openChildWindows.splice(windowIndex, 1);\n this._childWindowToUnregister.get(childWindowId)?.();\n this._childWindowToUnregister.delete(childWindowId);\n\n this.onChildWindowsChanged.raiseEvent();\n if (processWindowClose) {\n childWindow.window.close();\n } else {\n // call the following to convert popout to docked widget\n const frontStageDef = UiFramework.frontstages.activeFrontstageDef;\n frontStageDef?.dockWidgetContainerByContainerId(childWindowId);\n }\n return true;\n };\n\n private adjustWindowLocation(location: ChildWindowLocationProps) {\n // If no location is provided, child window will open in the center of the current window.\n if (location.top === 0 && location.left === 0) {\n location.left =\n window.outerWidth / 2 + window.screenX - location.width / 2;\n location.top =\n window.outerHeight / 2 + window.screenY - location.height / 2;\n }\n }\n\n /**\n * Open a new child window.\n * @param childWindowId Id to assign to the newly created window.\n * @param title Title to display on the window.\n * @param content ReactNode to be rendered in the window.\n * @param location Position and size information\n * @param useDefaultPopoutUrl use \"/iTwinPopup.html\" as the window Url, \"\" otherwise.\n * @returns true if the window is opened successfully.\n */\n public open(\n childWindowId: string,\n title: string,\n content: React.ReactNode,\n location: ChildWindowLocationProps,\n useDefaultPopoutUrl?: boolean\n ) {\n const childWindow = this.openWindow({\n childWindowId,\n title,\n content,\n location,\n useDefaultPopoutUrl: useDefaultPopoutUrl ?? false,\n });\n return !!childWindow;\n }\n\n /** Used internally to open child windows and popout widgets. */\n public openWindow({\n childWindowId,\n location,\n useDefaultPopoutUrl,\n content,\n title,\n tabId,\n }: OpenWindowArgs) {\n if (this.find(childWindowId)) return undefined;\n\n this.adjustWindowLocation(location);\n const url = useDefaultPopoutUrl ? \"/iTwinPopup.html\" : \"\";\n const childWindow = window.open(\n url,\n \"\",\n `width=${location.width},height=${location.height},left=${location.left},top=${location.top},menubar=no,resizable=yes,scrollbars=no,status=no,location=no`\n );\n if (!childWindow) return undefined;\n\n const onPageHide = () => {\n const frontStageDef = UiFramework.frontstages.activeFrontstageDef;\n if (!frontStageDef) return;\n frontStageDef.saveChildWindowSizeAndPosition(childWindowId, childWindow);\n\n // Trigger first so popout can be converted back to main window widget\n this.close(childWindowId, false);\n };\n childWindow.addEventListener(\"pagehide\", onPageHide);\n\n const onDOMContentLoaded = () => {\n this.renderChildWindowContents(\n childWindow,\n childWindowId,\n content,\n title,\n tabId\n );\n };\n if (url.length === 0) {\n addChildHTML(childWindow);\n onDOMContentLoaded();\n } else {\n childWindow.addEventListener(\"DOMContentLoaded\", onDOMContentLoaded);\n }\n\n const onUnload = () => {\n const frontStageDef = UiFramework.frontstages.activeFrontstageDef;\n if (frontStageDef) {\n this.close(childWindowId, true);\n }\n };\n window.addEventListener(\"unload\", onUnload);\n\n this._childWindowToUnregister.set(childWindowId, () => {\n childWindow.removeEventListener(\"pagehide\", onPageHide);\n childWindow.removeEventListener(\"DOMContentLoaded\", onDOMContentLoaded);\n window.removeEventListener(\"unload\", onUnload);\n });\n\n return childWindow;\n }\n}\n"]}