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

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 (347) hide show
  1. package/CHANGELOG.md +1 -91
  2. package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts +28 -28
  3. package/lib/cjs/imodel-components-react/UiIModelComponents.js +79 -79
  4. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  5. package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  6. package/lib/cjs/imodel-components-react/color/AlphaSlider.js +186 -186
  7. package/lib/cjs/imodel-components-react/color/AlphaSlider.js.map +1 -1
  8. package/lib/cjs/imodel-components-react/color/AlphaSlider.scss +63 -63
  9. package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  10. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +107 -107
  11. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  12. package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +90 -92
  13. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  14. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +74 -74
  15. package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  16. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  17. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +145 -145
  18. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  19. package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  20. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  21. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +137 -137
  22. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  23. package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +63 -64
  24. package/lib/cjs/imodel-components-react/color/HueSlider.d.ts +22 -22
  25. package/lib/cjs/imodel-components-react/color/HueSlider.js +199 -199
  26. package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
  27. package/lib/cjs/imodel-components-react/color/HueSlider.scss +61 -61
  28. package/lib/cjs/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  29. package/lib/cjs/imodel-components-react/color/SaturationPicker.js +213 -213
  30. package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
  31. package/lib/cjs/imodel-components-react/color/SaturationPicker.scss +35 -35
  32. package/lib/cjs/imodel-components-react/color/Swatch.d.ts +22 -22
  33. package/lib/cjs/imodel-components-react/color/Swatch.js +60 -60
  34. package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
  35. package/lib/cjs/imodel-components-react/color/Swatch.scss +23 -24
  36. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  37. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js +23 -23
  38. package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  39. package/lib/cjs/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  40. package/lib/cjs/imodel-components-react/editors/ColorEditor.js +151 -151
  41. package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
  42. package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +18 -19
  43. package/lib/cjs/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  44. package/lib/cjs/imodel-components-react/editors/WeightEditor.js +160 -160
  45. package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
  46. package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +16 -17
  47. package/lib/cjs/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  48. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js +96 -96
  49. package/lib/cjs/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  50. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  51. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +265 -265
  52. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  53. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +107 -107
  54. package/lib/cjs/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  55. package/lib/cjs/imodel-components-react/lineweight/Swatch.js +85 -85
  56. package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
  57. package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +48 -49
  58. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  59. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +159 -159
  60. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  61. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +52 -53
  62. package/lib/cjs/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  63. package/lib/cjs/imodel-components-react/navigationaids/Cube.js +127 -127
  64. package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
  65. package/lib/cjs/imodel-components-react/navigationaids/Cube.scss +19 -19
  66. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +174 -174
  67. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  68. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +634 -634
  69. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  70. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +182 -181
  71. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  72. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +647 -647
  73. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  74. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +134 -134
  75. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  76. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +99 -99
  77. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  78. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +63 -65
  79. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  80. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +53 -53
  81. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  82. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  83. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +83 -83
  84. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  85. package/lib/cjs/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  86. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +86 -86
  87. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  88. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  89. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +109 -109
  90. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  91. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  92. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +133 -133
  93. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  94. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  95. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +184 -184
  96. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  97. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  98. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts.map +1 -1
  99. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +145 -154
  100. package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  101. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  102. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +59 -59
  103. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  104. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  105. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +47 -47
  106. package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  107. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  108. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +54 -54
  109. package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  110. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  111. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +48 -48
  112. package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  113. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  114. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +50 -50
  115. package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  116. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  117. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +58 -58
  118. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  119. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  120. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +47 -47
  121. package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  122. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  123. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +56 -56
  124. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  125. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  126. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +95 -95
  127. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  128. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  129. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +119 -119
  130. package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  131. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  132. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +143 -143
  133. package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  134. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  135. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js +69 -69
  136. package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  137. package/lib/cjs/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  138. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +81 -81
  139. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  140. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +26 -26
  141. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  142. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +91 -91
  143. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  144. package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +31 -26
  145. package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  146. package/lib/cjs/imodel-components-react/timeline/Scrubber.js +191 -191
  147. package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
  148. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +112 -107
  149. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  150. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +424 -424
  151. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  152. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +356 -358
  153. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  154. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js +54 -54
  155. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  156. package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  157. package/lib/cjs/imodel-components-react/timeline/Timeline.scss +164 -164
  158. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  159. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +358 -358
  160. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  161. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +164 -164
  162. package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +174 -174
  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.js +274 -274
  167. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  168. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  169. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +105 -105
  170. package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  171. package/lib/cjs/imodel-components-react.d.ts +82 -82
  172. package/lib/cjs/imodel-components-react.js +101 -101
  173. package/lib/cjs/imodel-components-react.js.map +1 -1
  174. package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +28 -28
  175. package/lib/esm/imodel-components-react/UiIModelComponents.js +75 -75
  176. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  177. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +36 -36
  178. package/lib/esm/imodel-components-react/color/AlphaSlider.js +160 -160
  179. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  180. package/lib/esm/imodel-components-react/color/AlphaSlider.scss +63 -63
  181. package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
  182. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +82 -82
  183. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  184. package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +90 -92
  185. package/lib/esm/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
  186. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js +51 -51
  187. package/lib/esm/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
  188. package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +21 -21
  189. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +122 -122
  190. package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +1 -1
  191. package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +93 -93
  192. package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
  193. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +112 -112
  194. package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
  195. package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +63 -64
  196. package/lib/esm/imodel-components-react/color/HueSlider.d.ts +22 -22
  197. package/lib/esm/imodel-components-react/color/HueSlider.js +173 -173
  198. package/lib/esm/imodel-components-react/color/HueSlider.js.map +1 -1
  199. package/lib/esm/imodel-components-react/color/HueSlider.scss +61 -61
  200. package/lib/esm/imodel-components-react/color/SaturationPicker.d.ts +20 -20
  201. package/lib/esm/imodel-components-react/color/SaturationPicker.js +187 -187
  202. package/lib/esm/imodel-components-react/color/SaturationPicker.js.map +1 -1
  203. package/lib/esm/imodel-components-react/color/SaturationPicker.scss +35 -35
  204. package/lib/esm/imodel-components-react/color/Swatch.d.ts +22 -22
  205. package/lib/esm/imodel-components-react/color/Swatch.js +34 -34
  206. package/lib/esm/imodel-components-react/color/Swatch.js.map +1 -1
  207. package/lib/esm/imodel-components-react/color/Swatch.scss +23 -24
  208. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
  209. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js +19 -19
  210. package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js.map +1 -1
  211. package/lib/esm/imodel-components-react/editors/ColorEditor.d.ts +44 -44
  212. package/lib/esm/imodel-components-react/editors/ColorEditor.js +124 -124
  213. package/lib/esm/imodel-components-react/editors/ColorEditor.js.map +1 -1
  214. package/lib/esm/imodel-components-react/editors/ColorEditor.scss +18 -19
  215. package/lib/esm/imodel-components-react/editors/WeightEditor.d.ts +47 -47
  216. package/lib/esm/imodel-components-react/editors/WeightEditor.js +133 -133
  217. package/lib/esm/imodel-components-react/editors/WeightEditor.js.map +1 -1
  218. package/lib/esm/imodel-components-react/editors/WeightEditor.scss +16 -17
  219. package/lib/esm/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
  220. package/lib/esm/imodel-components-react/inputs/QuantityInput.js +70 -70
  221. package/lib/esm/imodel-components-react/inputs/QuantityInput.js.map +1 -1
  222. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
  223. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +240 -240
  224. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  225. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +107 -107
  226. package/lib/esm/imodel-components-react/lineweight/Swatch.d.ts +33 -33
  227. package/lib/esm/imodel-components-react/lineweight/Swatch.js +59 -59
  228. package/lib/esm/imodel-components-react/lineweight/Swatch.js.map +1 -1
  229. package/lib/esm/imodel-components-react/lineweight/Swatch.scss +48 -49
  230. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
  231. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +133 -133
  232. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  233. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +52 -53
  234. package/lib/esm/imodel-components-react/navigationaids/Cube.d.ts +45 -45
  235. package/lib/esm/imodel-components-react/navigationaids/Cube.js +100 -100
  236. package/lib/esm/imodel-components-react/navigationaids/Cube.js.map +1 -1
  237. package/lib/esm/imodel-components-react/navigationaids/Cube.scss +19 -19
  238. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +174 -174
  239. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
  240. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +606 -606
  241. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  242. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +182 -181
  243. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
  244. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +620 -620
  245. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  246. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +134 -134
  247. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
  248. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +76 -76
  249. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  250. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +63 -65
  251. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
  252. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +30 -30
  253. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  254. package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
  255. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +60 -60
  256. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  257. package/lib/esm/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
  258. package/lib/esm/imodel-components-react/quantityformat/FormatType.js +63 -63
  259. package/lib/esm/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  260. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
  261. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +83 -83
  262. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  263. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
  264. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +110 -110
  265. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  266. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
  267. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +158 -158
  268. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  269. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
  270. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts.map +1 -1
  271. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js +122 -131
  272. package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
  273. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
  274. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js +36 -36
  275. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
  276. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
  277. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js +24 -24
  278. package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
  279. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
  280. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js +31 -31
  281. package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
  282. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
  283. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js +25 -25
  284. package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
  285. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
  286. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js +27 -27
  287. package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
  288. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
  289. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +35 -35
  290. package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
  291. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
  292. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js +24 -24
  293. package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
  294. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
  295. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js +33 -33
  296. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  297. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
  298. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +69 -69
  299. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  300. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
  301. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js +96 -96
  302. package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
  303. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
  304. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js +139 -139
  305. package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
  306. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
  307. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js +65 -65
  308. package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js.map +1 -1
  309. package/lib/esm/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
  310. package/lib/esm/imodel-components-react/timeline/InlineEdit.js +55 -55
  311. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  312. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +26 -26
  313. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
  314. package/lib/esm/imodel-components-react/timeline/PlayerButton.js +64 -64
  315. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
  316. package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +31 -26
  317. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +54 -54
  318. package/lib/esm/imodel-components-react/timeline/Scrubber.js +164 -164
  319. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  320. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +112 -107
  321. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
  322. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +398 -398
  323. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  324. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +356 -358
  325. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
  326. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js +28 -28
  327. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
  328. package/lib/esm/imodel-components-react/timeline/SpeedTimeline.scss +39 -39
  329. package/lib/esm/imodel-components-react/timeline/Timeline.scss +164 -164
  330. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +133 -133
  331. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +332 -332
  332. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  333. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +164 -164
  334. package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +174 -174
  335. package/lib/esm/imodel-components-react/timeline/interfaces.js +42 -42
  336. package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
  337. package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
  338. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +251 -251
  339. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  340. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
  341. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +95 -95
  342. package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
  343. package/lib/esm/imodel-components-react.d.ts +82 -82
  344. package/lib/esm/imodel-components-react.js +87 -87
  345. package/lib/esm/imodel-components-react.js.map +1 -1
  346. package/lib/public/locales/en/UiIModelComponents.json +139 -139
  347. package/package.json +31 -38
@@ -1,266 +1,266 @@
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 Inputs
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.QuantityNumberInput = void 0;
33
- require("./QuantityNumberInput.scss");
34
- const classnames_1 = __importDefault(require("classnames"));
35
- const React = __importStar(require("react"));
36
- const core_react_1 = require("@itwin/core-react");
37
- const appui_abstract_1 = require("@itwin/appui-abstract");
38
- const core_frontend_1 = require("@itwin/core-frontend");
39
- const core_quantity_1 = require("@itwin/core-quantity");
40
- const itwinui_react_1 = require("@itwin/itwinui-react");
41
- /** adjust formatter spec to show only primary unit without a label. */
42
- function adjustFormatterSpec(formatterSpec) {
43
- if (undefined === formatterSpec)
44
- return formatterSpec;
45
- const singleUnitConversion = [];
46
- singleUnitConversion.push(formatterSpec.unitConversions[0]);
47
- const newFormat = formatterSpec.format.clone({
48
- showOnlyPrimaryUnit: true,
49
- traits: formatterSpec.format.formatTraits & ~core_quantity_1.FormatTraits.ShowUnitLabel,
50
- type: core_quantity_1.FormatType.Decimal,
51
- precision: core_quantity_1.FormatType.Decimal !== formatterSpec.format.type ? core_quantity_1.DecimalPrecision.Four : formatterSpec.format.precision,
52
- });
53
- return new core_quantity_1.FormatterSpec("single-value", newFormat, singleUnitConversion, formatterSpec.persistenceUnit);
54
- }
55
- function convertValueFromDisplayToPersistence(value, unitConversions, unit) {
56
- // istanbul ignore next
57
- if (!unitConversions || 0 === unitConversions.length)
58
- return value;
59
- const unitConversion = unitConversions.find((spec) => spec.name === unit.name);
60
- // istanbul ignore next
61
- if (!unitConversion)
62
- return value;
63
- const convertedValue = (value * unitConversion.conversion.factor) + unitConversion.conversion.offset;
64
- return convertedValue;
65
- }
66
- function getUnitLabel(parserSpec) {
67
- if (undefined === parserSpec)
68
- return "";
69
- const format = parserSpec.format;
70
- // istanbul ignore else
71
- if (!format.units || !format.units[0])
72
- return parserSpec.outUnit.label;
73
- const [unit, label] = format.units[0];
74
- // istanbul ignore next
75
- return label !== null && label !== void 0 ? label : unit.label;
76
- }
77
- const ForwardRefQuantityNumberInput = React.forwardRef(function ForwardRefQuantityNumberInput(props, ref) {
78
- const { containerClassName, persistenceValue, min, max, onChange, onBlur, onKeyDown, step, snap, showTouchButtons, quantityType, ...otherProps } = props;
79
- const rawValueRef = React.useRef(persistenceValue);
80
- const [formatterSpec, setFormatterSpec] = React.useState(() => adjustFormatterSpec(core_frontend_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(quantityType)));
81
- const [parserSpec, setParserSpec] = React.useState(() => core_frontend_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(quantityType));
82
- const formatValue = React.useCallback((value) => {
83
- if (undefined === value)
84
- return "";
85
- // istanbul ignore else
86
- if (formatterSpec) {
87
- return formatterSpec.applyFormatting(value);
88
- }
89
- // istanbul ignore next
90
- return value.toFixed(2);
91
- }, [formatterSpec]);
92
- const lastFormattedValueRef = React.useRef(formatValue(persistenceValue));
93
- const [formattedValue, setFormattedValue] = React.useState(() => lastFormattedValueRef.current);
94
- React.useEffect(() => {
95
- const handleUnitSystemChanged = (() => {
96
- setFormatterSpec(adjustFormatterSpec(core_frontend_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(quantityType)));
97
- setParserSpec(core_frontend_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(quantityType));
98
- });
99
- core_frontend_1.IModelApp.quantityFormatter.onActiveFormattingUnitSystemChanged.addListener(handleUnitSystemChanged);
100
- return () => {
101
- core_frontend_1.IModelApp.quantityFormatter.onActiveFormattingUnitSystemChanged.removeListener(handleUnitSystemChanged);
102
- };
103
- }, [quantityType]);
104
- React.useEffect(() => {
105
- const handleUnitSystemChanged = ((args) => {
106
- const quantityKey = core_frontend_1.IModelApp.quantityFormatter.getQuantityTypeKey(quantityType);
107
- // istanbul ignore else
108
- if (args.quantityType === quantityKey) {
109
- setFormatterSpec(adjustFormatterSpec(core_frontend_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(quantityType)));
110
- setParserSpec(core_frontend_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(quantityType));
111
- }
112
- });
113
- core_frontend_1.IModelApp.quantityFormatter.onQuantityFormatsChanged.addListener(handleUnitSystemChanged);
114
- return () => {
115
- core_frontend_1.IModelApp.quantityFormatter.onQuantityFormatsChanged.removeListener(handleUnitSystemChanged);
116
- };
117
- }, [quantityType]);
118
- const unitLabel = getUnitLabel(parserSpec);
119
- // See if new initialValue props have changed since component mounted
120
- React.useEffect(() => {
121
- rawValueRef.current = persistenceValue;
122
- const currentFormattedValue = formatValue(rawValueRef.current);
123
- setFormattedValue(currentFormattedValue);
124
- }, [formatValue, persistenceValue]);
125
- // this is the unprocessed input from user, it is not processed until blur or enter key press
126
- const handleDisplayValueChange = React.useCallback((event) => {
127
- setFormattedValue(event.currentTarget.value);
128
- }, []);
129
- const updateValue = React.useCallback((newValue) => {
130
- let persistedValue = newValue;
131
- // istanbul ignore else
132
- if (parserSpec) {
133
- // convert value from display unit to persistence unit
134
- const [unit] = parserSpec.format.units ? parserSpec.format.units[0] : /* istanbul ignore next */ [parserSpec.outUnit];
135
- persistedValue = convertValueFromDisplayToPersistence(newValue, parserSpec.unitConversions, unit);
136
- rawValueRef.current = persistedValue;
137
- }
138
- const newFormattedVal = formatValue(persistedValue);
139
- onChange && onChange(persistedValue);
140
- setFormattedValue(newFormattedVal);
141
- }, [formatValue, onChange, parserSpec]);
142
- /**
143
- * Used internally to parse the argument x to it's numeric representation.
144
- * If the argument cannot be converted to finite number returns 0; If a
145
- * "precision" prop is specified uses it round the number with that
146
- * precision (no fixed precision here because the return value is float, not
147
- * string).
148
- */
149
- const parseInternal = React.useCallback((x) => {
150
- if (!x)
151
- return 0;
152
- let n = parseFloat(x);
153
- // istanbul ignore next
154
- if (isNaN(n) || !isFinite(n)) {
155
- n = 0;
156
- }
157
- const localPrecision = 6; // TODO get a reasonable value from format
158
- const q = Math.pow(10, localPrecision);
159
- const localMin = undefined === min ? Number.MIN_SAFE_INTEGER : min;
160
- const localMax = undefined === max ? Number.MAX_SAFE_INTEGER : max;
161
- n = Math.min(Math.max(n, localMin), localMax);
162
- n = Math.round(n * q) / q;
163
- return n;
164
- }, [min, max]);
165
- const updateValueFromString = React.useCallback((strValue) => {
166
- // istanbul ignore else
167
- if (parserSpec) {
168
- const parseResult = core_frontend_1.IModelApp.quantityFormatter.parseToQuantityValue(strValue, parserSpec);
169
- // at this point we should have a string value in persistence units without a label
170
- if (core_quantity_1.Parser.isParsedQuantity(parseResult)) {
171
- const persistedValue = parseResult.value; // in persistence units
172
- // set strValue and let it go through parseInternal which will ensure min/max limits are observed
173
- strValue = formatValue(persistedValue);
174
- }
175
- else {
176
- // istanbul ignore else
177
- if (rawValueRef.current) { // restore last known good value
178
- const lastKnownFormattedVal = formatValue(rawValueRef.current);
179
- setFormattedValue(lastKnownFormattedVal);
180
- return;
181
- }
182
- }
183
- }
184
- const newValue = parseInternal(strValue);
185
- // istanbul ignore else
186
- if (undefined !== newValue)
187
- updateValue(newValue);
188
- }, [formatValue, parseInternal, parserSpec, updateValue]);
189
- const handleBlur = React.useCallback((event) => {
190
- const newVal = parseInternal(event.target.value);
191
- onBlur && onBlur(event);
192
- updateValue(newVal);
193
- }, [parseInternal, updateValue, onBlur]);
194
- const getIncrementValue = React.useCallback((increment) => {
195
- if (typeof step === "function") {
196
- const stepVal = step(increment ? "up" : "down");
197
- return stepVal ? stepVal : 1;
198
- }
199
- return !step ? 1 : step;
200
- }, [step]);
201
- /**
202
- * The internal method that actually sets the new value on the input
203
- */
204
- const applyStep = React.useCallback((increment) => {
205
- const incrementValue = getIncrementValue(increment);
206
- let num = parseInternal(formattedValue) + (increment ? incrementValue : -incrementValue);
207
- if (snap) {
208
- num = Math.round(num / incrementValue) * incrementValue;
209
- }
210
- const localMin = undefined === min ? Number.MIN_SAFE_INTEGER : min;
211
- const localMax = undefined === max ? Number.MAX_SAFE_INTEGER : max;
212
- num = Math.min(Math.max(num, localMin), localMax);
213
- updateValue(num);
214
- }, [formattedValue, getIncrementValue, max, min, parseInternal, snap, updateValue]);
215
- const handleKeyDown = React.useCallback((event) => {
216
- // istanbul ignore else
217
- if (event.key === appui_abstract_1.SpecialKey.Enter) {
218
- updateValueFromString(event.currentTarget.value);
219
- event.preventDefault();
220
- }
221
- else if (event.key === appui_abstract_1.SpecialKey.Escape) {
222
- setFormattedValue(formatValue(rawValueRef.current));
223
- event.preventDefault();
224
- }
225
- else if (event.key === appui_abstract_1.SpecialKey.ArrowDown) {
226
- applyStep(false);
227
- event.preventDefault();
228
- }
229
- else if (event.key === appui_abstract_1.SpecialKey.ArrowUp) {
230
- applyStep(true);
231
- event.preventDefault();
232
- }
233
- onKeyDown && onKeyDown(event);
234
- }, [onKeyDown, updateValueFromString, formatValue, applyStep]);
235
- const handleDownClick = React.useCallback((event) => {
236
- applyStep(false);
237
- event.preventDefault();
238
- }, [applyStep]);
239
- const handleUpClick = React.useCallback((event) => {
240
- applyStep(true);
241
- event.preventDefault();
242
- }, [applyStep]);
243
- // istanbul ignore next
244
- const handleFocus = React.useCallback((event) => {
245
- event.currentTarget.select();
246
- }, []);
247
- const isDisabled = !!otherProps.disabled;
248
- const containerClasses = (0, classnames_1.default)("component-quantity-number-input-container", containerClassName, showTouchButtons && "component-number-buttons-for-touch", isDisabled && "component-quantity-number-input-disabled");
249
- return (React.createElement("div", { className: containerClasses },
250
- React.createElement("div", { className: "component-quantity-number-input-value-and-buttons-container" },
251
- React.createElement(itwinui_react_1.Input, { ref: ref, value: formattedValue, onChange: handleDisplayValueChange, onKeyDown: handleKeyDown, onBlur: handleBlur, onFocus: handleFocus, size: "small", ...otherProps }),
252
- React.createElement("div", { className: (0, classnames_1.default)("component-quantity-number-input-buttons-container", showTouchButtons && "component-number-buttons-for-touch") },
253
- React.createElement("div", { className: "component-quantity-number-input-button component-quantity-number-input-button-up", tabIndex: -1, onClick: handleUpClick },
254
- React.createElement(core_react_1.WebFontIcon, { iconName: "icon-caret-up" })),
255
- React.createElement("div", { className: "component-quantity-number-input-button component-quantity-number-input-button-down", tabIndex: -1, onClick: handleDownClick },
256
- React.createElement(core_react_1.WebFontIcon, { iconName: "icon-caret-down" })))),
257
- React.createElement("span", { className: "component-quantity-number-input-suffix" }, unitLabel)));
258
- });
259
- /** The QuantityNumberInput component accepts input for quantity values. The quantity value is shown as a single numeric value and the quantity's
260
- * "display" unit is shown next to the input control. The "display" unit is determined by the active unit system as defined by the [QuantityFormatter]($frontend).
261
- * The control also display buttons to increment and decrement the "displayed" value. The value reported by via the onChange function is in "persistence"
262
- * units that can be stored in the iModel.
263
- * @beta
264
- */
265
- exports.QuantityNumberInput = ForwardRefQuantityNumberInput;
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 Inputs
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.QuantityNumberInput = void 0;
33
+ require("./QuantityNumberInput.scss");
34
+ const classnames_1 = __importDefault(require("classnames"));
35
+ const React = __importStar(require("react"));
36
+ const core_react_1 = require("@itwin/core-react");
37
+ const appui_abstract_1 = require("@itwin/appui-abstract");
38
+ const core_frontend_1 = require("@itwin/core-frontend");
39
+ const core_quantity_1 = require("@itwin/core-quantity");
40
+ const itwinui_react_1 = require("@itwin/itwinui-react");
41
+ /** adjust formatter spec to show only primary unit without a label. */
42
+ function adjustFormatterSpec(formatterSpec) {
43
+ if (undefined === formatterSpec)
44
+ return formatterSpec;
45
+ const singleUnitConversion = [];
46
+ singleUnitConversion.push(formatterSpec.unitConversions[0]);
47
+ const newFormat = formatterSpec.format.clone({
48
+ showOnlyPrimaryUnit: true,
49
+ traits: formatterSpec.format.formatTraits & ~core_quantity_1.FormatTraits.ShowUnitLabel,
50
+ type: core_quantity_1.FormatType.Decimal,
51
+ precision: core_quantity_1.FormatType.Decimal !== formatterSpec.format.type ? core_quantity_1.DecimalPrecision.Four : formatterSpec.format.precision,
52
+ });
53
+ return new core_quantity_1.FormatterSpec("single-value", newFormat, singleUnitConversion, formatterSpec.persistenceUnit);
54
+ }
55
+ function convertValueFromDisplayToPersistence(value, unitConversions, unit) {
56
+ // istanbul ignore next
57
+ if (!unitConversions || 0 === unitConversions.length)
58
+ return value;
59
+ const unitConversion = unitConversions.find((spec) => spec.name === unit.name);
60
+ // istanbul ignore next
61
+ if (!unitConversion)
62
+ return value;
63
+ const convertedValue = (value * unitConversion.conversion.factor) + unitConversion.conversion.offset;
64
+ return convertedValue;
65
+ }
66
+ function getUnitLabel(parserSpec) {
67
+ if (undefined === parserSpec)
68
+ return "";
69
+ const format = parserSpec.format;
70
+ // istanbul ignore else
71
+ if (!format.units || !format.units[0])
72
+ return parserSpec.outUnit.label;
73
+ const [unit, label] = format.units[0];
74
+ // istanbul ignore next
75
+ return label !== null && label !== void 0 ? label : unit.label;
76
+ }
77
+ const ForwardRefQuantityNumberInput = React.forwardRef(function ForwardRefQuantityNumberInput(props, ref) {
78
+ const { containerClassName, persistenceValue, min, max, onChange, onBlur, onKeyDown, step, snap, showTouchButtons, quantityType, ...otherProps } = props;
79
+ const rawValueRef = React.useRef(persistenceValue);
80
+ const [formatterSpec, setFormatterSpec] = React.useState(() => adjustFormatterSpec(core_frontend_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(quantityType)));
81
+ const [parserSpec, setParserSpec] = React.useState(() => core_frontend_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(quantityType));
82
+ const formatValue = React.useCallback((value) => {
83
+ if (undefined === value)
84
+ return "";
85
+ // istanbul ignore else
86
+ if (formatterSpec) {
87
+ return formatterSpec.applyFormatting(value);
88
+ }
89
+ // istanbul ignore next
90
+ return value.toFixed(2);
91
+ }, [formatterSpec]);
92
+ const lastFormattedValueRef = React.useRef(formatValue(persistenceValue));
93
+ const [formattedValue, setFormattedValue] = React.useState(() => lastFormattedValueRef.current);
94
+ React.useEffect(() => {
95
+ const handleUnitSystemChanged = (() => {
96
+ setFormatterSpec(adjustFormatterSpec(core_frontend_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(quantityType)));
97
+ setParserSpec(core_frontend_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(quantityType));
98
+ });
99
+ core_frontend_1.IModelApp.quantityFormatter.onActiveFormattingUnitSystemChanged.addListener(handleUnitSystemChanged);
100
+ return () => {
101
+ core_frontend_1.IModelApp.quantityFormatter.onActiveFormattingUnitSystemChanged.removeListener(handleUnitSystemChanged);
102
+ };
103
+ }, [quantityType]);
104
+ React.useEffect(() => {
105
+ const handleUnitSystemChanged = ((args) => {
106
+ const quantityKey = core_frontend_1.IModelApp.quantityFormatter.getQuantityTypeKey(quantityType);
107
+ // istanbul ignore else
108
+ if (args.quantityType === quantityKey) {
109
+ setFormatterSpec(adjustFormatterSpec(core_frontend_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(quantityType)));
110
+ setParserSpec(core_frontend_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(quantityType));
111
+ }
112
+ });
113
+ core_frontend_1.IModelApp.quantityFormatter.onQuantityFormatsChanged.addListener(handleUnitSystemChanged);
114
+ return () => {
115
+ core_frontend_1.IModelApp.quantityFormatter.onQuantityFormatsChanged.removeListener(handleUnitSystemChanged);
116
+ };
117
+ }, [quantityType]);
118
+ const unitLabel = getUnitLabel(parserSpec);
119
+ // See if new initialValue props have changed since component mounted
120
+ React.useEffect(() => {
121
+ rawValueRef.current = persistenceValue;
122
+ const currentFormattedValue = formatValue(rawValueRef.current);
123
+ setFormattedValue(currentFormattedValue);
124
+ }, [formatValue, persistenceValue]);
125
+ // this is the unprocessed input from user, it is not processed until blur or enter key press
126
+ const handleDisplayValueChange = React.useCallback((event) => {
127
+ setFormattedValue(event.currentTarget.value);
128
+ }, []);
129
+ const updateValue = React.useCallback((newValue) => {
130
+ let persistedValue = newValue;
131
+ // istanbul ignore else
132
+ if (parserSpec) {
133
+ // convert value from display unit to persistence unit
134
+ const [unit] = parserSpec.format.units ? parserSpec.format.units[0] : /* istanbul ignore next */ [parserSpec.outUnit];
135
+ persistedValue = convertValueFromDisplayToPersistence(newValue, parserSpec.unitConversions, unit);
136
+ rawValueRef.current = persistedValue;
137
+ }
138
+ const newFormattedVal = formatValue(persistedValue);
139
+ onChange && onChange(persistedValue);
140
+ setFormattedValue(newFormattedVal);
141
+ }, [formatValue, onChange, parserSpec]);
142
+ /**
143
+ * Used internally to parse the argument x to it's numeric representation.
144
+ * If the argument cannot be converted to finite number returns 0; If a
145
+ * "precision" prop is specified uses it round the number with that
146
+ * precision (no fixed precision here because the return value is float, not
147
+ * string).
148
+ */
149
+ const parseInternal = React.useCallback((x) => {
150
+ if (!x)
151
+ return 0;
152
+ let n = parseFloat(x);
153
+ // istanbul ignore next
154
+ if (isNaN(n) || !isFinite(n)) {
155
+ n = 0;
156
+ }
157
+ const localPrecision = 6; // TODO get a reasonable value from format
158
+ const q = Math.pow(10, localPrecision);
159
+ const localMin = undefined === min ? Number.MIN_SAFE_INTEGER : min;
160
+ const localMax = undefined === max ? Number.MAX_SAFE_INTEGER : max;
161
+ n = Math.min(Math.max(n, localMin), localMax);
162
+ n = Math.round(n * q) / q;
163
+ return n;
164
+ }, [min, max]);
165
+ const updateValueFromString = React.useCallback((strValue) => {
166
+ // istanbul ignore else
167
+ if (parserSpec) {
168
+ const parseResult = core_frontend_1.IModelApp.quantityFormatter.parseToQuantityValue(strValue, parserSpec);
169
+ // at this point we should have a string value in persistence units without a label
170
+ if (core_quantity_1.Parser.isParsedQuantity(parseResult)) {
171
+ const persistedValue = parseResult.value; // in persistence units
172
+ // set strValue and let it go through parseInternal which will ensure min/max limits are observed
173
+ strValue = formatValue(persistedValue);
174
+ }
175
+ else {
176
+ // istanbul ignore else
177
+ if (rawValueRef.current) { // restore last known good value
178
+ const lastKnownFormattedVal = formatValue(rawValueRef.current);
179
+ setFormattedValue(lastKnownFormattedVal);
180
+ return;
181
+ }
182
+ }
183
+ }
184
+ const newValue = parseInternal(strValue);
185
+ // istanbul ignore else
186
+ if (undefined !== newValue)
187
+ updateValue(newValue);
188
+ }, [formatValue, parseInternal, parserSpec, updateValue]);
189
+ const handleBlur = React.useCallback((event) => {
190
+ const newVal = parseInternal(event.target.value);
191
+ onBlur && onBlur(event);
192
+ updateValue(newVal);
193
+ }, [parseInternal, updateValue, onBlur]);
194
+ const getIncrementValue = React.useCallback((increment) => {
195
+ if (typeof step === "function") {
196
+ const stepVal = step(increment ? "up" : "down");
197
+ return stepVal ? stepVal : 1;
198
+ }
199
+ return !step ? 1 : step;
200
+ }, [step]);
201
+ /**
202
+ * The internal method that actually sets the new value on the input
203
+ */
204
+ const applyStep = React.useCallback((increment) => {
205
+ const incrementValue = getIncrementValue(increment);
206
+ let num = parseInternal(formattedValue) + (increment ? incrementValue : -incrementValue);
207
+ if (snap) {
208
+ num = Math.round(num / incrementValue) * incrementValue;
209
+ }
210
+ const localMin = undefined === min ? Number.MIN_SAFE_INTEGER : min;
211
+ const localMax = undefined === max ? Number.MAX_SAFE_INTEGER : max;
212
+ num = Math.min(Math.max(num, localMin), localMax);
213
+ updateValue(num);
214
+ }, [formattedValue, getIncrementValue, max, min, parseInternal, snap, updateValue]);
215
+ const handleKeyDown = React.useCallback((event) => {
216
+ // istanbul ignore else
217
+ if (event.key === appui_abstract_1.SpecialKey.Enter) {
218
+ updateValueFromString(event.currentTarget.value);
219
+ event.preventDefault();
220
+ }
221
+ else if (event.key === appui_abstract_1.SpecialKey.Escape) {
222
+ setFormattedValue(formatValue(rawValueRef.current));
223
+ event.preventDefault();
224
+ }
225
+ else if (event.key === appui_abstract_1.SpecialKey.ArrowDown) {
226
+ applyStep(false);
227
+ event.preventDefault();
228
+ }
229
+ else if (event.key === appui_abstract_1.SpecialKey.ArrowUp) {
230
+ applyStep(true);
231
+ event.preventDefault();
232
+ }
233
+ onKeyDown && onKeyDown(event);
234
+ }, [onKeyDown, updateValueFromString, formatValue, applyStep]);
235
+ const handleDownClick = React.useCallback((event) => {
236
+ applyStep(false);
237
+ event.preventDefault();
238
+ }, [applyStep]);
239
+ const handleUpClick = React.useCallback((event) => {
240
+ applyStep(true);
241
+ event.preventDefault();
242
+ }, [applyStep]);
243
+ // istanbul ignore next
244
+ const handleFocus = React.useCallback((event) => {
245
+ event.currentTarget.select();
246
+ }, []);
247
+ const isDisabled = !!otherProps.disabled;
248
+ const containerClasses = (0, classnames_1.default)("component-quantity-number-input-container", containerClassName, showTouchButtons && "component-number-buttons-for-touch", isDisabled && "component-quantity-number-input-disabled");
249
+ return (React.createElement("div", { className: containerClasses },
250
+ React.createElement("div", { className: "component-quantity-number-input-value-and-buttons-container" },
251
+ React.createElement(itwinui_react_1.Input, { ref: ref, value: formattedValue, onChange: handleDisplayValueChange, onKeyDown: handleKeyDown, onBlur: handleBlur, onFocus: handleFocus, size: "small", ...otherProps }),
252
+ React.createElement("div", { className: (0, classnames_1.default)("component-quantity-number-input-buttons-container", showTouchButtons && "component-number-buttons-for-touch") },
253
+ React.createElement("div", { className: "component-quantity-number-input-button component-quantity-number-input-button-up", tabIndex: -1, onClick: handleUpClick },
254
+ React.createElement(core_react_1.WebFontIcon, { iconName: "icon-caret-up" })),
255
+ React.createElement("div", { className: "component-quantity-number-input-button component-quantity-number-input-button-down", tabIndex: -1, onClick: handleDownClick },
256
+ React.createElement(core_react_1.WebFontIcon, { iconName: "icon-caret-down" })))),
257
+ React.createElement("span", { className: "component-quantity-number-input-suffix" }, unitLabel)));
258
+ });
259
+ /** The QuantityNumberInput component accepts input for quantity values. The quantity value is shown as a single numeric value and the quantity's
260
+ * "display" unit is shown next to the input control. The "display" unit is determined by the active unit system as defined by the [QuantityFormatter]($frontend).
261
+ * The control also display buttons to increment and decrement the "displayed" value. The value reported by via the onChange function is in "persistence"
262
+ * units that can be stored in the iModel.
263
+ * @beta
264
+ */
265
+ exports.QuantityNumberInput = ForwardRefQuantityNumberInput;
266
266
  //# sourceMappingURL=QuantityNumberInput.js.map