@itwin/imodel-components-react 3.4.0-dev.43 → 3.4.0-dev.44

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 (342) 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.js +107 -107
  10. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  11. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +91 -91
  12. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  13. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +74 -74
  14. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  15. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  16. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +145 -145
  17. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  18. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  19. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  20. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +137 -137
  21. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  22. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +64 -64
  23. package/lib/cjs/imodel-components-react/color/HueSlider.d.ts +22 -22
  24. package/lib/cjs/imodel-components-react/color/HueSlider.js +199 -199
  25. package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
  26. package/lib/cjs/imodel-components-react/color/HueSlider.scss +61 -61
  27. package/lib/cjs/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  28. package/lib/cjs/imodel-components-react/color/SaturationPicker.js +213 -213
  29. package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
  30. package/lib/cjs/imodel-components-react/color/SaturationPicker.scss +35 -35
  31. package/lib/cjs/imodel-components-react/color/Swatch.d.ts +22 -22
  32. package/lib/cjs/imodel-components-react/color/Swatch.js +60 -60
  33. package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
  34. package/lib/cjs/imodel-components-react/color/Swatch.scss +23 -23
  35. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  36. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js +23 -23
  37. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  38. package/lib/cjs/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  39. package/lib/cjs/imodel-components-react/editors/ColorEditor.js +151 -151
  40. package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
  41. package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +18 -18
  42. package/lib/cjs/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  43. package/lib/cjs/imodel-components-react/editors/WeightEditor.js +160 -160
  44. package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
  45. package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +16 -16
  46. package/lib/cjs/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  47. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js +96 -96
  48. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  49. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  50. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +265 -265
  51. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  52. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +107 -107
  53. package/lib/cjs/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  54. package/lib/cjs/imodel-components-react/lineweight/Swatch.js +85 -85
  55. package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
  56. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +48 -48
  57. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  58. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +159 -159
  59. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  60. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +52 -52
  61. package/lib/cjs/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  62. package/lib/cjs/imodel-components-react/navigationaids/Cube.js +127 -127
  63. package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
  64. package/lib/cjs/imodel-components-react/navigationaids/Cube.scss +19 -19
  65. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +174 -174
  66. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +634 -634
  67. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  68. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +180 -180
  69. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  70. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +647 -647
  71. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  72. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +133 -133
  73. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  74. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +99 -99
  75. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  76. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +64 -64
  77. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  78. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +53 -53
  79. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  80. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  81. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +83 -83
  82. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  83. package/lib/cjs/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  84. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +86 -86
  85. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  86. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  87. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +109 -109
  88. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  89. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  90. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +133 -133
  91. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  92. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  93. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +184 -184
  94. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  95. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  96. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +154 -154
  97. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  98. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  99. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +59 -59
  100. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  101. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  102. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +47 -47
  103. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  104. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  105. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +54 -54
  106. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  107. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  108. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +48 -48
  109. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  110. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  111. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +50 -50
  112. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  113. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  114. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +58 -58
  115. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  116. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  117. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +47 -47
  118. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  119. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  120. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +56 -56
  121. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  122. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  123. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +95 -95
  124. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  125. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  126. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +119 -119
  127. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  128. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  129. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +143 -143
  130. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  131. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  132. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js +69 -69
  133. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  134. package/lib/cjs/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  135. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +81 -81
  136. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  137. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +26 -26
  138. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  139. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +91 -91
  140. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  141. package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +25 -25
  142. package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  143. package/lib/cjs/imodel-components-react/timeline/Scrubber.js +191 -191
  144. package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
  145. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +106 -106
  146. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  147. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +424 -424
  148. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  149. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +357 -357
  150. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  151. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js +54 -54
  152. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  153. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  154. package/lib/cjs/imodel-components-react/timeline/Timeline.scss +164 -164
  155. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  156. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +358 -358
  157. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  158. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +163 -163
  159. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +174 -174
  160. package/lib/cjs/imodel-components-react/timeline/interfaces.js +45 -45
  161. package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
  162. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  163. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +274 -274
  164. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  165. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  166. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +105 -105
  167. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  168. package/lib/cjs/imodel-components-react.d.ts +82 -82
  169. package/lib/cjs/imodel-components-react.js +101 -101
  170. package/lib/cjs/imodel-components-react.js.map +1 -1
  171. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +28 -28
  172. package/lib/esm/imodel-components-react/UiIModelComponents.js +75 -75
  173. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  174. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  175. package/lib/esm/imodel-components-react/color/AlphaSlider.js +160 -160
  176. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  177. package/lib/esm/imodel-components-react/color/AlphaSlider.scss +63 -63
  178. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  179. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +82 -82
  180. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  181. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +91 -91
  182. package/lib/esm/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  183. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js +51 -51
  184. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  185. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  186. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +122 -122
  187. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  188. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  189. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  190. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +112 -112
  191. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  192. package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +64 -64
  193. package/lib/esm/imodel-components-react/color/HueSlider.d.ts +22 -22
  194. package/lib/esm/imodel-components-react/color/HueSlider.js +173 -173
  195. package/lib/esm/imodel-components-react/color/HueSlider.js.map +1 -1
  196. package/lib/esm/imodel-components-react/color/HueSlider.scss +61 -61
  197. package/lib/esm/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  198. package/lib/esm/imodel-components-react/color/SaturationPicker.js +187 -187
  199. package/lib/esm/imodel-components-react/color/SaturationPicker.js.map +1 -1
  200. package/lib/esm/imodel-components-react/color/SaturationPicker.scss +35 -35
  201. package/lib/esm/imodel-components-react/color/Swatch.d.ts +22 -22
  202. package/lib/esm/imodel-components-react/color/Swatch.js +34 -34
  203. package/lib/esm/imodel-components-react/color/Swatch.js.map +1 -1
  204. package/lib/esm/imodel-components-react/color/Swatch.scss +23 -23
  205. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  206. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js +19 -19
  207. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  208. package/lib/esm/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  209. package/lib/esm/imodel-components-react/editors/ColorEditor.js +124 -124
  210. package/lib/esm/imodel-components-react/editors/ColorEditor.js.map +1 -1
  211. package/lib/esm/imodel-components-react/editors/ColorEditor.scss +18 -18
  212. package/lib/esm/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  213. package/lib/esm/imodel-components-react/editors/WeightEditor.js +133 -133
  214. package/lib/esm/imodel-components-react/editors/WeightEditor.js.map +1 -1
  215. package/lib/esm/imodel-components-react/editors/WeightEditor.scss +16 -16
  216. package/lib/esm/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  217. package/lib/esm/imodel-components-react/inputs/QuantityInput.js +70 -70
  218. package/lib/esm/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  219. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  220. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +240 -240
  221. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  222. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +107 -107
  223. package/lib/esm/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  224. package/lib/esm/imodel-components-react/lineweight/Swatch.js +59 -59
  225. package/lib/esm/imodel-components-react/lineweight/Swatch.js.map +1 -1
  226. package/lib/esm/imodel-components-react/lineweight/Swatch.scss +48 -48
  227. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  228. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +133 -133
  229. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  230. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +52 -52
  231. package/lib/esm/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  232. package/lib/esm/imodel-components-react/navigationaids/Cube.js +100 -100
  233. package/lib/esm/imodel-components-react/navigationaids/Cube.js.map +1 -1
  234. package/lib/esm/imodel-components-react/navigationaids/Cube.scss +19 -19
  235. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +174 -174
  236. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +606 -606
  237. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  238. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +180 -180
  239. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  240. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +620 -620
  241. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  242. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +133 -133
  243. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  244. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +76 -76
  245. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  246. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +64 -64
  247. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  248. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +30 -30
  249. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  250. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  251. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +60 -60
  252. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  253. package/lib/esm/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  254. package/lib/esm/imodel-components-react/quantityformat/FormatType.js +63 -63
  255. package/lib/esm/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  256. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  257. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +83 -83
  258. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  259. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  260. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +110 -110
  261. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  262. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  263. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +158 -158
  264. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  265. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  266. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js +131 -131
  267. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  268. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  269. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js +36 -36
  270. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  271. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  272. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js +24 -24
  273. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  274. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  275. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js +31 -31
  276. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  277. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  278. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js +25 -25
  279. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  280. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  281. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js +27 -27
  282. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  283. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  284. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +35 -35
  285. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  286. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  287. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js +24 -24
  288. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  289. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  290. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js +33 -33
  291. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  292. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  293. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +69 -69
  294. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  295. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  296. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js +96 -96
  297. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  298. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  299. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js +139 -139
  300. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  301. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  302. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js +65 -65
  303. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  304. package/lib/esm/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  305. package/lib/esm/imodel-components-react/timeline/InlineEdit.js +55 -55
  306. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  307. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +26 -26
  308. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  309. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +64 -64
  310. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  311. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +25 -25
  312. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  313. package/lib/esm/imodel-components-react/timeline/Scrubber.js +164 -164
  314. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  315. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +106 -106
  316. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  317. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +398 -398
  318. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  319. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +357 -357
  320. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  321. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js +28 -28
  322. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  323. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  324. package/lib/esm/imodel-components-react/timeline/Timeline.scss +164 -164
  325. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  326. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +332 -332
  327. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  328. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +163 -163
  329. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +174 -174
  330. package/lib/esm/imodel-components-react/timeline/interfaces.js +42 -42
  331. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  332. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  333. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +251 -251
  334. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  335. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  336. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +95 -95
  337. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  338. package/lib/esm/imodel-components-react.d.ts +82 -82
  339. package/lib/esm/imodel-components-react.js +87 -87
  340. package/lib/esm/imodel-components-react.js.map +1 -1
  341. package/lib/public/locales/en/UiIModelComponents.json +139 -139
  342. package/package.json +20 -20
@@ -1,333 +1,333 @@
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
+ // 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
+ }
333
333
  //# sourceMappingURL=TimelineComponent.js.map