@itwin/imodel-components-react 4.0.0-dev.9 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/CHANGELOG.md +161 -1
  2. package/README.md +2 -2
  3. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts +28 -28
  4. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts.map +1 -1
  5. package/lib/cjs/imodel-components-react/UiIModelComponents.js +75 -79
  6. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  7. package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  8. package/lib/cjs/imodel-components-react/color/AlphaSlider.js +190 -186
  9. package/lib/cjs/imodel-components-react/color/AlphaSlider.js.map +1 -1
  10. package/lib/cjs/imodel-components-react/color/AlphaSlider.scss +63 -63
  11. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  12. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  13. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +112 -107
  14. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  15. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +90 -90
  16. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  17. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +78 -74
  18. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  19. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  20. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  21. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +143 -137
  22. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  23. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +62 -63
  24. package/lib/cjs/imodel-components-react/color/HueSlider.d.ts +22 -22
  25. package/lib/cjs/imodel-components-react/color/HueSlider.js +203 -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 +217 -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 +64 -60
  34. package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
  35. package/lib/cjs/imodel-components-react/color/Swatch.scss +22 -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 +155 -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 +164 -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 +100 -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.d.ts.map +1 -1
  52. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +272 -265
  53. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  54. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +106 -107
  55. package/lib/cjs/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  56. package/lib/cjs/imodel-components-react/lineweight/Swatch.js +89 -85
  57. package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
  58. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +48 -48
  59. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  60. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +163 -159
  61. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  62. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +51 -52
  63. package/lib/cjs/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  64. package/lib/cjs/imodel-components-react/navigationaids/Cube.js +131 -127
  65. package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
  66. package/lib/cjs/imodel-components-react/navigationaids/Cube.scss +19 -19
  67. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +154 -174
  68. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  69. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +626 -634
  70. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  71. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +178 -182
  72. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  73. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  74. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +657 -647
  75. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  76. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +135 -134
  77. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  78. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +103 -99
  79. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  80. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +59 -63
  81. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  82. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +56 -53
  83. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  84. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  85. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  86. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +88 -83
  87. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  88. package/lib/cjs/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  89. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +89 -86
  90. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  91. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  92. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +112 -109
  93. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  94. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  95. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +133 -133
  96. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  97. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  98. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +187 -184
  99. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  100. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  101. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +149 -145
  102. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  103. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  104. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +63 -59
  105. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  106. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  107. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +51 -47
  108. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  109. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  110. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +58 -54
  111. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  112. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  113. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +52 -48
  114. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  115. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  116. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +54 -50
  117. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  118. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  119. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +62 -58
  120. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  121. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  122. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +51 -47
  123. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  124. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  125. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +60 -56
  126. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  127. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  128. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +98 -95
  129. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  130. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  131. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +123 -119
  132. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  133. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  134. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts.map +1 -1
  135. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +142 -143
  136. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  137. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  138. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js +69 -69
  139. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  140. package/lib/cjs/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  141. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +85 -81
  142. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  143. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +26 -26
  144. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  145. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  146. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +99 -91
  147. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  148. package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +28 -31
  149. package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  150. package/lib/cjs/imodel-components-react/timeline/Scrubber.js +195 -191
  151. package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
  152. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +105 -112
  153. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  154. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  155. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +432 -424
  156. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  157. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +359 -356
  158. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  159. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js +58 -54
  160. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  161. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  162. package/lib/cjs/imodel-components-react/timeline/Timeline.scss +164 -164
  163. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +130 -133
  164. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  165. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +398 -358
  166. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  167. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +178 -164
  168. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +145 -174
  169. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts.map +1 -1
  170. package/lib/cjs/imodel-components-react/timeline/interfaces.js +45 -45
  171. package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
  172. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  173. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts.map +1 -1
  174. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +276 -274
  175. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  176. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  177. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +105 -105
  178. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  179. package/lib/cjs/imodel-components-react.d.ts +81 -82
  180. package/lib/cjs/imodel-components-react.d.ts.map +1 -1
  181. package/lib/cjs/imodel-components-react.js +104 -101
  182. package/lib/cjs/imodel-components-react.js.map +1 -1
  183. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +28 -28
  184. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts.map +1 -1
  185. package/lib/esm/imodel-components-react/UiIModelComponents.js +72 -75
  186. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  187. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  188. package/lib/esm/imodel-components-react/color/AlphaSlider.js +160 -160
  189. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  190. package/lib/esm/imodel-components-react/color/AlphaSlider.scss +63 -63
  191. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  192. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  193. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +83 -82
  194. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  195. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +90 -90
  196. package/lib/esm/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  197. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js +51 -51
  198. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  199. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  200. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  201. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +114 -112
  202. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  203. package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +62 -63
  204. package/lib/esm/imodel-components-react/color/HueSlider.d.ts +22 -22
  205. package/lib/esm/imodel-components-react/color/HueSlider.js +173 -173
  206. package/lib/esm/imodel-components-react/color/HueSlider.js.map +1 -1
  207. package/lib/esm/imodel-components-react/color/HueSlider.scss +61 -61
  208. package/lib/esm/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  209. package/lib/esm/imodel-components-react/color/SaturationPicker.js +187 -187
  210. package/lib/esm/imodel-components-react/color/SaturationPicker.js.map +1 -1
  211. package/lib/esm/imodel-components-react/color/SaturationPicker.scss +35 -35
  212. package/lib/esm/imodel-components-react/color/Swatch.d.ts +22 -22
  213. package/lib/esm/imodel-components-react/color/Swatch.js +34 -34
  214. package/lib/esm/imodel-components-react/color/Swatch.js.map +1 -1
  215. package/lib/esm/imodel-components-react/color/Swatch.scss +22 -23
  216. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  217. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js +19 -19
  218. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  219. package/lib/esm/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  220. package/lib/esm/imodel-components-react/editors/ColorEditor.js +124 -124
  221. package/lib/esm/imodel-components-react/editors/ColorEditor.js.map +1 -1
  222. package/lib/esm/imodel-components-react/editors/ColorEditor.scss +18 -18
  223. package/lib/esm/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  224. package/lib/esm/imodel-components-react/editors/WeightEditor.js +133 -133
  225. package/lib/esm/imodel-components-react/editors/WeightEditor.js.map +1 -1
  226. package/lib/esm/imodel-components-react/editors/WeightEditor.scss +16 -16
  227. package/lib/esm/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  228. package/lib/esm/imodel-components-react/inputs/QuantityInput.js +70 -70
  229. package/lib/esm/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  230. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  231. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  232. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +243 -240
  233. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  234. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +106 -107
  235. package/lib/esm/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  236. package/lib/esm/imodel-components-react/lineweight/Swatch.js +59 -59
  237. package/lib/esm/imodel-components-react/lineweight/Swatch.js.map +1 -1
  238. package/lib/esm/imodel-components-react/lineweight/Swatch.scss +48 -48
  239. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  240. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +134 -133
  241. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  242. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +51 -52
  243. package/lib/esm/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  244. package/lib/esm/imodel-components-react/navigationaids/Cube.js +100 -100
  245. package/lib/esm/imodel-components-react/navigationaids/Cube.js.map +1 -1
  246. package/lib/esm/imodel-components-react/navigationaids/Cube.scss +19 -19
  247. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +154 -174
  248. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  249. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +596 -606
  250. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  251. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +178 -182
  252. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  253. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  254. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +627 -620
  255. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  256. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +135 -134
  257. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  258. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +76 -76
  259. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  260. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +59 -63
  261. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  262. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +29 -30
  263. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  264. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  265. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  266. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +61 -60
  267. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  268. package/lib/esm/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  269. package/lib/esm/imodel-components-react/quantityformat/FormatType.js +62 -63
  270. package/lib/esm/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  271. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  272. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +82 -83
  273. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  274. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  275. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +106 -110
  276. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  277. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  278. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +157 -158
  279. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  280. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  281. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js +122 -122
  282. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  283. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  284. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js +36 -36
  285. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  286. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  287. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js +24 -24
  288. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  289. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  290. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js +31 -31
  291. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  292. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  293. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js +25 -25
  294. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  295. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  296. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js +27 -27
  297. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  298. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  299. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +35 -35
  300. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  301. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  302. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js +24 -24
  303. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  304. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  305. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js +33 -33
  306. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  307. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  308. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +68 -69
  309. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  310. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  311. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js +96 -96
  312. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  313. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  314. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts.map +1 -1
  315. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js +138 -139
  316. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  317. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  318. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js +65 -65
  319. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  320. package/lib/esm/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  321. package/lib/esm/imodel-components-react/timeline/InlineEdit.js +55 -55
  322. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  323. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +26 -26
  324. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  325. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  326. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +68 -64
  327. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  328. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +28 -31
  329. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  330. package/lib/esm/imodel-components-react/timeline/Scrubber.js +164 -164
  331. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  332. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +105 -112
  333. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  334. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  335. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +402 -398
  336. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  337. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +359 -356
  338. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  339. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js +28 -28
  340. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  341. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  342. package/lib/esm/imodel-components-react/timeline/Timeline.scss +164 -164
  343. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +130 -133
  344. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  345. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +368 -332
  346. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  347. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +178 -164
  348. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +145 -174
  349. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts.map +1 -1
  350. package/lib/esm/imodel-components-react/timeline/interfaces.js +42 -42
  351. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  352. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  353. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts.map +1 -1
  354. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +249 -251
  355. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  356. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  357. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +96 -95
  358. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  359. package/lib/esm/imodel-components-react.d.ts +81 -82
  360. package/lib/esm/imodel-components-react.d.ts.map +1 -1
  361. package/lib/esm/imodel-components-react.js +86 -87
  362. package/lib/esm/imodel-components-react.js.map +1 -1
  363. package/lib/public/locales/en/UiIModelComponents.json +139 -139
  364. package/package.json +35 -37
  365. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +0 -22
  366. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts.map +0 -1
  367. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +0 -146
  368. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +0 -1
  369. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +0 -94
  370. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +0 -22
  371. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts.map +0 -1
  372. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +0 -123
  373. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +0 -1
  374. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +0 -94
@@ -1,252 +1,250 @@
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 ?? 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
+ const lastTargetPoint = targetPoint.current;
68
+ // istanbul ignore next
69
+ const tentativePoint = tentativePointOverrideRef.current ?? IModelApp.tentativePoint;
70
+ // istanbul ignore else
71
+ if (tentativePoint.isActive)
72
+ return tentativePoint.getPoint();
73
+ // istanbul ignore else
74
+ if (undefined !== vp.viewCmdTargetCenter) {
75
+ const testPt = vp.worldToView(vp.viewCmdTargetCenter);
76
+ const viewRect = vp.viewRect;
77
+ if (viewRect.containsPoint(testPt))
78
+ return vp.viewCmdTargetCenter;
79
+ vp.viewCmdTargetCenter = undefined;
80
+ }
81
+ // istanbul ignore else
82
+ if (null !== lastTargetPoint) {
83
+ const testPt = vp.worldToView(lastTargetPoint);
84
+ const viewRect = vp.viewRect.clone();
85
+ viewRect.scaleAboutCenter(0.25, 0.25);
86
+ // istanbul ignore next hard to reach because of mocks
87
+ if (viewRect.containsPoint(testPt))
88
+ return lastTargetPoint;
89
+ targetPoint.current = null;
90
+ }
91
+ const visiblePoint = vp.pickNearestVisibleGeometry(vp.npcToWorld(NpcCenter), vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches));
92
+ targetPoint.current = (undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint());
93
+ // istanbul ignore next
94
+ return targetPoint.current ?? vp.view.getCenter();
95
+ };
96
+ const handleCubeRotationChangeEvent = (args) => {
97
+ const viewManager = viewManagerRef.current;
98
+ const currentScreenViewport = screenViewportRef.current;
99
+ // istanbul ignore else
100
+ if (currentScreenViewport && viewManager.selectedView === currentScreenViewport) {
101
+ const rotMatrix = args.rotMatrix;
102
+ // istanbul ignore else
103
+ if (currentScreenViewport.rotation !== rotMatrix) {
104
+ const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...
105
+ const center = getRotatePoint(currentScreenViewport);
106
+ const targetMatrix = inverse.multiplyMatrixMatrix(currentScreenViewport.view.getRotation());
107
+ const worldTransform = Transform.createFixedPointAndMatrix(center, targetMatrix);
108
+ const frustum = currentScreenViewport.getWorldFrustum();
109
+ frustum.multiply(worldTransform);
110
+ currentScreenViewport.view.setupFromFrustum(frustum);
111
+ currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });
112
+ }
113
+ }
114
+ };
115
+ const handleDisconnectFromViewManager = () => {
116
+ const screenViewport = screenViewportRef.current;
117
+ if (screenViewport) {
118
+ const viewManager = IModelApp.viewManager;
119
+ screenViewport.onViewChanged.removeListener(handleViewChanged);
120
+ screenViewportRef.current = null;
121
+ screenViewportCreated.current = false;
122
+ ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(handleDrawingViewportChangeEvent);
123
+ ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(handleCubeRotationChangeEvent);
124
+ ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(handleStandardRotationChangeEvent);
125
+ viewManager.dropViewport(screenViewport, true);
126
+ }
127
+ };
128
+ // istanbul ignore next
129
+ const handleWindowUnload = () => {
130
+ const parentDiv = viewportDiv.current;
131
+ if (parentDiv) {
132
+ const parentWindow = parentDiv.ownerDocument.defaultView;
133
+ if (parentWindow !== window) {
134
+ handleDisconnectFromViewManager();
135
+ }
136
+ }
137
+ };
138
+ const getScreenViewport = (parentDiv, inViewState) => {
139
+ // istanbul ignore next
140
+ const screenViewportFactory = screenViewportOverride ? screenViewportOverride : ScreenViewport;
141
+ const parentWindow = parentDiv.ownerDocument.defaultView;
142
+ parentWindow.addEventListener("unload", handleWindowUnload, true); // listener clear after being called
143
+ ViewportComponentEvents.initialize();
144
+ ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(handleDrawingViewportChangeEvent);
145
+ ViewportComponentEvents.onCubeRotationChangeEvent.addListener(handleCubeRotationChangeEvent);
146
+ ViewportComponentEvents.onStandardRotationChangeEvent.addListener(handleStandardRotationChangeEvent);
147
+ const screenViewport = screenViewportFactory.create(parentDiv, inViewState);
148
+ screenViewportCreated.current = true;
149
+ viewClassFullName.current = screenViewport.view.classFullName;
150
+ viewId.current = screenViewport.view.id;
151
+ screenViewport.onViewChanged.addListener(handleViewChanged);
152
+ return screenViewport;
153
+ };
154
+ React.useEffect(() => {
155
+ isMounted.current = true;
156
+ Logger.logInfo("ViewportComponent", `mounting ViewportComponent for controlId=${controlId}`);
157
+ return () => {
158
+ isMounted.current = false;
159
+ Logger.logInfo("ViewportComponent", `un-mounting ViewportComponent for controlId=${controlId}`);
160
+ handleDisconnectFromViewManager();
161
+ };
162
+ // eslint-disable-next-line react-hooks/exhaustive-deps
163
+ }, []);
164
+ const [initialViewState, setInitialViewState] = React.useState(() => {
165
+ if (viewState) {
166
+ if (typeof viewState === "function")
167
+ return viewState().clone();
168
+ else
169
+ return viewState.clone();
170
+ }
171
+ return undefined;
172
+ });
173
+ React.useEffect(() => {
174
+ setInitialViewState(undefined);
175
+ }, [viewDefinitionId, viewState]);
176
+ React.useEffect(() => {
177
+ async function fetchInitialViewstate() {
178
+ let currentViewState;
179
+ if (viewState) {
180
+ if (typeof viewState === "function")
181
+ currentViewState = viewState();
182
+ else
183
+ currentViewState = viewState;
184
+ }
185
+ else if (viewDefinitionId && imodel) {
186
+ try {
187
+ currentViewState = await imodel.views.load(viewDefinitionId);
188
+ // istanbul ignore next
189
+ if (!currentViewState) {
190
+ Logger.logError("ViewportComponent", `Viewstate failed to load`);
191
+ }
192
+ }
193
+ catch (_e) {
194
+ // istanbul ignore next
195
+ Logger.logError("ViewportComponent", `Viewstate failed to load`);
196
+ }
197
+ }
198
+ else {
199
+ Logger.logError("ViewportComponent", `A Viewstate or a viewId and imodel must be provided`);
200
+ }
201
+ // istanbul ignore next
202
+ if (isMounted.current && (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)) {
203
+ setInitialViewState(currentViewState?.clone());
204
+ }
205
+ }
206
+ if (undefined === initialViewState)
207
+ fetchInitialViewstate(); // eslint-disable-line @typescript-eslint/no-floating-promises
208
+ }, [imodel, initialViewState, viewDefinitionId, viewState]);
209
+ const [viewOverlay, setViewOverlay] = React.useState(null);
210
+ // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.
211
+ React.useEffect(() => {
212
+ const parentDiv = viewportDiv.current;
213
+ const viewManager = viewManagerRef.current;
214
+ // istanbul ignore next
215
+ if (parentDiv && initialViewState && (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)) {
216
+ if (!screenViewportCreated.current) {
217
+ const screenViewport = getScreenViewport(parentDiv, initialViewState);
218
+ screenViewportRef.current = screenViewport;
219
+ if (viewportRef)
220
+ viewportRef(screenViewport);
221
+ Logger.logInfo("ViewportComponent", `processing viewManager.addViewport for controlId=${controlId}`);
222
+ viewManager.addViewport(screenViewport);
223
+ // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.
224
+ setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);
225
+ }
226
+ else {
227
+ // istanbul ignore next
228
+ screenViewportRef.current?.changeView(initialViewState);
229
+ }
230
+ }
231
+ // eslint-disable-next-line react-hooks/exhaustive-deps
232
+ }, [controlId, initialViewState, viewportRef]);
233
+ const handleContextMenu = React.useCallback((e) => {
234
+ e.preventDefault();
235
+ if (onContextMenu)
236
+ onContextMenu(e);
237
+ }, [onContextMenu]);
238
+ const parentDivStyle = {
239
+ height: "100%", width: "100%", position: "relative",
240
+ };
241
+ const viewportDivStyle = {
242
+ ...style,
243
+ height: "100%", width: "100%",
244
+ };
245
+ return (React.createElement("div", { style: parentDivStyle, "data-item-id": controlId },
246
+ React.createElement(React.Fragment, null,
247
+ React.createElement("div", { ref: viewportDiv, "data-testid": "viewport-component", className: className, style: viewportDivStyle, onContextMenu: handleContextMenu }),
248
+ viewOverlay)));
249
+ }
252
250
  //# sourceMappingURL=ViewportComponent.js.map