@itwin/imodel-components-react 4.0.0-dev.8 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -1
- package/README.md +2 -2
- package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts +28 -28
- package/lib/cjs/imodel-components-react/UiIModelComponents.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/UiIModelComponents.js +77 -79
- package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts +36 -36
- package/lib/cjs/imodel-components-react/color/AlphaSlider.js +190 -186
- package/lib/cjs/imodel-components-react/color/AlphaSlider.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
- package/lib/cjs/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +112 -107
- package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerButton.scss +19 -21
- package/lib/cjs/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
- package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js +78 -74
- package/lib/cjs/imodel-components-react/color/ColorPickerDialog.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
- package/lib/cjs/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js +143 -137
- package/lib/cjs/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerPopup.scss +15 -17
- package/lib/cjs/imodel-components-react/color/HueSlider.d.ts +22 -22
- package/lib/cjs/imodel-components-react/color/HueSlider.js +203 -199
- package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/SaturationPicker.d.ts +20 -20
- package/lib/cjs/imodel-components-react/color/SaturationPicker.js +217 -213
- package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/Swatch.d.ts +22 -22
- package/lib/cjs/imodel-components-react/color/Swatch.js +64 -60
- package/lib/cjs/imodel-components-react/color/Swatch.js.map +1 -1
- package/lib/cjs/imodel-components-react/color/Swatch.scss +5 -7
- package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
- package/lib/cjs/imodel-components-react/color/getCSSColorFromDef.js +23 -23
- package/lib/cjs/imodel-components-react/editors/ColorEditor.d.ts +44 -44
- package/lib/cjs/imodel-components-react/editors/ColorEditor.js +155 -151
- package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
- package/lib/cjs/imodel-components-react/editors/ColorEditor.scss +4 -5
- package/lib/cjs/imodel-components-react/editors/WeightEditor.d.ts +47 -47
- package/lib/cjs/imodel-components-react/editors/WeightEditor.js +164 -160
- package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
- package/lib/cjs/imodel-components-react/editors/WeightEditor.scss +4 -5
- package/lib/cjs/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
- package/lib/cjs/imodel-components-react/inputs/QuantityInput.js +100 -96
- package/lib/cjs/imodel-components-react/inputs/QuantityInput.js.map +1 -1
- package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
- package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +272 -265
- package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
- package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.scss +6 -7
- package/lib/cjs/imodel-components-react/lineweight/Swatch.d.ts +33 -33
- package/lib/cjs/imodel-components-react/lineweight/Swatch.js +89 -85
- package/lib/cjs/imodel-components-react/lineweight/Swatch.js.map +1 -1
- package/lib/cjs/imodel-components-react/lineweight/Swatch.scss +7 -8
- package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
- package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +163 -159
- package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
- package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.scss +13 -15
- package/lib/cjs/imodel-components-react/navigationaids/Cube.d.ts +45 -45
- package/lib/cjs/imodel-components-react/navigationaids/Cube.js +131 -127
- package/lib/cjs/imodel-components-react/navigationaids/Cube.js.map +1 -1
- package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +154 -174
- package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +631 -634
- package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
- package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.scss +18 -21
- package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
- package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +657 -647
- package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
- package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.scss +9 -8
- package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
- package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +103 -99
- package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +10 -16
- package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +57 -53
- package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
- package/lib/cjs/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +88 -83
- package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +90 -86
- package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +113 -109
- package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
- package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +137 -133
- package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
- package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +188 -184
- package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
- package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js +149 -154
- package/lib/cjs/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js +63 -59
- package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalPrecision.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js +51 -47
- package/lib/cjs/imodel-components-react/quantityformat/misc/DecimalSeparator.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
- package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js +58 -54
- package/lib/cjs/imodel-components-react/quantityformat/misc/FractionPrecision.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
- package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js +52 -48
- package/lib/cjs/imodel-components-react/quantityformat/misc/ScientificType.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js +54 -50
- package/lib/cjs/imodel-components-react/quantityformat/misc/SignOption.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +62 -58
- package/lib/cjs/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js +51 -47
- package/lib/cjs/imodel-components-react/quantityformat/misc/StationSizeSelector.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +60 -56
- package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
- package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +99 -95
- package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
- package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
- package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js +123 -119
- package/lib/cjs/imodel-components-react/quantityformat/misc/UnitDescr.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
- package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js +142 -143
- package/lib/cjs/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
- package/lib/cjs/imodel-components-react/timeline/BaseTimelineDataProvider.js +69 -69
- package/lib/cjs/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
- package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +85 -81
- package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +2 -2
- package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
- package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/PlayerButton.js +99 -91
- package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/PlayerButton.scss +11 -9
- package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts +54 -54
- package/lib/cjs/imodel-components-react/timeline/Scrubber.js +195 -191
- package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +13 -15
- package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
- package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +432 -424
- package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +49 -48
- package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
- package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js +58 -54
- package/lib/cjs/imodel-components-react/timeline/SpeedTimeline.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +130 -133
- package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +398 -358
- package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +39 -25
- package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts +145 -174
- package/lib/cjs/imodel-components-react/timeline/interfaces.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/timeline/interfaces.js +45 -45
- package/lib/cjs/imodel-components-react/timeline/interfaces.js.map +1 -1
- package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
- package/lib/cjs/imodel-components-react/viewport/ViewportComponent.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +278 -274
- package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
- package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
- package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js +105 -105
- package/lib/cjs/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
- package/lib/cjs/imodel-components-react.d.ts +81 -82
- package/lib/cjs/imodel-components-react.d.ts.map +1 -1
- package/lib/cjs/imodel-components-react.js +104 -101
- package/lib/cjs/imodel-components-react.js.map +1 -1
- package/lib/esm/imodel-components-react/UiIModelComponents.d.ts +28 -28
- package/lib/esm/imodel-components-react/UiIModelComponents.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/UiIModelComponents.js +74 -75
- package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
- package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts +36 -36
- package/lib/esm/imodel-components-react/color/AlphaSlider.js +160 -160
- package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
- package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts +37 -37
- package/lib/esm/imodel-components-react/color/ColorPickerButton.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/color/ColorPickerButton.js +83 -82
- package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
- package/lib/esm/imodel-components-react/color/ColorPickerButton.scss +19 -21
- package/lib/esm/imodel-components-react/color/ColorPickerDialog.d.ts +23 -23
- package/lib/esm/imodel-components-react/color/ColorPickerDialog.js +51 -51
- package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts +44 -44
- package/lib/esm/imodel-components-react/color/ColorPickerPopup.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/color/ColorPickerPopup.js +114 -112
- package/lib/esm/imodel-components-react/color/ColorPickerPopup.js.map +1 -1
- package/lib/esm/imodel-components-react/color/ColorPickerPopup.scss +15 -17
- package/lib/esm/imodel-components-react/color/HueSlider.d.ts +22 -22
- package/lib/esm/imodel-components-react/color/HueSlider.js +173 -173
- package/lib/esm/imodel-components-react/color/SaturationPicker.d.ts +20 -20
- package/lib/esm/imodel-components-react/color/SaturationPicker.js +187 -187
- package/lib/esm/imodel-components-react/color/Swatch.d.ts +22 -22
- package/lib/esm/imodel-components-react/color/Swatch.js +34 -34
- package/lib/esm/imodel-components-react/color/Swatch.scss +5 -7
- package/lib/esm/imodel-components-react/color/getCSSColorFromDef.d.ts +6 -6
- package/lib/esm/imodel-components-react/color/getCSSColorFromDef.js +19 -19
- package/lib/esm/imodel-components-react/editors/ColorEditor.d.ts +44 -44
- package/lib/esm/imodel-components-react/editors/ColorEditor.js +124 -124
- package/lib/esm/imodel-components-react/editors/ColorEditor.scss +4 -5
- package/lib/esm/imodel-components-react/editors/WeightEditor.d.ts +47 -47
- package/lib/esm/imodel-components-react/editors/WeightEditor.js +133 -133
- package/lib/esm/imodel-components-react/editors/WeightEditor.scss +4 -5
- package/lib/esm/imodel-components-react/inputs/QuantityInput.d.ts +25 -25
- package/lib/esm/imodel-components-react/inputs/QuantityInput.js +70 -70
- package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +44 -44
- package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +243 -240
- package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
- package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.scss +6 -7
- package/lib/esm/imodel-components-react/lineweight/Swatch.d.ts +33 -33
- package/lib/esm/imodel-components-react/lineweight/Swatch.js +59 -59
- package/lib/esm/imodel-components-react/lineweight/Swatch.scss +7 -8
- package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.d.ts +60 -60
- package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +134 -133
- package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
- package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.scss +13 -15
- package/lib/esm/imodel-components-react/navigationaids/Cube.d.ts +45 -45
- package/lib/esm/imodel-components-react/navigationaids/Cube.js +100 -100
- package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts +154 -174
- package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +601 -606
- package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
- package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.scss +18 -21
- package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts +145 -145
- package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +627 -620
- package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
- package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.scss +9 -8
- package/lib/esm/imodel-components-react/quantityformat/FormatPanel.d.ts +26 -26
- package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +76 -76
- package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +10 -16
- package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +30 -30
- package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts +18 -18
- package/lib/esm/imodel-components-react/quantityformat/FormatSample.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +61 -60
- package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
- package/lib/esm/imodel-components-react/quantityformat/FormatType.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/FormatType.js +63 -63
- package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +83 -83
- package/lib/esm/imodel-components-react/quantityformat/FormatUnits.d.ts +19 -19
- package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +110 -110
- package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.d.ts +21 -21
- package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +158 -158
- package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts +22 -22
- package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js +122 -131
- package/lib/esm/imodel-components-react/quantityformat/QuantityFormatPanel.js.map +1 -1
- package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/DecimalPrecision.js +36 -36
- package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/DecimalSeparator.js +24 -24
- package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.d.ts +16 -16
- package/lib/esm/imodel-components-react/quantityformat/misc/FractionPrecision.js +31 -31
- package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.d.ts +18 -18
- package/lib/esm/imodel-components-react/quantityformat/misc/ScientificType.js +25 -25
- package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/SignOption.js +27 -27
- package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/StationSeparatorSelector.js +35 -35
- package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/StationSizeSelector.js +24 -24
- package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js +33 -33
- package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.d.ts +17 -17
- package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +69 -69
- package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.d.ts +23 -23
- package/lib/esm/imodel-components-react/quantityformat/misc/UnitDescr.js +96 -96
- package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts +52 -52
- package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js +138 -139
- package/lib/esm/imodel-components-react/timeline/BaseSolarDataProvider.js.map +1 -1
- package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.d.ts +31 -31
- package/lib/esm/imodel-components-react/timeline/BaseTimelineDataProvider.js +65 -65
- package/lib/esm/imodel-components-react/timeline/InlineEdit.d.ts +27 -27
- package/lib/esm/imodel-components-react/timeline/InlineEdit.js +55 -55
- package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +2 -2
- package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +33 -33
- package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/timeline/PlayerButton.js +68 -64
- package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +1 -1
- package/lib/esm/imodel-components-react/timeline/PlayerButton.scss +11 -9
- package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +54 -54
- package/lib/esm/imodel-components-react/timeline/Scrubber.js +164 -164
- package/lib/esm/imodel-components-react/timeline/Scrubber.scss +13 -15
- package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts +77 -77
- package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +402 -398
- package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
- package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +49 -48
- package/lib/esm/imodel-components-react/timeline/SpeedTimeline.d.ts +15 -15
- package/lib/esm/imodel-components-react/timeline/SpeedTimeline.js +28 -28
- package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +130 -133
- package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +368 -332
- package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
- package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +39 -25
- package/lib/esm/imodel-components-react/timeline/interfaces.d.ts +145 -174
- package/lib/esm/imodel-components-react/timeline/interfaces.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/timeline/interfaces.js +42 -42
- package/lib/esm/imodel-components-react/timeline/interfaces.js.map +1 -1
- package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts +42 -42
- package/lib/esm/imodel-components-react/viewport/ViewportComponent.d.ts.map +1 -1
- package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +251 -251
- package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.d.ts +106 -106
- package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js +96 -95
- package/lib/esm/imodel-components-react/viewport/ViewportComponentEvents.js.map +1 -1
- package/lib/esm/imodel-components-react.d.ts +81 -82
- package/lib/esm/imodel-components-react.d.ts.map +1 -1
- package/lib/esm/imodel-components-react.js +86 -87
- package/lib/esm/imodel-components-react.js.map +1 -1
- package/package.json +38 -47
- package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts +0 -22
- package/lib/cjs/imodel-components-react/color/ColorPickerPanel.d.ts.map +0 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js +0 -146
- package/lib/cjs/imodel-components-react/color/ColorPickerPanel.js.map +0 -1
- package/lib/cjs/imodel-components-react/color/ColorPickerPanel.scss +0 -94
- package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts +0 -22
- package/lib/esm/imodel-components-react/color/ColorPickerPanel.d.ts.map +0 -1
- package/lib/esm/imodel-components-react/color/ColorPickerPanel.js +0 -123
- package/lib/esm/imodel-components-react/color/ColorPickerPanel.js.map +0 -1
- package/lib/esm/imodel-components-react/color/ColorPickerPanel.scss +0 -94
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolarTimeline.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/timeline/SolarTimeline.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Timeline\r\n */\r\n\r\n// component is in alpha state - it may change after usability testing - test coverage not complete\r\n/* istanbul ignore file */\r\n\r\nimport \"./SolarTimeline.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { Slider, Tooltip } from \"@itwin/itwinui-react\";\r\n\r\nimport { ColorByName, ColorDef, HSVColor } from \"@itwin/core-common\";\r\nimport { RelativePosition, TimeDisplay } from \"@itwin/appui-abstract\";\r\nimport { BodyText, CommonProps, Popup } from \"@itwin/core-react\";\r\nimport { adjustDateToTimezone, DatePicker, TimeField, TimeSpec, UiComponents } from \"@itwin/components-react\";\r\nimport { HueSlider } from \"../color/HueSlider\";\r\nimport { SaturationPicker } from \"../color/SaturationPicker\";\r\nimport { ColorSwatch } from \"../color/Swatch\";\r\nimport { SolarDataProvider } from \"./interfaces\";\r\nimport { PlayButton } from \"./PlayerButton\";\r\nimport { SpeedTimeline } from \"./SpeedTimeline\";\r\nimport { CustomThumb, getPercentageOfRectangle, RailMarkers, useFocusedThumb } from \"./Scrubber\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\n\r\n// cSpell:ignore millisec solarsettings showticks shadowcolor solartimeline datepicker millisecs\r\n\r\nconst millisecPerMinute = 1000 * 60;\r\nconst millisecPerHour = millisecPerMinute * 60;\r\n// const millisecPerDay = millisecPerHour * 24;\r\nconst defaultPlaybackDuration = 40 * 1000; // 40 seconds\r\nconst addZero = (i: number) => {\r\n return (i < 10) ? `0${i}` : i;\r\n};\r\n\r\ninterface TimelineProps extends CommonProps {\r\n dayStartMs: number;\r\n sunRiseOffsetMs: number;\r\n sunSetOffsetMs: number;\r\n currentTimeOffsetMs: number;\r\n isPlaying: boolean;\r\n formatTick?: (millisec: number) => string;\r\n formatTime: (millisec: number) => string;\r\n onChange?: (values: ReadonlyArray<number>) => void;\r\n onUpdate?: (values: ReadonlyArray<number>) => void;\r\n}\r\nfunction Timeline(props: TimelineProps) {\r\n const sliderRef = React.useRef<HTMLDivElement>(null);\r\n const [sliderContainer, setSliderContainer] = React.useState<HTMLDivElement>();\r\n const [pointerPercent, setPointerPercent] = React.useState(0);\r\n\r\n React.useLayoutEffect(() => {\r\n // istanbul ignore else\r\n if (sliderRef.current) {\r\n const container = sliderRef.current.querySelector(\".iui-slider-container\");\r\n if (container && sliderContainer !== container) {\r\n setSliderContainer(container as HTMLDivElement);\r\n }\r\n }\r\n }, [sliderContainer]);\r\n\r\n const thumbProps = () => {\r\n return {\r\n className: \"components-timeline-thumb\",\r\n children: <CustomThumb />,\r\n };\r\n };\r\n\r\n const tooltipProps = React.useCallback(() => {\r\n return { visible: false };\r\n }, []);\r\n\r\n const [showRailTooltip, setShowRailTooltip] = React.useState(false);\r\n\r\n const handlePointerEnter = React.useCallback(() => {\r\n setShowRailTooltip(true);\r\n }, []);\r\n\r\n const handlePointerLeave = React.useCallback(() => {\r\n setShowRailTooltip(false);\r\n }, []);\r\n\r\n const handlePointerMove = React.useCallback((event: React.PointerEvent) => {\r\n sliderContainer &&\r\n setPointerPercent(getPercentageOfRectangle(sliderContainer.getBoundingClientRect(), event.clientX));\r\n }, [sliderContainer]);\r\n\r\n const { formatTick, formatTime, onChange, onUpdate, dayStartMs, sunSetOffsetMs, sunRiseOffsetMs, currentTimeOffsetMs, isPlaying } = props;\r\n\r\n const thumbHasFocus = useFocusedThumb(sliderContainer);\r\n\r\n const tickLabel = React.useMemo(() => {\r\n const showTip = isPlaying || showRailTooltip || thumbHasFocus;\r\n const totalDuration = sunSetOffsetMs - sunRiseOffsetMs;\r\n const percent = (isPlaying || thumbHasFocus) ? (currentTimeOffsetMs - sunRiseOffsetMs) / totalDuration : pointerPercent;\r\n const tooltipText = formatTime((isPlaying || thumbHasFocus) ? (dayStartMs + currentTimeOffsetMs) : (dayStartMs + (sunRiseOffsetMs + (pointerPercent * totalDuration))));\r\n return (<RailMarkers showToolTip={showTip} percent={percent} tooltipText={tooltipText} />);\r\n }, [isPlaying, showRailTooltip, thumbHasFocus, sunSetOffsetMs, sunRiseOffsetMs, currentTimeOffsetMs, pointerPercent, formatTime, dayStartMs]);\r\n\r\n const className = classnames(\"solar-slider\", props.className, formatTick && \"showticks\");\r\n const sunRiseFormat = formatTime(dayStartMs + sunRiseOffsetMs);\r\n const sunSetFormat = formatTime(dayStartMs + sunSetOffsetMs);\r\n return (\r\n <div className={className}>\r\n <Tooltip content={sunRiseFormat}>\r\n <span className=\"sunrise\">\r\n ☀\r\n </span>\r\n </Tooltip>\r\n <Slider ref={sliderRef}\r\n className={className}\r\n step={millisecPerMinute}\r\n min={sunRiseOffsetMs}\r\n max={sunSetOffsetMs}\r\n minLabel=\"\"\r\n maxLabel=\"\"\r\n onUpdate={onUpdate}\r\n onChange={onChange}\r\n values={[currentTimeOffsetMs]}\r\n tooltipProps={tooltipProps}\r\n thumbProps={thumbProps}\r\n tickLabels={tickLabel}\r\n railContainerProps={{\r\n onPointerEnter: handlePointerEnter,\r\n onPointerMove: handlePointerMove,\r\n onPointerLeave: handlePointerLeave,\r\n }}\r\n />\r\n <Tooltip content={sunSetFormat}>\r\n <span className=\"sunset\">\r\n ☽\r\n </span>\r\n </Tooltip>\r\n </div>\r\n );\r\n}\r\n\r\ninterface SolarTimelineComponentProps {\r\n dataProvider: SolarDataProvider; // provides date, sunrise, sunset in millisecs, also contains timezone offset from UTC, and updates the display style to current time.\r\n onPlayPause?: (playing: boolean) => void; // callback triggered when play/pause button is pressed\r\n duration?: number; // playback duration in milliseconds\r\n speed?: number;\r\n}\r\n\r\ninterface SolarTimelineComponentState {\r\n isPlaying: boolean; // timeline is currently playing or paused\r\n isDateOpened: boolean; // date picker is opened\r\n isSettingsOpened: boolean; // settings popup is opened\r\n dayStartMs: number;\r\n sunRiseOffsetMs: number;\r\n sunSetOffsetMs: number;\r\n sunDeltaMs: number;\r\n currentTimeOffsetMs: number;\r\n speed: number;\r\n loop: boolean;\r\n shadowColor: ColorDef;\r\n duration: number; // playback duration in milliseconds\r\n adjustedDuration: number; // playback duration in milliseconds/ speed\r\n}\r\n\r\n/** Solar Timeline\r\n * @alpha\r\n */\r\nexport class SolarTimeline extends React.PureComponent<SolarTimelineComponentProps, SolarTimelineComponentState> {\r\n private _datePicker: HTMLElement | null = null;\r\n private _settings: HTMLElement | null = null;\r\n private _requestFrame = 0;\r\n private _unmounted = false;\r\n private _timeLastCycle = 0;\r\n private _totalPlayTime = 0;\r\n private _settingsPopupTitle = UiIModelComponents.translate(\"solarsettings.shadowcolor\");\r\n private _playLabel = UiIModelComponents.translate(\"solartimeline.play\");\r\n private _settingLabel = UiIModelComponents.translate(\"solartimeline.settings\");\r\n private _loopLabel = UiIModelComponents.translate(\"timeline.repeat\");\r\n private _speedLabel = UiIModelComponents.translate(\"solartimeline.speed\");\r\n private _dateTimeLabel = UiIModelComponents.translate(\"solartimeline.dateTime\");\r\n\r\n private _months = [\r\n UiComponents.translate(\"month.short.january\"),\r\n UiComponents.translate(\"month.short.february\"),\r\n UiComponents.translate(\"month.short.march\"),\r\n UiComponents.translate(\"month.short.april\"),\r\n UiComponents.translate(\"month.short.may\"),\r\n UiComponents.translate(\"month.short.june\"),\r\n UiComponents.translate(\"month.short.july\"),\r\n UiComponents.translate(\"month.short.august\"),\r\n UiComponents.translate(\"month.short.september\"),\r\n UiComponents.translate(\"month.short.october\"),\r\n UiComponents.translate(\"month.short.november\"),\r\n UiComponents.translate(\"month.short.december\"),\r\n ];\r\n\r\n private _timeLabel = UiComponents.translate(\"datepicker.time\");\r\n private _amLabel = UiComponents.translate(\"time.am\");\r\n private _pmLabel = UiComponents.translate(\"time.pm\");\r\n private readonly _presetColors = [\r\n ColorDef.create(ColorByName.grey),\r\n ColorDef.create(ColorByName.lightGrey),\r\n ColorDef.create(ColorByName.darkGrey),\r\n ColorDef.create(ColorByName.lightBlue),\r\n ColorDef.create(ColorByName.lightGreen),\r\n ColorDef.create(ColorByName.darkGreen),\r\n ColorDef.create(ColorByName.tan),\r\n ColorDef.create(ColorByName.darkBrown),\r\n ];\r\n\r\n constructor(props: SolarTimelineComponentProps) {\r\n super(props);\r\n\r\n const dayStartMs = this.props.dataProvider.dayStartMs;\r\n const sunRiseOffsetMs = this.props.dataProvider.sunrise.getTime() - dayStartMs;\r\n const sunSetOffsetMs = this.props.dataProvider.sunset.getTime() - dayStartMs;\r\n const sunDeltaMs = sunSetOffsetMs - sunRiseOffsetMs;\r\n const sunOffsetMs = this.props.dataProvider.timeOfDay.getTime() - dayStartMs;\r\n const currentTimeOffsetMs = this.ensureRange(sunOffsetMs, sunRiseOffsetMs, sunSetOffsetMs);\r\n const shadowColor = this.props.dataProvider.shadowColor;\r\n const duration = this.props.duration ? this.props.duration : defaultPlaybackDuration;\r\n const speed = this.props.speed ? this.props.speed : 2;\r\n const adjustedDuration = duration / speed;\r\n this.setPlaybackTimeBySunTime(currentTimeOffsetMs, sunRiseOffsetMs, sunDeltaMs, adjustedDuration);\r\n\r\n this.state = {\r\n isDateOpened: false,\r\n isSettingsOpened: false,\r\n isPlaying: false,\r\n dayStartMs,\r\n sunRiseOffsetMs,\r\n sunSetOffsetMs,\r\n sunDeltaMs,\r\n currentTimeOffsetMs,\r\n speed,\r\n loop: false,\r\n shadowColor,\r\n duration,\r\n adjustedDuration,\r\n };\r\n }\r\n\r\n public override componentWillUnmount() {\r\n window.cancelAnimationFrame(this._requestFrame);\r\n this._unmounted = true;\r\n }\r\n\r\n // recursively update the animation until we hit the end or the pause button is clicked\r\n private _updateAnimation = (_timestamp: number) => {\r\n // istanbul ignore else\r\n if (!this.state.isPlaying || this._unmounted) {\r\n window.cancelAnimationFrame(this._requestFrame);\r\n return;\r\n }\r\n\r\n const currentTime = new Date().getTime();\r\n this._totalPlayTime += (currentTime - this._timeLastCycle);\r\n this._timeLastCycle = currentTime;\r\n let percentComplete = this._totalPlayTime / this.state.adjustedDuration;\r\n if (percentComplete > 1)\r\n percentComplete = 1;\r\n\r\n let newPlayingState = true;\r\n\r\n // calculate the next sun time base on the percentage playback complete - should be int value as that is step amount for slider\r\n let nextSunOffset = Math.floor(this.state.sunRiseOffsetMs + (percentComplete * this.state.sunDeltaMs));\r\n\r\n if (percentComplete > 0.99) {\r\n if (!this.state.loop) {\r\n newPlayingState = false;\r\n nextSunOffset = this.state.sunSetOffsetMs;\r\n window.cancelAnimationFrame(this._requestFrame);\r\n } else {\r\n nextSunOffset = this.state.sunRiseOffsetMs;\r\n this._totalPlayTime = 0;\r\n }\r\n }\r\n\r\n if (this.props.dataProvider.onTimeChanged) {\r\n const currentSunTime = new Date(this.state.dayStartMs + nextSunOffset);\r\n this.props.dataProvider.onTimeChanged(currentSunTime);\r\n }\r\n\r\n this.setState({ isPlaying: newPlayingState, currentTimeOffsetMs: nextSunOffset }, () => {\r\n if (newPlayingState)\r\n this._requestFrame = window.requestAnimationFrame(this._updateAnimation);\r\n });\r\n };\r\n\r\n private _play(sunTimeMs: number) {\r\n this._timeLastCycle = new Date().getTime();\r\n\r\n // start playing\r\n this.setState({ isPlaying: true, currentTimeOffsetMs: sunTimeMs }, () => {\r\n this._requestFrame = window.requestAnimationFrame(this._updateAnimation);\r\n // istanbul ignore else\r\n if (this.props.onPlayPause)\r\n this.props.onPlayPause(true);\r\n });\r\n }\r\n\r\n // user clicked pause button\r\n private _onPause = () => {\r\n // istanbul ignore if\r\n if (!this.state.isPlaying)\r\n return;\r\n\r\n const currentTime = new Date().getTime();\r\n this._totalPlayTime += (currentTime - this._timeLastCycle);\r\n\r\n // stop requesting frames\r\n window.cancelAnimationFrame(this._requestFrame);\r\n\r\n // stop playing\r\n this.setState({ isPlaying: false });\r\n\r\n // istanbul ignore else\r\n if (this.props.onPlayPause)\r\n this.props.onPlayPause(false);\r\n };\r\n\r\n // user clicked play button\r\n private _onPlay = () => {\r\n // istanbul ignore if\r\n if (this.state.isPlaying)\r\n return;\r\n\r\n if (this.state.currentTimeOffsetMs >= this.state.sunSetOffsetMs || this.state.currentTimeOffsetMs <= this.state.sunRiseOffsetMs) {\r\n this._totalPlayTime = 0;\r\n this._play(this.state.sunRiseOffsetMs);\r\n } else {\r\n this._play(this.state.currentTimeOffsetMs);\r\n }\r\n };\r\n\r\n private setPlaybackTimeBySunTime(sunOffsetMs: number, sunRiseOffsetMs: number, sunDeltaMs: number, adjustedDuration?: number) {\r\n this._totalPlayTime = ((sunOffsetMs - sunRiseOffsetMs) / (sunDeltaMs)) * ((adjustedDuration) ? adjustedDuration : this.state.adjustedDuration);\r\n }\r\n\r\n /** note the day passed in is in the time of the current user not in project time because the date picker works in\r\n * local time */\r\n private _onDayClick = (day: Date) => {\r\n const selectedDate = new Date(day.getTime() + this.state.currentTimeOffsetMs);\r\n this.props.dataProvider.setDateAndTime(selectedDate);\r\n const dayStartMs = this.props.dataProvider.dayStartMs;\r\n const sunRiseOffsetMs = this.props.dataProvider.sunrise.getTime() - dayStartMs;\r\n const sunSetOffsetMs = this.props.dataProvider.sunset.getTime() - dayStartMs;\r\n const sunDeltaMs = sunSetOffsetMs - sunRiseOffsetMs;\r\n\r\n const sunOffsetMs = this.ensureRange(this.state.currentTimeOffsetMs, sunRiseOffsetMs, sunSetOffsetMs);\r\n this.setPlaybackTimeBySunTime(sunOffsetMs, sunRiseOffsetMs, sunDeltaMs);\r\n\r\n /** call dataProvider to update display style */\r\n if (this.props.dataProvider.onTimeChanged)\r\n this.props.dataProvider.onTimeChanged(this.props.dataProvider.timeOfDay);\r\n\r\n this.setState({ dayStartMs, sunRiseOffsetMs, sunSetOffsetMs, currentTimeOffsetMs: sunOffsetMs, sunDeltaMs, isDateOpened: false }, () => {\r\n this._timeLastCycle = new Date().getTime();\r\n });\r\n };\r\n\r\n private _onTimeChanged = (time: TimeSpec) => {\r\n // compute the current date (with time)\r\n const dayStartMs = this.props.dataProvider.dayStartMs;\r\n const sunTime = (time.hours * millisecPerHour) + (time.minutes * millisecPerMinute);\r\n const dateWithNewTime = new Date(dayStartMs + sunTime);\r\n this.props.dataProvider.setDateAndTime(dateWithNewTime, true);\r\n\r\n // notify the provider to update style\r\n if (this.props.dataProvider.onTimeChanged)\r\n this.props.dataProvider.onTimeChanged(dateWithNewTime);\r\n\r\n const currentTimeOffsetMs = this.ensureRange(sunTime, this.state.sunRiseOffsetMs, this.state.sunSetOffsetMs);\r\n\r\n this.setPlaybackTimeBySunTime(currentTimeOffsetMs, this.state.sunRiseOffsetMs, this.state.sunDeltaMs);\r\n this._timeLastCycle = new Date().getTime();\r\n\r\n // update the timeline\r\n this.setState({ currentTimeOffsetMs });\r\n };\r\n\r\n private _onCloseDayPicker = () => {\r\n this.setState({ isDateOpened: false });\r\n };\r\n\r\n private _onOpenDayPicker = () => {\r\n this.setState((prevState) => ({ isDateOpened: !prevState.isDateOpened }));\r\n };\r\n\r\n private _onCloseSettingsPopup = () => {\r\n this.setState({ isSettingsOpened: false });\r\n };\r\n\r\n private _onOpenSettingsPopup = () => {\r\n this.setState((prevState) => ({ isSettingsOpened: !prevState.isSettingsOpened }));\r\n };\r\n\r\n private ensureRange(value: number, min: number, max: number): number {\r\n return Math.max(Math.min(value, max), min);\r\n }\r\n\r\n private processSunTimeChange(sunTime: number) {\r\n if (sunTime === this.state.currentTimeOffsetMs)\r\n return;\r\n\r\n const currentTimeOffsetMs = this.ensureRange(sunTime, this.state.sunRiseOffsetMs, this.state.sunSetOffsetMs);\r\n\r\n if (this.props.dataProvider.onTimeChanged) {\r\n const currentSunTime = new Date(this.state.dayStartMs + currentTimeOffsetMs);\r\n this.props.dataProvider.onTimeChanged(currentSunTime);\r\n }\r\n\r\n this.setState({ currentTimeOffsetMs }, () => {\r\n const currentTime = new Date().getTime();\r\n this._timeLastCycle = currentTime;\r\n const percentComplete = (currentTimeOffsetMs - this.state.sunRiseOffsetMs) / this.state.sunDeltaMs;\r\n this._totalPlayTime = percentComplete * this.state.adjustedDuration;\r\n });\r\n }\r\n\r\n private _onUpdate = (values: ReadonlyArray<number>) => {\r\n if (!this.state.isPlaying)\r\n this.processSunTimeChange(values[0]);\r\n };\r\n\r\n private _onChange = (values: ReadonlyArray<number>) => {\r\n if (!this.state.isPlaying)\r\n this.processSunTimeChange(values[0]);\r\n };\r\n\r\n private _onSpeedChange = (value: number) => {\r\n const adjustedDuration = this.state.duration / value;\r\n this.setState({ speed: value, adjustedDuration });\r\n };\r\n\r\n private _onToggleLoop = () => {\r\n this.setState((prevState) => ({ loop: !prevState.loop }));\r\n };\r\n\r\n private _formatTime = (millisec: number) => {\r\n const date = new Date(millisec);\r\n // convert project date to browser locale date\r\n const localTime = adjustDateToTimezone(date, this.props.dataProvider.timeZoneOffset * 60);\r\n let hours = localTime.getHours();\r\n const minutes = addZero(date.getMinutes());\r\n const abbrev = (hours < 12) ? this._amLabel : (hours === 24) ? this._amLabel : this._pmLabel;\r\n hours = (hours > 12) ? hours - 12 : hours;\r\n return `${hours}:${minutes} ${abbrev}`;\r\n };\r\n\r\n private _onPresetColorPick = (shadowColor: ColorDef) => {\r\n this.setState({ shadowColor }, () => this.props.dataProvider.shadowColor = shadowColor);\r\n };\r\n\r\n private _handleHueOrSaturationChange = (hueOrSaturation: HSVColor) => {\r\n if (hueOrSaturation.s === 0) // for a ColorDef to be created from hsv s can't be 0\r\n hueOrSaturation = hueOrSaturation.clone(undefined, 0.5);\r\n\r\n const shadowColor = hueOrSaturation.toColorDef();\r\n this.setState({ shadowColor }, () => this.props.dataProvider.shadowColor = shadowColor);\r\n };\r\n\r\n public getLocalTime(ticks: number): Date {\r\n const projectTime = new Date(ticks);\r\n // convert project date to browser locale date\r\n return adjustDateToTimezone(projectTime, this.props.dataProvider.timeZoneOffset * 60);\r\n }\r\n\r\n public override render() {\r\n const { dataProvider } = this.props;\r\n const { speed, loop, currentTimeOffsetMs,\r\n sunRiseOffsetMs, sunSetOffsetMs } = this.state;\r\n const localTime = this.getLocalTime(this.state.dayStartMs + this.state.currentTimeOffsetMs);\r\n const formattedTime = this._formatTime(dataProvider.dayStartMs + currentTimeOffsetMs);\r\n const formattedDate = `${this._months[localTime.getMonth()]}, ${localTime.getDate()}`;\r\n\r\n const colorSwatchStyle: React.CSSProperties = {\r\n width: `100%`,\r\n height: `100%`,\r\n };\r\n\r\n return (\r\n <div className={\"solar-timeline-wrapper\"} >\r\n <div className=\"header\">\r\n <PlayButton tooltip={this._playLabel} className=\"play-button\" isPlaying={this.state.isPlaying} onPlay={this._onPlay} onPause={this._onPause} />\r\n <button data-testid=\"solar-date-time-button\" title={this._dateTimeLabel} className=\"current-date\" ref={(element) => this._datePicker = element} onClick={this._onOpenDayPicker}>\r\n <span>{formattedDate}</span>\r\n <span>/</span>\r\n <span>{formattedTime}</span>\r\n <span className=\"icon icon-calendar\" />\r\n </button>\r\n <Popup style={{ border: \"none\" }} offset={11} target={this._datePicker} isOpen={this.state.isDateOpened} onClose={this._onCloseDayPicker} position={RelativePosition.Top}>\r\n <div className=\"components-date-picker-calendar-popup-panel\" data-testid=\"components-date-picker-calendar-popup-panel\">\r\n <DatePicker selected={localTime} onDateChange={this._onDayClick} showFocusOutline={false} />\r\n <div className=\"time-container\">\r\n <BodyText className=\"time-label\">{this._timeLabel}</BodyText>\r\n <TimeField time={{ hours: localTime.getHours(), minutes: localTime.getMinutes(), seconds: 0 }} timeDisplay={TimeDisplay.H12MC} onTimeChange={this._onTimeChanged} />\r\n </div>\r\n </div>\r\n </Popup>\r\n <Timeline className=\"solar-timeline\"\r\n dayStartMs={dataProvider.dayStartMs}\r\n sunSetOffsetMs={sunSetOffsetMs}\r\n sunRiseOffsetMs={sunRiseOffsetMs}\r\n currentTimeOffsetMs={currentTimeOffsetMs}\r\n onChange={this._onChange}\r\n onUpdate={this._onUpdate}\r\n formatTime={this._formatTime}\r\n isPlaying={this.state.isPlaying}\r\n />\r\n <div className=\"speed-container\">\r\n <span title={this._speedLabel}>{speed}x</span>\r\n <SpeedTimeline className=\"speed\" onChange={this._onSpeedChange} speed={this.state.speed} />\r\n </div>\r\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\r\n <span title={this._loopLabel}\r\n className={classnames(\"icon\", \"icon-media-controls-loop\", !loop && \"no-loop-playback\", loop && \"loop-playback\")} onClick={this._onToggleLoop}\r\n role=\"button\" tabIndex={-1}\r\n ></span>\r\n <button data-testid=\"shadow-settings-button\" title={this._settingLabel} className=\"shadow-settings-button\" ref={(element) => this._settings = element} onClick={this._onOpenSettingsPopup}>\r\n <span className=\"icon icon-settings\" />\r\n </button>\r\n <Popup className=\"shadow-settings-popup\" target={this._settings} offset={11} isOpen={this.state.isSettingsOpened} onClose={this._onCloseSettingsPopup} position={RelativePosition.Top}>\r\n <div className=\"shadow-settings-popup-container\" >\r\n <div className=\"shadow-settings-header\">{this._settingsPopupTitle}</div>\r\n <div className=\"shadow-settings-color\">\r\n <div className=\"shadow-settings-color-top\">\r\n <SaturationPicker hsv={this.state.shadowColor.toHSV()} onSaturationChange={this._handleHueOrSaturationChange} />\r\n </div>\r\n <div className=\"shadow-settings-color-bottom\">\r\n <div className=\"shadow-settings-color-bottom-left\">\r\n <HueSlider hsv={this.state.shadowColor.toHSV()} onHueChange={this._handleHueOrSaturationChange} isHorizontal={true} />\r\n </div>\r\n <div className=\"shadow-settings-color-bottom-right\">\r\n <ColorSwatch style={colorSwatchStyle} colorDef={this.state.shadowColor} round={false} />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"shadow-settings-color-presets\">\r\n <ColorSwatch colorDef={this._presetColors[0]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[1]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[2]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[3]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[4]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[5]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[6]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[7]} round={false} onColorPick={this._onPresetColorPick} />\r\n </div>\r\n </div>\r\n </Popup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SolarTimeline.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/timeline/SolarTimeline.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Timeline\r\n */\r\n\r\n// component is in alpha state - it may change after usability testing - test coverage not complete\r\n/* istanbul ignore file */\r\n\r\nimport \"./SolarTimeline.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { Slider, Text, Tooltip } from \"@itwin/itwinui-react\";\r\n\r\nimport { ColorByName, ColorDef, HSVColor } from \"@itwin/core-common\";\r\nimport { RelativePosition, TimeDisplay } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, Icon, Popup } from \"@itwin/core-react\";\r\nimport { adjustDateToTimezone, DatePicker, TimeField, TimeSpec, UiComponents } from \"@itwin/components-react\";\r\nimport { HueSlider } from \"../color/HueSlider\";\r\nimport { SaturationPicker } from \"../color/SaturationPicker\";\r\nimport { ColorSwatch } from \"../color/Swatch\";\r\nimport { SolarDataProvider } from \"./interfaces\";\r\nimport { PlayButton } from \"./PlayerButton\";\r\nimport { SpeedTimeline } from \"./SpeedTimeline\";\r\nimport { CustomThumb, getPercentageOfRectangle, RailMarkers, useFocusedThumb } from \"./Scrubber\";\r\nimport { UiIModelComponents } from \"../UiIModelComponents\";\r\nimport { SvgCalendar, SvgLoop, SvgSettings } from \"@itwin/itwinui-icons-react\";\r\n\r\n// cSpell:ignore millisec solarsettings showticks shadowcolor solartimeline datepicker millisecs\r\n\r\nconst millisecPerMinute = 1000 * 60;\r\nconst millisecPerHour = millisecPerMinute * 60;\r\n// const millisecPerDay = millisecPerHour * 24;\r\nconst defaultPlaybackDuration = 40 * 1000; // 40 seconds\r\nconst addZero = (i: number) => {\r\n return (i < 10) ? `0${i}` : i;\r\n};\r\n\r\ninterface TimelineProps extends CommonProps {\r\n dayStartMs: number;\r\n sunRiseOffsetMs: number;\r\n sunSetOffsetMs: number;\r\n currentTimeOffsetMs: number;\r\n isPlaying: boolean;\r\n formatTick?: (millisec: number) => string;\r\n formatTime: (millisec: number) => string;\r\n onChange?: (values: ReadonlyArray<number>) => void;\r\n onUpdate?: (values: ReadonlyArray<number>) => void;\r\n}\r\nfunction Timeline(props: TimelineProps) {\r\n const sliderRef = React.useRef<HTMLDivElement>(null);\r\n const [sliderContainer, setSliderContainer] = React.useState<HTMLDivElement>();\r\n const [pointerPercent, setPointerPercent] = React.useState(0);\r\n\r\n React.useLayoutEffect(() => {\r\n // istanbul ignore else\r\n if (sliderRef.current) {\r\n const container = sliderRef.current.querySelector(\".iui-slider-container\");\r\n if (container && sliderContainer !== container) {\r\n setSliderContainer(container as HTMLDivElement);\r\n }\r\n }\r\n }, [sliderContainer]);\r\n\r\n const thumbProps = () => {\r\n return {\r\n className: \"components-timeline-thumb\",\r\n children: <CustomThumb />,\r\n };\r\n };\r\n\r\n const tooltipProps = React.useCallback(() => {\r\n return { visible: false };\r\n }, []);\r\n\r\n const [showRailTooltip, setShowRailTooltip] = React.useState(false);\r\n\r\n const handlePointerEnter = React.useCallback(() => {\r\n setShowRailTooltip(true);\r\n }, []);\r\n\r\n const handlePointerLeave = React.useCallback(() => {\r\n setShowRailTooltip(false);\r\n }, []);\r\n\r\n const handlePointerMove = React.useCallback((event: React.PointerEvent) => {\r\n sliderContainer &&\r\n setPointerPercent(getPercentageOfRectangle(sliderContainer.getBoundingClientRect(), event.clientX));\r\n }, [sliderContainer]);\r\n\r\n const { formatTick, formatTime, onChange, onUpdate, dayStartMs, sunSetOffsetMs, sunRiseOffsetMs, currentTimeOffsetMs, isPlaying } = props;\r\n\r\n const thumbHasFocus = useFocusedThumb(sliderContainer);\r\n\r\n const tickLabel = React.useMemo(() => {\r\n const showTip = isPlaying || showRailTooltip || thumbHasFocus;\r\n const totalDuration = sunSetOffsetMs - sunRiseOffsetMs;\r\n const percent = (isPlaying || thumbHasFocus) ? (currentTimeOffsetMs - sunRiseOffsetMs) / totalDuration : pointerPercent;\r\n const tooltipText = formatTime((isPlaying || thumbHasFocus) ? (dayStartMs + currentTimeOffsetMs) : (dayStartMs + (sunRiseOffsetMs + (pointerPercent * totalDuration))));\r\n return (<RailMarkers showToolTip={showTip} percent={percent} tooltipText={tooltipText} />);\r\n }, [isPlaying, showRailTooltip, thumbHasFocus, sunSetOffsetMs, sunRiseOffsetMs, currentTimeOffsetMs, pointerPercent, formatTime, dayStartMs]);\r\n\r\n const className = classnames(\"solar-slider\", props.className, formatTick && \"showticks\");\r\n const sunRiseFormat = formatTime(dayStartMs + sunRiseOffsetMs);\r\n const sunSetFormat = formatTime(dayStartMs + sunSetOffsetMs);\r\n return (\r\n <div className={className}>\r\n <Tooltip content={sunRiseFormat}>\r\n <span className=\"sunrise\">\r\n ☀\r\n </span>\r\n </Tooltip>\r\n <Slider ref={sliderRef}\r\n className={className}\r\n step={millisecPerMinute}\r\n min={sunRiseOffsetMs}\r\n max={sunSetOffsetMs}\r\n minLabel=\"\"\r\n maxLabel=\"\"\r\n onUpdate={onUpdate}\r\n onChange={onChange}\r\n values={[currentTimeOffsetMs]}\r\n tooltipProps={tooltipProps}\r\n thumbProps={thumbProps}\r\n tickLabels={tickLabel}\r\n railContainerProps={{\r\n onPointerEnter: handlePointerEnter,\r\n onPointerMove: handlePointerMove,\r\n onPointerLeave: handlePointerLeave,\r\n }}\r\n />\r\n <Tooltip content={sunSetFormat}>\r\n <span className=\"sunset\">\r\n ☽\r\n </span>\r\n </Tooltip>\r\n </div>\r\n );\r\n}\r\n\r\ninterface SolarTimelineComponentProps {\r\n dataProvider: SolarDataProvider; // provides date, sunrise, sunset in millisecs, also contains timezone offset from UTC, and updates the display style to current time.\r\n onPlayPause?: (playing: boolean) => void; // callback triggered when play/pause button is pressed\r\n duration?: number; // playback duration in milliseconds\r\n speed?: number;\r\n}\r\n\r\ninterface SolarTimelineComponentState {\r\n isPlaying: boolean; // timeline is currently playing or paused\r\n isDateOpened: boolean; // date picker is opened\r\n isSettingsOpened: boolean; // settings popup is opened\r\n dayStartMs: number;\r\n sunRiseOffsetMs: number;\r\n sunSetOffsetMs: number;\r\n sunDeltaMs: number;\r\n currentTimeOffsetMs: number;\r\n speed: number;\r\n loop: boolean;\r\n shadowColor: ColorDef;\r\n duration: number; // playback duration in milliseconds\r\n adjustedDuration: number; // playback duration in milliseconds/ speed\r\n}\r\n\r\n/** Solar Timeline\r\n * @alpha\r\n */\r\nexport class SolarTimeline extends React.PureComponent<SolarTimelineComponentProps, SolarTimelineComponentState> {\r\n private _datePicker: HTMLElement | null = null;\r\n private _settings: HTMLElement | null = null;\r\n private _requestFrame = 0;\r\n private _unmounted = false;\r\n private _timeLastCycle = 0;\r\n private _totalPlayTime = 0;\r\n private _settingsPopupTitle = UiIModelComponents.translate(\"solarsettings.shadowcolor\");\r\n private _playLabel = UiIModelComponents.translate(\"solartimeline.play\");\r\n private _settingLabel = UiIModelComponents.translate(\"solartimeline.settings\");\r\n private _loopLabel = UiIModelComponents.translate(\"timeline.repeat\");\r\n private _speedLabel = UiIModelComponents.translate(\"solartimeline.speed\");\r\n private _dateTimeLabel = UiIModelComponents.translate(\"solartimeline.dateTime\");\r\n\r\n private _months = [\r\n UiComponents.translate(\"month.short.january\"),\r\n UiComponents.translate(\"month.short.february\"),\r\n UiComponents.translate(\"month.short.march\"),\r\n UiComponents.translate(\"month.short.april\"),\r\n UiComponents.translate(\"month.short.may\"),\r\n UiComponents.translate(\"month.short.june\"),\r\n UiComponents.translate(\"month.short.july\"),\r\n UiComponents.translate(\"month.short.august\"),\r\n UiComponents.translate(\"month.short.september\"),\r\n UiComponents.translate(\"month.short.october\"),\r\n UiComponents.translate(\"month.short.november\"),\r\n UiComponents.translate(\"month.short.december\"),\r\n ];\r\n\r\n private _timeLabel = UiComponents.translate(\"datepicker.time\");\r\n private _amLabel = UiComponents.translate(\"time.am\");\r\n private _pmLabel = UiComponents.translate(\"time.pm\");\r\n private readonly _presetColors = [\r\n ColorDef.create(ColorByName.grey),\r\n ColorDef.create(ColorByName.lightGrey),\r\n ColorDef.create(ColorByName.darkGrey),\r\n ColorDef.create(ColorByName.lightBlue),\r\n ColorDef.create(ColorByName.lightGreen),\r\n ColorDef.create(ColorByName.darkGreen),\r\n ColorDef.create(ColorByName.tan),\r\n ColorDef.create(ColorByName.darkBrown),\r\n ];\r\n\r\n constructor(props: SolarTimelineComponentProps) {\r\n super(props);\r\n\r\n const dayStartMs = this.props.dataProvider.dayStartMs;\r\n const sunRiseOffsetMs = this.props.dataProvider.sunrise.getTime() - dayStartMs;\r\n const sunSetOffsetMs = this.props.dataProvider.sunset.getTime() - dayStartMs;\r\n const sunDeltaMs = sunSetOffsetMs - sunRiseOffsetMs;\r\n const sunOffsetMs = this.props.dataProvider.timeOfDay.getTime() - dayStartMs;\r\n const currentTimeOffsetMs = this.ensureRange(sunOffsetMs, sunRiseOffsetMs, sunSetOffsetMs);\r\n const shadowColor = this.props.dataProvider.shadowColor;\r\n const duration = this.props.duration ? this.props.duration : defaultPlaybackDuration;\r\n const speed = this.props.speed ? this.props.speed : 2;\r\n const adjustedDuration = duration / speed;\r\n this.setPlaybackTimeBySunTime(currentTimeOffsetMs, sunRiseOffsetMs, sunDeltaMs, adjustedDuration);\r\n\r\n this.state = {\r\n isDateOpened: false,\r\n isSettingsOpened: false,\r\n isPlaying: false,\r\n dayStartMs,\r\n sunRiseOffsetMs,\r\n sunSetOffsetMs,\r\n sunDeltaMs,\r\n currentTimeOffsetMs,\r\n speed,\r\n loop: false,\r\n shadowColor,\r\n duration,\r\n adjustedDuration,\r\n };\r\n }\r\n\r\n public override componentWillUnmount() {\r\n window.cancelAnimationFrame(this._requestFrame);\r\n this._unmounted = true;\r\n }\r\n\r\n // recursively update the animation until we hit the end or the pause button is clicked\r\n private _updateAnimation = (_timestamp: number) => {\r\n // istanbul ignore else\r\n if (!this.state.isPlaying || this._unmounted) {\r\n window.cancelAnimationFrame(this._requestFrame);\r\n return;\r\n }\r\n\r\n const currentTime = new Date().getTime();\r\n this._totalPlayTime += (currentTime - this._timeLastCycle);\r\n this._timeLastCycle = currentTime;\r\n let percentComplete = this._totalPlayTime / this.state.adjustedDuration;\r\n if (percentComplete > 1)\r\n percentComplete = 1;\r\n\r\n let newPlayingState = true;\r\n\r\n // calculate the next sun time base on the percentage playback complete - should be int value as that is step amount for slider\r\n let nextSunOffset = Math.floor(this.state.sunRiseOffsetMs + (percentComplete * this.state.sunDeltaMs));\r\n\r\n if (percentComplete > 0.99) {\r\n if (!this.state.loop) {\r\n newPlayingState = false;\r\n nextSunOffset = this.state.sunSetOffsetMs;\r\n window.cancelAnimationFrame(this._requestFrame);\r\n } else {\r\n nextSunOffset = this.state.sunRiseOffsetMs;\r\n this._totalPlayTime = 0;\r\n }\r\n }\r\n\r\n if (this.props.dataProvider.onTimeChanged) {\r\n const currentSunTime = new Date(this.state.dayStartMs + nextSunOffset);\r\n this.props.dataProvider.onTimeChanged(currentSunTime);\r\n }\r\n\r\n this.setState({ isPlaying: newPlayingState, currentTimeOffsetMs: nextSunOffset }, () => {\r\n if (newPlayingState)\r\n this._requestFrame = window.requestAnimationFrame(this._updateAnimation);\r\n });\r\n };\r\n\r\n private _play(sunTimeMs: number) {\r\n this._timeLastCycle = new Date().getTime();\r\n\r\n // start playing\r\n this.setState({ isPlaying: true, currentTimeOffsetMs: sunTimeMs }, () => {\r\n this._requestFrame = window.requestAnimationFrame(this._updateAnimation);\r\n // istanbul ignore else\r\n if (this.props.onPlayPause)\r\n this.props.onPlayPause(true);\r\n });\r\n }\r\n\r\n // user clicked pause button\r\n private _onPause = () => {\r\n // istanbul ignore if\r\n if (!this.state.isPlaying)\r\n return;\r\n\r\n const currentTime = new Date().getTime();\r\n this._totalPlayTime += (currentTime - this._timeLastCycle);\r\n\r\n // stop requesting frames\r\n window.cancelAnimationFrame(this._requestFrame);\r\n\r\n // stop playing\r\n this.setState({ isPlaying: false });\r\n\r\n // istanbul ignore else\r\n if (this.props.onPlayPause)\r\n this.props.onPlayPause(false);\r\n };\r\n\r\n // user clicked play button\r\n private _onPlay = () => {\r\n // istanbul ignore if\r\n if (this.state.isPlaying)\r\n return;\r\n\r\n if (this.state.currentTimeOffsetMs >= this.state.sunSetOffsetMs || this.state.currentTimeOffsetMs <= this.state.sunRiseOffsetMs) {\r\n this._totalPlayTime = 0;\r\n this._play(this.state.sunRiseOffsetMs);\r\n } else {\r\n this._play(this.state.currentTimeOffsetMs);\r\n }\r\n };\r\n\r\n private setPlaybackTimeBySunTime(sunOffsetMs: number, sunRiseOffsetMs: number, sunDeltaMs: number, adjustedDuration?: number) {\r\n this._totalPlayTime = ((sunOffsetMs - sunRiseOffsetMs) / (sunDeltaMs)) * ((adjustedDuration) ? adjustedDuration : this.state.adjustedDuration);\r\n }\r\n\r\n /** note the day passed in is in the time of the current user not in project time because the date picker works in\r\n * local time */\r\n private _onDayClick = (day: Date) => {\r\n const selectedDate = new Date(day.getTime() + this.state.currentTimeOffsetMs);\r\n this.props.dataProvider.setDateAndTime(selectedDate);\r\n const dayStartMs = this.props.dataProvider.dayStartMs;\r\n const sunRiseOffsetMs = this.props.dataProvider.sunrise.getTime() - dayStartMs;\r\n const sunSetOffsetMs = this.props.dataProvider.sunset.getTime() - dayStartMs;\r\n const sunDeltaMs = sunSetOffsetMs - sunRiseOffsetMs;\r\n\r\n const sunOffsetMs = this.ensureRange(this.state.currentTimeOffsetMs, sunRiseOffsetMs, sunSetOffsetMs);\r\n this.setPlaybackTimeBySunTime(sunOffsetMs, sunRiseOffsetMs, sunDeltaMs);\r\n\r\n /** call dataProvider to update display style */\r\n if (this.props.dataProvider.onTimeChanged)\r\n this.props.dataProvider.onTimeChanged(this.props.dataProvider.timeOfDay);\r\n\r\n this.setState({ dayStartMs, sunRiseOffsetMs, sunSetOffsetMs, currentTimeOffsetMs: sunOffsetMs, sunDeltaMs, isDateOpened: false }, () => {\r\n this._timeLastCycle = new Date().getTime();\r\n });\r\n };\r\n\r\n private _onTimeChanged = (time: TimeSpec) => {\r\n // compute the current date (with time)\r\n const dayStartMs = this.props.dataProvider.dayStartMs;\r\n const sunTime = (time.hours * millisecPerHour) + (time.minutes * millisecPerMinute);\r\n const dateWithNewTime = new Date(dayStartMs + sunTime);\r\n this.props.dataProvider.setDateAndTime(dateWithNewTime, true);\r\n\r\n // notify the provider to update style\r\n if (this.props.dataProvider.onTimeChanged)\r\n this.props.dataProvider.onTimeChanged(dateWithNewTime);\r\n\r\n const currentTimeOffsetMs = this.ensureRange(sunTime, this.state.sunRiseOffsetMs, this.state.sunSetOffsetMs);\r\n\r\n this.setPlaybackTimeBySunTime(currentTimeOffsetMs, this.state.sunRiseOffsetMs, this.state.sunDeltaMs);\r\n this._timeLastCycle = new Date().getTime();\r\n\r\n // update the timeline\r\n this.setState({ currentTimeOffsetMs });\r\n };\r\n\r\n private _onCloseDayPicker = () => {\r\n this.setState({ isDateOpened: false });\r\n };\r\n\r\n private _onOpenDayPicker = () => {\r\n this.setState((prevState) => ({ isDateOpened: !prevState.isDateOpened }));\r\n };\r\n\r\n private _onCloseSettingsPopup = () => {\r\n this.setState({ isSettingsOpened: false });\r\n };\r\n\r\n private _onOpenSettingsPopup = () => {\r\n this.setState((prevState) => ({ isSettingsOpened: !prevState.isSettingsOpened }));\r\n };\r\n\r\n private ensureRange(value: number, min: number, max: number): number {\r\n return Math.max(Math.min(value, max), min);\r\n }\r\n\r\n private processSunTimeChange(sunTime: number) {\r\n if (sunTime === this.state.currentTimeOffsetMs)\r\n return;\r\n\r\n const currentTimeOffsetMs = this.ensureRange(sunTime, this.state.sunRiseOffsetMs, this.state.sunSetOffsetMs);\r\n\r\n if (this.props.dataProvider.onTimeChanged) {\r\n const currentSunTime = new Date(this.state.dayStartMs + currentTimeOffsetMs);\r\n this.props.dataProvider.onTimeChanged(currentSunTime);\r\n }\r\n\r\n this.setState({ currentTimeOffsetMs }, () => {\r\n const currentTime = new Date().getTime();\r\n this._timeLastCycle = currentTime;\r\n const percentComplete = (currentTimeOffsetMs - this.state.sunRiseOffsetMs) / this.state.sunDeltaMs;\r\n this._totalPlayTime = percentComplete * this.state.adjustedDuration;\r\n });\r\n }\r\n\r\n private _onUpdate = (values: ReadonlyArray<number>) => {\r\n if (!this.state.isPlaying)\r\n this.processSunTimeChange(values[0]);\r\n };\r\n\r\n private _onChange = (values: ReadonlyArray<number>) => {\r\n if (!this.state.isPlaying)\r\n this.processSunTimeChange(values[0]);\r\n };\r\n\r\n private _onSpeedChange = (value: number) => {\r\n const adjustedDuration = this.state.duration / value;\r\n this.setState({ speed: value, adjustedDuration });\r\n };\r\n\r\n private _onToggleLoop = () => {\r\n this.setState((prevState) => ({ loop: !prevState.loop }));\r\n };\r\n\r\n private _formatTime = (millisec: number) => {\r\n const date = new Date(millisec);\r\n // convert project date to browser locale date\r\n const localTime = adjustDateToTimezone(date, this.props.dataProvider.timeZoneOffset * 60);\r\n let hours = localTime.getHours();\r\n const minutes = addZero(date.getMinutes());\r\n const abbrev = (hours < 12) ? this._amLabel : (hours === 24) ? this._amLabel : this._pmLabel;\r\n hours = (hours > 12) ? hours - 12 : hours;\r\n return `${hours}:${minutes} ${abbrev}`;\r\n };\r\n\r\n private _onPresetColorPick = (shadowColor: ColorDef) => {\r\n this.setState({ shadowColor }, () => this.props.dataProvider.shadowColor = shadowColor);\r\n };\r\n\r\n private _handleHueOrSaturationChange = (hueOrSaturation: HSVColor) => {\r\n if (hueOrSaturation.s === 0) // for a ColorDef to be created from hsv s can't be 0\r\n hueOrSaturation = hueOrSaturation.clone(undefined, 0.5);\r\n\r\n const shadowColor = hueOrSaturation.toColorDef();\r\n this.setState({ shadowColor }, () => this.props.dataProvider.shadowColor = shadowColor);\r\n };\r\n\r\n public getLocalTime(ticks: number): Date {\r\n const projectTime = new Date(ticks);\r\n // convert project date to browser locale date\r\n return adjustDateToTimezone(projectTime, this.props.dataProvider.timeZoneOffset * 60);\r\n }\r\n\r\n public override render() {\r\n const { dataProvider } = this.props;\r\n const { speed, loop, currentTimeOffsetMs,\r\n sunRiseOffsetMs, sunSetOffsetMs } = this.state;\r\n const localTime = this.getLocalTime(this.state.dayStartMs + this.state.currentTimeOffsetMs);\r\n const formattedTime = this._formatTime(dataProvider.dayStartMs + currentTimeOffsetMs);\r\n const formattedDate = `${this._months[localTime.getMonth()]}, ${localTime.getDate()}`;\r\n\r\n const colorSwatchStyle: React.CSSProperties = {\r\n width: `100%`,\r\n height: `100%`,\r\n };\r\n\r\n return (\r\n <div className={\"solar-timeline-wrapper\"} >\r\n <div className=\"header\">\r\n <PlayButton tooltip={this._playLabel} className=\"play-button\" isPlaying={this.state.isPlaying} onPlay={this._onPlay} onPause={this._onPause} />\r\n <button data-testid=\"solar-date-time-button\" title={this._dateTimeLabel} className=\"current-date\" ref={(element) => this._datePicker = element} onClick={this._onOpenDayPicker}>\r\n <span>{formattedDate}</span>\r\n <span>/</span>\r\n <span>{formattedTime}</span>\r\n <span className=\"icon\"><Icon iconSpec={<SvgCalendar />} /></span>\r\n </button>\r\n <Popup style={{ border: \"none\" }} offset={11} target={this._datePicker} isOpen={this.state.isDateOpened} onClose={this._onCloseDayPicker} position={RelativePosition.Top}>\r\n <div className=\"components-date-picker-calendar-popup-panel\" data-testid=\"components-date-picker-calendar-popup-panel\">\r\n <DatePicker selected={localTime} onDateChange={this._onDayClick} showFocusOutline={false} />\r\n <div className=\"time-container\">\r\n <Text variant=\"body\" className=\"time-label\">{this._timeLabel}</Text>\r\n <TimeField time={{ hours: localTime.getHours(), minutes: localTime.getMinutes(), seconds: 0 }} timeDisplay={TimeDisplay.H12MC} onTimeChange={this._onTimeChanged} />\r\n </div>\r\n </div>\r\n </Popup>\r\n <Timeline className=\"solar-timeline\"\r\n dayStartMs={dataProvider.dayStartMs}\r\n sunSetOffsetMs={sunSetOffsetMs}\r\n sunRiseOffsetMs={sunRiseOffsetMs}\r\n currentTimeOffsetMs={currentTimeOffsetMs}\r\n onChange={this._onChange}\r\n onUpdate={this._onUpdate}\r\n formatTime={this._formatTime}\r\n isPlaying={this.state.isPlaying}\r\n />\r\n <div className=\"speed-container\">\r\n <span title={this._speedLabel}>{speed}x</span>\r\n <SpeedTimeline className=\"speed\" onChange={this._onSpeedChange} speed={this.state.speed} />\r\n </div>\r\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\r\n <span title={this._loopLabel}\r\n className={classnames(\"icon\", !loop && \"no-loop-playback\", loop && \"loop-playback\")} onClick={this._onToggleLoop}\r\n role=\"button\" tabIndex={-1}\r\n ><Icon iconSpec={<SvgLoop />} /></span>\r\n <button data-testid=\"shadow-settings-button\" title={this._settingLabel} className=\"shadow-settings-button\" ref={(element) => this._settings = element} onClick={this._onOpenSettingsPopup}>\r\n <span className=\"icon\"><Icon iconSpec={<SvgSettings />} /></span>\r\n </button>\r\n <Popup className=\"shadow-settings-popup\" target={this._settings} offset={11} isOpen={this.state.isSettingsOpened} onClose={this._onCloseSettingsPopup} position={RelativePosition.Top}>\r\n <div className=\"shadow-settings-popup-container\" >\r\n <div className=\"shadow-settings-header\">{this._settingsPopupTitle}</div>\r\n <div className=\"shadow-settings-color\">\r\n <div className=\"shadow-settings-color-top\">\r\n <SaturationPicker hsv={this.state.shadowColor.toHSV()} onSaturationChange={this._handleHueOrSaturationChange} />\r\n </div>\r\n <div className=\"shadow-settings-color-bottom\">\r\n <div className=\"shadow-settings-color-bottom-left\">\r\n <HueSlider hsv={this.state.shadowColor.toHSV()} onHueChange={this._handleHueOrSaturationChange} isHorizontal={true} />\r\n </div>\r\n <div className=\"shadow-settings-color-bottom-right\">\r\n <ColorSwatch style={colorSwatchStyle} colorDef={this.state.shadowColor} round={false} />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"shadow-settings-color-presets\">\r\n <ColorSwatch colorDef={this._presetColors[0]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[1]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[2]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[3]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[4]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[5]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[6]} round={false} onColorPick={this._onPresetColorPick} />\r\n <ColorSwatch colorDef={this._presetColors[7]} round={false} onColorPick={this._onPresetColorPick} />\r\n </div>\r\n </div>\r\n </Popup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -7,27 +7,27 @@
|
|
|
7
7
|
$top-position: 6px;
|
|
8
8
|
$bottom-position: 4px;
|
|
9
9
|
|
|
10
|
-
.solar-slider.solar-timeline
|
|
10
|
+
.solar-slider.solar-timeline > .iui-slider-container {
|
|
11
11
|
height: 28px;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
.solar-timeline-wrapper {
|
|
15
15
|
box-sizing: border-box;
|
|
16
|
-
background:
|
|
16
|
+
background: var(--iui-color-background);
|
|
17
17
|
width: 100%;
|
|
18
18
|
display: flex;
|
|
19
19
|
flex-direction: column;
|
|
20
20
|
position: relative;
|
|
21
21
|
padding: 8px 16px;
|
|
22
|
-
color:
|
|
23
|
-
font-size:
|
|
22
|
+
color: var(--iui-color-text);
|
|
23
|
+
font-size: var(--iui-font-size-1);
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
> .header {
|
|
26
26
|
display: flex;
|
|
27
27
|
align-items: center;
|
|
28
28
|
position: relative;
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
> .play-button {
|
|
31
31
|
width: 26px;
|
|
32
32
|
height: 26px;
|
|
33
33
|
background: inherit;
|
|
@@ -35,10 +35,10 @@ $bottom-position: 4px;
|
|
|
35
35
|
font-size: 20px;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
> .shadow-settings-button {
|
|
39
39
|
display: flex;
|
|
40
40
|
align-items: center;
|
|
41
|
-
color:
|
|
41
|
+
color: var(--iui-color-icon);
|
|
42
42
|
width: 26px;
|
|
43
43
|
height: 26px;
|
|
44
44
|
background: inherit;
|
|
@@ -48,15 +48,16 @@ $bottom-position: 4px;
|
|
|
48
48
|
cursor: pointer;
|
|
49
49
|
|
|
50
50
|
&:hover {
|
|
51
|
-
color:
|
|
51
|
+
color: var(--iui-color-icon-hover);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
&:focus {
|
|
55
|
-
outline:
|
|
54
|
+
&:focus-visible {
|
|
55
|
+
outline: 1px solid var(--iui-color-border-accent);
|
|
56
|
+
outline-offset: -1px;
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
> .current-date {
|
|
60
61
|
min-width: 175px;
|
|
61
62
|
margin-left: 8px;
|
|
62
63
|
margin-right: 4px;
|
|
@@ -65,56 +66,57 @@ $bottom-position: 4px;
|
|
|
65
66
|
border: none;
|
|
66
67
|
display: flex;
|
|
67
68
|
align-items: center;
|
|
68
|
-
color:
|
|
69
|
-
font-size:
|
|
69
|
+
color: var(--iui-color-text);
|
|
70
|
+
font-size: var(--iui-font-size-1);
|
|
70
71
|
cursor: pointer;
|
|
71
72
|
|
|
72
|
-
|
|
73
|
+
&:focus-visible {
|
|
74
|
+
outline: 1px solid var(--iui-color-border-accent);
|
|
75
|
+
outline-offset: -1px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
> span:nth-child(2) {
|
|
73
79
|
margin: 0 6px;
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
|
|
82
|
+
> .icon-calendar {
|
|
77
83
|
flex-grow: 1;
|
|
78
84
|
margin-left: auto;
|
|
79
85
|
}
|
|
80
86
|
}
|
|
81
87
|
|
|
82
|
-
|
|
88
|
+
> .speed-container {
|
|
83
89
|
display: flex;
|
|
84
90
|
align-items: center;
|
|
85
91
|
margin-left: auto;
|
|
86
92
|
cursor: pointer;
|
|
87
93
|
|
|
88
|
-
|
|
94
|
+
> .speed {
|
|
89
95
|
margin-left: 12px;
|
|
90
96
|
width: 0;
|
|
91
97
|
opacity: 0;
|
|
92
|
-
transition: all .2s linear;
|
|
98
|
+
transition: all 0.2s linear;
|
|
93
99
|
margin-right: 10px;
|
|
94
100
|
}
|
|
95
101
|
}
|
|
96
102
|
|
|
97
|
-
|
|
98
|
-
color:
|
|
103
|
+
> .loop-playback {
|
|
104
|
+
color: var(--iui-color-icon-accent);
|
|
99
105
|
font-size: 16px;
|
|
100
106
|
cursor: pointer;
|
|
101
107
|
|
|
102
|
-
&:hover {
|
|
103
|
-
color: $buic-foreground-primary-tone;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
108
|
&:focus {
|
|
107
109
|
outline: none;
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
|
|
112
|
-
color:
|
|
113
|
+
> .no-loop-playback {
|
|
114
|
+
color: var(--iui-color-icon);
|
|
113
115
|
font-size: 16px;
|
|
114
116
|
cursor: pointer;
|
|
115
117
|
|
|
116
118
|
&:hover {
|
|
117
|
-
color:
|
|
119
|
+
color: var(--iui-color-icon-hover);
|
|
118
120
|
}
|
|
119
121
|
|
|
120
122
|
&:focus {
|
|
@@ -150,11 +152,11 @@ $bottom-position: 4px;
|
|
|
150
152
|
|
|
151
153
|
.rail-inner {
|
|
152
154
|
width: 100%;
|
|
153
|
-
background:
|
|
155
|
+
background: var(--iui-color-background-backdrop);
|
|
154
156
|
}
|
|
155
157
|
|
|
156
158
|
.rail-solar {
|
|
157
|
-
background:
|
|
159
|
+
background: var(--iui-color-background-accent);
|
|
158
160
|
z-index: 1;
|
|
159
161
|
}
|
|
160
162
|
|
|
@@ -172,9 +174,14 @@ $bottom-position: 4px;
|
|
|
172
174
|
z-index: 4;
|
|
173
175
|
width: 38px;
|
|
174
176
|
height: 20px;
|
|
175
|
-
border-radius:
|
|
177
|
+
border-radius: var(--iui-border-radius-1);
|
|
176
178
|
border: 1px solid $buic-background-5;
|
|
177
|
-
background-image: linear-gradient(
|
|
179
|
+
background-image: linear-gradient(
|
|
180
|
+
to bottom,
|
|
181
|
+
$buic-background-3,
|
|
182
|
+
$buic-background-3
|
|
183
|
+
),
|
|
184
|
+
linear-gradient(to bottom, $buic-background-1, $buic-background-1);
|
|
178
185
|
display: flex;
|
|
179
186
|
align-items: center;
|
|
180
187
|
justify-content: center;
|
|
@@ -182,12 +189,12 @@ $bottom-position: 4px;
|
|
|
182
189
|
transform: translate(-50%, -50%);
|
|
183
190
|
cursor: pointer;
|
|
184
191
|
|
|
185
|
-
>div {
|
|
192
|
+
> div {
|
|
186
193
|
width: 1px;
|
|
187
194
|
height: 10px;
|
|
188
195
|
opacity: 0.25;
|
|
189
196
|
margin: 0 1px;
|
|
190
|
-
background-color:
|
|
197
|
+
background-color: var(--iui-color-text);
|
|
191
198
|
}
|
|
192
199
|
}
|
|
193
200
|
|
|
@@ -217,14 +224,13 @@ $bottom-position: 4px;
|
|
|
217
224
|
}
|
|
218
225
|
|
|
219
226
|
.sunrise {
|
|
220
|
-
color:
|
|
227
|
+
color: var(--iui-color-icon-warning);
|
|
221
228
|
margin: 0 24px 0 8px;
|
|
222
229
|
}
|
|
223
|
-
|
|
224
230
|
}
|
|
225
231
|
}
|
|
226
232
|
|
|
227
|
-
.solar-timeline-wrapper
|
|
233
|
+
.solar-timeline-wrapper > .header > .speed-container:hover > .speed {
|
|
228
234
|
opacity: 1;
|
|
229
235
|
width: 80px;
|
|
230
236
|
}
|
|
@@ -233,7 +239,7 @@ $bottom-position: 4px;
|
|
|
233
239
|
transform: rotate(180deg);
|
|
234
240
|
}
|
|
235
241
|
|
|
236
|
-
.solar-timeline-wrapper.expanded
|
|
242
|
+
.solar-timeline-wrapper.expanded > .header > .current-date {
|
|
237
243
|
margin-left: 70px;
|
|
238
244
|
}
|
|
239
245
|
|
|
@@ -250,8 +256,6 @@ $bottom-position: 4px;
|
|
|
250
256
|
height: 100px;
|
|
251
257
|
}
|
|
252
258
|
|
|
253
|
-
|
|
254
|
-
|
|
255
259
|
.shadow-settings-color-top {
|
|
256
260
|
display: inline;
|
|
257
261
|
}
|
|
@@ -315,7 +319,7 @@ $bottom-position: 4px;
|
|
|
315
319
|
display: grid;
|
|
316
320
|
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
|
|
317
321
|
grid-column-gap: 2px;
|
|
318
|
-
border-top: 1px solid
|
|
322
|
+
border-top: 1px solid var(--iui-color-border-subtle);
|
|
319
323
|
}
|
|
320
324
|
}
|
|
321
325
|
|
|
@@ -323,13 +327,13 @@ $bottom-position: 4px;
|
|
|
323
327
|
position: absolute;
|
|
324
328
|
top: -8px;
|
|
325
329
|
display: inline-block;
|
|
326
|
-
border-bottom: 1px dotted
|
|
330
|
+
border-bottom: 1px dotted rgba(0, 0, 0, var(--iui-opacity-3));
|
|
327
331
|
font-size: 14px;
|
|
328
332
|
}
|
|
329
333
|
|
|
330
334
|
.solar-tooltip-text {
|
|
331
335
|
width: 100px;
|
|
332
|
-
background-color:
|
|
336
|
+
background-color: rgba(0, 0, 0, var(--iui-opacity-3));
|
|
333
337
|
color: #fff;
|
|
334
338
|
// opacity: 0.8;
|
|
335
339
|
text-align: center;
|
|
@@ -349,10 +353,7 @@ $bottom-position: 4px;
|
|
|
349
353
|
margin-left: -5px;
|
|
350
354
|
border-width: 5px;
|
|
351
355
|
border-style: solid;
|
|
352
|
-
border-color:
|
|
356
|
+
border-color: rgba(0, 0, 0, var(--iui-opacity-3)) transparent transparent
|
|
357
|
+
transparent;
|
|
353
358
|
}
|
|
354
359
|
}
|
|
355
|
-
|
|
356
|
-
.core-tooltip-tooltip.components-rail-tooltip {
|
|
357
|
-
pointer-events: none;
|
|
358
|
-
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/** @packageDocumentation
|
|
2
|
-
* @module Timeline
|
|
3
|
-
*/
|
|
4
|
-
/// <reference types="react" />
|
|
5
|
-
import "./SpeedTimeline.scss";
|
|
6
|
-
import { CommonProps } from "@itwin/core-react";
|
|
7
|
-
interface SpeedProps extends CommonProps {
|
|
8
|
-
speed: number;
|
|
9
|
-
onChange?: (value: number) => void;
|
|
10
|
-
}
|
|
11
|
-
/** Speed Timeline used in Solar Timeline component
|
|
12
|
-
* @internal
|
|
13
|
-
*/
|
|
14
|
-
export declare function SpeedTimeline(props: SpeedProps): JSX.Element;
|
|
15
|
-
export {};
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module Timeline
|
|
3
|
+
*/
|
|
4
|
+
/// <reference types="react" />
|
|
5
|
+
import "./SpeedTimeline.scss";
|
|
6
|
+
import { CommonProps } from "@itwin/core-react";
|
|
7
|
+
interface SpeedProps extends CommonProps {
|
|
8
|
+
speed: number;
|
|
9
|
+
onChange?: (value: number) => void;
|
|
10
|
+
}
|
|
11
|
+
/** Speed Timeline used in Solar Timeline component
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function SpeedTimeline(props: SpeedProps): JSX.Element;
|
|
15
|
+
export {};
|
|
16
16
|
//# sourceMappingURL=SpeedTimeline.d.ts.map
|
|
@@ -1,29 +1,29 @@
|
|
|
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 "./SpeedTimeline.scss";
|
|
9
|
-
import classnames from "classnames";
|
|
10
|
-
import * as React from "react";
|
|
11
|
-
import { Slider } from "@itwin/itwinui-react";
|
|
12
|
-
/** Speed Timeline used in Solar Timeline component
|
|
13
|
-
* @internal
|
|
14
|
-
*/
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
16
|
-
export function SpeedTimeline(props) {
|
|
17
|
-
// istanbul ignore next - WIP
|
|
18
|
-
const onChange = (values) => {
|
|
19
|
-
const value = values[0];
|
|
20
|
-
if (props.onChange && (value >= 1 && value <= 6))
|
|
21
|
-
props.onChange(value);
|
|
22
|
-
};
|
|
23
|
-
const tooltipProps = React.useCallback(() => {
|
|
24
|
-
return { visible: false };
|
|
25
|
-
}, []);
|
|
26
|
-
return (React.createElement("div", { className: classnames("speed-timeline", props.className) },
|
|
27
|
-
React.createElement(Slider, { step: 1, min: 1, max: 6, minLabel: "", maxLabel: "", onUpdate: onChange, onChange: onChange, values: [props.speed], trackDisplayMode: "none", tooltipProps: tooltipProps })));
|
|
28
|
-
}
|
|
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 "./SpeedTimeline.scss";
|
|
9
|
+
import classnames from "classnames";
|
|
10
|
+
import * as React from "react";
|
|
11
|
+
import { Slider } from "@itwin/itwinui-react";
|
|
12
|
+
/** Speed Timeline used in Solar Timeline component
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
16
|
+
export function SpeedTimeline(props) {
|
|
17
|
+
// istanbul ignore next - WIP
|
|
18
|
+
const onChange = (values) => {
|
|
19
|
+
const value = values[0];
|
|
20
|
+
if (props.onChange && (value >= 1 && value <= 6))
|
|
21
|
+
props.onChange(value);
|
|
22
|
+
};
|
|
23
|
+
const tooltipProps = React.useCallback(() => {
|
|
24
|
+
return { visible: false };
|
|
25
|
+
}, []);
|
|
26
|
+
return (React.createElement("div", { className: classnames("speed-timeline", props.className) },
|
|
27
|
+
React.createElement(Slider, { step: 1, min: 1, max: 6, minLabel: "", maxLabel: "", onUpdate: onChange, onChange: onChange, values: [props.speed], trackDisplayMode: "none", tooltipProps: tooltipProps })));
|
|
28
|
+
}
|
|
29
29
|
//# sourceMappingURL=SpeedTimeline.js.map
|