@itwin/imodel-components-react 3.7.0-dev.7 → 3.7.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 (345) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts +28 -28
  3. package/lib/cjs/imodel-components-react/UiIModelComponents.js +79 -79
  4. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  5. package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  6. package/lib/cjs/imodel-components-react/color/AlphaSlider.js +186 -186
  7. package/lib/cjs/imodel-components-react/color/AlphaSlider.js.map +1 -1
  8. package/lib/cjs/imodel-components-react/color/AlphaSlider.scss +63 -63
  9. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  10. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +107 -107
  11. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  12. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +91 -91
  13. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  14. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +74 -74
  15. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  16. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  17. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +145 -145
  18. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  19. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  20. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  21. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +137 -137
  22. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  23. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +64 -64
  24. package/lib/cjs/imodel-components-react/color/HueSlider.d.ts +22 -22
  25. package/lib/cjs/imodel-components-react/color/HueSlider.js +199 -199
  26. package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
  27. package/lib/cjs/imodel-components-react/color/HueSlider.scss +61 -61
  28. package/lib/cjs/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  29. package/lib/cjs/imodel-components-react/color/SaturationPicker.js +213 -213
  30. package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
  31. package/lib/cjs/imodel-components-react/color/SaturationPicker.scss +35 -35
  32. package/lib/cjs/imodel-components-react/color/Swatch.d.ts +22 -22
  33. package/lib/cjs/imodel-components-react/color/Swatch.js +60 -60
  34. package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
  35. package/lib/cjs/imodel-components-react/color/Swatch.scss +23 -23
  36. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  37. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js +23 -23
  38. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  39. package/lib/cjs/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  40. package/lib/cjs/imodel-components-react/editors/ColorEditor.js +151 -151
  41. package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
  42. package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +18 -18
  43. package/lib/cjs/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  44. package/lib/cjs/imodel-components-react/editors/WeightEditor.js +160 -160
  45. package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
  46. package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +16 -16
  47. package/lib/cjs/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  48. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js +96 -96
  49. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  50. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  51. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +265 -265
  52. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  53. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +107 -107
  54. package/lib/cjs/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  55. package/lib/cjs/imodel-components-react/lineweight/Swatch.js +85 -85
  56. package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
  57. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +48 -48
  58. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  59. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +159 -159
  60. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  61. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +52 -52
  62. package/lib/cjs/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  63. package/lib/cjs/imodel-components-react/navigationaids/Cube.js +127 -127
  64. package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
  65. package/lib/cjs/imodel-components-react/navigationaids/Cube.scss +19 -19
  66. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +175 -175
  67. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +647 -647
  68. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  69. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +180 -180
  70. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  71. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +647 -647
  72. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  73. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +133 -133
  74. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  75. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +99 -99
  76. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  77. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +64 -64
  78. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  79. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +53 -53
  80. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  81. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  82. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +83 -83
  83. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  84. package/lib/cjs/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  85. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +86 -86
  86. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  87. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  88. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +109 -109
  89. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  90. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  91. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +133 -133
  92. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  93. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  94. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +184 -184
  95. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  96. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  97. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +154 -154
  98. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  99. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  100. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +59 -59
  101. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  102. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  103. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +47 -47
  104. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  105. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  106. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +54 -54
  107. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  108. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  109. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +48 -48
  110. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  111. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  112. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +50 -50
  113. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  114. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  115. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +58 -58
  116. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  117. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  118. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +47 -47
  119. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  120. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  121. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +56 -56
  122. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  123. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  124. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +95 -95
  125. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  126. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  127. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +119 -119
  128. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  129. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  130. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +143 -143
  131. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  132. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  133. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js +69 -69
  134. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  135. package/lib/cjs/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  136. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +81 -81
  137. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  138. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +26 -26
  139. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  140. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +91 -91
  141. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  142. package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +25 -25
  143. package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  144. package/lib/cjs/imodel-components-react/timeline/Scrubber.js +191 -191
  145. package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
  146. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +106 -106
  147. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  148. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +424 -424
  149. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  150. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +357 -357
  151. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  152. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js +54 -54
  153. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  154. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  155. package/lib/cjs/imodel-components-react/timeline/Timeline.scss +164 -164
  156. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  157. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  158. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +387 -358
  159. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  160. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +185 -164
  161. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +174 -174
  162. package/lib/cjs/imodel-components-react/timeline/interfaces.js +45 -45
  163. package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
  164. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  165. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +274 -274
  166. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  167. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  168. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +105 -105
  169. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  170. package/lib/cjs/imodel-components-react.d.ts +82 -82
  171. package/lib/cjs/imodel-components-react.js +101 -101
  172. package/lib/cjs/imodel-components-react.js.map +1 -1
  173. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +28 -28
  174. package/lib/esm/imodel-components-react/UiIModelComponents.js +75 -75
  175. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  176. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  177. package/lib/esm/imodel-components-react/color/AlphaSlider.js +160 -160
  178. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  179. package/lib/esm/imodel-components-react/color/AlphaSlider.scss +63 -63
  180. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  181. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +82 -82
  182. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  183. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +91 -91
  184. package/lib/esm/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  185. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js +51 -51
  186. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  187. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  188. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +122 -122
  189. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  190. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  191. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  192. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +112 -112
  193. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  194. package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +64 -64
  195. package/lib/esm/imodel-components-react/color/HueSlider.d.ts +22 -22
  196. package/lib/esm/imodel-components-react/color/HueSlider.js +173 -173
  197. package/lib/esm/imodel-components-react/color/HueSlider.js.map +1 -1
  198. package/lib/esm/imodel-components-react/color/HueSlider.scss +61 -61
  199. package/lib/esm/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  200. package/lib/esm/imodel-components-react/color/SaturationPicker.js +187 -187
  201. package/lib/esm/imodel-components-react/color/SaturationPicker.js.map +1 -1
  202. package/lib/esm/imodel-components-react/color/SaturationPicker.scss +35 -35
  203. package/lib/esm/imodel-components-react/color/Swatch.d.ts +22 -22
  204. package/lib/esm/imodel-components-react/color/Swatch.js +34 -34
  205. package/lib/esm/imodel-components-react/color/Swatch.js.map +1 -1
  206. package/lib/esm/imodel-components-react/color/Swatch.scss +23 -23
  207. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  208. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js +19 -19
  209. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  210. package/lib/esm/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  211. package/lib/esm/imodel-components-react/editors/ColorEditor.js +124 -124
  212. package/lib/esm/imodel-components-react/editors/ColorEditor.js.map +1 -1
  213. package/lib/esm/imodel-components-react/editors/ColorEditor.scss +18 -18
  214. package/lib/esm/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  215. package/lib/esm/imodel-components-react/editors/WeightEditor.js +133 -133
  216. package/lib/esm/imodel-components-react/editors/WeightEditor.js.map +1 -1
  217. package/lib/esm/imodel-components-react/editors/WeightEditor.scss +16 -16
  218. package/lib/esm/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  219. package/lib/esm/imodel-components-react/inputs/QuantityInput.js +70 -70
  220. package/lib/esm/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  221. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  222. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +240 -240
  223. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  224. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +107 -107
  225. package/lib/esm/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  226. package/lib/esm/imodel-components-react/lineweight/Swatch.js +59 -59
  227. package/lib/esm/imodel-components-react/lineweight/Swatch.js.map +1 -1
  228. package/lib/esm/imodel-components-react/lineweight/Swatch.scss +48 -48
  229. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  230. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +133 -133
  231. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  232. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +52 -52
  233. package/lib/esm/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  234. package/lib/esm/imodel-components-react/navigationaids/Cube.js +100 -100
  235. package/lib/esm/imodel-components-react/navigationaids/Cube.js.map +1 -1
  236. package/lib/esm/imodel-components-react/navigationaids/Cube.scss +19 -19
  237. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +175 -175
  238. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +619 -619
  239. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  240. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +180 -180
  241. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  242. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +620 -620
  243. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  244. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +133 -133
  245. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  246. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +76 -76
  247. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  248. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +64 -64
  249. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  250. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +30 -30
  251. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  252. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  253. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +60 -60
  254. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  255. package/lib/esm/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  256. package/lib/esm/imodel-components-react/quantityformat/FormatType.js +63 -63
  257. package/lib/esm/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  258. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  259. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +83 -83
  260. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  261. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  262. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +110 -110
  263. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  264. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  265. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +158 -158
  266. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  267. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  268. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js +131 -131
  269. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  270. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  271. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js +36 -36
  272. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  273. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  274. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js +24 -24
  275. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  276. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  277. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js +31 -31
  278. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  279. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  280. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js +25 -25
  281. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  282. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  283. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js +27 -27
  284. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  285. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  286. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +35 -35
  287. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  288. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  289. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js +24 -24
  290. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  291. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  292. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js +33 -33
  293. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  294. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  295. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +69 -69
  296. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  297. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  298. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js +96 -96
  299. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  300. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  301. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js +139 -139
  302. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  303. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  304. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js +65 -65
  305. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  306. package/lib/esm/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  307. package/lib/esm/imodel-components-react/timeline/InlineEdit.js +55 -55
  308. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  309. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +26 -26
  310. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  311. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +64 -64
  312. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  313. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +25 -25
  314. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  315. package/lib/esm/imodel-components-react/timeline/Scrubber.js +164 -164
  316. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  317. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +106 -106
  318. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  319. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +398 -398
  320. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  321. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +357 -357
  322. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  323. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js +28 -28
  324. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  325. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  326. package/lib/esm/imodel-components-react/timeline/Timeline.scss +164 -164
  327. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  328. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  329. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +361 -332
  330. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  331. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +185 -164
  332. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +174 -174
  333. package/lib/esm/imodel-components-react/timeline/interfaces.js +42 -42
  334. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  335. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  336. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +251 -251
  337. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  338. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  339. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +95 -95
  340. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  341. package/lib/esm/imodel-components-react.d.ts +82 -82
  342. package/lib/esm/imodel-components-react.js +87 -87
  343. package/lib/esm/imodel-components-react.js.map +1 -1
  344. package/lib/public/locales/en/UiIModelComponents.json +139 -139
  345. package/package.json +19 -19
@@ -1,252 +1,252 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Viewport
7
- */
8
- import * as React from "react";
9
- import { Logger } from "@itwin/core-bentley";
10
- import { Transform } from "@itwin/core-geometry";
11
- import { NpcCenter } from "@itwin/core-common";
12
- import { IModelApp, ScreenViewport, ToolSettings, ViewState, } from "@itwin/core-frontend";
13
- import { ViewportComponentEvents, } from "./ViewportComponentEvents";
14
- /**
15
- * A viewport React component that creates a ScreenViewport.
16
- * @public
17
- */
18
- export function ViewportComponent(props) {
19
- const { viewState, imodel, viewDefinitionId, getViewOverlay, viewManagerOverride, tentativePointOverride, onContextMenu, style, className, screenViewportOverride, controlId, viewportRef } = props;
20
- // istanbul ignore next
21
- const viewManagerRef = React.useRef(viewManagerOverride !== null && viewManagerOverride !== void 0 ? viewManagerOverride : IModelApp.viewManager);
22
- const tentativePointOverrideRef = React.useRef(tentativePointOverride);
23
- const screenViewportCreated = React.useRef(false);
24
- const viewportDiv = React.useRef(null);
25
- const screenViewportRef = React.useRef(null);
26
- const isMounted = React.useRef(false);
27
- const viewClassFullName = React.useRef("");
28
- const viewId = React.useRef("0");
29
- // istanbul ignore next
30
- const handleViewChanged = (vp) => {
31
- // istanbul ignore next
32
- if (!(vp.iModel.isOpen || vp.iModel.isBlank))
33
- return;
34
- ViewportComponentEvents.setViewMatrix(vp);
35
- if (viewClassFullName.current !== vp.view.classFullName) {
36
- setTimeout(() => {
37
- ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({ viewport: vp, oldName: viewClassFullName.current, newName: vp.view.classFullName });
38
- viewClassFullName.current = vp.view.classFullName;
39
- });
40
- }
41
- if (viewId.current !== vp.view.id) {
42
- setTimeout(() => {
43
- ViewportComponentEvents.onViewIdChangedEvent.emit({ viewport: vp, oldId: viewId.current, newId: vp.view.id });
44
- viewId.current = vp.view.id;
45
- });
46
- }
47
- };
48
- const handleStandardRotationChangeEvent = (args) => {
49
- const viewManager = viewManagerRef.current;
50
- const currentScreenViewport = screenViewportRef.current;
51
- if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
52
- currentScreenViewport.view.setRotationAboutPoint(ViewState.getStandardViewMatrix(args.standardRotation));
53
- currentScreenViewport.synchWithView();
54
- }
55
- };
56
- const handleDrawingViewportChangeEvent = (args) => {
57
- const viewManager = viewManagerRef.current;
58
- const currentScreenViewport = screenViewportRef.current;
59
- if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
60
- currentScreenViewport.view.setOrigin(args.origin);
61
- currentScreenViewport.view.setRotation(args.rotation);
62
- currentScreenViewport.synchWithView({ noSaveInUndo: args.complete !== true });
63
- }
64
- };
65
- const targetPoint = React.useRef(null);
66
- const getRotatePoint = (vp) => {
67
- var _a, _b;
68
- const lastTargetPoint = targetPoint.current;
69
- // istanbul ignore next
70
- const tentativePoint = (_a = tentativePointOverrideRef.current) !== null && _a !== void 0 ? _a : IModelApp.tentativePoint;
71
- // istanbul ignore else
72
- if (tentativePoint.isActive)
73
- return tentativePoint.getPoint();
74
- // istanbul ignore else
75
- if (undefined !== vp.viewCmdTargetCenter) {
76
- const testPt = vp.worldToView(vp.viewCmdTargetCenter);
77
- const viewRect = vp.viewRect;
78
- if (viewRect.containsPoint(testPt))
79
- return vp.viewCmdTargetCenter;
80
- vp.viewCmdTargetCenter = undefined;
81
- }
82
- // istanbul ignore else
83
- if (null !== lastTargetPoint) {
84
- const testPt = vp.worldToView(lastTargetPoint);
85
- const viewRect = vp.viewRect.clone();
86
- viewRect.scaleAboutCenter(0.25, 0.25);
87
- // istanbul ignore next hard to reach because of mocks
88
- if (viewRect.containsPoint(testPt))
89
- return lastTargetPoint;
90
- targetPoint.current = null;
91
- }
92
- const visiblePoint = vp.pickNearestVisibleGeometry(vp.npcToWorld(NpcCenter), vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches));
93
- targetPoint.current = (undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint());
94
- // istanbul ignore next
95
- return (_b = targetPoint.current) !== null && _b !== void 0 ? _b : vp.view.getCenter();
96
- };
97
- const handleCubeRotationChangeEvent = (args) => {
98
- const viewManager = viewManagerRef.current;
99
- const currentScreenViewport = screenViewportRef.current;
100
- // istanbul ignore else
101
- if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
102
- const rotMatrix = args.rotMatrix;
103
- // istanbul ignore else
104
- if (currentScreenViewport.rotation !== rotMatrix) {
105
- const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...
106
- const center = getRotatePoint(currentScreenViewport);
107
- const targetMatrix = inverse.multiplyMatrixMatrix(currentScreenViewport.view.getRotation());
108
- const worldTransform = Transform.createFixedPointAndMatrix(center, targetMatrix);
109
- const frustum = currentScreenViewport.getWorldFrustum();
110
- frustum.multiply(worldTransform);
111
- currentScreenViewport.view.setupFromFrustum(frustum);
112
- currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });
113
- }
114
- }
115
- };
116
- const handleDisconnectFromViewManager = () => {
117
- const screenViewport = screenViewportRef.current;
118
- if (screenViewport) {
119
- const viewManager = IModelApp.viewManager;
120
- screenViewport.onViewChanged.removeListener(handleViewChanged);
121
- screenViewportRef.current = null;
122
- screenViewportCreated.current = false;
123
- ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(handleDrawingViewportChangeEvent);
124
- ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(handleCubeRotationChangeEvent);
125
- ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(handleStandardRotationChangeEvent);
126
- viewManager.dropViewport(screenViewport, true);
127
- }
128
- };
129
- // istanbul ignore next
130
- const handleWindowUnload = () => {
131
- const parentDiv = viewportDiv.current;
132
- if (parentDiv) {
133
- const parentWindow = parentDiv.ownerDocument.defaultView;
134
- if (parentWindow !== window) {
135
- handleDisconnectFromViewManager();
136
- }
137
- }
138
- };
139
- const getScreenViewport = (parentDiv, inViewState) => {
140
- // istanbul ignore next
141
- const screenViewportFactory = screenViewportOverride ? screenViewportOverride : ScreenViewport;
142
- const parentWindow = parentDiv.ownerDocument.defaultView;
143
- parentWindow.addEventListener("unload", handleWindowUnload, true); // listener clear after being called
144
- ViewportComponentEvents.initialize();
145
- ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(handleDrawingViewportChangeEvent);
146
- ViewportComponentEvents.onCubeRotationChangeEvent.addListener(handleCubeRotationChangeEvent);
147
- ViewportComponentEvents.onStandardRotationChangeEvent.addListener(handleStandardRotationChangeEvent);
148
- const screenViewport = screenViewportFactory.create(parentDiv, inViewState);
149
- screenViewportCreated.current = true;
150
- viewClassFullName.current = screenViewport.view.classFullName;
151
- viewId.current = screenViewport.view.id;
152
- screenViewport.onViewChanged.addListener(handleViewChanged);
153
- return screenViewport;
154
- };
155
- React.useEffect(() => {
156
- isMounted.current = true;
157
- Logger.logInfo("ViewportComponent", `mounting ViewportComponent for controlId=${controlId}`);
158
- return () => {
159
- isMounted.current = false;
160
- Logger.logInfo("ViewportComponent", `un-mounting ViewportComponent for controlId=${controlId}`);
161
- handleDisconnectFromViewManager();
162
- };
163
- // eslint-disable-next-line react-hooks/exhaustive-deps
164
- }, []);
165
- const [initialViewState, setInitialViewState] = React.useState(() => {
166
- if (viewState) {
167
- if (typeof viewState === "function")
168
- return viewState().clone();
169
- else
170
- return viewState.clone();
171
- }
172
- return undefined;
173
- });
174
- React.useEffect(() => {
175
- setInitialViewState(undefined);
176
- }, [viewDefinitionId, viewState]);
177
- React.useEffect(() => {
178
- async function fetchInitialViewstate() {
179
- let currentViewState;
180
- if (viewState) {
181
- if (typeof viewState === "function")
182
- currentViewState = viewState();
183
- else
184
- currentViewState = viewState;
185
- }
186
- else if (viewDefinitionId && imodel) {
187
- try {
188
- currentViewState = await imodel.views.load(viewDefinitionId);
189
- // istanbul ignore next
190
- if (!currentViewState) {
191
- Logger.logError("ViewportComponent", `Viewstate failed to load`);
192
- }
193
- }
194
- catch (_e) {
195
- // istanbul ignore next
196
- Logger.logError("ViewportComponent", `Viewstate failed to load`);
197
- }
198
- }
199
- else {
200
- Logger.logError("ViewportComponent", `A Viewstate or a viewId and imodel must be provided`);
201
- }
202
- // istanbul ignore next
203
- if (isMounted.current && ((currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.iModel.isOpen) || (currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.iModel.isBlank))) {
204
- setInitialViewState(currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.clone());
205
- }
206
- }
207
- if (undefined === initialViewState)
208
- fetchInitialViewstate(); // eslint-disable-line @typescript-eslint/no-floating-promises
209
- }, [imodel, initialViewState, viewDefinitionId, viewState]);
210
- const [viewOverlay, setViewOverlay] = React.useState(null);
211
- // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.
212
- React.useEffect(() => {
213
- var _a;
214
- const parentDiv = viewportDiv.current;
215
- const viewManager = viewManagerRef.current;
216
- // istanbul ignore next
217
- if (parentDiv && initialViewState && ((initialViewState === null || initialViewState === void 0 ? void 0 : initialViewState.iModel.isOpen) || (initialViewState === null || initialViewState === void 0 ? void 0 : initialViewState.iModel.isBlank))) {
218
- if (!screenViewportCreated.current) {
219
- const screenViewport = getScreenViewport(parentDiv, initialViewState);
220
- screenViewportRef.current = screenViewport;
221
- if (viewportRef)
222
- viewportRef(screenViewport);
223
- Logger.logInfo("ViewportComponent", `processing viewManager.addViewport for controlId=${controlId}`);
224
- viewManager.addViewport(screenViewport);
225
- // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.
226
- setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);
227
- }
228
- else {
229
- // istanbul ignore next
230
- (_a = screenViewportRef.current) === null || _a === void 0 ? void 0 : _a.changeView(initialViewState);
231
- }
232
- }
233
- // eslint-disable-next-line react-hooks/exhaustive-deps
234
- }, [controlId, initialViewState, viewportRef]);
235
- const handleContextMenu = React.useCallback((e) => {
236
- e.preventDefault();
237
- if (onContextMenu)
238
- onContextMenu(e);
239
- }, [onContextMenu]);
240
- const parentDivStyle = {
241
- height: "100%", width: "100%", position: "relative",
242
- };
243
- const viewportDivStyle = {
244
- ...style,
245
- height: "100%", width: "100%",
246
- };
247
- return (React.createElement("div", { style: parentDivStyle, "data-item-id": controlId },
248
- React.createElement(React.Fragment, null,
249
- React.createElement("div", { ref: viewportDiv, "data-testid": "viewport-component", className: className, style: viewportDivStyle, onContextMenu: handleContextMenu }),
250
- viewOverlay)));
251
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Viewport
7
+ */
8
+ import * as React from "react";
9
+ import { Logger } from "@itwin/core-bentley";
10
+ import { Transform } from "@itwin/core-geometry";
11
+ import { NpcCenter } from "@itwin/core-common";
12
+ import { IModelApp, ScreenViewport, ToolSettings, ViewState, } from "@itwin/core-frontend";
13
+ import { ViewportComponentEvents, } from "./ViewportComponentEvents";
14
+ /**
15
+ * A viewport React component that creates a ScreenViewport.
16
+ * @public
17
+ */
18
+ export function ViewportComponent(props) {
19
+ const { viewState, imodel, viewDefinitionId, getViewOverlay, viewManagerOverride, tentativePointOverride, onContextMenu, style, className, screenViewportOverride, controlId, viewportRef } = props;
20
+ // istanbul ignore next
21
+ const viewManagerRef = React.useRef(viewManagerOverride !== null && viewManagerOverride !== void 0 ? viewManagerOverride : IModelApp.viewManager);
22
+ const tentativePointOverrideRef = React.useRef(tentativePointOverride);
23
+ const screenViewportCreated = React.useRef(false);
24
+ const viewportDiv = React.useRef(null);
25
+ const screenViewportRef = React.useRef(null);
26
+ const isMounted = React.useRef(false);
27
+ const viewClassFullName = React.useRef("");
28
+ const viewId = React.useRef("0");
29
+ // istanbul ignore next
30
+ const handleViewChanged = (vp) => {
31
+ // istanbul ignore next
32
+ if (!(vp.iModel.isOpen || vp.iModel.isBlank))
33
+ return;
34
+ ViewportComponentEvents.setViewMatrix(vp);
35
+ if (viewClassFullName.current !== vp.view.classFullName) {
36
+ setTimeout(() => {
37
+ ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({ viewport: vp, oldName: viewClassFullName.current, newName: vp.view.classFullName });
38
+ viewClassFullName.current = vp.view.classFullName;
39
+ });
40
+ }
41
+ if (viewId.current !== vp.view.id) {
42
+ setTimeout(() => {
43
+ ViewportComponentEvents.onViewIdChangedEvent.emit({ viewport: vp, oldId: viewId.current, newId: vp.view.id });
44
+ viewId.current = vp.view.id;
45
+ });
46
+ }
47
+ };
48
+ const handleStandardRotationChangeEvent = (args) => {
49
+ const viewManager = viewManagerRef.current;
50
+ const currentScreenViewport = screenViewportRef.current;
51
+ if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
52
+ currentScreenViewport.view.setRotationAboutPoint(ViewState.getStandardViewMatrix(args.standardRotation));
53
+ currentScreenViewport.synchWithView();
54
+ }
55
+ };
56
+ const handleDrawingViewportChangeEvent = (args) => {
57
+ const viewManager = viewManagerRef.current;
58
+ const currentScreenViewport = screenViewportRef.current;
59
+ if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
60
+ currentScreenViewport.view.setOrigin(args.origin);
61
+ currentScreenViewport.view.setRotation(args.rotation);
62
+ currentScreenViewport.synchWithView({ noSaveInUndo: args.complete !== true });
63
+ }
64
+ };
65
+ const targetPoint = React.useRef(null);
66
+ const getRotatePoint = (vp) => {
67
+ var _a, _b;
68
+ const lastTargetPoint = targetPoint.current;
69
+ // istanbul ignore next
70
+ const tentativePoint = (_a = tentativePointOverrideRef.current) !== null && _a !== void 0 ? _a : IModelApp.tentativePoint;
71
+ // istanbul ignore else
72
+ if (tentativePoint.isActive)
73
+ return tentativePoint.getPoint();
74
+ // istanbul ignore else
75
+ if (undefined !== vp.viewCmdTargetCenter) {
76
+ const testPt = vp.worldToView(vp.viewCmdTargetCenter);
77
+ const viewRect = vp.viewRect;
78
+ if (viewRect.containsPoint(testPt))
79
+ return vp.viewCmdTargetCenter;
80
+ vp.viewCmdTargetCenter = undefined;
81
+ }
82
+ // istanbul ignore else
83
+ if (null !== lastTargetPoint) {
84
+ const testPt = vp.worldToView(lastTargetPoint);
85
+ const viewRect = vp.viewRect.clone();
86
+ viewRect.scaleAboutCenter(0.25, 0.25);
87
+ // istanbul ignore next hard to reach because of mocks
88
+ if (viewRect.containsPoint(testPt))
89
+ return lastTargetPoint;
90
+ targetPoint.current = null;
91
+ }
92
+ const visiblePoint = vp.pickNearestVisibleGeometry(vp.npcToWorld(NpcCenter), vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches));
93
+ targetPoint.current = (undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint());
94
+ // istanbul ignore next
95
+ return (_b = targetPoint.current) !== null && _b !== void 0 ? _b : vp.view.getCenter();
96
+ };
97
+ const handleCubeRotationChangeEvent = (args) => {
98
+ const viewManager = viewManagerRef.current;
99
+ const currentScreenViewport = screenViewportRef.current;
100
+ // istanbul ignore else
101
+ if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
102
+ const rotMatrix = args.rotMatrix;
103
+ // istanbul ignore else
104
+ if (currentScreenViewport.rotation !== rotMatrix) {
105
+ const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...
106
+ const center = getRotatePoint(currentScreenViewport);
107
+ const targetMatrix = inverse.multiplyMatrixMatrix(currentScreenViewport.view.getRotation());
108
+ const worldTransform = Transform.createFixedPointAndMatrix(center, targetMatrix);
109
+ const frustum = currentScreenViewport.getWorldFrustum();
110
+ frustum.multiply(worldTransform);
111
+ currentScreenViewport.view.setupFromFrustum(frustum);
112
+ currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });
113
+ }
114
+ }
115
+ };
116
+ const handleDisconnectFromViewManager = () => {
117
+ const screenViewport = screenViewportRef.current;
118
+ if (screenViewport) {
119
+ const viewManager = IModelApp.viewManager;
120
+ screenViewport.onViewChanged.removeListener(handleViewChanged);
121
+ screenViewportRef.current = null;
122
+ screenViewportCreated.current = false;
123
+ ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(handleDrawingViewportChangeEvent);
124
+ ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(handleCubeRotationChangeEvent);
125
+ ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(handleStandardRotationChangeEvent);
126
+ viewManager.dropViewport(screenViewport, true);
127
+ }
128
+ };
129
+ // istanbul ignore next
130
+ const handleWindowUnload = () => {
131
+ const parentDiv = viewportDiv.current;
132
+ if (parentDiv) {
133
+ const parentWindow = parentDiv.ownerDocument.defaultView;
134
+ if (parentWindow !== window) {
135
+ handleDisconnectFromViewManager();
136
+ }
137
+ }
138
+ };
139
+ const getScreenViewport = (parentDiv, inViewState) => {
140
+ // istanbul ignore next
141
+ const screenViewportFactory = screenViewportOverride ? screenViewportOverride : ScreenViewport;
142
+ const parentWindow = parentDiv.ownerDocument.defaultView;
143
+ parentWindow.addEventListener("unload", handleWindowUnload, true); // listener clear after being called
144
+ ViewportComponentEvents.initialize();
145
+ ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(handleDrawingViewportChangeEvent);
146
+ ViewportComponentEvents.onCubeRotationChangeEvent.addListener(handleCubeRotationChangeEvent);
147
+ ViewportComponentEvents.onStandardRotationChangeEvent.addListener(handleStandardRotationChangeEvent);
148
+ const screenViewport = screenViewportFactory.create(parentDiv, inViewState);
149
+ screenViewportCreated.current = true;
150
+ viewClassFullName.current = screenViewport.view.classFullName;
151
+ viewId.current = screenViewport.view.id;
152
+ screenViewport.onViewChanged.addListener(handleViewChanged);
153
+ return screenViewport;
154
+ };
155
+ React.useEffect(() => {
156
+ isMounted.current = true;
157
+ Logger.logInfo("ViewportComponent", `mounting ViewportComponent for controlId=${controlId}`);
158
+ return () => {
159
+ isMounted.current = false;
160
+ Logger.logInfo("ViewportComponent", `un-mounting ViewportComponent for controlId=${controlId}`);
161
+ handleDisconnectFromViewManager();
162
+ };
163
+ // eslint-disable-next-line react-hooks/exhaustive-deps
164
+ }, []);
165
+ const [initialViewState, setInitialViewState] = React.useState(() => {
166
+ if (viewState) {
167
+ if (typeof viewState === "function")
168
+ return viewState().clone();
169
+ else
170
+ return viewState.clone();
171
+ }
172
+ return undefined;
173
+ });
174
+ React.useEffect(() => {
175
+ setInitialViewState(undefined);
176
+ }, [viewDefinitionId, viewState]);
177
+ React.useEffect(() => {
178
+ async function fetchInitialViewstate() {
179
+ let currentViewState;
180
+ if (viewState) {
181
+ if (typeof viewState === "function")
182
+ currentViewState = viewState();
183
+ else
184
+ currentViewState = viewState;
185
+ }
186
+ else if (viewDefinitionId && imodel) {
187
+ try {
188
+ currentViewState = await imodel.views.load(viewDefinitionId);
189
+ // istanbul ignore next
190
+ if (!currentViewState) {
191
+ Logger.logError("ViewportComponent", `Viewstate failed to load`);
192
+ }
193
+ }
194
+ catch (_e) {
195
+ // istanbul ignore next
196
+ Logger.logError("ViewportComponent", `Viewstate failed to load`);
197
+ }
198
+ }
199
+ else {
200
+ Logger.logError("ViewportComponent", `A Viewstate or a viewId and imodel must be provided`);
201
+ }
202
+ // istanbul ignore next
203
+ if (isMounted.current && ((currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.iModel.isOpen) || (currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.iModel.isBlank))) {
204
+ setInitialViewState(currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.clone());
205
+ }
206
+ }
207
+ if (undefined === initialViewState)
208
+ fetchInitialViewstate(); // eslint-disable-line @typescript-eslint/no-floating-promises
209
+ }, [imodel, initialViewState, viewDefinitionId, viewState]);
210
+ const [viewOverlay, setViewOverlay] = React.useState(null);
211
+ // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.
212
+ React.useEffect(() => {
213
+ var _a;
214
+ const parentDiv = viewportDiv.current;
215
+ const viewManager = viewManagerRef.current;
216
+ // istanbul ignore next
217
+ if (parentDiv && initialViewState && ((initialViewState === null || initialViewState === void 0 ? void 0 : initialViewState.iModel.isOpen) || (initialViewState === null || initialViewState === void 0 ? void 0 : initialViewState.iModel.isBlank))) {
218
+ if (!screenViewportCreated.current) {
219
+ const screenViewport = getScreenViewport(parentDiv, initialViewState);
220
+ screenViewportRef.current = screenViewport;
221
+ if (viewportRef)
222
+ viewportRef(screenViewport);
223
+ Logger.logInfo("ViewportComponent", `processing viewManager.addViewport for controlId=${controlId}`);
224
+ viewManager.addViewport(screenViewport);
225
+ // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.
226
+ setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);
227
+ }
228
+ else {
229
+ // istanbul ignore next
230
+ (_a = screenViewportRef.current) === null || _a === void 0 ? void 0 : _a.changeView(initialViewState);
231
+ }
232
+ }
233
+ // eslint-disable-next-line react-hooks/exhaustive-deps
234
+ }, [controlId, initialViewState, viewportRef]);
235
+ const handleContextMenu = React.useCallback((e) => {
236
+ e.preventDefault();
237
+ if (onContextMenu)
238
+ onContextMenu(e);
239
+ }, [onContextMenu]);
240
+ const parentDivStyle = {
241
+ height: "100%", width: "100%", position: "relative",
242
+ };
243
+ const viewportDivStyle = {
244
+ ...style,
245
+ height: "100%", width: "100%",
246
+ };
247
+ return (React.createElement("div", { style: parentDivStyle, "data-item-id": controlId },
248
+ React.createElement(React.Fragment, null,
249
+ React.createElement("div", { ref: viewportDiv, "data-testid": "viewport-component", className: className, style: viewportDivStyle, onContextMenu: handleContextMenu }),
250
+ viewOverlay)));
251
+ }
252
252
  //# sourceMappingURL=ViewportComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Viewport\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { Id64String, Logger } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { NpcCenter } from \"@itwin/core-common\";\r\nimport {\r\n IModelApp, IModelConnection, ScreenViewport,\r\n TentativePoint, ToolSettings, ViewManager,\r\n Viewport, ViewState,\r\n} from \"@itwin/core-frontend\";\r\n\r\nimport { CommonProps } from \"@itwin/core-react\";\r\nimport {\r\n CubeRotationChangeEventArgs, DrawingViewportChangeEventArgs, StandardRotationChangeEventArgs, ViewportComponentEvents,\r\n} from \"./ViewportComponentEvents\";\r\n\r\n/** Type for a ViewState prop\r\n * @public\r\n */\r\nexport type ViewStateProp = ViewState | (() => ViewState);\r\n\r\n/**\r\n * Properties for [[ViewportComponent]] component.\r\n * @public\r\n */\r\nexport interface ViewportProps extends CommonProps {\r\n /** IModel to display */\r\n imodel: IModelConnection;\r\n /** Id of a default view definition to load as a starting point */\r\n viewDefinitionId?: Id64String;\r\n /** ViewState to use as a starting point */\r\n viewState?: ViewStateProp;\r\n /** Function to get a reference to the ScreenViewport */\r\n viewportRef?: (v: ScreenViewport) => void;\r\n /** controlId for this content component @internal */\r\n controlId?: string;\r\n /** @internal */\r\n onContextMenu?: (e: React.MouseEvent) => boolean;\r\n /** @internal */\r\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\r\n /** @internal used only for testing */\r\n viewManagerOverride?: ViewManager;\r\n /** @internal used only for testing */\r\n screenViewportOverride?: typeof ScreenViewport;\r\n /** @internal used only for testing */\r\n tentativePointOverride?: TentativePoint;\r\n}\r\n\r\n/**\r\n * A viewport React component that creates a ScreenViewport.\r\n * @public\r\n */\r\nexport function ViewportComponent(props: ViewportProps) {\r\n const { viewState, imodel, viewDefinitionId, getViewOverlay, viewManagerOverride,\r\n tentativePointOverride, onContextMenu, style, className, screenViewportOverride, controlId, viewportRef } = props;\r\n // istanbul ignore next\r\n const viewManagerRef = React.useRef(viewManagerOverride ?? IModelApp.viewManager);\r\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\r\n const screenViewportCreated = React.useRef(false);\r\n const viewportDiv = React.useRef<HTMLDivElement>(null);\r\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\r\n const isMounted = React.useRef(false);\r\n const viewClassFullName = React.useRef(\"\");\r\n const viewId = React.useRef(\"0\");\r\n\r\n // istanbul ignore next\r\n const handleViewChanged = (vp: Viewport) => {\r\n // istanbul ignore next\r\n if (!(vp.iModel.isOpen || vp.iModel.isBlank))\r\n return;\r\n ViewportComponentEvents.setViewMatrix(vp);\r\n if (viewClassFullName.current !== vp.view.classFullName) {\r\n setTimeout(() => {\r\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({ viewport: vp, oldName: viewClassFullName.current, newName: vp.view.classFullName });\r\n viewClassFullName.current = vp.view.classFullName;\r\n });\r\n }\r\n if (viewId.current !== vp.view.id) {\r\n setTimeout(() => {\r\n ViewportComponentEvents.onViewIdChangedEvent.emit({ viewport: vp, oldId: viewId.current, newId: vp.view.id });\r\n viewId.current = vp.view.id;\r\n });\r\n }\r\n };\r\n\r\n const handleStandardRotationChangeEvent = (args: StandardRotationChangeEventArgs) => {\r\n const viewManager = viewManagerRef.current;\r\n const currentScreenViewport = screenViewportRef.current;\r\n if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {\r\n currentScreenViewport.view.setRotationAboutPoint(ViewState.getStandardViewMatrix(args.standardRotation));\r\n currentScreenViewport.synchWithView();\r\n }\r\n };\r\n\r\n const handleDrawingViewportChangeEvent = (args: DrawingViewportChangeEventArgs) => {\r\n const viewManager = viewManagerRef.current;\r\n const currentScreenViewport = screenViewportRef.current;\r\n if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {\r\n currentScreenViewport.view.setOrigin(args.origin);\r\n currentScreenViewport.view.setRotation(args.rotation);\r\n currentScreenViewport.synchWithView({ noSaveInUndo: args.complete !== true });\r\n }\r\n };\r\n\r\n const targetPoint = React.useRef<Point3d | null>(null);\r\n\r\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\r\n const lastTargetPoint = targetPoint.current;\r\n // istanbul ignore next\r\n const tentativePoint = tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\r\n // istanbul ignore else\r\n if (tentativePoint.isActive)\r\n return tentativePoint.getPoint();\r\n\r\n // istanbul ignore else\r\n if (undefined !== vp.viewCmdTargetCenter) {\r\n const testPt = vp.worldToView(vp.viewCmdTargetCenter);\r\n const viewRect = vp.viewRect;\r\n if (viewRect.containsPoint(testPt))\r\n return vp.viewCmdTargetCenter;\r\n vp.viewCmdTargetCenter = undefined;\r\n }\r\n\r\n // istanbul ignore else\r\n if (null !== lastTargetPoint) {\r\n const testPt = vp.worldToView(lastTargetPoint);\r\n const viewRect = vp.viewRect.clone();\r\n viewRect.scaleAboutCenter(0.25, 0.25);\r\n // istanbul ignore next hard to reach because of mocks\r\n if (viewRect.containsPoint(testPt))\r\n return lastTargetPoint;\r\n targetPoint.current = null;\r\n }\r\n\r\n const visiblePoint = vp.pickNearestVisibleGeometry(vp.npcToWorld(NpcCenter), vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches));\r\n targetPoint.current = (undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint());\r\n // istanbul ignore next\r\n return targetPoint.current ?? vp.view.getCenter();\r\n };\r\n\r\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\r\n const viewManager = viewManagerRef.current;\r\n const currentScreenViewport = screenViewportRef.current;\r\n // istanbul ignore else\r\n if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {\r\n const rotMatrix = args.rotMatrix;\r\n // istanbul ignore else\r\n if (currentScreenViewport.rotation !== rotMatrix) {\r\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\r\n const center = getRotatePoint(currentScreenViewport);\r\n const targetMatrix = inverse.multiplyMatrixMatrix(currentScreenViewport.view.getRotation());\r\n const worldTransform = Transform.createFixedPointAndMatrix(center, targetMatrix);\r\n const frustum = currentScreenViewport.getWorldFrustum();\r\n frustum.multiply(worldTransform);\r\n currentScreenViewport.view.setupFromFrustum(frustum);\r\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\r\n }\r\n }\r\n };\r\n\r\n const handleDisconnectFromViewManager = () => {\r\n const screenViewport = screenViewportRef.current;\r\n if (screenViewport) {\r\n const viewManager = IModelApp.viewManager;\r\n screenViewport.onViewChanged.removeListener(handleViewChanged);\r\n screenViewportRef.current = null;\r\n screenViewportCreated.current = false;\r\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(handleDrawingViewportChangeEvent);\r\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(handleCubeRotationChangeEvent);\r\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(handleStandardRotationChangeEvent);\r\n viewManager.dropViewport(screenViewport, true);\r\n }\r\n };\r\n\r\n // istanbul ignore next\r\n const handleWindowUnload = () => {\r\n const parentDiv = viewportDiv.current;\r\n if (parentDiv) {\r\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\r\n if (parentWindow !== window) {\r\n handleDisconnectFromViewManager();\r\n }\r\n }\r\n };\r\n\r\n const getScreenViewport = (parentDiv: HTMLDivElement, inViewState: ViewState) => {\r\n // istanbul ignore next\r\n const screenViewportFactory = screenViewportOverride ? screenViewportOverride : ScreenViewport;\r\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\r\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\r\n ViewportComponentEvents.initialize();\r\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(handleDrawingViewportChangeEvent);\r\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(handleCubeRotationChangeEvent);\r\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(handleStandardRotationChangeEvent);\r\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\r\n screenViewportCreated.current = true;\r\n viewClassFullName.current = screenViewport.view.classFullName;\r\n viewId.current = screenViewport.view.id;\r\n screenViewport.onViewChanged.addListener(handleViewChanged);\r\n return screenViewport;\r\n };\r\n\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n Logger.logInfo(\"ViewportComponent\", `mounting ViewportComponent for controlId=${controlId}`);\r\n\r\n return () => {\r\n isMounted.current = false;\r\n Logger.logInfo(\"ViewportComponent\", `un-mounting ViewportComponent for controlId=${controlId}`);\r\n handleDisconnectFromViewManager();\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const [initialViewState, setInitialViewState] = React.useState<ViewState | undefined>(() => {\r\n if (viewState) {\r\n if (typeof viewState === \"function\")\r\n return viewState().clone();\r\n else\r\n return viewState.clone();\r\n }\r\n return undefined;\r\n });\r\n\r\n React.useEffect(() => {\r\n setInitialViewState(undefined);\r\n }, [viewDefinitionId, viewState]);\r\n React.useEffect(() => {\r\n async function fetchInitialViewstate() {\r\n let currentViewState: ViewState | undefined;\r\n if (viewState) {\r\n if (typeof viewState === \"function\")\r\n currentViewState = viewState();\r\n else\r\n currentViewState = viewState;\r\n } else if (viewDefinitionId && imodel) {\r\n try {\r\n currentViewState = await imodel.views.load(viewDefinitionId);\r\n // istanbul ignore next\r\n if (!currentViewState) {\r\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\r\n }\r\n } catch (_e) {\r\n // istanbul ignore next\r\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\r\n }\r\n } else {\r\n Logger.logError(\"ViewportComponent\", `A Viewstate or a viewId and imodel must be provided`);\r\n }\r\n // istanbul ignore next\r\n if (isMounted.current && (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)) {\r\n setInitialViewState(currentViewState?.clone());\r\n }\r\n }\r\n if (undefined === initialViewState)\r\n fetchInitialViewstate(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\r\n\r\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\r\n\r\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\r\n React.useEffect(() => {\r\n const parentDiv = viewportDiv.current;\r\n const viewManager = viewManagerRef.current;\r\n // istanbul ignore next\r\n if (parentDiv && initialViewState && (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)) {\r\n if (!screenViewportCreated.current) {\r\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\r\n screenViewportRef.current = screenViewport;\r\n\r\n if (viewportRef)\r\n viewportRef(screenViewport);\r\n\r\n Logger.logInfo(\"ViewportComponent\", `processing viewManager.addViewport for controlId=${controlId}`);\r\n viewManager.addViewport(screenViewport);\r\n\r\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\r\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\r\n } else {\r\n // istanbul ignore next\r\n screenViewportRef.current?.changeView(initialViewState);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [controlId, initialViewState, viewportRef]);\r\n\r\n const handleContextMenu = React.useCallback((e: React.MouseEvent) => {\r\n e.preventDefault();\r\n if (onContextMenu)\r\n onContextMenu(e);\r\n }, [onContextMenu]);\r\n\r\n const parentDivStyle: React.CSSProperties = {\r\n height: \"100%\", width: \"100%\", position: \"relative\",\r\n };\r\n\r\n const viewportDivStyle: React.CSSProperties = {\r\n ...style,\r\n height: \"100%\", width: \"100%\",\r\n };\r\n\r\n return (\r\n <div style={parentDivStyle} data-item-id={controlId}\r\n >\r\n <>\r\n <div\r\n ref={viewportDiv}\r\n data-testid=\"viewport-component\"\r\n className={className}\r\n style={viewportDivStyle}\r\n onContextMenu={handleContextMenu}\r\n />\r\n {viewOverlay}\r\n </>\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.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 Viewport\n */\n\nimport * as React from \"react\";\nimport { Id64String, Logger } from \"@itwin/core-bentley\";\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport {\n IModelApp, IModelConnection, ScreenViewport,\n TentativePoint, ToolSettings, ViewManager,\n Viewport, ViewState,\n} from \"@itwin/core-frontend\";\n\nimport { CommonProps } from \"@itwin/core-react\";\nimport {\n CubeRotationChangeEventArgs, DrawingViewportChangeEventArgs, StandardRotationChangeEventArgs, ViewportComponentEvents,\n} from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const { viewState, imodel, viewDefinitionId, getViewOverlay, viewManagerOverride,\n tentativePointOverride, onContextMenu, style, className, screenViewportOverride, controlId, viewportRef } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(viewManagerOverride ?? IModelApp.viewManager);\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank))\n return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({ viewport: vp, oldName: viewClassFullName.current, newName: vp.view.classFullName });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({ viewport: vp, oldId: viewId.current, newId: vp.view.id });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (args: StandardRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {\n currentScreenViewport.view.setRotationAboutPoint(ViewState.getStandardViewMatrix(args.standardRotation));\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (args: DrawingViewportChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({ noSaveInUndo: args.complete !== true });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint = tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive)\n return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (undefined !== vp.viewCmdTargetCenter) {\n const testPt = vp.worldToView(vp.viewCmdTargetCenter);\n const viewRect = vp.viewRect;\n if (viewRect.containsPoint(testPt))\n return vp.viewCmdTargetCenter;\n vp.viewCmdTargetCenter = undefined;\n }\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt))\n return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(vp.npcToWorld(NpcCenter), vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches));\n targetPoint.current = (undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint());\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(currentScreenViewport.view.getRotation());\n const worldTransform = Transform.createFixedPointAndMatrix(center, targetMatrix);\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(handleDrawingViewportChangeEvent);\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(handleCubeRotationChangeEvent);\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(handleStandardRotationChangeEvent);\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (parentDiv: HTMLDivElement, inViewState: ViewState) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride ? screenViewportOverride : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(handleDrawingViewportChangeEvent);\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(handleCubeRotationChangeEvent);\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(handleStandardRotationChangeEvent);\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\"ViewportComponent\", `mounting ViewportComponent for controlId=${controlId}`);\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\"ViewportComponent\", `un-mounting ViewportComponent for controlId=${controlId}`);\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<ViewState | undefined>(() => {\n if (viewState) {\n if (typeof viewState === \"function\")\n return viewState().clone();\n else\n return viewState.clone();\n }\n return undefined;\n });\n\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\")\n currentViewState = viewState();\n else\n currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\"ViewportComponent\", `A Viewstate or a viewId and imodel must be provided`);\n }\n // istanbul ignore next\n if (isMounted.current && (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState)\n fetchInitialViewstate(); // eslint-disable-line @typescript-eslint/no-floating-promises\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (parentDiv && initialViewState && (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef)\n viewportRef(screenViewport);\n\n Logger.logInfo(\"ViewportComponent\", `processing viewManager.addViewport for controlId=${controlId}`);\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu)\n onContextMenu(e);\n }, [onContextMenu]);\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\", width: \"100%\", position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\", width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}\n >\n <>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </>\n </div>\n );\n}\n"]}