@itwin/imodel-components-react 4.0.0-dev.2 → 4.0.0-dev.21

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 (265) hide show
  1. package/CHANGELOG.md +139 -2
  2. package/LICENSE.md +1 -1
  3. package/README.md +2 -2
  4. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts.map +1 -1
  5. package/lib/cjs/imodel-components-react/UiIModelComponents.js +3 -7
  6. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  7. package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts +2 -2
  8. package/lib/cjs/imodel-components-react/color/AlphaSlider.js +6 -2
  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.map +1 -1
  12. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +9 -4
  13. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  14. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +90 -90
  15. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +5 -1
  16. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  17. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  18. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +10 -4
  19. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  20. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +62 -63
  21. package/lib/cjs/imodel-components-react/color/HueSlider.js +5 -1
  22. package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
  23. package/lib/cjs/imodel-components-react/color/HueSlider.scss +61 -61
  24. package/lib/cjs/imodel-components-react/color/SaturationPicker.js +5 -1
  25. package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
  26. package/lib/cjs/imodel-components-react/color/SaturationPicker.scss +35 -35
  27. package/lib/cjs/imodel-components-react/color/Swatch.js +5 -1
  28. package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
  29. package/lib/cjs/imodel-components-react/color/Swatch.scss +22 -23
  30. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  31. package/lib/cjs/imodel-components-react/editors/ColorEditor.js +5 -1
  32. package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
  33. package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +18 -18
  34. package/lib/cjs/imodel-components-react/editors/WeightEditor.js +5 -1
  35. package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
  36. package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +16 -16
  37. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js +5 -1
  38. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  39. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +1 -1
  40. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  41. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +11 -4
  42. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  43. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +106 -107
  44. package/lib/cjs/imodel-components-react/lineweight/Swatch.js +5 -1
  45. package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
  46. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +48 -48
  47. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +6 -2
  48. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  49. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +51 -52
  50. package/lib/cjs/imodel-components-react/navigationaids/Cube.js +5 -1
  51. package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
  52. package/lib/cjs/imodel-components-react/navigationaids/Cube.scss +19 -19
  53. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +4 -24
  54. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  55. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +46 -54
  56. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  57. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +178 -182
  58. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  59. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +16 -6
  60. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  61. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +135 -134
  62. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +6 -2
  63. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  64. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +59 -63
  65. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +7 -4
  66. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  67. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  68. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +10 -5
  69. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  70. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +6 -3
  71. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  72. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +6 -3
  73. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  74. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +10 -10
  75. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  76. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +8 -5
  77. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  78. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +5 -1
  79. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  80. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +5 -1
  81. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  82. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +5 -1
  83. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  84. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +5 -1
  85. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  86. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +5 -1
  87. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  88. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +5 -1
  89. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  90. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +5 -1
  91. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  92. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +5 -1
  93. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  94. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +5 -1
  95. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  96. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +6 -3
  97. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  98. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +5 -1
  99. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  100. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts.map +1 -1
  101. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +22 -23
  102. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  103. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  104. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +5 -1
  105. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  106. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +26 -26
  107. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  108. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +12 -4
  109. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  110. package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +28 -31
  111. package/lib/cjs/imodel-components-react/timeline/Scrubber.js +5 -1
  112. package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
  113. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +105 -112
  114. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  115. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +13 -5
  116. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  117. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +359 -356
  118. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js +5 -1
  119. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  120. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  121. package/lib/cjs/imodel-components-react/timeline/Timeline.scss +164 -164
  122. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +3 -6
  123. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  124. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +59 -19
  125. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  126. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +178 -164
  127. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +3 -32
  128. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts.map +1 -1
  129. package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
  130. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts +1 -1
  131. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts.map +1 -1
  132. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +12 -10
  133. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  134. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +1 -1
  135. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  136. package/lib/cjs/imodel-components-react.d.ts +0 -1
  137. package/lib/cjs/imodel-components-react.d.ts.map +1 -1
  138. package/lib/cjs/imodel-components-react.js +5 -2
  139. package/lib/cjs/imodel-components-react.js.map +1 -1
  140. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts.map +1 -1
  141. package/lib/esm/imodel-components-react/UiIModelComponents.js +4 -7
  142. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  143. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +2 -2
  144. package/lib/esm/imodel-components-react/color/AlphaSlider.js +1 -1
  145. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  146. package/lib/esm/imodel-components-react/color/AlphaSlider.scss +63 -63
  147. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  148. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +5 -4
  149. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  150. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +90 -90
  151. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  152. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  153. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +6 -4
  154. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  155. package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +62 -63
  156. package/lib/esm/imodel-components-react/color/HueSlider.js.map +1 -1
  157. package/lib/esm/imodel-components-react/color/HueSlider.scss +61 -61
  158. package/lib/esm/imodel-components-react/color/SaturationPicker.js.map +1 -1
  159. package/lib/esm/imodel-components-react/color/SaturationPicker.scss +35 -35
  160. package/lib/esm/imodel-components-react/color/Swatch.js.map +1 -1
  161. package/lib/esm/imodel-components-react/color/Swatch.scss +22 -23
  162. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  163. package/lib/esm/imodel-components-react/editors/ColorEditor.js.map +1 -1
  164. package/lib/esm/imodel-components-react/editors/ColorEditor.scss +18 -18
  165. package/lib/esm/imodel-components-react/editors/WeightEditor.js.map +1 -1
  166. package/lib/esm/imodel-components-react/editors/WeightEditor.scss +16 -16
  167. package/lib/esm/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  168. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +1 -1
  169. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  170. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +7 -4
  171. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  172. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +106 -107
  173. package/lib/esm/imodel-components-react/lineweight/Swatch.js.map +1 -1
  174. package/lib/esm/imodel-components-react/lineweight/Swatch.scss +48 -48
  175. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +2 -1
  176. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  177. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +51 -52
  178. package/lib/esm/imodel-components-react/navigationaids/Cube.js.map +1 -1
  179. package/lib/esm/imodel-components-react/navigationaids/Cube.scss +19 -19
  180. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +4 -24
  181. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  182. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +42 -52
  183. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  184. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +178 -182
  185. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  186. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +12 -5
  187. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  188. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +135 -134
  189. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +1 -1
  190. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  191. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +59 -63
  192. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +2 -3
  193. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  194. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  195. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +6 -5
  196. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  197. package/lib/esm/imodel-components-react/quantityformat/FormatType.js +1 -2
  198. package/lib/esm/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  199. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +1 -2
  200. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  201. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +5 -9
  202. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  203. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +3 -4
  204. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  205. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  206. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  207. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  208. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  209. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  210. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  211. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  212. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  213. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  214. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +1 -2
  215. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  216. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  217. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts.map +1 -1
  218. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js +22 -23
  219. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  220. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  221. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  222. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +26 -26
  223. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  224. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +7 -3
  225. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  226. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +28 -31
  227. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  228. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +105 -112
  229. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  230. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +10 -6
  231. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  232. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +359 -356
  233. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  234. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  235. package/lib/esm/imodel-components-react/timeline/Timeline.scss +164 -164
  236. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +3 -6
  237. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  238. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +47 -11
  239. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  240. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +178 -164
  241. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +3 -32
  242. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts.map +1 -1
  243. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  244. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +1 -1
  245. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts.map +1 -1
  246. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +7 -9
  247. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  248. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +2 -1
  249. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  250. package/lib/esm/imodel-components-react.d.ts +0 -1
  251. package/lib/esm/imodel-components-react.d.ts.map +1 -1
  252. package/lib/esm/imodel-components-react.js +0 -1
  253. package/lib/esm/imodel-components-react.js.map +1 -1
  254. package/lib/public/locales/en/UiIModelComponents.json +139 -139
  255. package/package.json +38 -39
  256. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +0 -22
  257. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts.map +0 -1
  258. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +0 -146
  259. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +0 -1
  260. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +0 -94
  261. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +0 -22
  262. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts.map +0 -1
  263. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +0 -123
  264. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +0 -1
  265. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +0 -94
@@ -10,9 +10,11 @@ import classnames from "classnames";
10
10
  import * as React from "react";
11
11
  import { Angle, AxisIndex, AxisOrder, Geometry, Matrix3d, Point2d, Vector2d, Vector3d } from "@itwin/core-geometry";
12
12
  import { IModelApp } from "@itwin/core-frontend";
13
+ import { Icon } from "@itwin/core-react";
13
14
  import { UiIModelComponents } from "../UiIModelComponents";
14
15
  import { ViewportComponentEvents } from "../viewport/ViewportComponentEvents";
15
16
  import { Cube, Face } from "./Cube";
17
+ import { SvgCaretDown, SvgCaretLeft, SvgCaretRight, SvgCaretUp } from "@itwin/itwinui-icons-react";
16
18
  /** @public */
17
19
  export var CubeNavigationHitBoxX;
18
20
  (function (CubeNavigationHitBoxX) {
@@ -20,14 +22,6 @@ export var CubeNavigationHitBoxX;
20
22
  CubeNavigationHitBoxX[CubeNavigationHitBoxX["Right"] = 1] = "Right";
21
23
  CubeNavigationHitBoxX[CubeNavigationHitBoxX["Left"] = -1] = "Left";
22
24
  })(CubeNavigationHitBoxX || (CubeNavigationHitBoxX = {}));
23
- /** @internal
24
- * @deprecated Use [[CubeNavigationHitBoxX]] */
25
- export var HitBoxX;
26
- (function (HitBoxX) {
27
- HitBoxX[HitBoxX["None"] = 0] = "None";
28
- HitBoxX[HitBoxX["Right"] = 1] = "Right";
29
- HitBoxX[HitBoxX["Left"] = -1] = "Left";
30
- })(HitBoxX || (HitBoxX = {}));
31
25
  /** @public */
32
26
  export var CubeNavigationHitBoxY;
33
27
  (function (CubeNavigationHitBoxY) {
@@ -35,14 +29,6 @@ export var CubeNavigationHitBoxY;
35
29
  CubeNavigationHitBoxY[CubeNavigationHitBoxY["Back"] = 1] = "Back";
36
30
  CubeNavigationHitBoxY[CubeNavigationHitBoxY["Front"] = -1] = "Front";
37
31
  })(CubeNavigationHitBoxY || (CubeNavigationHitBoxY = {}));
38
- /** @internal
39
- * @deprecated Use [[CubeNavigationHitBoxY]] */
40
- export var HitBoxY;
41
- (function (HitBoxY) {
42
- HitBoxY[HitBoxY["None"] = 0] = "None";
43
- HitBoxY[HitBoxY["Back"] = 1] = "Back";
44
- HitBoxY[HitBoxY["Front"] = -1] = "Front";
45
- })(HitBoxY || (HitBoxY = {}));
46
32
  /** @public */
47
33
  export var CubeNavigationHitBoxZ;
48
34
  (function (CubeNavigationHitBoxZ) {
@@ -50,14 +36,6 @@ export var CubeNavigationHitBoxZ;
50
36
  CubeNavigationHitBoxZ[CubeNavigationHitBoxZ["Top"] = 1] = "Top";
51
37
  CubeNavigationHitBoxZ[CubeNavigationHitBoxZ["Bottom"] = -1] = "Bottom";
52
38
  })(CubeNavigationHitBoxZ || (CubeNavigationHitBoxZ = {}));
53
- /** @internal
54
- * @deprecated [[CubeNavigationHitBoxZ]] */
55
- export var HitBoxZ;
56
- (function (HitBoxZ) {
57
- HitBoxZ[HitBoxZ["None"] = 0] = "None";
58
- HitBoxZ[HitBoxZ["Top"] = 1] = "Top";
59
- HitBoxZ[HitBoxZ["Bottom"] = -1] = "Bottom";
60
- })(HitBoxZ || (HitBoxZ = {}));
61
39
  const cubeNavigationFaceLocs = {
62
40
  [Face.Left]: Vector3d.create(CubeNavigationHitBoxX.Left, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.None),
63
41
  [Face.Right]: Vector3d.create(CubeNavigationHitBoxX.Right, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.None),
@@ -95,7 +73,7 @@ export var CubeHover;
95
73
  /** Cube Navigation Aid Component
96
74
  * @public
97
75
  */
98
- export class CubeNavigationAid extends React.Component {
76
+ class CubeNavigationAid extends React.Component {
99
77
  constructor() {
100
78
  super(...arguments);
101
79
  this._start = Vector2d.createZero();
@@ -159,9 +137,8 @@ export class CubeNavigationAid extends React.Component {
159
137
  }
160
138
  };
161
139
  this._handleCellHoverChange = (vect, state) => {
162
- var _a, _b;
163
140
  if (this._isInteractionLocked()) {
164
- (_b = (_a = this.props).onAnimationEnd) === null || _b === void 0 ? void 0 : _b.call(_a);
141
+ this.props.onAnimationEnd?.();
165
142
  return;
166
143
  }
167
144
  const hoverMap = this.state.hoverMap;
@@ -176,10 +153,9 @@ export class CubeNavigationAid extends React.Component {
176
153
  return false;
177
154
  };
178
155
  this._onArrowClick = (arrow) => {
179
- var _a, _b;
180
156
  if (this._isInteractionLocked()) {
181
157
  // istanbul ignore next
182
- (_b = (_a = this.props).onAnimationEnd) === null || _b === void 0 ? void 0 : _b.call(_a);
158
+ this.props.onAnimationEnd?.();
183
159
  return;
184
160
  }
185
161
  const { newRotation, face } = this.getArrowRotationAndFace(arrow);
@@ -187,9 +163,8 @@ export class CubeNavigationAid extends React.Component {
187
163
  };
188
164
  this._lastClientXY = Vector2d.createZero();
189
165
  this._handleBoxMouseDown = (event) => {
190
- var _a, _b;
191
166
  if (this._isInteractionLocked()) {
192
- (_b = (_a = this.props).onAnimationEnd) === null || _b === void 0 ? void 0 : _b.call(_a);
167
+ this.props.onAnimationEnd?.();
193
168
  return;
194
169
  }
195
170
  event.preventDefault();
@@ -214,9 +189,8 @@ export class CubeNavigationAid extends React.Component {
214
189
  };
215
190
  // istanbul ignore next - unable to test touch
216
191
  this._handleBoxTouchStart = (event) => {
217
- var _a, _b;
218
192
  if (this._isInteractionLocked()) {
219
- (_b = (_a = this.props).onAnimationEnd) === null || _b === void 0 ? void 0 : _b.call(_a);
193
+ this.props.onAnimationEnd?.();
220
194
  return;
221
195
  }
222
196
  if (1 !== event.targetTouches.length)
@@ -245,9 +219,8 @@ export class CubeNavigationAid extends React.Component {
245
219
  window.removeEventListener("touchend", this._onTouchEnd);
246
220
  };
247
221
  this._handleFaceCellClick = (pos, face) => {
248
- var _a, _b;
249
222
  if (this._isInteractionLocked()) {
250
- (_b = (_a = this.props).onAnimationEnd) === null || _b === void 0 ? void 0 : _b.call(_a);
223
+ this.props.onAnimationEnd?.();
251
224
  return;
252
225
  }
253
226
  const { endRotMatrix } = this.state;
@@ -485,14 +458,28 @@ CubeNavigationAid._interpolateRotMatrix = (start, anim, end) => {
485
458
  // istanbul ignore next
486
459
  return end;
487
460
  };
461
+ export { CubeNavigationAid };
488
462
  /** @internal */
489
- export class NavCubeFace extends React.Component {
463
+ class NavCubeFace extends React.Component {
464
+ includeCell(vector) {
465
+ const { x, y, z } = vector;
466
+ const omittedCell = (y === 0 && x !== 0 && z !== 0) || (y !== 0 && x === 0 && z !== 0) || (y !== 0 && x !== 0 && z === 0);
467
+ return !omittedCell;
468
+ }
490
469
  render() {
491
470
  const { face, hoverMap, onFaceCellClick, onFaceCellHoverChange, label } = this.props;
492
471
  return (React.createElement("div", { className: "nav-cube-face", "data-testid": "nav-cube-face" }, [-1, 0, 1].map((y) => {
493
472
  return (React.createElement(FaceRow, { key: y, center: y === 0 }, [-1, 0, 1].map((x) => {
494
- return (React.createElement(FaceCell, { key: x, onFaceCellHoverChange: onFaceCellHoverChange, onFaceCellClick: onFaceCellClick, hoverMap: hoverMap, vector: NavCubeFace.faceCellToPos(face, x, y), face: face, center: x === 0 }, x === 0 && y === 0 &&
495
- label));
473
+ const vector = NavCubeFace.faceCellToPos(face, x, y);
474
+ if (this.includeCell(vector)) {
475
+ // return a fully functional cell
476
+ return (React.createElement(FaceCell, { key: x, onFaceCellHoverChange: onFaceCellHoverChange, onFaceCellClick: onFaceCellClick, hoverMap: hoverMap, vector: vector, face: face, center: x === 0 }, x === 0 && y === 0 &&
477
+ label));
478
+ }
479
+ else {
480
+ // return a placeholder cell
481
+ return (React.createElement(FaceCell, { key: x, vector: vector, face: face, center: x === 0 }));
482
+ }
496
483
  })));
497
484
  })));
498
485
  }
@@ -506,6 +493,7 @@ NavCubeFace.faceCellToPos = (face, x, y) => {
506
493
  const yVect = faceY !== Face.None ? cubeNavigationFaceLocs[faceY] : Vector3d.createZero();
507
494
  return faceVect.plus(xVect).plus(yVect);
508
495
  };
496
+ export { NavCubeFace };
509
497
  class FaceRow extends React.Component {
510
498
  render() {
511
499
  const { center, children, ...props } = this.props;
@@ -519,11 +507,11 @@ export class FaceCell extends React.Component {
519
507
  super(...arguments);
520
508
  this._handleMouseOver = () => {
521
509
  const { vector } = this.props;
522
- this.props.onFaceCellHoverChange(vector, CubeHover.Hover);
510
+ this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.Hover);
523
511
  };
524
512
  this._handleMouseOut = () => {
525
513
  const { vector } = this.props;
526
- this.props.onFaceCellHoverChange(vector, CubeHover.None);
514
+ this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.None);
527
515
  };
528
516
  this._handleMouseDown = (event) => {
529
517
  const { clientX, clientY } = event;
@@ -546,8 +534,8 @@ export class FaceCell extends React.Component {
546
534
  const { center, children, onFaceCellClick, onFaceCellHoverChange, hoverMap, face, vector, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars
547
535
  const { x, y, z } = vector;
548
536
  const n = `${x}-${y}-${z}`;
549
- const hover = hoverMap[n] === CubeHover.Hover;
550
- const active = hoverMap[n] === CubeHover.Active;
537
+ const hover = hoverMap && hoverMap[n] === CubeHover.Hover;
538
+ const active = hoverMap && hoverMap[n] === CubeHover.Active;
551
539
  const classNames = classnames("face-cell", center && "cube-center", hover && "cube-hover", active && "cube-active");
552
540
  // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events
553
541
  return React.createElement("div", { onMouseDown: this._handleMouseDown, onMouseUp: this._handleMouseUp, onMouseOver: this._handleMouseOver, onMouseOut: this._handleMouseOut, onTouchStart: this._handleTouchStart, onTouchEnd: this._handleTouchEnd, "data-testid": `nav-cube-face-cell-${face}-${n}`, className: classNames, role: "presentation", ...props }, children);
@@ -555,15 +543,15 @@ export class FaceCell extends React.Component {
555
543
  handlePointerDown(x, y) {
556
544
  const { vector } = this.props;
557
545
  this._startMouse = Point2d.create(x, y);
558
- this.props.onFaceCellHoverChange(vector, CubeHover.Active);
546
+ this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.Active);
559
547
  }
560
548
  handlePointerUp(x, y) {
561
549
  const { vector, face } = this.props;
562
- this.props.onFaceCellHoverChange(vector, CubeHover.None);
550
+ this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.None);
563
551
  const mouse = Point2d.create(x, y);
564
552
  if (this._startMouse && this._startMouse.isAlmostEqual(mouse)) {
565
553
  const isFace = Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z) === 1;
566
- this.props.onFaceCellClick(vector, isFace ? face : Face.None);
554
+ this.props.onFaceCellClick && this.props.onFaceCellClick(vector, isFace ? face : Face.None);
567
555
  }
568
556
  }
569
557
  }
@@ -575,11 +563,11 @@ var Pointer;
575
563
  Pointer[Pointer["Left"] = 3] = "Left";
576
564
  Pointer[Pointer["Right"] = 4] = "Right";
577
565
  })(Pointer || (Pointer = {}));
578
- const pointerIconClass = {
579
- [Pointer.Up]: "icon-caret-down",
580
- [Pointer.Down]: "icon-caret-up",
581
- [Pointer.Left]: "icon-caret-right",
582
- [Pointer.Right]: "icon-caret-left",
566
+ const pointerIconSpec = {
567
+ [Pointer.Up]: React.createElement(SvgCaretDown, null),
568
+ [Pointer.Down]: React.createElement(SvgCaretUp, null),
569
+ [Pointer.Left]: React.createElement(SvgCaretRight, null),
570
+ [Pointer.Right]: React.createElement(SvgCaretLeft, null),
583
571
  };
584
572
  const pointerClass = {
585
573
  [Pointer.Up]: "cube-up",
@@ -598,10 +586,12 @@ class PointerButton extends React.Component {
598
586
  }
599
587
  render() {
600
588
  const { visible, pointerType, onArrowClick, title, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars
601
- const classes = classnames("cube-pointer", "icon", pointerClass[pointerType], pointerIconClass[pointerType], visible && "cube-visible");
589
+ const classes = classnames("cube-pointer", "icon", pointerClass[pointerType], visible && "cube-visible");
602
590
  return (
603
591
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events
604
- React.createElement("div", { className: classes, role: "button", tabIndex: -1, title: title, ...props, onClick: this._handleClick }));
592
+ React.createElement("div", { className: classes, role: "button", tabIndex: -1, title: title, ...props, onClick: this._handleClick },
593
+ React.createElement(Icon, { iconSpec: pointerIconSpec[pointerType] }),
594
+ " "));
605
595
  }
606
596
  }
607
597
  //# sourceMappingURL=CubeNavigationAid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CubeNavigationAid.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/navigationaids/CubeNavigationAid.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module NavigationAids\n */\n\nimport \"./CubeNavigationAid.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Angle, AxisIndex, AxisOrder, Geometry, Matrix3d, Point2d, Vector2d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\nimport { IModelApp, IModelConnection, Viewport } from \"@itwin/core-frontend\";\nimport { CommonProps } from \"@itwin/core-react\";\nimport { UiIModelComponents } from \"../UiIModelComponents\";\nimport { ViewportComponentEvents, ViewRotationChangeEventArgs } from \"../viewport/ViewportComponentEvents\";\nimport { Cube, Face } from \"./Cube\";\n\n/** @public */\nexport enum CubeNavigationHitBoxX {\n None = 0,\n Right = 1,\n Left = -1,\n}\n/** @internal\n * @deprecated Use [[CubeNavigationHitBoxX]] */\nexport enum HitBoxX {\n None = 0,\n Right = 1,\n Left = -1,\n}\n\n/** @public */\nexport enum CubeNavigationHitBoxY {\n None = 0,\n Back = 1,\n Front = -1,\n}\n/** @internal\n * @deprecated Use [[CubeNavigationHitBoxY]] */\nexport enum HitBoxY {\n None = 0,\n Back = 1,\n Front = -1,\n}\n\n/** @public */\nexport enum CubeNavigationHitBoxZ {\n None = 0,\n Top = 1,\n Bottom = -1,\n}\n/** @internal\n * @deprecated [[CubeNavigationHitBoxZ]] */\nexport enum HitBoxZ {\n None = 0,\n Top = 1,\n Bottom = -1,\n}\n\ninterface CubeNavigationRotationMap {\n up: Face;\n down: Face;\n left: Face;\n right: Face;\n}\n\nconst cubeNavigationFaceLocs: { [key: string]: Vector3d } = {\n [Face.Left]: Vector3d.create(CubeNavigationHitBoxX.Left, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.None),\n [Face.Right]: Vector3d.create(CubeNavigationHitBoxX.Right, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.None),\n [Face.Back]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.Back, CubeNavigationHitBoxZ.None),\n [Face.Front]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.Front, CubeNavigationHitBoxZ.None),\n [Face.Bottom]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.Bottom),\n [Face.Top]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.Top),\n};\n\nconst cubeNavigationFaceRotations: { [key: string]: Matrix3d } = {\n [Face.Left]: Matrix3d.createRowValues(0, -1, 0, 0, 0, 1, -1, 0, 0),\n [Face.Right]: Matrix3d.createRowValues(0, 1, 0, 0, 0, 1, 1, 0, 0),\n [Face.Back]: Matrix3d.createRowValues(-1, 0, 0, 0, 0, 1, 0, 1, 0),\n [Face.Front]: Matrix3d.createRowValues(1, 0, 0, 0, 0, 1, 0, -1, 0),\n [Face.Bottom]: Matrix3d.createRowValues(1, 0, 0, 0, -1, 0, 0, 0, -1),\n [Face.Top]: Matrix3d.createRowValues(1, 0, 0, 0, 1, 0, 0, 0, 1),\n};\n\n// data relating Up/Down/Left/Right directions relative to every surface\nconst cubeNavigationRoutes: { [key: string]: CubeNavigationRotationMap } = {\n [Face.Front]: { up: Face.Top, down: Face.Bottom, left: Face.Left, right: Face.Right },\n [Face.Back]: { up: Face.Top, down: Face.Bottom, left: Face.Right, right: Face.Left },\n [Face.Top]: { up: Face.Back, down: Face.Front, left: Face.Left, right: Face.Right },\n [Face.Bottom]: { up: Face.Front, down: Face.Back, left: Face.Left, right: Face.Right },\n [Face.Right]: { up: Face.Top, down: Face.Bottom, left: Face.Front, right: Face.Back },\n [Face.Left]: { up: Face.Top, down: Face.Bottom, left: Face.Back, right: Face.Front },\n};\n\n/** The default tolerance (1.0e-6) is appropriate if very dirty viewing operations are expected. */\nconst DEFAULT_TOLERANCE = 1.0e-6;\n\n/** @internal */\nexport enum CubeHover {\n None = 0,\n Hover,\n Active,\n}\n\n/** Properties for the [[CubeNavigationAid]] component\n * @public\n */\nexport interface CubeNavigationAidProps extends CommonProps {\n iModelConnection: IModelConnection;\n viewport?: Viewport;\n\n // used only in testing\n\n /** @internal */\n onAnimationEnd?: () => void;\n /** @internal */\n animationTime?: number;\n}\n\n/** @public */\ninterface CubeNavigationAidState {\n dragging: boolean;\n startRotMatrix: Matrix3d;\n endRotMatrix: Matrix3d;\n animation: number;\n hoverMap: { [key: string]: CubeHover };\n face: Face;\n}\n\n/** Cube Navigation Aid Component\n * @public\n */\nexport class CubeNavigationAid extends React.Component<CubeNavigationAidProps, CubeNavigationAidState> {\n private _start: Vector2d = Vector2d.createZero();\n /** @internal */\n public override readonly state: Readonly<CubeNavigationAidState> = {\n dragging: false,\n startRotMatrix: Matrix3d.createIdentity(),\n endRotMatrix: Matrix3d.createIdentity(),\n animation: 1,\n hoverMap: {},\n face: Face.Top,\n };\n\n private _lastTime: number | undefined;\n private _animationFrame: any;\n private _mounted: boolean = false;\n private _labels: { [key: string]: string } = {\n [Face.Right]: UiIModelComponents.translate(\"cube.right\"),\n [Face.Left]: UiIModelComponents.translate(\"cube.left\"),\n [Face.Back]: UiIModelComponents.translate(\"cube.back\"),\n [Face.Front]: UiIModelComponents.translate(\"cube.front\"),\n [Face.Top]: UiIModelComponents.translate(\"cube.top\"),\n [Face.Bottom]: UiIModelComponents.translate(\"cube.bottom\"),\n };\n\n /** @internal */\n public override componentDidMount() {\n this._mounted = true;\n ViewportComponentEvents.onViewRotationChangeEvent.addListener(this._handleViewRotationChangeEvent);\n\n // set initial rotation\n if (this.props.viewport) {\n const newMatrix = this.props.viewport.view.getRotation().clone();\n this.setState({ startRotMatrix: newMatrix, endRotMatrix: newMatrix, animation: 1 });\n }\n }\n\n /** @internal */\n public override componentWillUnmount() {\n ViewportComponentEvents.onViewRotationChangeEvent.removeListener(this._handleViewRotationChangeEvent);\n clearTimeout(this._animationFrame);\n this._mounted = false;\n }\n\n // Synchronize with rotation coming from the Viewport\n private _handleViewRotationChangeEvent = (args: ViewRotationChangeEventArgs) => {\n const { animation, dragging, endRotMatrix } = this.state;\n // istanbul ignore else\n if (this.props.viewport === args.viewport && animation >= 1 && !dragging) {\n const newMatrix = this.props.viewport.view.getRotation().clone();\n if (!endRotMatrix.isAlmostEqual(newMatrix)) {\n this.setState({ startRotMatrix: newMatrix, endRotMatrix: newMatrix, animation: 1, face: Face.None });\n }\n }\n };\n\n private _animation = () => {\n const t = Date.now();\n const delta = this._lastTime ? t - this._lastTime : 16;\n this._lastTime = t;\n if (this.state.animation !== 1) {\n const animation = Math.min(1, this.state.animation + delta / (1000 * (this.props.animationTime || /* istanbul ignore next */ 0.4)));\n\n // istanbul ignore next\n if (this._mounted) {\n this.setState({ animation }, () => {\n this._animationFrame = setTimeout(this._animation, 16.667);\n });\n }\n } else {\n this._lastTime = undefined;\n this._animationEnd();\n }\n };\n\n private _animationEnd = () => {\n ViewportComponentEvents.setCubeMatrix(this.state.endRotMatrix, this.state.face, true);\n const startRotMatrix = this.state.endRotMatrix.clone();\n // istanbul ignore next\n if (this._mounted) {\n this.setState({ startRotMatrix }, () => {\n // istanbul ignore else\n if (this.props.onAnimationEnd)\n this.props.onAnimationEnd();\n });\n }\n };\n\n private static _animationFn = (t: number) => t < .5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t;\n\n private static _isMatrixFace = (matrix: Matrix3d): boolean => {\n let sum = 0;\n for (const coff of matrix.coffs) {\n if (Geometry.isAlmostEqualNumber(Math.abs(coff), 1))\n sum++;\n }\n // Assuming matrix is a proper rotation matrix:\n // if matrix viewing a face, there will be a total of 3 values either almost -1, or almost 1.\n return sum === 3;\n };\n\n public override render(): React.ReactNode {\n const { animation, startRotMatrix, endRotMatrix } = this.state;\n const visible = CubeNavigationAid._isMatrixFace(endRotMatrix) && animation === 1.0;\n const rotMatrix = CubeNavigationAid._interpolateRotMatrix(startRotMatrix, animation, endRotMatrix);\n if (rotMatrix !== startRotMatrix && rotMatrix !== endRotMatrix)\n ViewportComponentEvents.setCubeMatrix(rotMatrix, Face.None);\n\n const faces: { [key: string]: React.ReactNode } = {};\n for (const key in this._labels) {\n // istanbul ignore else\n if (this._labels.hasOwnProperty(key)) {\n const f = key as Face;\n const label = this._labels[f];\n faces[f] =\n <NavCubeFace\n face={f}\n label={label}\n hoverMap={this.state.hoverMap}\n onFaceCellClick={this._handleFaceCellClick}\n onFaceCellHoverChange={this._handleCellHoverChange} />;\n }\n }\n\n const cubeClassNames = classnames(\n \"nav-cube\",\n this.state.dragging && \"cube-dragging\",\n );\n\n const upTitle = this.getArrowTitle(Pointer.Up);\n const downTitle = this.getArrowTitle(Pointer.Down);\n const leftTitle = this.getArrowTitle(Pointer.Left);\n const rightTitle = this.getArrowTitle(Pointer.Right);\n\n return (\n <div className={classnames(\"components-cube-container\", this.props.className)}\n style={this.props.style}\n data-testid=\"components-cube-navigation-aid\"\n onMouseDown={this._handleBoxMouseDown}\n onTouchStart={this._handleBoxTouchStart}\n role=\"presentation\"\n >\n <div className={\"cube-element-container\"}>\n <Cube\n className={cubeClassNames}\n rotMatrix={rotMatrix}\n faces={faces} />\n </div>\n <PointerButton data-testid=\"cube-pointer-button-up\"\n visible={visible} pointerType={Pointer.Up} onArrowClick={this._onArrowClick} title={upTitle} />\n <PointerButton data-testid=\"cube-pointer-button-down\"\n visible={visible} pointerType={Pointer.Down} onArrowClick={this._onArrowClick} title={downTitle} />\n <PointerButton data-testid=\"cube-pointer-button-left\"\n visible={visible} pointerType={Pointer.Left} onArrowClick={this._onArrowClick} title={leftTitle} />\n <PointerButton data-testid=\"cube-pointer-button-right\"\n visible={visible} pointerType={Pointer.Right} onArrowClick={this._onArrowClick} title={rightTitle} />\n </div>\n );\n }\n\n private _handleCellHoverChange = (vect: Vector3d, state: CubeHover) => {\n if (this._isInteractionLocked()) {\n this.props.onAnimationEnd?.();\n return;\n }\n const hoverMap = this.state.hoverMap;\n hoverMap[`${vect.x}-${vect.y}-${vect.z}`] = state;\n this.setState({ hoverMap });\n };\n\n private _isInteractionLocked = () => {\n // Locked by markup\n if(undefined !== this.props.viewport && this.props.viewport === IModelApp.toolAdmin.markupView) {\n return true;\n }\n return false;\n };\n\n private static _getMatrixFace = (rotMatrix: Matrix3d): Face => {\n if (!CubeNavigationAid._isMatrixFace(rotMatrix)) {\n return Face.None;\n }\n\n let matrixFace = Face.None;\n\n for (const face in cubeNavigationFaceRotations) {\n // istanbul ignore else\n if (face in cubeNavigationFaceRotations) {\n const loc = cubeNavigationFaceRotations[face];\n if (rotMatrix.isAlmostEqual(loc)) {\n matrixFace = face as Face;\n break;\n }\n }\n }\n\n return matrixFace;\n };\n\n private static _interpolateRotMatrix = (start: Matrix3d, anim: number, end: Matrix3d): Matrix3d => {\n if (anim === 0)\n return start;\n if (anim === 1 || start.isAlmostEqual(end))\n return end;\n const startInverse = start.transpose();\n const diff = end.multiplyMatrixMatrix(startInverse);\n const angleAxis = diff.getAxisAndAngleOfRotation();\n // istanbul ignore else\n if (angleAxis.ok) {\n const angle = Angle.createRadians(angleAxis.angle.radians * CubeNavigationAid._animationFn(anim));\n const newDiff = Matrix3d.createRotationAroundVector(angleAxis.axis, angle);\n // istanbul ignore else\n if (newDiff) {\n const newMatrix = newDiff.multiplyMatrixMatrix(start);\n return newMatrix;\n }\n }\n // istanbul ignore next\n return end;\n };\n\n private static correctSmallNumber(value: number, tolerance: number): number {\n return Math.abs(value) < tolerance ? 0 : value;\n }\n\n /**\n * Snap coordinates of a vector to zero and to each other so that the vector prefers to be\n * * perpendicular to a face of the unit cube.\n * * or pass through a nearby vertex or edge of the unit cube.\n * @param zVector existing z vector.\n * @param tolerance tolerance to determine if a z vector component is close to zero or 1.\n */\n private static snapVectorToCubeFeatures(zVector: XYAndZ, tolerance: number): Vector3d {\n const x = CubeNavigationAid.correctSmallNumber(zVector.x, tolerance);\n let y = CubeNavigationAid.correctSmallNumber(zVector.y, tolerance);\n let z = CubeNavigationAid.correctSmallNumber(zVector.z, tolerance);\n\n const xx = Math.abs(x);\n const yy = Math.abs(y);\n const zz = Math.abs(z);\n\n // adjust any adjacent pair of near equal values to the first.\n // istanbul ignore next\n if (Geometry.isSameCoordinate(xx, yy, tolerance)) {\n y = Geometry.split3WaySign(y, -xx, xx, xx);\n }\n if (Geometry.isSameCoordinate(yy, zz, tolerance)) {\n z = Geometry.split3WaySign(z, -yy, yy, yy);\n }\n if (Geometry.isSameCoordinate(xx, zz, tolerance)) {\n z = Geometry.split3WaySign(z, -xx, xx, xx);\n }\n return Vector3d.create(x, y, z);\n }\n\n /**\n * Adjust a worldToView matrix to favor both\n * * direct view at faces, edges, and corners of a view cube.\n * * heads up\n * @param worldToView candidate matrix\n * @param tolerance tolerance for cleaning up fuzz. The default (1.0e-6) is appropriate if very dirty viewing operations are expected.\n * @param result optional result.\n */\n private static snapWorldToViewMatrixToCubeFeatures(worldToView: Matrix3d, tolerance: number, result?: Matrix3d): Matrix3d {\n const oldZ = worldToView.rowZ();\n const newZ = CubeNavigationAid.snapVectorToCubeFeatures(oldZ, tolerance);\n // If newZ is true up or down, it will have true 0 for x and y.\n // special case this to take x direction from the input.\n // istanbul ignore next\n if (newZ.x === 0.0 && newZ.y === 0) {\n const perpVector = worldToView.rowX();\n result = Matrix3d.createRigidFromColumns(newZ, perpVector, AxisOrder.ZXY, result)!;\n } else {\n result = Matrix3d.createRigidViewAxesZTowardsEye(newZ.x, newZ.y, newZ.z, result);\n }\n // istanbul ignore else\n if (result)\n result.transposeInPlace();\n return result;\n }\n\n private getArrowRotationAndFace(arrow: Pointer): { newRotation: Matrix3d, face: Face } {\n const localRotationAxis = Vector3d.create(0, 0, 0);\n switch (arrow) {\n case Pointer.Up:\n localRotationAxis.x = -1.0;\n break;\n case Pointer.Down:\n localRotationAxis.x = 1.0;\n break;\n case Pointer.Left:\n localRotationAxis.y = -1.0;\n break;\n default:\n localRotationAxis.y = 1.0;\n break;\n }\n const localRotation = Matrix3d.createRotationAroundVector(localRotationAxis, Angle.createDegrees(-90))!;\n const newRotation = localRotation.multiplyMatrixMatrix(this.state.endRotMatrix);\n CubeNavigationAid.snapWorldToViewMatrixToCubeFeatures(newRotation, DEFAULT_TOLERANCE, newRotation);\n const face = CubeNavigationAid._getMatrixFace(newRotation);\n return { newRotation, face };\n }\n\n private _onArrowClick = (arrow: Pointer) => {\n if (this._isInteractionLocked()) {\n // istanbul ignore next\n this.props.onAnimationEnd?.();\n return;\n }\n const { newRotation, face } = this.getArrowRotationAndFace(arrow);\n this._animateRotation(newRotation, face);\n };\n\n private getArrowTitle(arrow: Pointer) {\n const { face } = this.getArrowRotationAndFace(arrow);\n return this._labels[face];\n }\n\n private _lastClientXY: Vector2d = Vector2d.createZero();\n private _processDrag(mousePos: Vector2d) {\n // istanbul ignore else\n if (!this._start.isAlmostEqual(mousePos)) {\n const movement = mousePos.minus(this._lastClientXY);\n const diff = movement.scale(0.05);\n\n const yaw = Angle.createRadians(diff.x);\n const pitch = Angle.createRadians(diff.y);\n\n const matX = Matrix3d.createRotationAroundAxisIndex(AxisIndex.X, pitch);\n const matZ = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, yaw);\n\n const mat = matX.multiplyMatrixMatrix(this.state.startRotMatrix).multiplyMatrixMatrix(matZ);\n this._setRotation(mat, CubeNavigationAid._getMatrixFace(mat));\n if (!this.state.dragging)\n this.setState({ dragging: true });\n }\n this._lastClientXY = mousePos;\n }\n\n private _handleBoxMouseDown = (event: any) => {\n if (this._isInteractionLocked()) {\n this.props.onAnimationEnd?.();\n return;\n }\n event.preventDefault();\n // only start listening after drag is confirmed. Ie. the 3D box is clicked.\n window.addEventListener(\"mousemove\", this._onMouseMove, false);\n window.addEventListener(\"mouseup\", this._onMouseUp, false);\n this._lastClientXY = Vector2d.create(event.clientX, event.clientY);\n this._start = this._lastClientXY;\n };\n\n private _onMouseMove = (event: MouseEvent) => {\n const mousePos = Vector2d.create(event.clientX, event.clientY);\n this._processDrag(mousePos);\n };\n\n private _onMouseUp = () => {\n if (this.state.dragging) {\n this.setState({ dragging: false });\n ViewportComponentEvents.setCubeMatrix(this.state.endRotMatrix, CubeNavigationAid._getMatrixFace(this.state.endRotMatrix), true);\n }\n\n // remove so event only triggers after this.onMouseStartDrag\n window.removeEventListener(\"mousemove\", this._onMouseMove);\n window.removeEventListener(\"mouseup\", this._onMouseUp);\n };\n\n // istanbul ignore next - unable to test touch\n private _handleBoxTouchStart = (event: any) => {\n if (this._isInteractionLocked()) {\n this.props.onAnimationEnd?.();\n return;\n }\n if (1 !== event.targetTouches.length)\n return;\n window.addEventListener(\"touchmove\", this._onTouchMove, false);\n window.addEventListener(\"touchend\", this._onTouchEnd, false);\n this._lastClientXY = Vector2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\n this._start = this._lastClientXY;\n };\n\n // istanbul ignore next - unable to test touch\n private _onTouchMove = (event: TouchEvent) => {\n if (1 !== event.targetTouches.length)\n return;\n const mousePos = Vector2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\n this._processDrag(mousePos);\n };\n\n // istanbul ignore next - unable to test touch\n private _onTouchEnd = (event: TouchEvent) => {\n if (0 !== event.targetTouches.length)\n return;\n\n if (this.state.dragging) {\n this.setState({ dragging: false });\n ViewportComponentEvents.setCubeMatrix(this.state.endRotMatrix, CubeNavigationAid._getMatrixFace(this.state.endRotMatrix), true);\n }\n\n window.removeEventListener(\"touchmove\", this._onTouchMove);\n window.removeEventListener(\"touchend\", this._onTouchEnd);\n };\n\n private _handleFaceCellClick = (pos: Vector3d, face: Face) => {\n if (this._isInteractionLocked()) {\n this.props.onAnimationEnd?.();\n return;\n }\n const { endRotMatrix } = this.state;\n let rotMatrix = Matrix3d.createRigidViewAxesZTowardsEye(pos.x, pos.y, pos.z).inverse();\n // istanbul ignore else\n if (rotMatrix) {\n // if isMatrixFace and user is clicking on top/bottom, the current matrix face must be top or bottom\n if (!CubeNavigationAid._isMatrixFace(endRotMatrix) && (face === Face.Top || face === Face.Bottom)) {\n const angleAxis = endRotMatrix.getAxisAndAngleOfRotation();\n // istanbul ignore else\n if (angleAxis.ok) {\n const xAx = endRotMatrix.columnX();\n const a = Math.atan2(xAx.y, xAx.x);\n const r = Math.round(a * 2 / Math.PI) * Math.PI / 2; // round to quarter turn intervals\n const rot = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, Angle.createRadians(r));\n rotMatrix = rot.multiplyMatrixMatrix(rotMatrix);\n }\n }\n this._animateRotation(rotMatrix, face);\n }\n window.removeEventListener(\"mousemove\", this._onMouseMove);\n };\n\n private _animateRotation = (endRotMatrix: Matrix3d, face: Face) => {\n if (this.state.endRotMatrix.isAlmostEqual(endRotMatrix))\n return;\n // set animation variables, let css transitions animate it.\n this._animationFrame = setTimeout(this._animation, 16.667);\n this.setState((prevState) => ({\n startRotMatrix: prevState.endRotMatrix, endRotMatrix,\n animation: 0,\n face,\n }));\n };\n\n private _setRotation = (endRotMatrix: Matrix3d, face: Face) => {\n ViewportComponentEvents.setCubeMatrix(endRotMatrix, face);\n // set variables, with animTime at 0 to prevent animation.\n this.setState({\n startRotMatrix: endRotMatrix,\n endRotMatrix,\n animation: 1,\n face,\n });\n };\n}\n\n/** @internal */\nexport interface NavCubeFaceProps extends React.AllHTMLAttributes<HTMLDivElement> {\n face: Face;\n label: string;\n hoverMap: { [key: string]: CubeHover };\n onFaceCellClick: (vector: Vector3d, face: Face) => void;\n onFaceCellHoverChange: (vector: Vector3d, state: CubeHover) => void;\n}\n\n/** @internal */\nexport class NavCubeFace extends React.Component<NavCubeFaceProps> {\n public override render(): React.ReactNode {\n const { face, hoverMap, onFaceCellClick, onFaceCellHoverChange, label } = this.props;\n return (\n <div className=\"nav-cube-face\" data-testid=\"nav-cube-face\">\n {[-1, 0, 1].map((y: number) => {\n return (\n <FaceRow key={y} center={y === 0}>\n {[-1, 0, 1].map((x: number) => {\n return (\n <FaceCell\n key={x}\n onFaceCellHoverChange={onFaceCellHoverChange}\n onFaceCellClick={onFaceCellClick}\n hoverMap={hoverMap}\n vector={NavCubeFace.faceCellToPos(face, x, y)}\n face={face}\n center={x === 0}>\n {x === 0 && y === 0 &&\n label}\n </FaceCell>\n );\n })}\n </FaceRow>\n );\n })}\n </div>\n );\n }\n public static faceCellToPos = (face: Face, x: number, y: number) => {\n const faceVect = cubeNavigationFaceLocs[face];\n const route = cubeNavigationRoutes[face];\n\n const faceX = x < 0 ? route.left : x > 0 ? route.right : Face.None;\n const xVect = faceX !== Face.None ? cubeNavigationFaceLocs[faceX] : Vector3d.createZero();\n\n const faceY = y < 0 ? route.up : y > 0 ? route.down : Face.None;\n const yVect = faceY !== Face.None ? cubeNavigationFaceLocs[faceY] : Vector3d.createZero();\n\n return faceVect.plus(xVect).plus(yVect);\n };\n}\n\ninterface FaceRowProps extends React.AllHTMLAttributes<HTMLDivElement> {\n center?: boolean;\n}\n\nclass FaceRow extends React.Component<FaceRowProps> {\n public override render(): React.ReactNode {\n const { center, children, ...props } = this.props;\n const classNames = classnames(\n \"face-row\",\n center && \"cube-center\",\n );\n return <div className={classNames} {...props}>{children}</div>;\n }\n}\n\n/** @internal */\nexport interface FaceCellProps extends React.AllHTMLAttributes<HTMLDivElement> {\n center?: boolean;\n onFaceCellClick: (vector: Vector3d, face: Face) => void;\n onFaceCellHoverChange: (vector: Vector3d, state: CubeHover) => void;\n hoverMap: { [key: string]: CubeHover };\n vector: Vector3d;\n face: Face;\n}\n\n/** @internal */\nexport class FaceCell extends React.Component<FaceCellProps> {\n private _startMouse: Point2d | undefined;\n public override render(): React.ReactNode {\n const { center, children, onFaceCellClick, onFaceCellHoverChange, hoverMap, face, vector, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\n const { x, y, z } = vector;\n const n = `${x}-${y}-${z}`;\n const hover = hoverMap[n] === CubeHover.Hover;\n const active = hoverMap[n] === CubeHover.Active;\n const classNames = classnames(\n \"face-cell\",\n center && \"cube-center\",\n hover && \"cube-hover\",\n active && \"cube-active\",\n );\n\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n return <div\n onMouseDown={this._handleMouseDown}\n onMouseUp={this._handleMouseUp}\n onMouseOver={this._handleMouseOver}\n onMouseOut={this._handleMouseOut}\n onTouchStart={this._handleTouchStart}\n onTouchEnd={this._handleTouchEnd}\n data-testid={`nav-cube-face-cell-${face}-${n}`}\n className={classNames}\n role=\"presentation\"\n {...props}\n >\n {children}\n </div>;\n }\n private _handleMouseOver = () => {\n const { vector } = this.props;\n this.props.onFaceCellHoverChange(vector, CubeHover.Hover);\n };\n private _handleMouseOut = () => {\n const { vector } = this.props;\n this.props.onFaceCellHoverChange(vector, CubeHover.None);\n };\n private _handleMouseDown = (event: React.MouseEvent) => {\n const { clientX, clientY } = event;\n this.handlePointerDown(clientX, clientY);\n };\n private _handleMouseUp = (event: React.MouseEvent) => {\n const { clientX, clientY } = event;\n this.handlePointerUp(clientX, clientY);\n };\n\n private _handleTouchStart = (event: React.TouchEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.targetTouches.length === 1 && this.handlePointerDown(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\n };\n\n private _handleTouchEnd = (event: React.TouchEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.changedTouches.length === 1 && this.handlePointerUp(event.changedTouches[0].clientX, event.changedTouches[0].clientY);\n };\n\n private handlePointerDown(x: number, y: number) {\n const { vector } = this.props;\n this._startMouse = Point2d.create(x, y);\n this.props.onFaceCellHoverChange(vector, CubeHover.Active);\n }\n\n private handlePointerUp(x: number, y: number) {\n const { vector, face } = this.props;\n this.props.onFaceCellHoverChange(vector, CubeHover.None);\n const mouse = Point2d.create(x, y);\n if (this._startMouse && this._startMouse.isAlmostEqual(mouse)) {\n const isFace = Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z) === 1;\n this.props.onFaceCellClick(vector, isFace ? face : Face.None);\n }\n }\n}\n\nenum Pointer {\n None = 0,\n Up,\n Down,\n Left,\n Right,\n}\n\nconst pointerIconClass: { [key: number]: string } = {\n [Pointer.Up]: \"icon-caret-down\",\n [Pointer.Down]: \"icon-caret-up\",\n [Pointer.Left]: \"icon-caret-right\",\n [Pointer.Right]: \"icon-caret-left\",\n};\n\nconst pointerClass: { [key: number]: string } = {\n [Pointer.Up]: \"cube-up\",\n [Pointer.Down]: \"cube-down\",\n [Pointer.Left]: \"cube-left\",\n [Pointer.Right]: \"cube-right\",\n};\n\ninterface PointerProps extends React.AllHTMLAttributes<HTMLDivElement> {\n visible: boolean;\n pointerType: Pointer;\n onArrowClick(pointer: Pointer): void;\n title: string;\n [\"data-testid\"]?: string;\n}\n\nclass PointerButton extends React.Component<PointerProps> {\n public override render(): React.ReactNode {\n const { visible, pointerType, onArrowClick, title, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\n const classes = classnames(\n \"cube-pointer\", \"icon\",\n pointerClass[pointerType],\n pointerIconClass[pointerType],\n visible && \"cube-visible\",\n );\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div className={classes} role=\"button\" tabIndex={-1} title={title} {...props}\n onClick={this._handleClick} />\n );\n }\n private _handleClick = (event: React.MouseEvent) => {\n const { pointerType } = this.props;\n event.preventDefault();\n this.props.onArrowClick(pointerType);\n };\n}\n"]}
1
+ {"version":3,"file":"CubeNavigationAid.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/navigationaids/CubeNavigationAid.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module NavigationAids\r\n */\r\n\r\nimport \"./CubeNavigationAid.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { Angle, AxisIndex, AxisOrder, Geometry, Matrix3d, Point2d, Vector2d, Vector3d, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { IModelApp, IModelConnection, Viewport } from \"@itwin/core-frontend\";\r\nimport { CommonProps, Icon, IconSpec } from \"@itwin/core-react\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\nimport { ViewportComponentEvents, ViewRotationChangeEventArgs } from \"../viewport/ViewportComponentEvents\";\r\nimport { Cube, Face } from \"./Cube\";\r\nimport { SvgCaretDown, SvgCaretLeft, SvgCaretRight, SvgCaretUp } from \"@itwin/itwinui-icons-react\";\r\n\r\n/** @public */\r\nexport enum CubeNavigationHitBoxX {\r\n None = 0,\r\n Right = 1,\r\n Left = -1,\r\n}\r\n\r\n/** @public */\r\nexport enum CubeNavigationHitBoxY {\r\n None = 0,\r\n Back = 1,\r\n Front = -1,\r\n}\r\n\r\n/** @public */\r\nexport enum CubeNavigationHitBoxZ {\r\n None = 0,\r\n Top = 1,\r\n Bottom = -1,\r\n}\r\n\r\ninterface CubeNavigationRotationMap {\r\n up: Face;\r\n down: Face;\r\n left: Face;\r\n right: Face;\r\n}\r\n\r\nconst cubeNavigationFaceLocs: { [key: string]: Vector3d } = {\r\n [Face.Left]: Vector3d.create(CubeNavigationHitBoxX.Left, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.None),\r\n [Face.Right]: Vector3d.create(CubeNavigationHitBoxX.Right, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.None),\r\n [Face.Back]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.Back, CubeNavigationHitBoxZ.None),\r\n [Face.Front]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.Front, CubeNavigationHitBoxZ.None),\r\n [Face.Bottom]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.Bottom),\r\n [Face.Top]: Vector3d.create(CubeNavigationHitBoxX.None, CubeNavigationHitBoxY.None, CubeNavigationHitBoxZ.Top),\r\n};\r\n\r\nconst cubeNavigationFaceRotations: { [key: string]: Matrix3d } = {\r\n [Face.Left]: Matrix3d.createRowValues(0, -1, 0, 0, 0, 1, -1, 0, 0),\r\n [Face.Right]: Matrix3d.createRowValues(0, 1, 0, 0, 0, 1, 1, 0, 0),\r\n [Face.Back]: Matrix3d.createRowValues(-1, 0, 0, 0, 0, 1, 0, 1, 0),\r\n [Face.Front]: Matrix3d.createRowValues(1, 0, 0, 0, 0, 1, 0, -1, 0),\r\n [Face.Bottom]: Matrix3d.createRowValues(1, 0, 0, 0, -1, 0, 0, 0, -1),\r\n [Face.Top]: Matrix3d.createRowValues(1, 0, 0, 0, 1, 0, 0, 0, 1),\r\n};\r\n\r\n// data relating Up/Down/Left/Right directions relative to every surface\r\nconst cubeNavigationRoutes: { [key: string]: CubeNavigationRotationMap } = {\r\n [Face.Front]: { up: Face.Top, down: Face.Bottom, left: Face.Left, right: Face.Right },\r\n [Face.Back]: { up: Face.Top, down: Face.Bottom, left: Face.Right, right: Face.Left },\r\n [Face.Top]: { up: Face.Back, down: Face.Front, left: Face.Left, right: Face.Right },\r\n [Face.Bottom]: { up: Face.Front, down: Face.Back, left: Face.Left, right: Face.Right },\r\n [Face.Right]: { up: Face.Top, down: Face.Bottom, left: Face.Front, right: Face.Back },\r\n [Face.Left]: { up: Face.Top, down: Face.Bottom, left: Face.Back, right: Face.Front },\r\n};\r\n\r\n/** The default tolerance (1.0e-6) is appropriate if very dirty viewing operations are expected. */\r\nconst DEFAULT_TOLERANCE = 1.0e-6;\r\n\r\n/** @internal */\r\nexport enum CubeHover {\r\n None = 0,\r\n Hover,\r\n Active,\r\n}\r\n\r\n/** Properties for the [[CubeNavigationAid]] component\r\n * @public\r\n */\r\nexport interface CubeNavigationAidProps extends CommonProps {\r\n iModelConnection: IModelConnection;\r\n viewport?: Viewport;\r\n\r\n // used only in testing\r\n\r\n /** @internal */\r\n onAnimationEnd?: () => void;\r\n /** @internal */\r\n animationTime?: number;\r\n}\r\n\r\n/** @public */\r\ninterface CubeNavigationAidState {\r\n dragging: boolean;\r\n startRotMatrix: Matrix3d;\r\n endRotMatrix: Matrix3d;\r\n animation: number;\r\n hoverMap: { [key: string]: CubeHover };\r\n face: Face;\r\n}\r\n\r\n/** Cube Navigation Aid Component\r\n * @public\r\n */\r\nexport class CubeNavigationAid extends React.Component<CubeNavigationAidProps, CubeNavigationAidState> {\r\n private _start: Vector2d = Vector2d.createZero();\r\n /** @internal */\r\n public override readonly state: Readonly<CubeNavigationAidState> = {\r\n dragging: false,\r\n startRotMatrix: Matrix3d.createIdentity(),\r\n endRotMatrix: Matrix3d.createIdentity(),\r\n animation: 1,\r\n hoverMap: {},\r\n face: Face.Top,\r\n };\r\n\r\n private _lastTime: number | undefined;\r\n private _animationFrame: any;\r\n private _mounted: boolean = false;\r\n private _labels: { [key: string]: string } = {\r\n [Face.Right]: UiIModelComponents.translate(\"cube.right\"),\r\n [Face.Left]: UiIModelComponents.translate(\"cube.left\"),\r\n [Face.Back]: UiIModelComponents.translate(\"cube.back\"),\r\n [Face.Front]: UiIModelComponents.translate(\"cube.front\"),\r\n [Face.Top]: UiIModelComponents.translate(\"cube.top\"),\r\n [Face.Bottom]: UiIModelComponents.translate(\"cube.bottom\"),\r\n };\r\n\r\n /** @internal */\r\n public override componentDidMount() {\r\n this._mounted = true;\r\n ViewportComponentEvents.onViewRotationChangeEvent.addListener(this._handleViewRotationChangeEvent);\r\n\r\n // set initial rotation\r\n if (this.props.viewport) {\r\n const newMatrix = this.props.viewport.view.getRotation().clone();\r\n this.setState({ startRotMatrix: newMatrix, endRotMatrix: newMatrix, animation: 1 });\r\n }\r\n }\r\n\r\n /** @internal */\r\n public override componentWillUnmount() {\r\n ViewportComponentEvents.onViewRotationChangeEvent.removeListener(this._handleViewRotationChangeEvent);\r\n clearTimeout(this._animationFrame);\r\n this._mounted = false;\r\n }\r\n\r\n // Synchronize with rotation coming from the Viewport\r\n private _handleViewRotationChangeEvent = (args: ViewRotationChangeEventArgs) => {\r\n const { animation, dragging, endRotMatrix } = this.state;\r\n // istanbul ignore else\r\n if (this.props.viewport === args.viewport && animation >= 1 && !dragging) {\r\n const newMatrix = this.props.viewport.view.getRotation().clone();\r\n if (!endRotMatrix.isAlmostEqual(newMatrix)) {\r\n this.setState({ startRotMatrix: newMatrix, endRotMatrix: newMatrix, animation: 1, face: Face.None });\r\n }\r\n }\r\n };\r\n\r\n private _animation = () => {\r\n const t = Date.now();\r\n const delta = this._lastTime ? t - this._lastTime : 16;\r\n this._lastTime = t;\r\n if (this.state.animation !== 1) {\r\n const animation = Math.min(1, this.state.animation + delta / (1000 * (this.props.animationTime || /* istanbul ignore next */ 0.4)));\r\n\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ animation }, () => {\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n });\r\n }\r\n } else {\r\n this._lastTime = undefined;\r\n this._animationEnd();\r\n }\r\n };\r\n\r\n private _animationEnd = () => {\r\n ViewportComponentEvents.setCubeMatrix(this.state.endRotMatrix, this.state.face, true);\r\n const startRotMatrix = this.state.endRotMatrix.clone();\r\n // istanbul ignore next\r\n if (this._mounted) {\r\n this.setState({ startRotMatrix }, () => {\r\n // istanbul ignore else\r\n if (this.props.onAnimationEnd)\r\n this.props.onAnimationEnd();\r\n });\r\n }\r\n };\r\n\r\n private static _animationFn = (t: number) => t < .5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t;\r\n\r\n private static _isMatrixFace = (matrix: Matrix3d): boolean => {\r\n let sum = 0;\r\n for (const coff of matrix.coffs) {\r\n if (Geometry.isAlmostEqualNumber(Math.abs(coff), 1))\r\n sum++;\r\n }\r\n // Assuming matrix is a proper rotation matrix:\r\n // if matrix viewing a face, there will be a total of 3 values either almost -1, or almost 1.\r\n return sum === 3;\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n const { animation, startRotMatrix, endRotMatrix } = this.state;\r\n const visible = CubeNavigationAid._isMatrixFace(endRotMatrix) && animation === 1.0;\r\n const rotMatrix = CubeNavigationAid._interpolateRotMatrix(startRotMatrix, animation, endRotMatrix);\r\n if (rotMatrix !== startRotMatrix && rotMatrix !== endRotMatrix)\r\n ViewportComponentEvents.setCubeMatrix(rotMatrix, Face.None);\r\n\r\n const faces: { [key: string]: React.ReactNode } = {};\r\n for (const key in this._labels) {\r\n // istanbul ignore else\r\n if (this._labels.hasOwnProperty(key)) {\r\n const f = key as Face;\r\n const label = this._labels[f];\r\n faces[f] =\r\n <NavCubeFace\r\n face={f}\r\n label={label}\r\n hoverMap={this.state.hoverMap}\r\n onFaceCellClick={this._handleFaceCellClick}\r\n onFaceCellHoverChange={this._handleCellHoverChange} />;\r\n }\r\n }\r\n\r\n const cubeClassNames = classnames(\r\n \"nav-cube\",\r\n this.state.dragging && \"cube-dragging\",\r\n );\r\n\r\n const upTitle = this.getArrowTitle(Pointer.Up);\r\n const downTitle = this.getArrowTitle(Pointer.Down);\r\n const leftTitle = this.getArrowTitle(Pointer.Left);\r\n const rightTitle = this.getArrowTitle(Pointer.Right);\r\n\r\n return (\r\n <div className={classnames(\"components-cube-container\", this.props.className)}\r\n style={this.props.style}\r\n data-testid=\"components-cube-navigation-aid\"\r\n onMouseDown={this._handleBoxMouseDown}\r\n onTouchStart={this._handleBoxTouchStart}\r\n role=\"presentation\"\r\n >\r\n <div className={\"cube-element-container\"}>\r\n <Cube\r\n className={cubeClassNames}\r\n rotMatrix={rotMatrix}\r\n faces={faces} />\r\n </div>\r\n <PointerButton data-testid=\"cube-pointer-button-up\"\r\n visible={visible} pointerType={Pointer.Up} onArrowClick={this._onArrowClick} title={upTitle} />\r\n <PointerButton data-testid=\"cube-pointer-button-down\"\r\n visible={visible} pointerType={Pointer.Down} onArrowClick={this._onArrowClick} title={downTitle} />\r\n <PointerButton data-testid=\"cube-pointer-button-left\"\r\n visible={visible} pointerType={Pointer.Left} onArrowClick={this._onArrowClick} title={leftTitle} />\r\n <PointerButton data-testid=\"cube-pointer-button-right\"\r\n visible={visible} pointerType={Pointer.Right} onArrowClick={this._onArrowClick} title={rightTitle} />\r\n </div>\r\n );\r\n }\r\n\r\n private _handleCellHoverChange = (vect: Vector3d, state: CubeHover) => {\r\n if (this._isInteractionLocked()) {\r\n this.props.onAnimationEnd?.();\r\n return;\r\n }\r\n const hoverMap = this.state.hoverMap;\r\n hoverMap[`${vect.x}-${vect.y}-${vect.z}`] = state;\r\n this.setState({ hoverMap });\r\n };\r\n\r\n private _isInteractionLocked = () => {\r\n // Locked by markup\r\n if(undefined !== this.props.viewport && this.props.viewport === IModelApp.toolAdmin.markupView) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n private static _getMatrixFace = (rotMatrix: Matrix3d): Face => {\r\n if (!CubeNavigationAid._isMatrixFace(rotMatrix)) {\r\n return Face.None;\r\n }\r\n\r\n let matrixFace = Face.None;\r\n\r\n for (const face in cubeNavigationFaceRotations) {\r\n // istanbul ignore else\r\n if (face in cubeNavigationFaceRotations) {\r\n const loc = cubeNavigationFaceRotations[face];\r\n if (rotMatrix.isAlmostEqual(loc)) {\r\n matrixFace = face as Face;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return matrixFace;\r\n };\r\n\r\n private static _interpolateRotMatrix = (start: Matrix3d, anim: number, end: Matrix3d): Matrix3d => {\r\n if (anim === 0)\r\n return start;\r\n if (anim === 1 || start.isAlmostEqual(end))\r\n return end;\r\n const startInverse = start.transpose();\r\n const diff = end.multiplyMatrixMatrix(startInverse);\r\n const angleAxis = diff.getAxisAndAngleOfRotation();\r\n // istanbul ignore else\r\n if (angleAxis.ok) {\r\n const angle = Angle.createRadians(angleAxis.angle.radians * CubeNavigationAid._animationFn(anim));\r\n const newDiff = Matrix3d.createRotationAroundVector(angleAxis.axis, angle);\r\n // istanbul ignore else\r\n if (newDiff) {\r\n const newMatrix = newDiff.multiplyMatrixMatrix(start);\r\n return newMatrix;\r\n }\r\n }\r\n // istanbul ignore next\r\n return end;\r\n };\r\n\r\n private static correctSmallNumber(value: number, tolerance: number): number {\r\n return Math.abs(value) < tolerance ? 0 : value;\r\n }\r\n\r\n /**\r\n * Snap coordinates of a vector to zero and to each other so that the vector prefers to be\r\n * * perpendicular to a face of the unit cube.\r\n * * or pass through a nearby vertex or edge of the unit cube.\r\n * @param zVector existing z vector.\r\n * @param tolerance tolerance to determine if a z vector component is close to zero or 1.\r\n */\r\n private static snapVectorToCubeFeatures(zVector: XYAndZ, tolerance: number): Vector3d {\r\n const x = CubeNavigationAid.correctSmallNumber(zVector.x, tolerance);\r\n let y = CubeNavigationAid.correctSmallNumber(zVector.y, tolerance);\r\n let z = CubeNavigationAid.correctSmallNumber(zVector.z, tolerance);\r\n\r\n const xx = Math.abs(x);\r\n const yy = Math.abs(y);\r\n const zz = Math.abs(z);\r\n\r\n // adjust any adjacent pair of near equal values to the first.\r\n // istanbul ignore next\r\n if (Geometry.isSameCoordinate(xx, yy, tolerance)) {\r\n y = Geometry.split3WaySign(y, -xx, xx, xx);\r\n }\r\n if (Geometry.isSameCoordinate(yy, zz, tolerance)) {\r\n z = Geometry.split3WaySign(z, -yy, yy, yy);\r\n }\r\n if (Geometry.isSameCoordinate(xx, zz, tolerance)) {\r\n z = Geometry.split3WaySign(z, -xx, xx, xx);\r\n }\r\n return Vector3d.create(x, y, z);\r\n }\r\n\r\n /**\r\n * Adjust a worldToView matrix to favor both\r\n * * direct view at faces, edges, and corners of a view cube.\r\n * * heads up\r\n * @param worldToView candidate matrix\r\n * @param tolerance tolerance for cleaning up fuzz. The default (1.0e-6) is appropriate if very dirty viewing operations are expected.\r\n * @param result optional result.\r\n */\r\n private static snapWorldToViewMatrixToCubeFeatures(worldToView: Matrix3d, tolerance: number, result?: Matrix3d): Matrix3d {\r\n const oldZ = worldToView.rowZ();\r\n const newZ = CubeNavigationAid.snapVectorToCubeFeatures(oldZ, tolerance);\r\n // If newZ is true up or down, it will have true 0 for x and y.\r\n // special case this to take x direction from the input.\r\n // istanbul ignore next\r\n if (newZ.x === 0.0 && newZ.y === 0) {\r\n const perpVector = worldToView.rowX();\r\n result = Matrix3d.createRigidFromColumns(newZ, perpVector, AxisOrder.ZXY, result)!;\r\n } else {\r\n result = Matrix3d.createRigidViewAxesZTowardsEye(newZ.x, newZ.y, newZ.z, result);\r\n }\r\n // istanbul ignore else\r\n if (result)\r\n result.transposeInPlace();\r\n return result;\r\n }\r\n\r\n private getArrowRotationAndFace(arrow: Pointer): { newRotation: Matrix3d, face: Face } {\r\n const localRotationAxis = Vector3d.create(0, 0, 0);\r\n switch (arrow) {\r\n case Pointer.Up:\r\n localRotationAxis.x = -1.0;\r\n break;\r\n case Pointer.Down:\r\n localRotationAxis.x = 1.0;\r\n break;\r\n case Pointer.Left:\r\n localRotationAxis.y = -1.0;\r\n break;\r\n default:\r\n localRotationAxis.y = 1.0;\r\n break;\r\n }\r\n const localRotation = Matrix3d.createRotationAroundVector(localRotationAxis, Angle.createDegrees(-90))!;\r\n const newRotation = localRotation.multiplyMatrixMatrix(this.state.endRotMatrix);\r\n CubeNavigationAid.snapWorldToViewMatrixToCubeFeatures(newRotation, DEFAULT_TOLERANCE, newRotation);\r\n const face = CubeNavigationAid._getMatrixFace(newRotation);\r\n return { newRotation, face };\r\n }\r\n\r\n private _onArrowClick = (arrow: Pointer) => {\r\n if (this._isInteractionLocked()) {\r\n // istanbul ignore next\r\n this.props.onAnimationEnd?.();\r\n return;\r\n }\r\n const { newRotation, face } = this.getArrowRotationAndFace(arrow);\r\n this._animateRotation(newRotation, face);\r\n };\r\n\r\n private getArrowTitle(arrow: Pointer) {\r\n const { face } = this.getArrowRotationAndFace(arrow);\r\n return this._labels[face];\r\n }\r\n\r\n private _lastClientXY: Vector2d = Vector2d.createZero();\r\n private _processDrag(mousePos: Vector2d) {\r\n // istanbul ignore else\r\n if (!this._start.isAlmostEqual(mousePos)) {\r\n const movement = mousePos.minus(this._lastClientXY);\r\n const diff = movement.scale(0.05);\r\n\r\n const yaw = Angle.createRadians(diff.x);\r\n const pitch = Angle.createRadians(diff.y);\r\n\r\n const matX = Matrix3d.createRotationAroundAxisIndex(AxisIndex.X, pitch);\r\n const matZ = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, yaw);\r\n\r\n const mat = matX.multiplyMatrixMatrix(this.state.startRotMatrix).multiplyMatrixMatrix(matZ);\r\n this._setRotation(mat, CubeNavigationAid._getMatrixFace(mat));\r\n if (!this.state.dragging)\r\n this.setState({ dragging: true });\r\n }\r\n this._lastClientXY = mousePos;\r\n }\r\n\r\n private _handleBoxMouseDown = (event: any) => {\r\n if (this._isInteractionLocked()) {\r\n this.props.onAnimationEnd?.();\r\n return;\r\n }\r\n event.preventDefault();\r\n // only start listening after drag is confirmed. Ie. the 3D box is clicked.\r\n window.addEventListener(\"mousemove\", this._onMouseMove, false);\r\n window.addEventListener(\"mouseup\", this._onMouseUp, false);\r\n this._lastClientXY = Vector2d.create(event.clientX, event.clientY);\r\n this._start = this._lastClientXY;\r\n };\r\n\r\n private _onMouseMove = (event: MouseEvent) => {\r\n const mousePos = Vector2d.create(event.clientX, event.clientY);\r\n this._processDrag(mousePos);\r\n };\r\n\r\n private _onMouseUp = () => {\r\n if (this.state.dragging) {\r\n this.setState({ dragging: false });\r\n ViewportComponentEvents.setCubeMatrix(this.state.endRotMatrix, CubeNavigationAid._getMatrixFace(this.state.endRotMatrix), true);\r\n }\r\n\r\n // remove so event only triggers after this.onMouseStartDrag\r\n window.removeEventListener(\"mousemove\", this._onMouseMove);\r\n window.removeEventListener(\"mouseup\", this._onMouseUp);\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _handleBoxTouchStart = (event: any) => {\r\n if (this._isInteractionLocked()) {\r\n this.props.onAnimationEnd?.();\r\n return;\r\n }\r\n if (1 !== event.targetTouches.length)\r\n return;\r\n window.addEventListener(\"touchmove\", this._onTouchMove, false);\r\n window.addEventListener(\"touchend\", this._onTouchEnd, false);\r\n this._lastClientXY = Vector2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n this._start = this._lastClientXY;\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _onTouchMove = (event: TouchEvent) => {\r\n if (1 !== event.targetTouches.length)\r\n return;\r\n const mousePos = Vector2d.create(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n this._processDrag(mousePos);\r\n };\r\n\r\n // istanbul ignore next - unable to test touch\r\n private _onTouchEnd = (event: TouchEvent) => {\r\n if (0 !== event.targetTouches.length)\r\n return;\r\n\r\n if (this.state.dragging) {\r\n this.setState({ dragging: false });\r\n ViewportComponentEvents.setCubeMatrix(this.state.endRotMatrix, CubeNavigationAid._getMatrixFace(this.state.endRotMatrix), true);\r\n }\r\n\r\n window.removeEventListener(\"touchmove\", this._onTouchMove);\r\n window.removeEventListener(\"touchend\", this._onTouchEnd);\r\n };\r\n\r\n private _handleFaceCellClick = (pos: Vector3d, face: Face) => {\r\n if (this._isInteractionLocked()) {\r\n this.props.onAnimationEnd?.();\r\n return;\r\n }\r\n const { endRotMatrix } = this.state;\r\n let rotMatrix = Matrix3d.createRigidViewAxesZTowardsEye(pos.x, pos.y, pos.z).inverse();\r\n // istanbul ignore else\r\n if (rotMatrix) {\r\n // if isMatrixFace and user is clicking on top/bottom, the current matrix face must be top or bottom\r\n if (!CubeNavigationAid._isMatrixFace(endRotMatrix) && (face === Face.Top || face === Face.Bottom)) {\r\n const angleAxis = endRotMatrix.getAxisAndAngleOfRotation();\r\n // istanbul ignore else\r\n if (angleAxis.ok) {\r\n const xAx = endRotMatrix.columnX();\r\n const a = Math.atan2(xAx.y, xAx.x);\r\n const r = Math.round(a * 2 / Math.PI) * Math.PI / 2; // round to quarter turn intervals\r\n const rot = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, Angle.createRadians(r));\r\n rotMatrix = rot.multiplyMatrixMatrix(rotMatrix);\r\n }\r\n }\r\n this._animateRotation(rotMatrix, face);\r\n }\r\n window.removeEventListener(\"mousemove\", this._onMouseMove);\r\n };\r\n\r\n private _animateRotation = (endRotMatrix: Matrix3d, face: Face) => {\r\n if (this.state.endRotMatrix.isAlmostEqual(endRotMatrix))\r\n return;\r\n // set animation variables, let css transitions animate it.\r\n this._animationFrame = setTimeout(this._animation, 16.667);\r\n this.setState((prevState) => ({\r\n startRotMatrix: prevState.endRotMatrix, endRotMatrix,\r\n animation: 0,\r\n face,\r\n }));\r\n };\r\n\r\n private _setRotation = (endRotMatrix: Matrix3d, face: Face) => {\r\n ViewportComponentEvents.setCubeMatrix(endRotMatrix, face);\r\n // set variables, with animTime at 0 to prevent animation.\r\n this.setState({\r\n startRotMatrix: endRotMatrix,\r\n endRotMatrix,\r\n animation: 1,\r\n face,\r\n });\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface NavCubeFaceProps extends React.AllHTMLAttributes<HTMLDivElement> {\r\n face: Face;\r\n label: string;\r\n hoverMap: { [key: string]: CubeHover };\r\n onFaceCellClick: (vector: Vector3d, face: Face) => void;\r\n onFaceCellHoverChange: (vector: Vector3d, state: CubeHover) => void;\r\n}\r\n\r\n/** @internal */\r\nexport class NavCubeFace extends React.Component<NavCubeFaceProps> {\r\n private includeCell(vector: Vector3d): boolean {\r\n const { x, y, z } = vector;\r\n const omittedCell = (y === 0 && x !== 0 && z !== 0) || (y !== 0 && x === 0 && z !== 0) || (y !== 0 && x !== 0 && z === 0);\r\n return !omittedCell;\r\n }\r\n public override render(): React.ReactNode {\r\n const { face, hoverMap, onFaceCellClick, onFaceCellHoverChange, label } = this.props;\r\n return (\r\n <div className=\"nav-cube-face\" data-testid=\"nav-cube-face\">\r\n {[-1, 0, 1].map((y: number) => {\r\n return (\r\n <FaceRow key={y} center={y === 0}>\r\n {[-1, 0, 1].map((x: number) => {\r\n const vector = NavCubeFace.faceCellToPos(face, x, y);\r\n if (this.includeCell(vector)) {\r\n // return a fully functional cell\r\n return (\r\n <FaceCell\r\n key={x}\r\n onFaceCellHoverChange={onFaceCellHoverChange}\r\n onFaceCellClick={onFaceCellClick}\r\n hoverMap={hoverMap}\r\n vector={vector}\r\n face={face}\r\n center={x === 0}>\r\n {x === 0 && y === 0 &&\r\n label}\r\n </FaceCell>\r\n );\r\n } else {\r\n // return a placeholder cell\r\n return (\r\n <FaceCell\r\n key={x}\r\n vector={vector}\r\n face={face}\r\n center={x === 0}/>\r\n );\r\n }\r\n })}\r\n </FaceRow>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n public static faceCellToPos = (face: Face, x: number, y: number) => {\r\n const faceVect = cubeNavigationFaceLocs[face];\r\n const route = cubeNavigationRoutes[face];\r\n\r\n const faceX = x < 0 ? route.left : x > 0 ? route.right : Face.None;\r\n const xVect = faceX !== Face.None ? cubeNavigationFaceLocs[faceX] : Vector3d.createZero();\r\n\r\n const faceY = y < 0 ? route.up : y > 0 ? route.down : Face.None;\r\n const yVect = faceY !== Face.None ? cubeNavigationFaceLocs[faceY] : Vector3d.createZero();\r\n\r\n return faceVect.plus(xVect).plus(yVect);\r\n };\r\n}\r\n\r\ninterface FaceRowProps extends React.AllHTMLAttributes<HTMLDivElement> {\r\n center?: boolean;\r\n}\r\n\r\nclass FaceRow extends React.Component<FaceRowProps> {\r\n public override render(): React.ReactNode {\r\n const { center, children, ...props } = this.props;\r\n const classNames = classnames(\r\n \"face-row\",\r\n center && \"cube-center\",\r\n );\r\n return <div className={classNames} {...props}>{children}</div>;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface FaceCellProps extends React.AllHTMLAttributes<HTMLDivElement> {\r\n center?: boolean;\r\n onFaceCellClick?: (vector: Vector3d, face: Face) => void;\r\n onFaceCellHoverChange?: (vector: Vector3d, state: CubeHover) => void;\r\n hoverMap?: { [key: string]: CubeHover };\r\n vector: Vector3d;\r\n face: Face;\r\n}\r\n\r\n/** @internal */\r\nexport class FaceCell extends React.Component<FaceCellProps> {\r\n private _startMouse: Point2d | undefined;\r\n public override render(): React.ReactNode {\r\n const { center, children, onFaceCellClick, onFaceCellHoverChange, hoverMap, face, vector, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n const { x, y, z } = vector;\r\n const n = `${x}-${y}-${z}`;\r\n const hover = hoverMap && hoverMap[n] === CubeHover.Hover;\r\n const active = hoverMap && hoverMap[n] === CubeHover.Active;\r\n const classNames = classnames(\r\n \"face-cell\",\r\n center && \"cube-center\",\r\n hover && \"cube-hover\",\r\n active && \"cube-active\",\r\n );\r\n\r\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\r\n return <div\r\n onMouseDown={this._handleMouseDown}\r\n onMouseUp={this._handleMouseUp}\r\n onMouseOver={this._handleMouseOver}\r\n onMouseOut={this._handleMouseOut}\r\n onTouchStart={this._handleTouchStart}\r\n onTouchEnd={this._handleTouchEnd}\r\n data-testid={`nav-cube-face-cell-${face}-${n}`}\r\n className={classNames}\r\n role=\"presentation\"\r\n {...props}\r\n >\r\n {children}\r\n </div>;\r\n }\r\n private _handleMouseOver = () => {\r\n const { vector } = this.props;\r\n this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.Hover);\r\n };\r\n private _handleMouseOut = () => {\r\n const { vector } = this.props;\r\n this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.None);\r\n };\r\n private _handleMouseDown = (event: React.MouseEvent) => {\r\n const { clientX, clientY } = event;\r\n this.handlePointerDown(clientX, clientY);\r\n };\r\n private _handleMouseUp = (event: React.MouseEvent) => {\r\n const { clientX, clientY } = event;\r\n this.handlePointerUp(clientX, clientY);\r\n };\r\n\r\n private _handleTouchStart = (event: React.TouchEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n event.targetTouches.length === 1 && this.handlePointerDown(event.targetTouches[0].clientX, event.targetTouches[0].clientY);\r\n };\r\n\r\n private _handleTouchEnd = (event: React.TouchEvent<HTMLDivElement>) => {\r\n event.preventDefault();\r\n event.changedTouches.length === 1 && this.handlePointerUp(event.changedTouches[0].clientX, event.changedTouches[0].clientY);\r\n };\r\n\r\n private handlePointerDown(x: number, y: number) {\r\n const { vector } = this.props;\r\n this._startMouse = Point2d.create(x, y);\r\n this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.Active);\r\n }\r\n\r\n private handlePointerUp(x: number, y: number) {\r\n const { vector, face } = this.props;\r\n this.props.onFaceCellHoverChange && this.props.onFaceCellHoverChange(vector, CubeHover.None);\r\n const mouse = Point2d.create(x, y);\r\n if (this._startMouse && this._startMouse.isAlmostEqual(mouse)) {\r\n const isFace = Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z) === 1;\r\n this.props.onFaceCellClick && this.props.onFaceCellClick(vector, isFace ? face : Face.None);\r\n }\r\n }\r\n}\r\n\r\nenum Pointer {\r\n None = 0,\r\n Up,\r\n Down,\r\n Left,\r\n Right,\r\n}\r\n\r\nconst pointerIconSpec: { [key: number]: IconSpec } = {\r\n [Pointer.Up]: <SvgCaretDown />,\r\n [Pointer.Down]: <SvgCaretUp />,\r\n [Pointer.Left]: <SvgCaretRight />,\r\n [Pointer.Right]: <SvgCaretLeft />,\r\n};\r\n\r\nconst pointerClass: { [key: number]: string } = {\r\n [Pointer.Up]: \"cube-up\",\r\n [Pointer.Down]: \"cube-down\",\r\n [Pointer.Left]: \"cube-left\",\r\n [Pointer.Right]: \"cube-right\",\r\n};\r\n\r\ninterface PointerProps extends React.AllHTMLAttributes<HTMLDivElement> {\r\n visible: boolean;\r\n pointerType: Pointer;\r\n onArrowClick(pointer: Pointer): void;\r\n title: string;\r\n [\"data-testid\"]?: string;\r\n}\r\n\r\nclass PointerButton extends React.Component<PointerProps> {\r\n public override render(): React.ReactNode {\r\n const { visible, pointerType, onArrowClick, title, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n const classes = classnames(\r\n \"cube-pointer\", \"icon\",\r\n pointerClass[pointerType],\r\n visible && \"cube-visible\",\r\n );\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\r\n <div className={classes} role=\"button\" tabIndex={-1} title={title} {...props}\r\n onClick={this._handleClick}><Icon iconSpec={pointerIconSpec[pointerType]} /> </div>\r\n );\r\n }\r\n private _handleClick = (event: React.MouseEvent) => {\r\n const { pointerType } = this.props;\r\n event.preventDefault();\r\n this.props.onArrowClick(pointerType);\r\n };\r\n}\r\n"]}