@itwin/imodel-components-react 4.0.0-dev.8 → 4.0.0

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