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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts +28 -28
  2. package/lib/cjs/imodel-components-react/UiIModelComponents.js +79 -79
  3. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  4. package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  5. package/lib/cjs/imodel-components-react/color/AlphaSlider.js +186 -186
  6. package/lib/cjs/imodel-components-react/color/AlphaSlider.js.map +1 -1
  7. package/lib/cjs/imodel-components-react/color/AlphaSlider.scss +63 -63
  8. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  9. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  10. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +108 -107
  11. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  12. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +90 -90
  13. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  14. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +74 -74
  15. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  16. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  17. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +145 -145
  18. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  19. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  20. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  21. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
  22. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +139 -137
  23. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  24. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +62 -63
  25. package/lib/cjs/imodel-components-react/color/HueSlider.d.ts +22 -22
  26. package/lib/cjs/imodel-components-react/color/HueSlider.js +199 -199
  27. package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
  28. package/lib/cjs/imodel-components-react/color/HueSlider.scss +61 -61
  29. package/lib/cjs/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  30. package/lib/cjs/imodel-components-react/color/SaturationPicker.js +213 -213
  31. package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
  32. package/lib/cjs/imodel-components-react/color/SaturationPicker.scss +35 -35
  33. package/lib/cjs/imodel-components-react/color/Swatch.d.ts +22 -22
  34. package/lib/cjs/imodel-components-react/color/Swatch.js +60 -60
  35. package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
  36. package/lib/cjs/imodel-components-react/color/Swatch.scss +22 -23
  37. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  38. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js +23 -23
  39. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  40. package/lib/cjs/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  41. package/lib/cjs/imodel-components-react/editors/ColorEditor.js +151 -151
  42. package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
  43. package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +18 -18
  44. package/lib/cjs/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  45. package/lib/cjs/imodel-components-react/editors/WeightEditor.js +160 -160
  46. package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
  47. package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +16 -16
  48. package/lib/cjs/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  49. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js +96 -96
  50. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  51. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  52. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  53. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +268 -265
  54. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  55. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +106 -107
  56. package/lib/cjs/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  57. package/lib/cjs/imodel-components-react/lineweight/Swatch.js +85 -85
  58. package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
  59. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +48 -48
  60. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  61. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +159 -159
  62. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  63. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +52 -52
  64. package/lib/cjs/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  65. package/lib/cjs/imodel-components-react/navigationaids/Cube.js +127 -127
  66. package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
  67. package/lib/cjs/imodel-components-react/navigationaids/Cube.scss +19 -19
  68. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +174 -174
  69. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  70. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +638 -634
  71. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  72. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +178 -182
  73. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  74. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  75. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +653 -647
  76. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  77. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +135 -134
  78. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  79. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +99 -99
  80. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  81. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +63 -63
  82. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  83. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +53 -53
  84. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  85. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  86. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
  87. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +84 -83
  88. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  89. package/lib/cjs/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  90. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +86 -86
  91. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  92. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  93. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +109 -109
  94. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  95. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  96. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +133 -133
  97. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  98. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  99. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +184 -184
  100. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  101. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  102. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +145 -145
  103. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  104. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  105. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +59 -59
  106. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  107. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  108. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +47 -47
  109. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  110. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  111. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +54 -54
  112. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  113. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  114. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +48 -48
  115. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  116. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  117. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +50 -50
  118. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  119. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  120. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +58 -58
  121. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  122. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  123. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +47 -47
  124. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  125. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  126. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +56 -56
  127. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  128. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  129. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +95 -95
  130. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  131. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  132. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +119 -119
  133. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  134. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  135. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +143 -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 +81 -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 +95 -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 +191 -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 +428 -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 +54 -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 +133 -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 +365 -358
  166. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  167. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +161 -164
  168. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +174 -174
  169. package/lib/cjs/imodel-components-react/timeline/interfaces.js +45 -45
  170. package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
  171. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  172. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +274 -274
  173. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  174. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  175. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +105 -105
  176. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  177. package/lib/cjs/imodel-components-react.d.ts +82 -82
  178. package/lib/cjs/imodel-components-react.js +101 -101
  179. package/lib/cjs/imodel-components-react.js.map +1 -1
  180. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +28 -28
  181. package/lib/esm/imodel-components-react/UiIModelComponents.js +75 -75
  182. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  183. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  184. package/lib/esm/imodel-components-react/color/AlphaSlider.js +160 -160
  185. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  186. package/lib/esm/imodel-components-react/color/AlphaSlider.scss +63 -63
  187. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  188. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
  189. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +83 -82
  190. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  191. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +90 -90
  192. package/lib/esm/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  193. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js +51 -51
  194. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  195. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  196. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +122 -122
  197. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  198. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  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 +133 -133
  241. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  242. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +52 -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 +174 -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 +610 -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 +626 -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 +63 -63
  261. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  262. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +30 -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 +63 -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 +83 -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 +110 -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 +158 -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 +69 -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.js +139 -139
  315. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  316. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  317. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js +65 -65
  318. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  319. package/lib/esm/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  320. package/lib/esm/imodel-components-react/timeline/InlineEdit.js +55 -55
  321. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  322. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +26 -26
  323. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  324. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
  325. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +68 -64
  326. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  327. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +28 -31
  328. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  329. package/lib/esm/imodel-components-react/timeline/Scrubber.js +164 -164
  330. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  331. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +105 -112
  332. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  333. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  334. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +402 -398
  335. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  336. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +359 -356
  337. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  338. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js +28 -28
  339. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  340. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  341. package/lib/esm/imodel-components-react/timeline/Timeline.scss +164 -164
  342. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  343. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  344. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +339 -332
  345. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  346. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +161 -164
  347. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +174 -174
  348. package/lib/esm/imodel-components-react/timeline/interfaces.js +42 -42
  349. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  350. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  351. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +251 -251
  352. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  353. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  354. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +95 -95
  355. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  356. package/lib/esm/imodel-components-react.d.ts +82 -82
  357. package/lib/esm/imodel-components-react.js +87 -87
  358. package/lib/esm/imodel-components-react.js.map +1 -1
  359. package/lib/public/locales/en/UiIModelComponents.json +139 -139
  360. package/package.json +13 -13
@@ -1,333 +1,340 @@
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 Timeline
7
- */
8
- import "./TimelineComponent.scss";
9
- import classnames from "classnames";
10
- import * as React from "react";
11
- import { UiAdmin } from "@itwin/appui-abstract";
12
- import { toDateString, toTimeString, UiComponents } from "@itwin/components-react";
13
- import { UiIModelComponents } from "../UiIModelComponents";
14
- import { InlineEdit } from "./InlineEdit";
15
- import { TimelinePausePlayAction } from "./interfaces";
16
- import { PlayButton, PlayerButton } from "./PlayerButton";
17
- import { Scrubber } from "./Scrubber";
18
- import { DropdownMenu, MenuDivider, MenuItem } from "@itwin/itwinui-react";
19
- // cspell:ignore millisec
20
- const slowSpeed = 60 * 1000;
21
- const mediumSpeed = 20 * 1000;
22
- const fastSpeed = 10 * 1000;
23
- /**
24
- * [[TimelineComponent]] is used to playback timeline data
25
- * @public
26
- */
27
- export class TimelineComponent extends React.Component {
28
- constructor(props) {
29
- super(props);
30
- this._timeLastCycle = 0;
31
- this._requestFrame = 0;
32
- this._unmounted = false;
33
- this._standardTimelineMenuItems = [
34
- { label: UiIModelComponents.translate("timeline.slow"), timelineDuration: slowSpeed },
35
- { label: UiIModelComponents.translate("timeline.medium"), timelineDuration: mediumSpeed },
36
- { label: UiIModelComponents.translate("timeline.fast"), timelineDuration: fastSpeed },
37
- ];
38
- this._handleTimelinePausePlayEvent = (args) => {
39
- const timelineArgs = args;
40
- // istanbul ignore else
41
- if (!timelineArgs || this.props.componentId !== timelineArgs.uiComponentId || timelineArgs.timelineAction === undefined)
42
- return;
43
- let startPlaying;
44
- switch (timelineArgs.timelineAction) {
45
- case TimelinePausePlayAction.Play:
46
- startPlaying = true;
47
- break;
48
- case TimelinePausePlayAction.Pause:
49
- startPlaying = false;
50
- break;
51
- case TimelinePausePlayAction.Toggle:
52
- startPlaying = !this.state.isPlaying;
53
- break;
54
- // istanbul ignore next
55
- default:
56
- return; // throw error?
57
- }
58
- if (startPlaying)
59
- this._onPlay();
60
- else
61
- this._onPause();
62
- };
63
- // user clicked backward button
64
- this._onBackward = () => {
65
- // istanbul ignore else
66
- if (this.props.onJump)
67
- this.props.onJump(false);
68
- };
69
- // user clicked forward button
70
- this._onForward = () => {
71
- // istanbul ignore else
72
- if (this.props.onJump)
73
- this.props.onJump(true);
74
- };
75
- // user clicked play button
76
- this._onPlay = () => {
77
- // istanbul ignore if
78
- if (this.state.isPlaying)
79
- return;
80
- // timeline was complete, restart from the beginning
81
- if (this.state.currentDuration >= this.state.totalDuration) {
82
- this._replay();
83
- }
84
- else
85
- this._play();
86
- // istanbul ignore else
87
- if (this.props.onPlayPause)
88
- this.props.onPlayPause(true);
89
- };
90
- // user clicked pause button
91
- this._onPause = () => {
92
- // istanbul ignore if
93
- if (!this.state.isPlaying)
94
- return;
95
- // stop requesting frames
96
- window.cancelAnimationFrame(this._requestFrame);
97
- // stop playing
98
- this.setState({ isPlaying: false });
99
- // istanbul ignore else
100
- if (this.props.onPlayPause)
101
- this.props.onPlayPause(false);
102
- };
103
- // user clicked on timeline rail or dragged scrubber handle
104
- this._onTimelineChange = (values) => {
105
- const currentDuration = values[0];
106
- this._setDuration(currentDuration);
107
- };
108
- // set the current duration, which will call the OnChange callback
109
- this._setDuration = (currentDuration) => {
110
- const actualDuration = Math.min(this.state.totalDuration, (Math.max(currentDuration, 0)));
111
- this._timeLastCycle = new Date().getTime();
112
- // istanbul ignore else
113
- if (!this._unmounted)
114
- this.setState({ currentDuration: actualDuration });
115
- // istanbul ignore else
116
- if (this.props.onChange) {
117
- const fraction = actualDuration / this.state.totalDuration;
118
- this.props.onChange(fraction);
119
- }
120
- };
121
- // recursively update the animation until we hit the end or the pause button is clicked
122
- this._updateAnimation = (_timestamp) => {
123
- // istanbul ignore else
124
- if (!this.state.isPlaying && !this._unmounted) {
125
- return;
126
- }
127
- // update duration
128
- const currentTime = new Date().getTime();
129
- const millisecondsElapsed = currentTime - this._timeLastCycle;
130
- const duration = this.state.currentDuration + millisecondsElapsed;
131
- this._setDuration(duration);
132
- // stop the animation!
133
- if (duration >= this.state.totalDuration) {
134
- window.cancelAnimationFrame(this._requestFrame);
135
- this.setState({ isPlaying: false });
136
- if (this.state.repeat)
137
- this._replay();
138
- else {
139
- // istanbul ignore else
140
- if (this.props.onPlayPause)
141
- this.props.onPlayPause(false);
142
- }
143
- return;
144
- }
145
- // continue the animation - request the next frame
146
- this._requestFrame = window.requestAnimationFrame(this._updateAnimation);
147
- };
148
- this._replay = () => {
149
- // timeline was complete, restart from the beginning
150
- this.setState({ currentDuration: 0 }, (() => this._play()));
151
- };
152
- // user changed the total duration
153
- this._onTotalDurationChange = (value) => {
154
- // NOTE: we should reset the current duration to 0
155
- const milliseconds = this._getMilliseconds(value);
156
- this._onSetTotalDuration(milliseconds);
157
- };
158
- this._changeRepeatSetting = (newValue) => {
159
- // istanbul ignore else
160
- if (newValue !== undefined) {
161
- this.setState(() => ({ repeat: newValue }), () => {
162
- // istanbul ignore else
163
- if (this.props.onSettingsChange) {
164
- this.props.onSettingsChange({ loop: this.state.repeat });
165
- }
166
- });
167
- }
168
- };
169
- this._onRepeatChanged = () => {
170
- this.setState((prevState) => ({ repeat: !prevState.repeat }), () => {
171
- // istanbul ignore else
172
- if (this.props.onSettingsChange) {
173
- this.props.onSettingsChange({ loop: this.state.repeat });
174
- }
175
- });
176
- };
177
- this._currentDate = () => {
178
- const fraction = this.state.currentDuration / this.state.totalDuration;
179
- if (this.props.endDate && this.props.startDate) {
180
- const timeElapsed = (this.props.endDate.getTime() - this.props.startDate.getTime()) * fraction;
181
- return new Date(this.props.startDate.getTime() + timeElapsed);
182
- }
183
- return new Date();
184
- };
185
- this._onSetTotalDuration = (milliseconds) => {
186
- this.setState({ totalDuration: milliseconds }, () => {
187
- // istanbul ignore else
188
- if (this.props.onSettingsChange) {
189
- this.props.onSettingsChange({ duration: milliseconds });
190
- }
191
- });
192
- };
193
- this._renderSettings = () => {
194
- const createMenuItemNodes = (close) => {
195
- const { totalDuration } = this.state;
196
- let contextMenuItems = [];
197
- if (!this.props.appMenuItems) {
198
- contextMenuItems = this._standardTimelineMenuItems;
199
- }
200
- else {
201
- if (this.props.appMenuItemOption === "append") {
202
- contextMenuItems = this._standardTimelineMenuItems.concat(this.props.appMenuItems);
203
- }
204
- else if (this.props.appMenuItemOption === "prefix") {
205
- contextMenuItems = this.props.appMenuItems.concat(this._standardTimelineMenuItems);
206
- }
207
- else {
208
- contextMenuItems = this.props.appMenuItems;
209
- }
210
- }
211
- const itemNodes = [];
212
- let keyIndex = 0;
213
- if (this.state.includeRepeat) {
214
- const checked = this.state.repeat;
215
- const icon = checked ? React.createElement("span", { className: "icon icon-checkmark" }) : React.createElement("span", null);
216
- itemNodes.push(React.createElement(MenuItem, { key: ++keyIndex, onClick: () => { this._onRepeatChanged(); close(); }, icon: icon }, this._repeatLabel));
217
- itemNodes.push(React.createElement(MenuDivider, { key: ++keyIndex }));
218
- }
219
- contextMenuItems.forEach((item, index) => {
220
- itemNodes.push(this._createMenuItemNode(item, index + keyIndex + 1, totalDuration, close));
221
- });
222
- return itemNodes;
223
- };
224
- return (React.createElement(DropdownMenu, { menuItems: createMenuItemNodes },
225
- React.createElement("span", { "data-testid": "timeline-settings", className: "timeline-settings icon icon-more-vertical-2", role: "button", tabIndex: -1, title: UiComponents.translate("button.label.settings") })));
226
- };
227
- this.state = {
228
- isPlaying: false,
229
- minimized: true,
230
- currentDuration: props.initialDuration ? props.initialDuration : /* istanbul ignore next */ 0,
231
- totalDuration: this.props.totalDuration,
232
- repeat: this.props.repeat ? true : false,
233
- includeRepeat: this.props.includeRepeat || this.props.includeRepeat === undefined ? true : false,
234
- };
235
- this._repeatLabel = UiIModelComponents.translate("timeline.repeat");
236
- // istanbul ignore else
237
- if (this.props.componentId) { // can't handle an event if we have no id
238
- this._removeListener = UiAdmin.onGenericUiEvent.addListener(this._handleTimelinePausePlayEvent);
239
- }
240
- }
241
- componentWillUnmount() {
242
- if (this._removeListener)
243
- this._removeListener();
244
- window.cancelAnimationFrame(this._requestFrame);
245
- this._unmounted = true;
246
- }
247
- shouldComponentUpdate(nextProps, nextState) {
248
- let result = false;
249
- // istanbul ignore next
250
- if (nextState !== this.state || nextProps !== this.props ||
251
- nextProps.startDate !== this.props.startDate ||
252
- nextProps.endDate !== this.props.endDate ||
253
- nextProps.initialDuration !== this.props.initialDuration ||
254
- nextProps.repeat !== this.props.repeat)
255
- result = true;
256
- return result;
257
- }
258
- componentDidUpdate(prevProps) {
259
- // istanbul ignore else
260
- if (this.props.initialDuration !== prevProps.initialDuration) {
261
- this._setDuration(this.props.initialDuration ? this.props.initialDuration : /* istanbul ignore next */ 0);
262
- }
263
- // istanbul ignore else
264
- if (this.props.repeat !== prevProps.repeat) {
265
- this._changeRepeatSetting(this.props.repeat);
266
- }
267
- // istanbul ignore else
268
- if (this.props.totalDuration !== prevProps.totalDuration) {
269
- this._onSetTotalDuration(this.props.totalDuration);
270
- }
271
- }
272
- _play() {
273
- // start playing
274
- this.setState({ isPlaying: true }, () => {
275
- // request the next frame
276
- this._timeLastCycle = new Date().getTime();
277
- this._requestFrame = window.requestAnimationFrame(this._updateAnimation);
278
- });
279
- }
280
- _displayTime(millisec) {
281
- const addZero = (i) => {
282
- return (i < 10) ? `0${i}` : i;
283
- };
284
- const date = new Date(millisec);
285
- // const hours = date.getUTCHours();
286
- const minutes = date.getUTCMinutes();
287
- const seconds = date.getUTCSeconds();
288
- return `${addZero(minutes)}:${addZero(seconds)}`;
289
- }
290
- _getMilliseconds(time) {
291
- // istanbul ignore else - WIP
292
- if (time.indexOf(":") !== -1) {
293
- return (Number(time.split(":")[0]) * 60 + Number(time.split(":")[1])) * 1000;
294
- }
295
- else {
296
- return Number(time) * 1000;
297
- }
298
- }
299
- _createMenuItemNode(item, index, currentTimelineDuration, close) {
300
- const label = item.label;
301
- const checked = currentTimelineDuration === item.timelineDuration;
302
- const icon = checked ? React.createElement("span", { className: "icon icon-checkmark" }) : React.createElement("span", null);
303
- return (React.createElement(MenuItem, { key: index, icon: icon, onClick: () => { this._onSetTotalDuration(item.timelineDuration); close(); } }, label));
304
- }
305
- render() {
306
- const { startDate, endDate, showDuration, timeZoneOffset, dateFormatOptions, timeFormatOptions } = this.props;
307
- const { currentDuration, totalDuration, minimized } = this.state;
308
- const currentDate = this._currentDate();
309
- const durationString = this._displayTime(currentDuration);
310
- const totalDurationString = this._displayTime(totalDuration);
311
- const hasDates = !!startDate && !!endDate;
312
- return (React.createElement("div", { "data-testid": "timeline-component", className: classnames("timeline-component", !!minimized && "minimized", hasDates && "has-dates") },
313
- React.createElement("div", { className: "header" },
314
- React.createElement(PlayButton, { className: "play-button", isPlaying: this.state.isPlaying, onPlay: this._onPlay, onPause: this._onPause, "data-testid": "timeline-play" }),
315
- React.createElement(PlayerButton, { className: "play-backward", icon: "icon-caret-left", onClick: this._onBackward, title: UiIModelComponents.translate("timeline.backward") }),
316
- React.createElement(PlayerButton, { className: "play-button-step", icon: "icon-media-controls-circular-play", isPlaying: this.state.isPlaying, onPlay: this._onPlay, onPause: this._onPause, title: UiIModelComponents.translate("timeline.step") }),
317
- React.createElement(PlayerButton, { className: "play-forward", icon: "icon-caret-right", onClick: this._onForward, title: UiIModelComponents.translate("timeline.backward") }),
318
- React.createElement("span", { className: "current-date" }, toDateString(currentDate, timeZoneOffset, dateFormatOptions))),
319
- React.createElement("div", { className: "scrubber" },
320
- React.createElement(PlayButton, { className: "play-button", isPlaying: this.state.isPlaying, onPlay: this._onPlay, onPause: this._onPause }),
321
- React.createElement("div", { className: "start-time-container" },
322
- hasDates && React.createElement("span", { "data-testid": "test-start-date", className: "start-date" }, toDateString(startDate, timeZoneOffset, dateFormatOptions)),
323
- hasDates && !showDuration && React.createElement("span", { "data-testid": "test-start-time", className: "start-time" }, toTimeString(startDate, timeZoneOffset, timeFormatOptions)),
324
- showDuration && React.createElement("span", { className: "duration-start-time" }, durationString)),
325
- React.createElement(Scrubber, { className: "slider", currentDuration: this.state.currentDuration, totalDuration: totalDuration, startDate: startDate, endDate: endDate, isPlaying: this.state.isPlaying, inMiniMode: !!minimized, showTime: !showDuration, onChange: this._onTimelineChange, onUpdate: this._onTimelineChange, timeZoneOffset: this.props.timeZoneOffset, markDate: this.props.markDate }),
326
- React.createElement("div", { className: "end-time-container" },
327
- hasDates && React.createElement("span", { className: "end-date" }, toDateString(endDate, timeZoneOffset)),
328
- hasDates && !showDuration && React.createElement("span", { className: "end-time" }, toTimeString(endDate, timeZoneOffset, timeFormatOptions)),
329
- showDuration && React.createElement(InlineEdit, { className: "duration-end-time", defaultValue: totalDurationString, onChange: this._onTotalDurationChange })),
330
- minimized && this._renderSettings())));
331
- }
332
- }
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 Timeline
7
+ */
8
+ import "./TimelineComponent.scss";
9
+ import classnames from "classnames";
10
+ import * as React from "react";
11
+ import { UiAdmin } from "@itwin/appui-abstract";
12
+ import { toDateString, toTimeString, UiComponents } from "@itwin/components-react";
13
+ import { UiIModelComponents } from "../UiIModelComponents";
14
+ import { InlineEdit } from "./InlineEdit";
15
+ import { TimelinePausePlayAction } from "./interfaces";
16
+ import { PlayButton, PlayerButton } from "./PlayerButton";
17
+ import { Scrubber } from "./Scrubber";
18
+ import { DropdownMenu, MenuDivider, MenuItem } from "@itwin/itwinui-react";
19
+ import { Icon } from "@itwin/core-react";
20
+ import { SvgCaretLeft, SvgCaretRight, SvgCheckmark, SvgMoreVertical, SvgPlayCircular } from "@itwin/itwinui-icons-react";
21
+ // cspell:ignore millisec
22
+ const slowSpeed = 60 * 1000;
23
+ const mediumSpeed = 20 * 1000;
24
+ const fastSpeed = 10 * 1000;
25
+ /**
26
+ * [[TimelineComponent]] is used to playback timeline data
27
+ * @public
28
+ */
29
+ export class TimelineComponent extends React.Component {
30
+ constructor(props) {
31
+ super(props);
32
+ this._timeLastCycle = 0;
33
+ this._requestFrame = 0;
34
+ this._unmounted = false;
35
+ this._standardTimelineMenuItems = [
36
+ { label: UiIModelComponents.translate("timeline.slow"), timelineDuration: slowSpeed },
37
+ { label: UiIModelComponents.translate("timeline.medium"), timelineDuration: mediumSpeed },
38
+ { label: UiIModelComponents.translate("timeline.fast"), timelineDuration: fastSpeed },
39
+ ];
40
+ this._handleTimelinePausePlayEvent = (args) => {
41
+ const timelineArgs = args;
42
+ // istanbul ignore else
43
+ if (!timelineArgs || this.props.componentId !== timelineArgs.uiComponentId || timelineArgs.timelineAction === undefined)
44
+ return;
45
+ let startPlaying;
46
+ switch (timelineArgs.timelineAction) {
47
+ case TimelinePausePlayAction.Play:
48
+ startPlaying = true;
49
+ break;
50
+ case TimelinePausePlayAction.Pause:
51
+ startPlaying = false;
52
+ break;
53
+ case TimelinePausePlayAction.Toggle:
54
+ startPlaying = !this.state.isPlaying;
55
+ break;
56
+ // istanbul ignore next
57
+ default:
58
+ return; // throw error?
59
+ }
60
+ if (startPlaying)
61
+ this._onPlay();
62
+ else
63
+ this._onPause();
64
+ };
65
+ // user clicked backward button
66
+ this._onBackward = () => {
67
+ // istanbul ignore else
68
+ if (this.props.onJump)
69
+ this.props.onJump(false);
70
+ };
71
+ // user clicked forward button
72
+ this._onForward = () => {
73
+ // istanbul ignore else
74
+ if (this.props.onJump)
75
+ this.props.onJump(true);
76
+ };
77
+ // user clicked play button
78
+ this._onPlay = () => {
79
+ // istanbul ignore if
80
+ if (this.state.isPlaying)
81
+ return;
82
+ // timeline was complete, restart from the beginning
83
+ if (this.state.currentDuration >= this.state.totalDuration) {
84
+ this._replay();
85
+ }
86
+ else
87
+ this._play();
88
+ // istanbul ignore else
89
+ if (this.props.onPlayPause)
90
+ this.props.onPlayPause(true);
91
+ };
92
+ // user clicked pause button
93
+ this._onPause = () => {
94
+ // istanbul ignore if
95
+ if (!this.state.isPlaying)
96
+ return;
97
+ // stop requesting frames
98
+ window.cancelAnimationFrame(this._requestFrame);
99
+ // stop playing
100
+ this.setState({ isPlaying: false });
101
+ // istanbul ignore else
102
+ if (this.props.onPlayPause)
103
+ this.props.onPlayPause(false);
104
+ };
105
+ // user clicked on timeline rail or dragged scrubber handle
106
+ this._onTimelineChange = (values) => {
107
+ const currentDuration = values[0];
108
+ this._setDuration(currentDuration);
109
+ };
110
+ // set the current duration, which will call the OnChange callback
111
+ this._setDuration = (currentDuration) => {
112
+ const actualDuration = Math.min(this.state.totalDuration, (Math.max(currentDuration, 0)));
113
+ this._timeLastCycle = new Date().getTime();
114
+ // istanbul ignore else
115
+ if (!this._unmounted)
116
+ this.setState({ currentDuration: actualDuration });
117
+ // istanbul ignore else
118
+ if (this.props.onChange) {
119
+ const fraction = actualDuration / this.state.totalDuration;
120
+ this.props.onChange(fraction);
121
+ }
122
+ };
123
+ // recursively update the animation until we hit the end or the pause button is clicked
124
+ this._updateAnimation = (_timestamp) => {
125
+ // istanbul ignore else
126
+ if (!this.state.isPlaying && !this._unmounted) {
127
+ return;
128
+ }
129
+ // update duration
130
+ const currentTime = new Date().getTime();
131
+ const millisecondsElapsed = currentTime - this._timeLastCycle;
132
+ const duration = this.state.currentDuration + millisecondsElapsed;
133
+ this._setDuration(duration);
134
+ // stop the animation!
135
+ if (duration >= this.state.totalDuration) {
136
+ window.cancelAnimationFrame(this._requestFrame);
137
+ this.setState({ isPlaying: false });
138
+ if (this.state.repeat)
139
+ this._replay();
140
+ else {
141
+ // istanbul ignore else
142
+ if (this.props.onPlayPause)
143
+ this.props.onPlayPause(false);
144
+ }
145
+ return;
146
+ }
147
+ // continue the animation - request the next frame
148
+ this._requestFrame = window.requestAnimationFrame(this._updateAnimation);
149
+ };
150
+ this._replay = () => {
151
+ // timeline was complete, restart from the beginning
152
+ this.setState({ currentDuration: 0 }, (() => this._play()));
153
+ };
154
+ // user changed the total duration
155
+ this._onTotalDurationChange = (value) => {
156
+ // NOTE: we should reset the current duration to 0
157
+ const milliseconds = this._getMilliseconds(value);
158
+ this._onSetTotalDuration(milliseconds);
159
+ };
160
+ this._changeRepeatSetting = (newValue) => {
161
+ // istanbul ignore else
162
+ if (newValue !== undefined) {
163
+ this.setState(() => ({ repeat: newValue }), () => {
164
+ // istanbul ignore else
165
+ if (this.props.onSettingsChange) {
166
+ this.props.onSettingsChange({ loop: this.state.repeat });
167
+ }
168
+ });
169
+ }
170
+ };
171
+ this._onRepeatChanged = () => {
172
+ this.setState((prevState) => ({ repeat: !prevState.repeat }), () => {
173
+ // istanbul ignore else
174
+ if (this.props.onSettingsChange) {
175
+ this.props.onSettingsChange({ loop: this.state.repeat });
176
+ }
177
+ });
178
+ };
179
+ this._currentDate = () => {
180
+ const fraction = this.state.currentDuration / this.state.totalDuration;
181
+ if (this.props.endDate && this.props.startDate) {
182
+ const timeElapsed = (this.props.endDate.getTime() - this.props.startDate.getTime()) * fraction;
183
+ return new Date(this.props.startDate.getTime() + timeElapsed);
184
+ }
185
+ return new Date();
186
+ };
187
+ this._onSetTotalDuration = (milliseconds) => {
188
+ this.setState({ totalDuration: milliseconds }, () => {
189
+ // istanbul ignore else
190
+ if (this.props.onSettingsChange) {
191
+ this.props.onSettingsChange({ duration: milliseconds });
192
+ }
193
+ });
194
+ };
195
+ this._renderSettings = () => {
196
+ const createMenuItemNodes = (close) => {
197
+ const { totalDuration } = this.state;
198
+ let contextMenuItems = [];
199
+ if (!this.props.appMenuItems) {
200
+ contextMenuItems = this._standardTimelineMenuItems;
201
+ }
202
+ else {
203
+ if (this.props.appMenuItemOption === "append") {
204
+ contextMenuItems = this._standardTimelineMenuItems.concat(this.props.appMenuItems);
205
+ }
206
+ else if (this.props.appMenuItemOption === "prefix") {
207
+ contextMenuItems = this.props.appMenuItems.concat(this._standardTimelineMenuItems);
208
+ }
209
+ else {
210
+ contextMenuItems = this.props.appMenuItems;
211
+ }
212
+ }
213
+ const itemNodes = [];
214
+ let keyIndex = 0;
215
+ if (this.state.includeRepeat) {
216
+ const checked = this.state.repeat;
217
+ const icon = checked ? React.createElement("span", { className: "icon" },
218
+ React.createElement(Icon, { iconSpec: React.createElement(SvgCheckmark, null) }),
219
+ " ") : React.createElement("span", null);
220
+ itemNodes.push(React.createElement(MenuItem, { key: ++keyIndex, onClick: () => { this._onRepeatChanged(); close(); }, icon: icon }, this._repeatLabel));
221
+ itemNodes.push(React.createElement(MenuDivider, { key: ++keyIndex }));
222
+ }
223
+ contextMenuItems.forEach((item, index) => {
224
+ itemNodes.push(this._createMenuItemNode(item, index + keyIndex + 1, totalDuration, close));
225
+ });
226
+ return itemNodes;
227
+ };
228
+ return (React.createElement(DropdownMenu, { menuItems: createMenuItemNodes },
229
+ React.createElement("span", { "data-testid": "timeline-settings", className: "timeline-settings icon", role: "button", tabIndex: -1, title: UiComponents.translate("button.label.settings") },
230
+ React.createElement(Icon, { iconSpec: React.createElement(SvgMoreVertical, null) }))));
231
+ };
232
+ this.state = {
233
+ isPlaying: false,
234
+ minimized: true,
235
+ currentDuration: props.initialDuration ? props.initialDuration : /* istanbul ignore next */ 0,
236
+ totalDuration: this.props.totalDuration,
237
+ repeat: this.props.repeat ? true : false,
238
+ includeRepeat: this.props.includeRepeat || this.props.includeRepeat === undefined ? true : false,
239
+ };
240
+ this._repeatLabel = UiIModelComponents.translate("timeline.repeat");
241
+ // istanbul ignore else
242
+ if (this.props.componentId) { // can't handle an event if we have no id
243
+ this._removeListener = UiAdmin.onGenericUiEvent.addListener(this._handleTimelinePausePlayEvent);
244
+ }
245
+ }
246
+ componentWillUnmount() {
247
+ if (this._removeListener)
248
+ this._removeListener();
249
+ window.cancelAnimationFrame(this._requestFrame);
250
+ this._unmounted = true;
251
+ }
252
+ shouldComponentUpdate(nextProps, nextState) {
253
+ let result = false;
254
+ // istanbul ignore next
255
+ if (nextState !== this.state || nextProps !== this.props ||
256
+ nextProps.startDate !== this.props.startDate ||
257
+ nextProps.endDate !== this.props.endDate ||
258
+ nextProps.initialDuration !== this.props.initialDuration ||
259
+ nextProps.repeat !== this.props.repeat)
260
+ result = true;
261
+ return result;
262
+ }
263
+ componentDidUpdate(prevProps) {
264
+ // istanbul ignore else
265
+ if (this.props.initialDuration !== prevProps.initialDuration) {
266
+ this._setDuration(this.props.initialDuration ? this.props.initialDuration : /* istanbul ignore next */ 0);
267
+ }
268
+ // istanbul ignore else
269
+ if (this.props.repeat !== prevProps.repeat) {
270
+ this._changeRepeatSetting(this.props.repeat);
271
+ }
272
+ // istanbul ignore else
273
+ if (this.props.totalDuration !== prevProps.totalDuration) {
274
+ this._onSetTotalDuration(this.props.totalDuration);
275
+ }
276
+ }
277
+ _play() {
278
+ // start playing
279
+ this.setState({ isPlaying: true }, () => {
280
+ // request the next frame
281
+ this._timeLastCycle = new Date().getTime();
282
+ this._requestFrame = window.requestAnimationFrame(this._updateAnimation);
283
+ });
284
+ }
285
+ _displayTime(millisec) {
286
+ const addZero = (i) => {
287
+ return (i < 10) ? `0${i}` : i;
288
+ };
289
+ const date = new Date(millisec);
290
+ // const hours = date.getUTCHours();
291
+ const minutes = date.getUTCMinutes();
292
+ const seconds = date.getUTCSeconds();
293
+ return `${addZero(minutes)}:${addZero(seconds)}`;
294
+ }
295
+ _getMilliseconds(time) {
296
+ // istanbul ignore else - WIP
297
+ if (time.indexOf(":") !== -1) {
298
+ return (Number(time.split(":")[0]) * 60 + Number(time.split(":")[1])) * 1000;
299
+ }
300
+ else {
301
+ return Number(time) * 1000;
302
+ }
303
+ }
304
+ _createMenuItemNode(item, index, currentTimelineDuration, close) {
305
+ const label = item.label;
306
+ const checked = currentTimelineDuration === item.timelineDuration;
307
+ const icon = checked ? React.createElement("span", { className: "icon" },
308
+ React.createElement(Icon, { iconSpec: React.createElement(SvgCheckmark, null) }),
309
+ " ") : React.createElement("span", null);
310
+ return (React.createElement(MenuItem, { key: index, icon: icon, onClick: () => { this._onSetTotalDuration(item.timelineDuration); close(); } }, label));
311
+ }
312
+ render() {
313
+ const { startDate, endDate, showDuration, timeZoneOffset, dateFormatOptions, timeFormatOptions } = this.props;
314
+ const { currentDuration, totalDuration, minimized } = this.state;
315
+ const currentDate = this._currentDate();
316
+ const durationString = this._displayTime(currentDuration);
317
+ const totalDurationString = this._displayTime(totalDuration);
318
+ const hasDates = !!startDate && !!endDate;
319
+ return (React.createElement("div", { "data-testid": "timeline-component", className: classnames("timeline-component", !!minimized && "minimized", hasDates && "has-dates") },
320
+ React.createElement("div", { className: "header" },
321
+ React.createElement(PlayButton, { className: "play-button", isPlaying: this.state.isPlaying, onPlay: this._onPlay, onPause: this._onPause, "data-testid": "timeline-play" }),
322
+ React.createElement(PlayerButton, { className: "play-backward", icon: React.createElement(SvgCaretLeft, null), onClick: this._onBackward, title: UiIModelComponents.translate("timeline.backward") }),
323
+ React.createElement(PlayerButton, { className: "play-button-step", icon: React.createElement(SvgPlayCircular, null), isPlaying: this.state.isPlaying, onPlay: this._onPlay, onPause: this._onPause, title: UiIModelComponents.translate("timeline.step") }),
324
+ React.createElement(PlayerButton, { className: "play-forward", icon: React.createElement(SvgCaretRight, null), onClick: this._onForward, title: UiIModelComponents.translate("timeline.backward") }),
325
+ React.createElement("span", { className: "current-date" }, toDateString(currentDate, timeZoneOffset, dateFormatOptions))),
326
+ React.createElement("div", { className: "scrubber" },
327
+ React.createElement(PlayButton, { className: "play-button", isPlaying: this.state.isPlaying, onPlay: this._onPlay, onPause: this._onPause }),
328
+ React.createElement("div", { className: "start-time-container" },
329
+ hasDates && React.createElement("span", { "data-testid": "test-start-date", className: "start-date" }, toDateString(startDate, timeZoneOffset, dateFormatOptions)),
330
+ hasDates && !showDuration && React.createElement("span", { "data-testid": "test-start-time", className: "start-time" }, toTimeString(startDate, timeZoneOffset, timeFormatOptions)),
331
+ showDuration && React.createElement("span", { className: "duration-start-time" }, durationString)),
332
+ React.createElement(Scrubber, { className: "slider", currentDuration: this.state.currentDuration, totalDuration: totalDuration, startDate: startDate, endDate: endDate, isPlaying: this.state.isPlaying, inMiniMode: !!minimized, showTime: !showDuration, onChange: this._onTimelineChange, onUpdate: this._onTimelineChange, timeZoneOffset: this.props.timeZoneOffset, markDate: this.props.markDate }),
333
+ React.createElement("div", { className: "end-time-container" },
334
+ hasDates && React.createElement("span", { className: "end-date" }, toDateString(endDate, timeZoneOffset)),
335
+ hasDates && !showDuration && React.createElement("span", { className: "end-time" }, toTimeString(endDate, timeZoneOffset, timeFormatOptions)),
336
+ showDuration && React.createElement(InlineEdit, { className: "duration-end-time", defaultValue: totalDurationString, onChange: this._onTotalDurationChange })),
337
+ minimized && this._renderSettings())));
338
+ }
339
+ }
333
340
  //# sourceMappingURL=TimelineComponent.js.map