@itwin/imodel-components-react 4.0.0-dev.12 → 4.0.0-dev.14

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