@itwin/imodel-components-react 4.9.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/lib/cjs/imodel-components-react/UiIModelComponents.js +2 -4
  3. package/lib/cjs/imodel-components-react/UiIModelComponents.js.map +1 -1
  4. package/lib/cjs/imodel-components-react/color/AlphaSlider.d.ts.map +1 -1
  5. package/lib/cjs/imodel-components-react/color/AlphaSlider.js +8 -6
  6. package/lib/cjs/imodel-components-react/color/AlphaSlider.js.map +1 -1
  7. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js +1 -1
  8. package/lib/cjs/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  9. package/lib/cjs/imodel-components-react/color/HueSlider.d.ts.map +1 -1
  10. package/lib/cjs/imodel-components-react/color/HueSlider.js +8 -6
  11. package/lib/cjs/imodel-components-react/color/HueSlider.js.map +1 -1
  12. package/lib/cjs/imodel-components-react/color/SaturationPicker.js +8 -8
  13. package/lib/cjs/imodel-components-react/color/SaturationPicker.js.map +1 -1
  14. package/lib/cjs/imodel-components-react/editors/ColorEditor.js +1 -1
  15. package/lib/cjs/imodel-components-react/editors/ColorEditor.js.map +1 -1
  16. package/lib/cjs/imodel-components-react/editors/WeightEditor.d.ts.map +1 -1
  17. package/lib/cjs/imodel-components-react/editors/WeightEditor.js.map +1 -1
  18. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts +3 -1
  19. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  20. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js +5 -5
  21. package/lib/cjs/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  22. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js +3 -3
  23. package/lib/cjs/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  24. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js +5 -10
  25. package/lib/cjs/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  26. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  27. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js +2 -1
  28. package/lib/cjs/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  29. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js +1 -1
  30. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  31. package/lib/cjs/imodel-components-react/quantityformat/FormatPanel.scss +0 -4
  32. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js +1 -2
  33. package/lib/cjs/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  34. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js +3 -3
  35. package/lib/cjs/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  36. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js +3 -2
  37. package/lib/cjs/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  38. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js +1 -2
  39. package/lib/cjs/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  40. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js +6 -10
  41. package/lib/cjs/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  42. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.d.ts.map +1 -1
  43. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js +6 -10
  44. package/lib/cjs/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  45. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts.map +1 -1
  46. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js +2 -5
  47. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  48. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +1 -2
  49. package/lib/cjs/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  50. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js +2 -2
  51. package/lib/cjs/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  52. package/lib/cjs/imodel-components-react/timeline/InlineEdit.scss +1 -4
  53. package/lib/cjs/imodel-components-react/timeline/PlayButton.d.ts +24 -0
  54. package/lib/cjs/imodel-components-react/timeline/PlayButton.d.ts.map +1 -0
  55. package/lib/cjs/imodel-components-react/timeline/{PlayerButton.js → PlayButton.js} +5 -25
  56. package/lib/cjs/imodel-components-react/timeline/PlayButton.js.map +1 -0
  57. package/lib/cjs/imodel-components-react/timeline/{PlayerButton.scss → PlayButton.scss} +1 -1
  58. package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts +1 -4
  59. package/lib/cjs/imodel-components-react/timeline/Scrubber.d.ts.map +1 -1
  60. package/lib/cjs/imodel-components-react/timeline/Scrubber.js +13 -33
  61. package/lib/cjs/imodel-components-react/timeline/Scrubber.js.map +1 -1
  62. package/lib/cjs/imodel-components-react/timeline/Scrubber.scss +5 -5
  63. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  64. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js +10 -27
  65. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  66. package/lib/cjs/imodel-components-react/timeline/SolarTimeline.scss +7 -13
  67. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts +28 -66
  68. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  69. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js +216 -359
  70. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  71. package/lib/cjs/imodel-components-react/timeline/TimelineComponent.scss +27 -157
  72. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js +7 -9
  73. package/lib/cjs/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  74. package/lib/cjs/imodel-components-react.d.ts +0 -1
  75. package/lib/cjs/imodel-components-react.d.ts.map +1 -1
  76. package/lib/cjs/imodel-components-react.js +0 -1
  77. package/lib/cjs/imodel-components-react.js.map +1 -1
  78. package/lib/esm/imodel-components-react/UiIModelComponents.js +2 -4
  79. package/lib/esm/imodel-components-react/UiIModelComponents.js.map +1 -1
  80. package/lib/esm/imodel-components-react/color/AlphaSlider.d.ts.map +1 -1
  81. package/lib/esm/imodel-components-react/color/AlphaSlider.js +8 -6
  82. package/lib/esm/imodel-components-react/color/AlphaSlider.js.map +1 -1
  83. package/lib/esm/imodel-components-react/color/ColorPickerButton.js +1 -1
  84. package/lib/esm/imodel-components-react/color/ColorPickerButton.js.map +1 -1
  85. package/lib/esm/imodel-components-react/color/HueSlider.d.ts.map +1 -1
  86. package/lib/esm/imodel-components-react/color/HueSlider.js +8 -6
  87. package/lib/esm/imodel-components-react/color/HueSlider.js.map +1 -1
  88. package/lib/esm/imodel-components-react/color/SaturationPicker.js +8 -8
  89. package/lib/esm/imodel-components-react/color/SaturationPicker.js.map +1 -1
  90. package/lib/esm/imodel-components-react/editors/ColorEditor.js +1 -1
  91. package/lib/esm/imodel-components-react/editors/ColorEditor.js.map +1 -1
  92. package/lib/esm/imodel-components-react/editors/WeightEditor.d.ts.map +1 -1
  93. package/lib/esm/imodel-components-react/editors/WeightEditor.js.map +1 -1
  94. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts +3 -1
  95. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.d.ts.map +1 -1
  96. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js +5 -5
  97. package/lib/esm/imodel-components-react/inputs/QuantityNumberInput.js.map +1 -1
  98. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js +3 -3
  99. package/lib/esm/imodel-components-react/lineweight/WeightPickerButton.js.map +1 -1
  100. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js +5 -10
  101. package/lib/esm/imodel-components-react/navigationaids/CubeNavigationAid.js.map +1 -1
  102. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.d.ts.map +1 -1
  103. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js +2 -1
  104. package/lib/esm/imodel-components-react/navigationaids/DrawingNavigationAid.js.map +1 -1
  105. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js +1 -1
  106. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.js.map +1 -1
  107. package/lib/esm/imodel-components-react/quantityformat/FormatPanel.scss +0 -4
  108. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js +1 -2
  109. package/lib/esm/imodel-components-react/quantityformat/FormatPrecision.js.map +1 -1
  110. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js +3 -3
  111. package/lib/esm/imodel-components-react/quantityformat/FormatSample.js.map +1 -1
  112. package/lib/esm/imodel-components-react/quantityformat/FormatType.js +3 -2
  113. package/lib/esm/imodel-components-react/quantityformat/FormatType.js.map +1 -1
  114. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js +1 -2
  115. package/lib/esm/imodel-components-react/quantityformat/FormatUnitLabel.js.map +1 -1
  116. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js +6 -10
  117. package/lib/esm/imodel-components-react/quantityformat/FormatUnits.js.map +1 -1
  118. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.d.ts.map +1 -1
  119. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js +6 -10
  120. package/lib/esm/imodel-components-react/quantityformat/MiscFormatOptions.js.map +1 -1
  121. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.d.ts.map +1 -1
  122. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js +2 -5
  123. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSelector.js.map +1 -1
  124. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js +1 -2
  125. package/lib/esm/imodel-components-react/quantityformat/misc/ThousandsSeparator.js.map +1 -1
  126. package/lib/esm/imodel-components-react/timeline/InlineEdit.js +2 -2
  127. package/lib/esm/imodel-components-react/timeline/InlineEdit.js.map +1 -1
  128. package/lib/esm/imodel-components-react/timeline/InlineEdit.scss +1 -4
  129. package/lib/esm/imodel-components-react/timeline/PlayButton.d.ts +24 -0
  130. package/lib/esm/imodel-components-react/timeline/PlayButton.d.ts.map +1 -0
  131. package/lib/esm/imodel-components-react/timeline/{PlayerButton.js → PlayButton.js} +4 -23
  132. package/lib/esm/imodel-components-react/timeline/PlayButton.js.map +1 -0
  133. package/lib/esm/imodel-components-react/timeline/{PlayerButton.scss → PlayButton.scss} +1 -1
  134. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts +1 -4
  135. package/lib/esm/imodel-components-react/timeline/Scrubber.d.ts.map +1 -1
  136. package/lib/esm/imodel-components-react/timeline/Scrubber.js +13 -33
  137. package/lib/esm/imodel-components-react/timeline/Scrubber.js.map +1 -1
  138. package/lib/esm/imodel-components-react/timeline/Scrubber.scss +5 -5
  139. package/lib/esm/imodel-components-react/timeline/SolarTimeline.d.ts.map +1 -1
  140. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js +9 -26
  141. package/lib/esm/imodel-components-react/timeline/SolarTimeline.js.map +1 -1
  142. package/lib/esm/imodel-components-react/timeline/SolarTimeline.scss +7 -13
  143. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts +28 -66
  144. package/lib/esm/imodel-components-react/timeline/TimelineComponent.d.ts.map +1 -1
  145. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js +217 -357
  146. package/lib/esm/imodel-components-react/timeline/TimelineComponent.js.map +1 -1
  147. package/lib/esm/imodel-components-react/timeline/TimelineComponent.scss +27 -157
  148. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js +7 -9
  149. package/lib/esm/imodel-components-react/viewport/ViewportComponent.js.map +1 -1
  150. package/lib/esm/imodel-components-react.d.ts +0 -1
  151. package/lib/esm/imodel-components-react.d.ts.map +1 -1
  152. package/lib/esm/imodel-components-react.js +0 -1
  153. package/lib/esm/imodel-components-react.js.map +1 -1
  154. package/package.json +22 -22
  155. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts +0 -34
  156. package/lib/cjs/imodel-components-react/timeline/PlayerButton.d.ts.map +0 -1
  157. package/lib/cjs/imodel-components-react/timeline/PlayerButton.js.map +0 -1
  158. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts +0 -34
  159. package/lib/esm/imodel-components-react/timeline/PlayerButton.d.ts.map +0 -1
  160. package/lib/esm/imodel-components-react/timeline/PlayerButton.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TimelineComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/timeline/TimelineComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Timeline\n */\nimport type { GenericUiEventArgs } from \"@itwin/appui-abstract\";\nimport { UiAdmin } from \"@itwin/appui-abstract\";\nimport type { DateFormatOptions } from \"@itwin/components-react\";\nimport {\n toDateString,\n toTimeString,\n UiComponents,\n} from \"@itwin/components-react\";\nimport { Icon } from \"@itwin/core-react\";\nimport {\n SvgCaretLeft,\n SvgCaretRight,\n SvgCheckmark,\n SvgMoreVertical,\n SvgPlayCircular,\n} from \"@itwin/itwinui-icons-react\";\nimport { DropdownMenu, MenuDivider, MenuItem } from \"@itwin/itwinui-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\n\nimport { UiIModelComponents } from \"../UiIModelComponents\";\nimport { InlineEdit } from \"./InlineEdit\";\nimport type { PlaybackSettings, TimelinePausePlayArgs } from \"./interfaces\";\nimport { TimelinePausePlayAction } from \"./interfaces\";\nimport { PlayButton, PlayerButton } from \"./PlayerButton\";\nimport { Scrubber } from \"./Scrubber\";\n\nimport \"./TimelineComponent.scss\";\n\n// cspell:ignore millisec\n\nconst slowSpeed = 60 * 1000;\nconst mediumSpeed = 20 * 1000;\nconst fastSpeed = 10 * 1000;\n/**\n * [[TimelineMenuItemOption]]: specifies how the app wants the timeline speeds to be installed on the TimelineComponent's ContextMenu\n * \"replace\" : use the app-supplied items in place of the standard items\n * \"append\" : add the app-supplied items following the standard items\n * \"prefix\" : add the app-supplied items before the standard items\n *\n * @public\n */\nexport type TimelineMenuItemOption = \"replace\" | \"append\" | \"prefix\";\n/**\n * [[TimelineMenuItemProps]] specifies playback speed entries in the Timeline's ContextMenu\n * @public\n */\nexport interface TimelineMenuItemProps {\n /** localized label for menu item */\n label: string;\n\n /** duration for the entire timeline to play */\n timelineDuration: number;\n}\n/** TimelineDateMarkerProps: Mark a date on the timeline with an indicator\n * @public\n */\nexport interface TimelineDateMarkerProps {\n /** Date to mark. If undefined, today's date will be used. */\n date?: Date;\n /** ReactNode to use as the marker on the timeline. If undefined, a short vertical bar will mark the date. */\n dateMarker?: React.ReactNode;\n}\n/**\n * [[TimelineComponentProps]] configure the timeline\n * @public\n */\nexport interface TimelineComponentProps {\n /** Start date: beginning of the date range of a date-based timeline. */\n startDate?: Date;\n /** End date: end of the date range of a date-based timeline. */\n endDate?: Date;\n /** Total duration: range of the timeline in milliseconds. */\n totalDuration: number;\n /** Initial value for the current duration (the location of the thumb) in milliseconds */\n initialDuration?: number;\n /** Show in minimized mode (For future use. This prop will always be treated as true.) */\n minimized?: boolean;\n /** When playing, repeat indefinitely */\n repeat?: boolean;\n /** Show duration instead of time */\n showDuration?: boolean;\n /** Callback with current duration value (as a fraction) */\n onChange?: (duration: number) => void;\n /** Callback triggered when play/pause button is pressed */\n onPlayPause?: (playing: boolean) => void;\n /** Callback triggered when backward/forward buttons are pressed */\n onJump?: (forward: boolean) => void;\n /** Callback triggered when a setting is changed */\n onSettingsChange?: (arg: PlaybackSettings) => void;\n /** Always display in miniMode with no expand menu (For future use. This prop will always be treated as true) */\n alwaysMinimized?: boolean;\n /** ComponentId -- must be set to use TimelineComponentEvents */\n componentId?: string;\n /** Include the repeat option on the Timeline Context Menu */\n includeRepeat?: boolean;\n /** App-supplied speed entries in the Timeline Context Menu */\n appMenuItems?: TimelineMenuItemProps[];\n /** How to include the supplied app menu items in the Timeline Context Menu (prefix, append, replace)*/\n appMenuItemOption?: TimelineMenuItemOption;\n /** Display date and time offset by the number of minutes specified. When undefined - local timezone will be used */\n timeZoneOffset?: number;\n /** Display a marker on the timeline rail to indicate current date - will only work if starDate and endDate are defined */\n markDate?: TimelineDateMarkerProps;\n /** Options used to format date string. If not defined it will user browser default locale settings. */\n dateFormatOptions?: DateFormatOptions;\n /** Options used to format time string. If not defined it will user browser default locale settings. */\n timeFormatOptions?: DateFormatOptions;\n}\n/** @internal */\ninterface TimelineComponentState {\n /** True if timeline is currently playing, false if paused */\n isPlaying: boolean;\n /** Minimized mode (For future use. This will always be true) */\n minimized?: boolean;\n /** Current duration in milliseconds */\n currentDuration: number;\n /** Total duration in milliseconds */\n totalDuration: number;\n /** If true, automatically restart when the timeline is finished playing */\n repeat: boolean;\n /** If true, include the repeat option in the timeline context menu */\n includeRepeat: boolean;\n}\n\n/**\n * [[TimelineComponent]] is used to playback timeline data\n * @public\n */\nexport class TimelineComponent extends React.Component<\n TimelineComponentProps,\n TimelineComponentState\n> {\n private _timeLastCycle = 0;\n private _requestFrame = 0;\n private _unmounted = false;\n private _repeatLabel: string;\n private _removeListener?: () => void;\n private _standardTimelineMenuItems: TimelineMenuItemProps[] = [\n {\n label: UiIModelComponents.translate(\"timeline.slow\"),\n timelineDuration: slowSpeed,\n },\n {\n label: UiIModelComponents.translate(\"timeline.medium\"),\n timelineDuration: mediumSpeed,\n },\n {\n label: UiIModelComponents.translate(\"timeline.fast\"),\n timelineDuration: fastSpeed,\n },\n ];\n\n constructor(props: TimelineComponentProps) {\n super(props);\n\n this.state = {\n isPlaying: false,\n minimized: true,\n currentDuration: props.initialDuration\n ? props.initialDuration\n : /* istanbul ignore next */ 0,\n totalDuration: this.props.totalDuration,\n repeat: this.props.repeat ? true : false,\n includeRepeat:\n this.props.includeRepeat || this.props.includeRepeat === undefined\n ? true\n : false,\n };\n\n this._repeatLabel = UiIModelComponents.translate(\"timeline.repeat\");\n // istanbul ignore else\n if (this.props.componentId) {\n // can't handle an event if we have no id\n this._removeListener = UiAdmin.onGenericUiEvent.addListener(\n this._handleTimelinePausePlayEvent\n );\n }\n }\n\n public override componentWillUnmount() {\n if (this._removeListener) this._removeListener();\n window.cancelAnimationFrame(this._requestFrame);\n this._unmounted = true;\n }\n\n public override shouldComponentUpdate(\n nextProps: TimelineComponentProps,\n nextState: TimelineComponentState\n ) {\n let result = false;\n\n // istanbul ignore next\n if (\n nextState !== this.state ||\n nextProps !== this.props ||\n nextProps.startDate !== this.props.startDate ||\n nextProps.endDate !== this.props.endDate ||\n nextProps.initialDuration !== this.props.initialDuration ||\n nextProps.repeat !== this.props.repeat\n )\n result = true;\n\n return result;\n }\n\n public override componentDidUpdate(prevProps: TimelineComponentProps) {\n // istanbul ignore else\n if (this.props.initialDuration !== prevProps.initialDuration) {\n this._setDuration(\n this.props.initialDuration\n ? this.props.initialDuration\n : /* istanbul ignore next */ 0,\n this.props.totalDuration !== prevProps.totalDuration\n ? this.props.totalDuration\n : undefined\n );\n }\n\n // istanbul ignore else\n if (this.props.repeat !== prevProps.repeat) {\n this._changeRepeatSetting(this.props.repeat);\n }\n\n // istanbul ignore else\n if (this.props.totalDuration !== prevProps.totalDuration) {\n this._onSetTotalDuration(this.props.totalDuration);\n }\n }\n private _handleTimelinePausePlayEvent = (args: GenericUiEventArgs): void => {\n const timelineArgs = args as TimelinePausePlayArgs;\n // istanbul ignore else\n if (\n !timelineArgs ||\n this.props.componentId !== timelineArgs.uiComponentId ||\n timelineArgs.timelineAction === undefined\n )\n return;\n\n let startPlaying: boolean;\n switch (timelineArgs.timelineAction) {\n case TimelinePausePlayAction.Play:\n startPlaying = true;\n break;\n case TimelinePausePlayAction.Pause:\n startPlaying = false;\n break;\n case TimelinePausePlayAction.Toggle:\n startPlaying = !this.state.isPlaying;\n break;\n // istanbul ignore next\n default:\n return; // throw error?\n }\n if (startPlaying) this._onPlay();\n else this._onPause();\n };\n\n // user clicked backward button\n private _onBackward = () => {\n // istanbul ignore else\n if (this.props.onJump) this.props.onJump(false);\n };\n\n // user clicked forward button\n private _onForward = () => {\n // istanbul ignore else\n if (this.props.onJump) this.props.onJump(true);\n };\n\n // user clicked play button\n private _onPlay = () => {\n // istanbul ignore if\n if (this.state.isPlaying) return;\n\n // timeline was complete, restart from the beginning\n if (this.state.currentDuration >= this.state.totalDuration) {\n this._replay();\n } else this._play();\n\n // istanbul ignore else\n if (this.props.onPlayPause) this.props.onPlayPause(true);\n };\n\n // user clicked pause button\n private _onPause = () => {\n // istanbul ignore if\n if (!this.state.isPlaying) return;\n\n // stop requesting frames\n window.cancelAnimationFrame(this._requestFrame);\n\n // stop playing\n this.setState({ isPlaying: false });\n\n // istanbul ignore else\n if (this.props.onPlayPause) this.props.onPlayPause(false);\n };\n\n // user clicked on timeline rail or dragged scrubber handle\n private _onTimelineChange = (values: ReadonlyArray<number>) => {\n const currentDuration = values[0];\n this._setDuration(currentDuration);\n };\n\n // set the current duration, which will call the OnChange callback\n private _setDuration = (currentDuration: number, updatedTotal?: number) => {\n const actualDuration = Math.min(\n updatedTotal ?? this.state.totalDuration,\n Math.max(currentDuration, 0)\n );\n\n this._timeLastCycle = new Date().getTime();\n // istanbul ignore else\n if (!this._unmounted) this.setState({ currentDuration: actualDuration });\n // istanbul ignore else\n if (this.props.onChange) {\n const fraction =\n actualDuration / (updatedTotal ?? this.state.totalDuration);\n this.props.onChange(fraction);\n }\n };\n\n // recursively update the animation until we hit the end or the pause button is clicked\n private _updateAnimation = (_timestamp: number) => {\n // istanbul ignore else\n if (!this.state.isPlaying && !this._unmounted) {\n return;\n }\n\n // update duration\n const currentTime = new Date().getTime();\n const millisecondsElapsed = currentTime - this._timeLastCycle;\n const duration = this.state.currentDuration + millisecondsElapsed;\n this._setDuration(duration);\n\n // stop the animation!\n if (duration >= this.state.totalDuration) {\n window.cancelAnimationFrame(this._requestFrame);\n this.setState({ isPlaying: false });\n if (this.state.repeat) this._replay();\n else {\n // istanbul ignore else\n if (this.props.onPlayPause) this.props.onPlayPause(false);\n }\n\n return;\n }\n\n // continue the animation - request the next frame\n this._requestFrame = window.requestAnimationFrame(this._updateAnimation);\n };\n\n private _play() {\n // start playing\n this.setState({ isPlaying: true }, () => {\n // request the next frame\n this._timeLastCycle = new Date().getTime();\n this._requestFrame = window.requestAnimationFrame(this._updateAnimation);\n });\n }\n\n private _replay = () => {\n // timeline was complete, restart from the beginning\n this.setState({ currentDuration: 0 }, () => this._play());\n };\n\n private _displayTime(millisec: number) {\n const addZero = (i: number) => {\n return i < 10 ? `0${i}` : i;\n };\n\n const date = new Date(millisec);\n // const hours = date.getUTCHours();\n const minutes = date.getUTCMinutes();\n const seconds = date.getUTCSeconds();\n return `${addZero(minutes)}:${addZero(seconds)}`;\n }\n\n private _getMilliseconds(time: string) {\n // istanbul ignore else - WIP\n if (time.indexOf(\":\") !== -1) {\n return (\n (Number(time.split(\":\")[0]) * 60 + Number(time.split(\":\")[1])) * 1000\n );\n } else {\n return Number(time) * 1000;\n }\n }\n\n // user changed the total duration\n private _onTotalDurationChange = (value: string) => {\n // NOTE: we should reset the current duration to 0\n const milliseconds = this._getMilliseconds(value);\n this._onSetTotalDuration(milliseconds);\n };\n\n private _changeRepeatSetting = (newValue?: boolean) => {\n // istanbul ignore else\n if (newValue !== undefined) {\n this.setState(\n () => ({ repeat: newValue }),\n () => {\n // istanbul ignore else\n if (this.props.onSettingsChange) {\n this.props.onSettingsChange({ loop: this.state.repeat });\n }\n }\n );\n }\n };\n\n private _onRepeatChanged = () => {\n this.setState(\n (prevState) => ({ repeat: !prevState.repeat }),\n () => {\n // istanbul ignore else\n if (this.props.onSettingsChange) {\n this.props.onSettingsChange({ loop: this.state.repeat });\n }\n }\n );\n };\n\n private _currentDate = (): Date => {\n const fraction = this.state.currentDuration / this.state.totalDuration;\n if (this.props.endDate && this.props.startDate) {\n const timeElapsed =\n (this.props.endDate.getTime() - this.props.startDate.getTime()) *\n fraction;\n return new Date(this.props.startDate.getTime() + timeElapsed);\n }\n return new Date();\n };\n\n private _onSetTotalDuration = (milliseconds: number) => {\n this.setState({ totalDuration: milliseconds }, () => {\n // istanbul ignore else\n if (this.props.onSettingsChange) {\n this.props.onSettingsChange({ duration: milliseconds });\n }\n });\n };\n\n private _createMenuItemNode(\n item: TimelineMenuItemProps,\n index: number,\n currentTimelineDuration: number,\n close: () => void\n ): React.ReactElement {\n const label = item.label;\n const checked = currentTimelineDuration === item.timelineDuration;\n const icon = checked ? (\n <span className=\"icon\">\n <Icon iconSpec={<SvgCheckmark />} />{\" \"}\n </span>\n ) : (\n <span />\n );\n return (\n <MenuItem\n key={index}\n icon={icon}\n onClick={() => {\n this._onSetTotalDuration(item.timelineDuration);\n close();\n }}\n >\n {label}\n </MenuItem>\n );\n }\n\n private _renderSettings = () => {\n const createMenuItemNodes = (close: () => void): React.ReactElement[] => {\n const { totalDuration } = this.state;\n let contextMenuItems: Array<TimelineMenuItemProps> = [];\n\n if (!this.props.appMenuItems) {\n contextMenuItems = this._standardTimelineMenuItems;\n } else {\n if (this.props.appMenuItemOption === \"append\") {\n contextMenuItems = this._standardTimelineMenuItems.concat(\n this.props.appMenuItems\n );\n } else if (this.props.appMenuItemOption === \"prefix\") {\n contextMenuItems = this.props.appMenuItems.concat(\n this._standardTimelineMenuItems\n );\n } else {\n contextMenuItems = this.props.appMenuItems;\n }\n }\n\n const itemNodes: React.ReactElement[] = [];\n let keyIndex = 0;\n if (this.state.includeRepeat) {\n const checked = this.state.repeat;\n const icon = checked ? (\n <span className=\"icon\">\n <Icon iconSpec={<SvgCheckmark />} />{\" \"}\n </span>\n ) : (\n <span />\n );\n itemNodes.push(\n <MenuItem\n key={++keyIndex}\n onClick={() => {\n this._onRepeatChanged();\n close();\n }}\n icon={icon}\n >\n {this._repeatLabel}\n </MenuItem>\n );\n itemNodes.push(<MenuDivider key={++keyIndex} />);\n }\n\n contextMenuItems.forEach((item: TimelineMenuItemProps, index: number) => {\n itemNodes.push(\n this._createMenuItemNode(\n item,\n index + keyIndex + 1,\n totalDuration,\n close\n )\n );\n });\n\n return itemNodes;\n };\n\n return (\n <DropdownMenu\n menuItems={createMenuItemNodes}\n placement=\"top-start\"\n popperOptions={{\n modifiers: [\n {\n name: \"hide\", // When the timeline is no longer visible, hide the popper.\n },\n {\n name: \"preventOverflow\",\n options: {\n altAxis: true, // Allow the popper to go below the reference element and use as much space as needed.\n },\n },\n {\n name: \"computeStyles\",\n options: {\n roundOffsets: ({ x, y }: { x: number; y: number }) => ({\n x,\n y: Math.max(y, 0), // Ensure that the top of the popper will not go over the top of the document.\n }),\n },\n },\n {\n name: \"setPopperClass\", // Ensure we target only THIS popper with a class\n enabled: true,\n phase: \"beforeWrite\",\n fn({ state }) {\n state.attributes.popper.class =\n \"timeline-component-max-sized-scrolling-menu\";\n },\n },\n ],\n }}\n >\n <span\n data-testid=\"timeline-settings\"\n className=\"timeline-settings icon\"\n role=\"button\"\n tabIndex={-1}\n title={UiComponents.translate(\"button.label.settings\")}\n >\n <Icon iconSpec={<SvgMoreVertical />} />\n </span>\n </DropdownMenu>\n );\n };\n\n public override render() {\n const {\n startDate,\n endDate,\n showDuration,\n timeZoneOffset,\n dateFormatOptions,\n timeFormatOptions,\n } = this.props;\n const { currentDuration, totalDuration, minimized } = this.state;\n const currentDate = this._currentDate();\n const durationString = this._displayTime(currentDuration);\n const totalDurationString = this._displayTime(totalDuration);\n const hasDates = !!startDate && !!endDate;\n\n return (\n <div\n data-testid=\"timeline-component\"\n className={classnames(\n \"timeline-component\",\n !!minimized && \"minimized\",\n hasDates && \"has-dates\"\n )}\n >\n <div className=\"header\">\n <PlayButton\n className=\"play-button\"\n isPlaying={this.state.isPlaying}\n onPlay={this._onPlay}\n onPause={this._onPause}\n data-testid=\"timeline-play\"\n />\n <PlayerButton\n className=\"play-backward\"\n icon={<SvgCaretLeft />}\n onClick={this._onBackward}\n title={UiIModelComponents.translate(\"timeline.backward\")}\n />\n <PlayerButton\n className=\"play-button-step\"\n icon={<SvgPlayCircular />}\n isPlaying={this.state.isPlaying}\n onPlay={this._onPlay}\n onPause={this._onPause}\n title={UiIModelComponents.translate(\"timeline.step\")}\n />\n <PlayerButton\n className=\"play-forward\"\n icon={<SvgCaretRight />}\n onClick={this._onForward}\n title={UiIModelComponents.translate(\"timeline.backward\")}\n />\n <span className=\"current-date\">\n {toDateString(currentDate, timeZoneOffset, dateFormatOptions)}\n </span>\n </div>\n <div className=\"scrubber\">\n <PlayButton\n className=\"play-button\"\n isPlaying={this.state.isPlaying}\n onPlay={this._onPlay}\n onPause={this._onPause}\n />\n <div className=\"start-time-container\">\n {hasDates && (\n <span data-testid=\"test-start-date\" className=\"start-date\">\n {toDateString(startDate, timeZoneOffset, dateFormatOptions)}\n </span>\n )}\n {hasDates && !showDuration && (\n <span data-testid=\"test-start-time\" className=\"start-time\">\n {toTimeString(startDate, timeZoneOffset, timeFormatOptions)}\n </span>\n )}\n {showDuration && (\n <span className=\"duration-start-time\">{durationString}</span>\n )}\n </div>\n <Scrubber\n className=\"slider\"\n currentDuration={this.state.currentDuration}\n totalDuration={totalDuration}\n startDate={startDate}\n endDate={endDate}\n isPlaying={this.state.isPlaying}\n inMiniMode={!!minimized}\n showTime={!showDuration}\n onChange={this._onTimelineChange}\n onUpdate={this._onTimelineChange}\n timeZoneOffset={this.props.timeZoneOffset}\n markDate={this.props.markDate}\n />\n <div className=\"end-time-container\">\n {hasDates && (\n <span className=\"end-date\">\n {toDateString(endDate, timeZoneOffset)}\n </span>\n )}\n {hasDates && !showDuration && (\n <span className=\"end-time\">\n {toTimeString(endDate, timeZoneOffset, timeFormatOptions)}\n </span>\n )}\n {showDuration && (\n <InlineEdit\n className=\"duration-end-time\"\n defaultValue={totalDurationString}\n onChange={this._onTotalDurationChange}\n />\n )}\n </div>\n {minimized && this._renderSettings()}\n </div>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"TimelineComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/timeline/TimelineComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG;;GAEG;AACH,oCAAkC;AAClC,6CAA+B;AAC/B,0DAAgD;AAEhD,8DAIiC;AACjC,oEAA2E;AAC3E,wDAK8B;AAC9B,8DAA2D;AAC3D,6CAA0C;AAE1C,6CAAuD;AACvD,6CAA0C;AAC1C,yCAAsC;AAEtC,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5B,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9B,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC;AAwF5B;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,EACJ,iBAAiB,GAAG,SAAS,EAC7B,SAAS,EACT,OAAO,EACP,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,GAAG,IAAI,EACpB,gBAAgB,EAChB,QAAQ,EACR,WAAW,GACZ,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAC1D,KAAK,CAAC,eAAe,IAAI,CAAC,CAC3B,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,IAAI,SAAS;YAAE,OAAO;QAEtB,IAAI,eAAe,IAAI,aAAa,EAAE;YACpC,kBAAkB,CAAC,CAAC,CAAC,CAAC;SACvB;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7B,MAAM,mBAAmB,GAAG,CAAC,gBAAwB,EAAE,EAAE;QACvD,IAAI,gBAAgB,KAAK,aAAa;YAAE,OAAO;QAE/C,MAAM,QAAQ,GAAG,eAAe,GAAG,aAAa,CAAC;QACjD,MAAM,kBAAkB,GAAG,QAAQ,GAAG,gBAAgB,CAAC;QAEvD,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACnC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QACvC,gBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,CACrB,WAAmB,EACnB,oBAAoB,GAAG,aAAa,EACpC,EAAE;QACF,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACvC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAE1D,IAAI,WAAW,KAAK,eAAe;YAAE,OAAO;QAC5C,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAEhC,MAAM,QAAQ,GAAG,WAAW,GAAG,oBAAoB,CAAC;QACpD,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,SAAkB,EAAE,EAAE;QAC1C,IAAI,SAAS,KAAK,MAAM;YAAE,OAAO;QAEjC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAC9D,KAAK,CAAC,aAAa,CACpB,CAAC;IACF,IAAI,iBAAiB,KAAK,KAAK,CAAC,aAAa,EAAE;QAC7C,oBAAoB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,mBAAmB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;KAC1C;IAED,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAClE,KAAK,CAAC,eAAe,CACtB,CAAC;IACF,IAAI,mBAAmB,KAAK,KAAK,CAAC,eAAe,EAAE;QACjD,sBAAsB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;KACjE;IAED,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,UAAU,KAAK,KAAK,CAAC,MAAM,EAAE;QAC/B,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;KACtC;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO;QAC/B,OAAO,wBAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE;YACnD,MAAM,YAAY,GAAG,IAA6B,CAAC;YACnD,IACE,CAAC,YAAY;gBACb,KAAK,CAAC,WAAW,KAAK,YAAY,CAAC,aAAa;gBAChD,YAAY,CAAC,cAAc,KAAK,SAAS;gBAEzC,OAAO;YAET,QAAQ,YAAY,CAAC,cAAc,EAAE;gBACnC,KAAK,oCAAuB,CAAC,IAAI;oBAC/B,YAAY,EAAE,CAAC;oBACf,MAAM;gBACR,KAAK,oCAAuB,CAAC,KAAK;oBAChC,KAAK,EAAE,CAAC;oBACR,MAAM;gBACR,KAAK,oCAAuB,CAAC,MAAM;oBACjC,IAAI,SAAS,EAAE;wBACb,KAAK,EAAE,CAAC;qBACT;yBAAM;wBACL,YAAY,EAAE,CAAC;qBAChB;oBACD,MAAM;aACT;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,eAAe,GAAG,KAAK,CAAC;QACzC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEzB,IAAI,QAAQ,IAAI,aAAa,EAAE;YAC7B,IAAI,MAAM,EAAE;gBACV,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO;aACR;YAED,KAAK,EAAE,CAAC;SACT;IACH,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,MAAM,gBAAgB,GAAG,CAAC,MAA6B,EAAE,EAAE;QACzD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,cAAc,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC;IAC1C,OAAO,CACL,4CAAiB,oBAAoB,EAAC,SAAS,EAAC,oBAAoB;QAClE,oBAAC,uBAAU,IAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,GAAI;QAC1E,6BAAK,SAAS,EAAC,gBAAgB;YAC5B,QAAQ,IAAI,CACX,6CAAkB,iBAAiB,EAAC,SAAS,EAAC,eAAe,IAC1D,IAAA,+BAAY,EAAC,SAAS,EAAE,cAAc,EAAE,iBAAiB,CAAC,CACtD,CACR;YACA,QAAQ,IAAI,CAAC,YAAY,IAAI,CAC5B,6CAAkB,iBAAiB,EAAC,SAAS,EAAC,eAAe,IAC1D,IAAA,+BAAY,EAAC,SAAS,EAAE,cAAc,EAAE,iBAAiB,CAAC,CACtD,CACR;YACA,YAAY,IAAI,CACf,8BAAM,SAAS,EAAC,wBAAwB,IAAE,kBAAkB,CAAQ,CACrE,CACG;QACN,oBAAC,mBAAQ,IACP,SAAS,EAAC,QAAQ,EAClB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,YAAY,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACxB;QACF,6BAAK,SAAS,EAAC,gBAAgB;YAC5B,QAAQ,IAAI,CACX,6CAAkB,eAAe,EAAC,SAAS,EAAC,eAAe,IACxD,IAAA,+BAAY,EAAC,OAAO,EAAE,cAAc,CAAC,CACjC,CACR;YACA,QAAQ,IAAI,CAAC,YAAY,IAAI,CAC5B,8BAAM,SAAS,EAAC,eAAe,IAC5B,IAAA,+BAAY,EAAC,OAAO,EAAE,cAAc,EAAE,iBAAiB,CAAC,CACpD,CACR;YACA,YAAY,IAAI,CACf,oBAAC,uBAAU,IACT,SAAS,EAAC,wBAAwB,EAClC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACzC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;gBACxC,CAAC,GACD,CACH,CACG;QACN,oBAAC,YAAY,IACX,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,GAAG,EAAE;gBAClB,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC,EACD,qBAAqB,EAAE,CAAC,gBAAgB,EAAE,EAAE;gBAC1C,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;YACxC,CAAC,GACD,CACE,CACP,CAAC;AACJ,CAAC;AA9MD,8CA8MC;AAcD,SAAS,YAAY,CAAC,EACpB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,aAAa,EACb,aAAa,EACb,qBAAqB,GACH;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,GAAG,EAAE,CAAC,+BAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC,EACrD,EAAE,CACH,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAC/B,GAAG,EAAE,CAAC,uCAAkB,CAAC,SAAS,CAAC,iBAAiB,CAAC,EACrD,EAAE,CACH,CAAC;IACF,MAAM,aAAa,GAA4B,KAAK,CAAC,OAAO,CAC1D,GAAG,EAAE,CAAC;QACJ;YACE,KAAK,EAAE,uCAAkB,CAAC,SAAS,CAAC,eAAe,CAAC;YACpD,gBAAgB,EAAE,SAAS;SAC5B;QACD;YACE,KAAK,EAAE,uCAAkB,CAAC,SAAS,CAAC,iBAAiB,CAAC;YACtD,gBAAgB,EAAE,WAAW;SAC9B;QACD;YACE,KAAK,EAAE,uCAAkB,CAAC,SAAS,CAAC,eAAe,CAAC;YACpD,gBAAgB,EAAE,SAAS;SAC5B;KACF,EACD,EAAE,CACH,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,aAAa,CAAC;SACtB;QAED,IAAI,iBAAiB,KAAK,QAAQ,EAAE;YAClC,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;SAC5C;QACD,IAAI,iBAAiB,KAAK,QAAQ,EAAE;YAClC,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,aAAa,CAAC,CAAC;SAC5C;QACD,UAAU;QACV,OAAO,YAAY,CAAC;IACtB,CAAC,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAErD,OAAO,CACL,oBAAC,4BAAY,IACX,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,OAAO;gBACL,GAAG,CAAC,aAAa;oBACf,CAAC,CAAC;wBACE,oBAAC,wBAAQ,IACP,GAAG,EAAC,QAAQ,EACZ,OAAO,EAAE,GAAG,EAAE;gCACZ,aAAa,EAAE,CAAC;gCAChB,KAAK,EAAE,CAAC;4BACV,CAAC,EACD,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAC,kCAAY,OAAG,CAAC,CAAC,CAAC,yCAAK,IAE3C,WAAW,CACH;wBACX,oBAAC,2BAAW,IAAC,GAAG,EAAC,SAAS,GAAG;qBAC9B;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBAC/B,MAAM,OAAO,GAAG,aAAa,KAAK,IAAI,CAAC,gBAAgB,CAAC;oBACxD,OAAO,CACL,oBAAC,wBAAQ,IACP,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAC,kCAAY,OAAG,CAAC,CAAC,CAAC,yCAAK,EAC7C,OAAO,EAAE,GAAG,EAAE;4BACZ,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;4BAC7C,KAAK,EAAE,CAAC;wBACV,CAAC,IAEA,IAAI,CAAC,KAAK,CACF,CACZ,CAAC;gBACJ,CAAC,CAAC;aACH,CAAC;QACJ,CAAC,EACD,SAAS,EAAC,WAAW;QAErB,oBAAC,0BAAU,mBACG,mBAAmB,EAC/B,KAAK,EAAE,aAAa,EACpB,SAAS,EAAC,YAAY;YAEtB,oBAAC,qCAAe,OAAG,CACR,CACA,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,SAA4C,EAC5C,OAAO,GAAG,IAAI;IAEd,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IAEjC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAsB,CAAC;IAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,EAAE;gBACrC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;aAC5B;YAED,MAAM,KAAK,GAAG,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC;YACzC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAE3B,YAAY,CAAC,OAAO,CAAC;gBACnB,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,SAAS;gBAAE,OAAO;YAEtB,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAChC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5B,OAAO,CACL,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CACtE,CAAC;KACH;SAAM;QACL,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC5B;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EAAU;IAC/B,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,oCAAoC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACrC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;AACnD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Timeline\n */\nimport \"./TimelineComponent.scss\";\nimport * as React from \"react\";\nimport { UiAdmin } from \"@itwin/appui-abstract\";\nimport type { DateFormatOptions } from \"@itwin/components-react\";\nimport {\n toDateString,\n toTimeString,\n UiComponents,\n} from \"@itwin/components-react\";\nimport { SvgCheckmark, SvgMoreVertical } from \"@itwin/itwinui-icons-react\";\nimport {\n DropdownMenu,\n IconButton,\n MenuDivider,\n MenuItem,\n} from \"@itwin/itwinui-react\";\nimport { UiIModelComponents } from \"../UiIModelComponents\";\nimport { InlineEdit } from \"./InlineEdit\";\nimport type { PlaybackSettings, TimelinePausePlayArgs } from \"./interfaces\";\nimport { TimelinePausePlayAction } from \"./interfaces\";\nimport { PlayButton } from \"./PlayButton\";\nimport { Scrubber } from \"./Scrubber\";\n\nconst slowSpeed = 60 * 1000;\nconst mediumSpeed = 20 * 1000;\nconst fastSpeed = 10 * 1000;\n\n/** [[TimelineMenuItemOption]]: specifies how the app wants the timeline speeds to be installed on the TimelineComponent's ContextMenu\n * \"replace\" : use the app-supplied items in place of the standard items\n * \"append\" : add the app-supplied items following the standard items\n * \"prefix\" : add the app-supplied items before the standard items\n *\n * @public\n */\nexport type TimelineMenuItemOption = \"replace\" | \"append\" | \"prefix\";\n\n/** [[TimelineMenuItemProps]] specifies playback speed entries in the Timeline's ContextMenu\n * @public\n */\nexport interface TimelineMenuItemProps {\n /** localized label for menu item */\n label: string;\n\n /** duration for the entire timeline to play */\n timelineDuration: number;\n}\n\n/** TimelineDateMarkerProps: Mark a date on the timeline with an indicator\n * @public\n */\nexport interface TimelineDateMarkerProps {\n /** Date to mark. If undefined, today's date will be used. */\n date?: Date;\n /** ReactNode to use as the marker on the timeline. If undefined, a short vertical bar will mark the date. */\n dateMarker?: React.ReactNode;\n}\n\n/** [[TimelineComponentProps]] configure the timeline\n * @public\n */\nexport interface TimelineComponentProps {\n /** Start date: beginning of the date range of a date-based timeline. */\n startDate?: Date;\n /** End date: end of the date range of a date-based timeline. */\n endDate?: Date;\n /** Total duration: range of the timeline in milliseconds.\n * @note This can be changed by user interaction. See {@link TimelineComponentProps.appMenuItems}.\n */\n totalDuration: number;\n /** Initial value for the current duration (the location of the thumb) in milliseconds */\n initialDuration?: number;\n /** Show in minimized mode (For future use. This prop will always be treated as true.)\n * @deprecated in 4.10.x. Has no effect.\n */\n minimized?: boolean;\n /** When playing, repeat indefinitely. Defaults to `false`.\n * @note This can be changed by user interaction. See {@link TimelineComponentProps.includeRepeat}.\n */\n repeat?: boolean;\n /** Show duration instead of time */\n showDuration?: boolean;\n /** Callback with current duration value (as a fraction) */\n onChange?: (duration: number) => void;\n /** Callback triggered when play/pause button is pressed */\n onPlayPause?: (playing: boolean) => void;\n /** Callback triggered when backward/forward buttons are pressed.\n * @deprecated in 4.10.x. Has no effect.\n */\n onJump?: (forward: boolean) => void;\n /** Callback triggered when a setting is changed */\n onSettingsChange?: (arg: PlaybackSettings) => void;\n /** Always display in miniMode with no expand menu (For future use. This prop will always be treated as true)\n * @deprecated in 4.10.x. Has no effect.\n */\n alwaysMinimized?: boolean;\n /** ComponentId -- must be set to use TimelineComponentEvents */\n componentId?: string;\n /** Include the repeat option on the Timeline Context Menu. Defaults to `true`. */\n includeRepeat?: boolean;\n /** App-supplied speed entries in the Timeline Context Menu. Defaults to `[Slow, Medium, Fast]` items. */\n appMenuItems?: TimelineMenuItemProps[];\n /** How to include the supplied app menu items in the Timeline Context Menu (prefix, append or replace). Defaults to `replace`. */\n appMenuItemOption?: TimelineMenuItemOption;\n /** Display date and time offset by the number of minutes specified. When undefined - local timezone will be used */\n timeZoneOffset?: number;\n /** Display a marker on the timeline rail to indicate current date - will only work if starDate and endDate are defined */\n markDate?: TimelineDateMarkerProps;\n /** Options used to format date string. If not defined it will user browser default locale settings. */\n dateFormatOptions?: DateFormatOptions;\n /** Options used to format time string. If not defined it will user browser default locale settings. */\n timeFormatOptions?: DateFormatOptions;\n}\n\n/** [[TimelineComponent]] is used to playback timeline data\n * @public\n */\nexport function TimelineComponent(props: TimelineComponentProps) {\n const {\n appMenuItemOption = \"replace\",\n startDate,\n endDate,\n showDuration,\n timeZoneOffset,\n dateFormatOptions,\n timeFormatOptions,\n includeRepeat = true,\n onSettingsChange,\n onChange,\n onPlayPause,\n } = props;\n const [isPlaying, setIsPlaying] = React.useState(false);\n const [currentDuration, setCurrentDuration] = React.useState(\n props.initialDuration ?? 0\n );\n const [totalDuration, setTotalDuration] = React.useState(props.totalDuration);\n const [repeat, setRepeat] = React.useState(props.repeat ?? false);\n\n const playOrReplay = React.useCallback(() => {\n if (isPlaying) return;\n\n if (currentDuration >= totalDuration) {\n setCurrentDuration(0);\n }\n\n setIsPlaying(true);\n onPlayPause?.(true);\n }, [isPlaying, onPlayPause, currentDuration, totalDuration]);\n const pause = React.useCallback(() => {\n if (!isPlaying) return;\n setIsPlaying(false);\n onPlayPause?.(false);\n }, [isPlaying, onPlayPause]);\n const updateTotalDuration = (newTotalDuration: number) => {\n if (newTotalDuration === totalDuration) return;\n\n const fraction = currentDuration / totalDuration;\n const newCurrentDuration = fraction * newTotalDuration;\n\n setTotalDuration(newTotalDuration);\n setCurrentDuration(newCurrentDuration);\n onSettingsChange?.({ duration: newTotalDuration });\n };\n const updateDuration = (\n newDuration: number,\n currentTotalDuration = totalDuration\n ) => {\n newDuration = Math.max(newDuration, 0);\n newDuration = Math.min(newDuration, currentTotalDuration);\n\n if (newDuration === currentDuration) return;\n setCurrentDuration(newDuration);\n\n const fraction = newDuration / currentTotalDuration;\n onChange?.(fraction);\n };\n const updateRepeat = (newRepeat: boolean) => {\n if (newRepeat === repeat) return;\n\n setRepeat(newRepeat);\n onSettingsChange?.({ loop: newRepeat });\n };\n\n const [prevTotalDuration, setPrevTotalDuration] = React.useState(\n props.totalDuration\n );\n if (prevTotalDuration !== props.totalDuration) {\n setPrevTotalDuration(props.totalDuration);\n updateTotalDuration(props.totalDuration);\n }\n\n const [prevInitialDuration, setPrevInitialDuration] = React.useState(\n props.initialDuration\n );\n if (prevInitialDuration !== props.initialDuration) {\n setPrevInitialDuration(props.initialDuration);\n updateDuration(props.initialDuration ?? 0, props.totalDuration);\n }\n\n const [prevRepeat, setPrevRepeat] = React.useState(props.repeat);\n if (prevRepeat !== props.repeat) {\n setPrevRepeat(props.repeat);\n updateRepeat(props.repeat ?? repeat);\n }\n\n React.useEffect(() => {\n if (!props.componentId) return;\n return UiAdmin.onGenericUiEvent.addListener((args) => {\n const timelineArgs = args as TimelinePausePlayArgs;\n if (\n !timelineArgs ||\n props.componentId !== timelineArgs.uiComponentId ||\n timelineArgs.timelineAction === undefined\n )\n return;\n\n switch (timelineArgs.timelineAction) {\n case TimelinePausePlayAction.Play:\n playOrReplay();\n break;\n case TimelinePausePlayAction.Pause:\n pause();\n break;\n case TimelinePausePlayAction.Toggle:\n if (isPlaying) {\n pause();\n } else {\n playOrReplay();\n }\n break;\n }\n });\n }, [isPlaying, pause, playOrReplay, props.componentId]);\n useAnimation(({ delta }) => {\n const duration = currentDuration + delta;\n updateDuration(duration);\n\n if (duration >= totalDuration) {\n if (repeat) {\n setCurrentDuration(0);\n return;\n }\n\n pause();\n }\n }, isPlaying);\n\n const onTimelineChange = (values: ReadonlyArray<number>) => {\n const newDuration = values[0];\n updateDuration(newDuration);\n };\n\n const currentDurationStr = toDisplayTime(currentDuration);\n const totalDurationStr = toDisplayTime(totalDuration);\n const hasDates = !!startDate && !!endDate;\n return (\n <div data-testid=\"timeline-component\" className=\"timeline-component\">\n <PlayButton isPlaying={isPlaying} onPlay={playOrReplay} onPause={pause} />\n <div className=\"time-container\">\n {hasDates && (\n <span data-testid=\"test-start-date\" className=\"timeline-date\">\n {toDateString(startDate, timeZoneOffset, dateFormatOptions)}\n </span>\n )}\n {hasDates && !showDuration && (\n <span data-testid=\"test-start-time\" className=\"timeline-time\">\n {toTimeString(startDate, timeZoneOffset, timeFormatOptions)}\n </span>\n )}\n {showDuration && (\n <span className=\"timeline-duration-time\">{currentDurationStr}</span>\n )}\n </div>\n <Scrubber\n className=\"slider\"\n currentDuration={currentDuration}\n totalDuration={totalDuration}\n startDate={startDate}\n endDate={endDate}\n isPlaying={isPlaying}\n showTime={!showDuration}\n onChange={onTimelineChange}\n onUpdate={onTimelineChange}\n timeZoneOffset={props.timeZoneOffset}\n markDate={props.markDate}\n />\n <div className=\"time-container\">\n {hasDates && (\n <span data-testid=\"test-end-date\" className=\"timeline-date\">\n {toDateString(endDate, timeZoneOffset)}\n </span>\n )}\n {hasDates && !showDuration && (\n <span className=\"timeline-time\">\n {toTimeString(endDate, timeZoneOffset, timeFormatOptions)}\n </span>\n )}\n {showDuration && (\n <InlineEdit\n className=\"timeline-duration-time\"\n defaultValue={totalDurationStr}\n onChange={(value) => {\n const newTotalDuration = timeToMs(value);\n updateTotalDuration(newTotalDuration);\n }}\n />\n )}\n </div>\n <SettingsMenu\n appMenuItems={props.appMenuItems}\n appMenuItemOption={appMenuItemOption}\n includeRepeat={includeRepeat}\n repeat={repeat}\n totalDuration={totalDuration}\n onRepeatClick={() => {\n updateRepeat(!repeat);\n }}\n onTotalDurationChange={(newTotalDuration) => {\n updateTotalDuration(newTotalDuration);\n }}\n />\n </div>\n );\n}\n\ntype SettingsMenuProps = Pick<\n TimelineComponentProps,\n \"appMenuItems\" | \"totalDuration\"\n> &\n Pick<\n Required<TimelineComponentProps>,\n \"appMenuItemOption\" | \"includeRepeat\" | \"repeat\"\n > & {\n onRepeatClick: () => void;\n onTotalDurationChange: (totalDuration: number) => void;\n };\n\nfunction SettingsMenu({\n appMenuItems,\n appMenuItemOption,\n includeRepeat,\n repeat,\n totalDuration,\n onRepeatClick,\n onTotalDurationChange,\n}: SettingsMenuProps) {\n const settingsLabel = React.useMemo(\n () => UiComponents.translate(\"button.label.settings\"),\n []\n );\n const repeatLabel = React.useMemo(\n () => UiIModelComponents.translate(\"timeline.repeat\"),\n []\n );\n const standardItems: TimelineMenuItemProps[] = React.useMemo(\n () => [\n {\n label: UiIModelComponents.translate(\"timeline.slow\"),\n timelineDuration: slowSpeed,\n },\n {\n label: UiIModelComponents.translate(\"timeline.medium\"),\n timelineDuration: mediumSpeed,\n },\n {\n label: UiIModelComponents.translate(\"timeline.fast\"),\n timelineDuration: fastSpeed,\n },\n ],\n []\n );\n\n const menuItems = React.useMemo(() => {\n if (!appMenuItems) {\n return standardItems;\n }\n\n if (appMenuItemOption === \"append\") {\n return [...standardItems, ...appMenuItems];\n }\n if (appMenuItemOption === \"prefix\") {\n return [...appMenuItems, ...standardItems];\n }\n // Replace\n return appMenuItems;\n }, [appMenuItemOption, appMenuItems, standardItems]);\n\n return (\n <DropdownMenu\n menuItems={(close) => {\n return [\n ...(includeRepeat\n ? [\n <MenuItem\n key=\"repeat\"\n onClick={() => {\n onRepeatClick();\n close();\n }}\n startIcon={repeat ? <SvgCheckmark /> : <></>}\n >\n {repeatLabel}\n </MenuItem>,\n <MenuDivider key=\"divider\" />,\n ]\n : []),\n ...menuItems.map((item, index) => {\n const checked = totalDuration === item.timelineDuration;\n return (\n <MenuItem\n key={index}\n startIcon={checked ? <SvgCheckmark /> : <></>}\n onClick={() => {\n onTotalDurationChange(item.timelineDuration);\n close();\n }}\n >\n {item.label}\n </MenuItem>\n );\n }),\n ];\n }}\n placement=\"top-start\"\n >\n <IconButton\n data-testid=\"timeline-settings\"\n title={settingsLabel}\n styleType=\"borderless\"\n >\n <SvgMoreVertical />\n </IconButton>\n </DropdownMenu>\n );\n}\n\nfunction useAnimation(\n onAnimate: (args: { delta: number }) => void,\n playing = true\n) {\n const onAnimateRef = React.useRef(onAnimate);\n onAnimateRef.current = onAnimate;\n\n const lastTimeRef = React.useRef<number | undefined>();\n\n React.useEffect(() => {\n if (!playing) return;\n\n let handle = 0;\n let didCancel = false;\n\n const animate = (time: number) => {\n if (lastTimeRef.current === undefined) {\n lastTimeRef.current = time;\n }\n\n const delta = time - lastTimeRef.current;\n lastTimeRef.current = time;\n\n onAnimateRef.current({\n delta,\n });\n\n if (didCancel) return;\n\n handle = window.requestAnimationFrame(animate);\n };\n\n handle = window.requestAnimationFrame(animate);\n return () => {\n didCancel = true;\n lastTimeRef.current = undefined;\n window.cancelAnimationFrame(handle);\n };\n }, [playing]);\n}\n\nfunction timeToMs(time: string) {\n if (time.indexOf(\":\") !== -1) {\n return (\n (Number(time.split(\":\")[0]) * 60 + Number(time.split(\":\")[1])) * 1000\n );\n } else {\n return Number(time) * 1000;\n }\n}\n\nfunction toDisplayTime(ms: number) {\n const addZero = (i: number) => {\n return i < 10 ? `0${i}` : i;\n };\n\n const date = new Date(ms);\n // const hours = date.getUTCHours();\n const minutes = date.getUTCMinutes();\n const seconds = date.getUTCSeconds();\n return `${addZero(minutes)}:${addZero(seconds)}`;\n}\n"]}
@@ -3,176 +3,46 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  .timeline-component {
6
- box-sizing: border-box;
7
6
  width: 100%;
8
- display: flex;
9
- flex-direction: column;
10
- position: relative;
11
- padding: 8px 16px;
12
7
  min-width: 275px;
13
8
 
14
- > .header {
15
- display: flex;
16
- align-items: center;
17
- height: 38px;
18
- position: relative;
19
-
20
- > .play-backward {
21
- border-radius: var(--iui-border-radius-1) 0 0 var(--iui-border-radius-1);
22
- }
23
-
24
- > .play-button-step {
25
- border-left: none;
26
- border-right: none;
27
- border-radius: 0;
28
- }
29
-
30
- > .play-forward {
31
- border-radius: 0px var(--iui-border-radius-1) var(--iui-border-radius-1) 0;
32
- }
33
-
34
- > .current-date {
35
- font-size: 14px;
36
- min-width: 180px;
37
- padding: 8px;
38
- color: var(--iui-color-text);
39
- position: absolute;
40
- left: 50%;
41
- transform: translateX(-50%);
42
- border-radius: var(--iui-border-radius-1);
43
- border: solid 1px var(--iui-color-border);
44
- background-color: var(--iui-color-background);
45
- text-align: center;
46
- box-sizing: border-box;
47
- display: flex;
48
- align-items: center;
49
- justify-content: center;
50
- }
51
- }
52
-
53
- .play-button {
54
- margin-right: 10px;
55
- }
56
-
57
- > .timeline-timeline {
58
- margin: 8px 0;
59
- }
9
+ display: flex;
10
+ flex-direction: row;
11
+ align-items: center;
12
+ padding: 8px 16px;
13
+ box-sizing: border-box;
14
+ gap: 8px;
60
15
 
61
- > .scrubber {
62
- min-height: 20px;
16
+ .time-container {
63
17
  display: flex;
18
+ flex-direction: column;
64
19
  align-items: center;
65
- position: relative;
66
-
67
- .start-time-container,
68
- .end-time-container {
69
- display: flex;
70
- flex-direction: column;
71
- align-items: center;
72
- }
73
-
74
- .start-time,
75
- .end-time {
76
- font-size: 12px;
77
- color: var(--iui-color-text-muted);
78
- text-align: center;
79
- min-height: inherit;
80
- }
81
-
82
- .duration-start-time,
83
- .duration-end-time {
84
- font-size: 14px;
85
- width: 40px;
86
- color: var(--iui-color-text);
87
- text-align: center;
88
- min-height: inherit;
89
- }
90
-
91
- .start-date,
92
- .end-date {
93
- font-size: 12px;
94
- color: var(--iui-color-text-muted);
95
- padding-bottom: 4px;
96
- }
97
-
98
- .slider {
99
- position: relative;
100
- flex: 1;
101
- margin: 0 20px;
102
- height: 24px;
103
- }
104
20
  }
105
- }
106
21
 
107
- .timeline-settings {
108
- margin-left: auto;
109
- font-size: 14px;
110
- color: var(--iui-color-text);
111
- cursor: pointer;
112
-
113
- &:hover {
114
- color: var(--iui-color-text-hover);
22
+ .timeline-time {
23
+ font-size: 12px;
24
+ color: var(--iui-color-text-muted);
25
+ text-align: center;
26
+ min-height: inherit;
115
27
  }
116
28
 
117
- &:focus {
118
- outline: none;
29
+ .timeline-duration-time {
30
+ font-size: 14px;
31
+ width: 40px;
32
+ color: var(--iui-color-text);
33
+ text-align: center;
34
+ min-height: inherit;
119
35
  }
120
- }
121
-
122
- .timeline-component.minimized .timeline-settings {
123
- margin-left: 8px;
124
- margin-right: -6px;
125
- }
126
-
127
- .timeline-component.has-dates .start-time-container {
128
- margin-right: 8px;
129
- }
130
-
131
- .timeline-component.has-dates .end-time-container {
132
- margin-left: 8px;
133
- }
134
-
135
- .timeline-component.minimized .header,
136
- .timeline-component.minimized .timeline-timeline,
137
- .timeline-component:not(.minimized) .scrubber .start-date,
138
- .timeline-component:not(.minimized) .scrubber .end-date,
139
- .timeline-component:not(.has-dates) .scrubber .start-date,
140
- .timeline-component:not(.has-dates) .scrubber .end-date,
141
- .timeline-component:not(.minimized) .scrubber .play-button,
142
- .timeline-component:not(.minimized) .scrubber .timeline-settings {
143
- display: none;
144
- }
145
36
 
146
- .separator {
147
- padding: 0.5em 0;
148
- position: relative;
149
-
150
- &:before {
151
- content: "";
152
- position: absolute;
153
- top: 50%;
154
- left: 4px;
155
- right: 4px;
156
- width: auto;
157
- height: 1px;
158
- background: #dce0e3;
159
- transform: translateY(-50%);
37
+ .timeline-date {
38
+ font-size: 12px;
39
+ color: var(--iui-color-text-muted);
40
+ padding-bottom: 4px;
160
41
  }
161
- }
162
42
 
163
- .timeline-component-max-sized-scrolling-menu {
164
- display: flex;
165
- max-height: 100%;
166
- > .tippy-box {
167
- display: flex;
168
- > .tippy-content {
169
- display: flex;
170
- > div {
171
- display: flex;
172
- > .iui-menu {
173
- overflow: auto;
174
- }
175
- }
176
- }
43
+ .slider {
44
+ position: relative;
45
+ flex: 1;
46
+ margin: 0 20px;
177
47
  }
178
48
  }
@@ -44,7 +44,7 @@ const ViewportComponentEvents_1 = require("./ViewportComponentEvents");
44
44
  function ViewportComponent(props) {
45
45
  const { viewState, imodel, viewDefinitionId, getViewOverlay, viewManagerOverride, tentativePointOverride, onContextMenu, style, className, screenViewportOverride, controlId, viewportRef, } = props;
46
46
  // istanbul ignore next
47
- const viewManagerRef = React.useRef(viewManagerOverride !== null && viewManagerOverride !== void 0 ? viewManagerOverride : core_frontend_1.IModelApp.viewManager);
47
+ const viewManagerRef = React.useRef(viewManagerOverride ?? core_frontend_1.IModelApp.viewManager);
48
48
  const tentativePointOverrideRef = React.useRef(tentativePointOverride);
49
49
  const screenViewportCreated = React.useRef(false);
50
50
  const viewportDiv = React.useRef(null);
@@ -102,10 +102,9 @@ function ViewportComponent(props) {
102
102
  };
103
103
  const targetPoint = React.useRef(null);
104
104
  const getRotatePoint = (vp) => {
105
- var _a, _b;
106
105
  const lastTargetPoint = targetPoint.current;
107
106
  // istanbul ignore next
108
- const tentativePoint = (_a = tentativePointOverrideRef.current) !== null && _a !== void 0 ? _a : core_frontend_1.IModelApp.tentativePoint;
107
+ const tentativePoint = tentativePointOverrideRef.current ?? core_frontend_1.IModelApp.tentativePoint;
109
108
  // istanbul ignore else
110
109
  if (tentativePoint.isActive)
111
110
  return tentativePoint.getPoint();
@@ -123,7 +122,7 @@ function ViewportComponent(props) {
123
122
  targetPoint.current =
124
123
  undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();
125
124
  // istanbul ignore next
126
- return (_b = targetPoint.current) !== null && _b !== void 0 ? _b : vp.view.getCenter();
125
+ return targetPoint.current ?? vp.view.getCenter();
127
126
  };
128
127
  const handleCubeRotationChangeEvent = (args) => {
129
128
  const viewManager = viewManagerRef.current;
@@ -227,8 +226,8 @@ function ViewportComponent(props) {
227
226
  }
228
227
  // istanbul ignore next
229
228
  if (isMounted.current &&
230
- ((currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.iModel.isOpen) || (currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.iModel.isBlank))) {
231
- setInitialViewState(currentViewState === null || currentViewState === void 0 ? void 0 : currentViewState.clone());
229
+ (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)) {
230
+ setInitialViewState(currentViewState?.clone());
232
231
  }
233
232
  }
234
233
  if (undefined === initialViewState)
@@ -237,13 +236,12 @@ function ViewportComponent(props) {
237
236
  const [viewOverlay, setViewOverlay] = React.useState(null);
238
237
  // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.
239
238
  React.useEffect(() => {
240
- var _a;
241
239
  const parentDiv = viewportDiv.current;
242
240
  const viewManager = viewManagerRef.current;
243
241
  // istanbul ignore next
244
242
  if (parentDiv &&
245
243
  initialViewState &&
246
- ((initialViewState === null || initialViewState === void 0 ? void 0 : initialViewState.iModel.isOpen) || (initialViewState === null || initialViewState === void 0 ? void 0 : initialViewState.iModel.isBlank))) {
244
+ (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)) {
247
245
  if (!screenViewportCreated.current) {
248
246
  const screenViewport = getScreenViewport(parentDiv, initialViewState);
249
247
  screenViewportRef.current = screenViewport;
@@ -256,7 +254,7 @@ function ViewportComponent(props) {
256
254
  }
257
255
  else {
258
256
  // istanbul ignore next
259
- (_a = screenViewportRef.current) === null || _a === void 0 ? void 0 : _a.changeView(initialViewState);
257
+ screenViewportRef.current?.changeView(initialViewState);
260
258
  }
261
259
  }
262
260
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Viewport\n */\n\nimport * as React from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Point3d } from \"@itwin/core-geometry\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport type {\n IModelConnection,\n TentativePoint,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ScreenViewport,\n StandardView,\n ToolSettings,\n} from \"@itwin/core-frontend\";\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type {\n CubeRotationChangeEventArgs,\n DrawingViewportChangeEventArgs,\n StandardRotationChangeEventArgs,\n} from \"./ViewportComponentEvents\";\nimport { ViewportComponentEvents } from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const {\n viewState,\n imodel,\n viewDefinitionId,\n getViewOverlay,\n viewManagerOverride,\n tentativePointOverride,\n onContextMenu,\n style,\n className,\n screenViewportOverride,\n controlId,\n viewportRef,\n } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(\n viewManagerOverride ?? IModelApp.viewManager\n );\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank)) return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({\n viewport: vp,\n oldName: viewClassFullName.current,\n newName: vp.view.classFullName,\n });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({\n viewport: vp,\n oldId: viewId.current,\n newId: vp.view.id,\n });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (\n args: StandardRotationChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setRotationAboutPoint(\n StandardView.getStandardRotation(args.standardRotation)\n );\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (\n args: DrawingViewportChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({\n noSaveInUndo: args.complete !== true,\n });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint =\n tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive) return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt)) return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(\n vp.npcToWorld(NpcCenter),\n vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches)\n );\n targetPoint.current =\n undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(\n currentScreenViewport.view.getRotation()\n );\n const worldTransform = Transform.createFixedPointAndMatrix(\n center,\n targetMatrix\n );\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(\n handleStandardRotationChangeEvent\n );\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (\n parentDiv: HTMLDivElement,\n inViewState: ViewState\n ) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride\n ? screenViewportOverride\n : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(\n handleStandardRotationChangeEvent\n );\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\n \"ViewportComponent\",\n `mounting ViewportComponent for controlId=${controlId}`\n );\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\n \"ViewportComponent\",\n `un-mounting ViewportComponent for controlId=${controlId}`\n );\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<\n ViewState | undefined\n >(undefined);\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\") currentViewState = viewState();\n else currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\n \"ViewportComponent\",\n `A Viewstate or a viewId and imodel must be provided`\n );\n }\n // istanbul ignore next\n if (\n isMounted.current &&\n (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)\n ) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState) void fetchInitialViewstate();\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (\n parentDiv &&\n initialViewState &&\n (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)\n ) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef) viewportRef(screenViewport);\n\n Logger.logInfo(\n \"ViewportComponent\",\n `processing viewManager.addViewport for controlId=${controlId}`\n );\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu) onContextMenu(e);\n },\n [onContextMenu]\n );\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\",\n width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ViewportComponent.js","sourceRoot":"","sources":["../../../../src/imodel-components-react/viewport/ViewportComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Viewport\n */\n\nimport * as React from \"react\";\nimport type { Id64String } from \"@itwin/core-bentley\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Point3d } from \"@itwin/core-geometry\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { NpcCenter } from \"@itwin/core-common\";\nimport type {\n IModelConnection,\n TentativePoint,\n ViewManager,\n Viewport,\n ViewState,\n} from \"@itwin/core-frontend\";\nimport {\n IModelApp,\n ScreenViewport,\n StandardView,\n ToolSettings,\n} from \"@itwin/core-frontend\";\n\nimport type { CommonProps } from \"@itwin/core-react\";\nimport type {\n CubeRotationChangeEventArgs,\n DrawingViewportChangeEventArgs,\n StandardRotationChangeEventArgs,\n} from \"./ViewportComponentEvents\";\nimport { ViewportComponentEvents } from \"./ViewportComponentEvents\";\n\n/** Type for a ViewState prop\n * @public\n */\nexport type ViewStateProp = ViewState | (() => ViewState);\n\n/**\n * Properties for [[ViewportComponent]] component.\n * @public\n */\nexport interface ViewportProps extends CommonProps {\n /** IModel to display */\n imodel: IModelConnection;\n /** Id of a default view definition to load as a starting point */\n viewDefinitionId?: Id64String;\n /** ViewState to use as a starting point */\n viewState?: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: (v: ScreenViewport) => void;\n /** controlId for this content component @internal */\n controlId?: string;\n /** @internal */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** @internal */\n getViewOverlay?: (viewport: ScreenViewport) => React.ReactNode;\n /** @internal used only for testing */\n viewManagerOverride?: ViewManager;\n /** @internal used only for testing */\n screenViewportOverride?: typeof ScreenViewport;\n /** @internal used only for testing */\n tentativePointOverride?: TentativePoint;\n}\n\n/**\n * A viewport React component that creates a ScreenViewport.\n * @public\n */\nexport function ViewportComponent(props: ViewportProps) {\n const {\n viewState,\n imodel,\n viewDefinitionId,\n getViewOverlay,\n viewManagerOverride,\n tentativePointOverride,\n onContextMenu,\n style,\n className,\n screenViewportOverride,\n controlId,\n viewportRef,\n } = props;\n // istanbul ignore next\n const viewManagerRef = React.useRef(\n viewManagerOverride ?? IModelApp.viewManager\n );\n const tentativePointOverrideRef = React.useRef(tentativePointOverride);\n const screenViewportCreated = React.useRef(false);\n const viewportDiv = React.useRef<HTMLDivElement>(null);\n const screenViewportRef = React.useRef<ScreenViewport | null>(null);\n const isMounted = React.useRef(false);\n const viewClassFullName = React.useRef(\"\");\n const viewId = React.useRef(\"0\");\n\n // istanbul ignore next\n const handleViewChanged = (vp: Viewport) => {\n // istanbul ignore next\n if (!(vp.iModel.isOpen || vp.iModel.isBlank)) return;\n ViewportComponentEvents.setViewMatrix(vp);\n if (viewClassFullName.current !== vp.view.classFullName) {\n setTimeout(() => {\n ViewportComponentEvents.onViewClassFullNameChangedEvent.emit({\n viewport: vp,\n oldName: viewClassFullName.current,\n newName: vp.view.classFullName,\n });\n viewClassFullName.current = vp.view.classFullName;\n });\n }\n if (viewId.current !== vp.view.id) {\n setTimeout(() => {\n ViewportComponentEvents.onViewIdChangedEvent.emit({\n viewport: vp,\n oldId: viewId.current,\n newId: vp.view.id,\n });\n viewId.current = vp.view.id;\n });\n }\n };\n\n const handleStandardRotationChangeEvent = (\n args: StandardRotationChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setRotationAboutPoint(\n StandardView.getStandardRotation(args.standardRotation)\n );\n currentScreenViewport.synchWithView();\n }\n };\n\n const handleDrawingViewportChangeEvent = (\n args: DrawingViewportChangeEventArgs\n ) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n currentScreenViewport.view.setOrigin(args.origin);\n currentScreenViewport.view.setRotation(args.rotation);\n currentScreenViewport.synchWithView({\n noSaveInUndo: args.complete !== true,\n });\n }\n };\n\n const targetPoint = React.useRef<Point3d | null>(null);\n\n const getRotatePoint = (vp: ScreenViewport): Point3d => {\n const lastTargetPoint = targetPoint.current;\n // istanbul ignore next\n const tentativePoint =\n tentativePointOverrideRef.current ?? IModelApp.tentativePoint;\n // istanbul ignore else\n if (tentativePoint.isActive) return tentativePoint.getPoint();\n\n // istanbul ignore else\n if (null !== lastTargetPoint) {\n const testPt = vp.worldToView(lastTargetPoint);\n const viewRect = vp.viewRect.clone();\n viewRect.scaleAboutCenter(0.25, 0.25);\n // istanbul ignore next hard to reach because of mocks\n if (viewRect.containsPoint(testPt)) return lastTargetPoint;\n targetPoint.current = null;\n }\n\n const visiblePoint = vp.pickNearestVisibleGeometry(\n vp.npcToWorld(NpcCenter),\n vp.pixelsFromInches(ToolSettings.viewToolPickRadiusInches)\n );\n targetPoint.current =\n undefined !== visiblePoint ? visiblePoint : vp.view.getTargetPoint();\n // istanbul ignore next\n return targetPoint.current ?? vp.view.getCenter();\n };\n\n const handleCubeRotationChangeEvent = (args: CubeRotationChangeEventArgs) => {\n const viewManager = viewManagerRef.current;\n const currentScreenViewport = screenViewportRef.current;\n // istanbul ignore else\n if (\n currentScreenViewport &&\n viewManager.selectedView === currentScreenViewport\n ) {\n const rotMatrix = args.rotMatrix;\n // istanbul ignore else\n if (currentScreenViewport.rotation !== rotMatrix) {\n const inverse = rotMatrix.transpose(); // rotation is from current nav cube state...\n const center = getRotatePoint(currentScreenViewport);\n const targetMatrix = inverse.multiplyMatrixMatrix(\n currentScreenViewport.view.getRotation()\n );\n const worldTransform = Transform.createFixedPointAndMatrix(\n center,\n targetMatrix\n );\n const frustum = currentScreenViewport.getWorldFrustum();\n frustum.multiply(worldTransform);\n currentScreenViewport.view.setupFromFrustum(frustum);\n currentScreenViewport.synchWithView({ noSaveInUndo: !args.complete });\n }\n }\n };\n\n const handleDisconnectFromViewManager = () => {\n const screenViewport = screenViewportRef.current;\n if (screenViewport) {\n const viewManager = IModelApp.viewManager;\n screenViewport.onViewChanged.removeListener(handleViewChanged);\n screenViewportRef.current = null;\n screenViewportCreated.current = false;\n ViewportComponentEvents.onDrawingViewportChangeEvent.removeListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.removeListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.removeListener(\n handleStandardRotationChangeEvent\n );\n viewManager.dropViewport(screenViewport, true);\n }\n };\n\n // istanbul ignore next\n const handleWindowUnload = () => {\n const parentDiv = viewportDiv.current;\n if (parentDiv) {\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n if (parentWindow !== window) {\n handleDisconnectFromViewManager();\n }\n }\n };\n\n const getScreenViewport = (\n parentDiv: HTMLDivElement,\n inViewState: ViewState\n ) => {\n // istanbul ignore next\n const screenViewportFactory = screenViewportOverride\n ? screenViewportOverride\n : ScreenViewport;\n const parentWindow = parentDiv.ownerDocument.defaultView as Window;\n parentWindow.addEventListener(\"unload\", handleWindowUnload, true); // listener clear after being called\n ViewportComponentEvents.initialize();\n ViewportComponentEvents.onDrawingViewportChangeEvent.addListener(\n handleDrawingViewportChangeEvent\n );\n ViewportComponentEvents.onCubeRotationChangeEvent.addListener(\n handleCubeRotationChangeEvent\n );\n ViewportComponentEvents.onStandardRotationChangeEvent.addListener(\n handleStandardRotationChangeEvent\n );\n const screenViewport = screenViewportFactory.create(parentDiv, inViewState);\n screenViewportCreated.current = true;\n viewClassFullName.current = screenViewport.view.classFullName;\n viewId.current = screenViewport.view.id;\n screenViewport.onViewChanged.addListener(handleViewChanged);\n return screenViewport;\n };\n\n React.useEffect(() => {\n isMounted.current = true;\n Logger.logInfo(\n \"ViewportComponent\",\n `mounting ViewportComponent for controlId=${controlId}`\n );\n\n return () => {\n isMounted.current = false;\n Logger.logInfo(\n \"ViewportComponent\",\n `un-mounting ViewportComponent for controlId=${controlId}`\n );\n handleDisconnectFromViewManager();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [initialViewState, setInitialViewState] = React.useState<\n ViewState | undefined\n >(undefined);\n React.useEffect(() => {\n setInitialViewState(undefined);\n }, [viewDefinitionId, viewState]);\n React.useEffect(() => {\n async function fetchInitialViewstate() {\n let currentViewState: ViewState | undefined;\n if (viewState) {\n if (typeof viewState === \"function\") currentViewState = viewState();\n else currentViewState = viewState;\n } else if (viewDefinitionId && imodel) {\n try {\n currentViewState = await imodel.views.load(viewDefinitionId);\n // istanbul ignore next\n if (!currentViewState) {\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } catch (_e) {\n // istanbul ignore next\n Logger.logError(\"ViewportComponent\", `Viewstate failed to load`);\n }\n } else {\n Logger.logError(\n \"ViewportComponent\",\n `A Viewstate or a viewId and imodel must be provided`\n );\n }\n // istanbul ignore next\n if (\n isMounted.current &&\n (currentViewState?.iModel.isOpen || currentViewState?.iModel.isBlank)\n ) {\n setInitialViewState(currentViewState?.clone());\n }\n }\n if (undefined === initialViewState) void fetchInitialViewstate();\n }, [imodel, initialViewState, viewDefinitionId, viewState]);\n\n const [viewOverlay, setViewOverlay] = React.useState<React.ReactNode>(null);\n\n // This useEffect connects to ViewManger as soon as initialViewState is available once component is mounted.\n React.useEffect(() => {\n const parentDiv = viewportDiv.current;\n const viewManager = viewManagerRef.current;\n // istanbul ignore next\n if (\n parentDiv &&\n initialViewState &&\n (initialViewState?.iModel.isOpen || initialViewState?.iModel.isBlank)\n ) {\n if (!screenViewportCreated.current) {\n const screenViewport = getScreenViewport(parentDiv, initialViewState);\n screenViewportRef.current = screenViewport;\n\n if (viewportRef) viewportRef(screenViewport);\n\n Logger.logInfo(\n \"ViewportComponent\",\n `processing viewManager.addViewport for controlId=${controlId}`\n );\n viewManager.addViewport(screenViewport);\n\n // overlay component is set up once a ScreenViewport is available. The overlay component must handle any view changes itself.\n setViewOverlay(getViewOverlay ? getViewOverlay(screenViewport) : null);\n } else {\n // istanbul ignore next\n screenViewportRef.current?.changeView(initialViewState);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlId, initialViewState, viewportRef]);\n\n const handleContextMenu = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n if (onContextMenu) onContextMenu(e);\n },\n [onContextMenu]\n );\n\n const parentDivStyle: React.CSSProperties = {\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n };\n\n const viewportDivStyle: React.CSSProperties = {\n ...style,\n height: \"100%\",\n width: \"100%\",\n };\n\n return (\n <div style={parentDivStyle} data-item-id={controlId}>\n <div\n ref={viewportDiv}\n data-testid=\"viewport-component\"\n className={className}\n style={viewportDivStyle}\n onContextMenu={handleContextMenu}\n />\n {viewOverlay}\n </div>\n );\n}\n"]}
@@ -27,7 +27,6 @@ export * from "./imodel-components-react/quantityformat/QuantityFormatPanel";
27
27
  export * from "./imodel-components-react/timeline/interfaces";
28
28
  export * from "./imodel-components-react/timeline/BaseTimelineDataProvider";
29
29
  export * from "./imodel-components-react/timeline/InlineEdit";
30
- export * from "./imodel-components-react/timeline/PlayerButton";
31
30
  export * from "./imodel-components-react/timeline/Scrubber";
32
31
  export * from "./imodel-components-react/timeline/TimelineComponent";
33
32
  export * from "./imodel-components-react/timeline/SolarTimeline";
@@ -1 +1 @@
1
- {"version":3,"file":"imodel-components-react.d.ts","sourceRoot":"","sources":["../../src/imodel-components-react.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAElF,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mDAAmD,CAAC;AAClE,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,oDAAoD,CAAC;AACnE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,wCAAwC,CAAC;AAEvD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sDAAsD,CAAC;AAErE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,yDAAyD,CAAC;AAExE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,4DAA4D,CAAC;AAC3E,cAAc,+DAA+D,CAAC;AAE9E,cAAc,sDAAsD,CAAC;AACrE,cAAc,0DAA0D,CAAC;AACzE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,0DAA0D,CAAC;AACzE,cAAc,sDAAsD,CAAC;AACrE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,8DAA8D,CAAC;AAE7E,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6DAA6D,CAAC;AAC5E,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,0DAA0D,CAAC;AAEzE,cAAc,sDAAsD,CAAC;AACrE,cAAc,4DAA4D,CAAC;AAE3E;;;;GAIG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
1
+ {"version":3,"file":"imodel-components-react.d.ts","sourceRoot":"","sources":["../../src/imodel-components-react.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAElF,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mDAAmD,CAAC;AAClE,cAAc,mDAAmD,CAAC;AAClE,cAAc,kDAAkD,CAAC;AACjE,cAAc,oDAAoD,CAAC;AACnE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,wCAAwC,CAAC;AAEvD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,sDAAsD,CAAC;AAErE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,yDAAyD,CAAC;AAExE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,4DAA4D,CAAC;AAC3E,cAAc,+DAA+D,CAAC;AAE9E,cAAc,sDAAsD,CAAC;AACrE,cAAc,0DAA0D,CAAC;AACzE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,0DAA0D,CAAC;AACzE,cAAc,sDAAsD,CAAC;AACrE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,8DAA8D,CAAC;AAE7E,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6DAA6D,CAAC;AAC5E,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sDAAsD,CAAC;AACrE,cAAc,kDAAkD,CAAC;AACjE,cAAc,0DAA0D,CAAC;AAEzE,cAAc,sDAAsD,CAAC;AACrE,cAAc,4DAA4D,CAAC;AAE3E;;;;GAIG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
@@ -50,7 +50,6 @@ __exportStar(require("./imodel-components-react/quantityformat/QuantityFormatPan
50
50
  __exportStar(require("./imodel-components-react/timeline/interfaces"), exports);
51
51
  __exportStar(require("./imodel-components-react/timeline/BaseTimelineDataProvider"), exports);
52
52
  __exportStar(require("./imodel-components-react/timeline/InlineEdit"), exports);
53
- __exportStar(require("./imodel-components-react/timeline/PlayerButton"), exports);
54
53
  __exportStar(require("./imodel-components-react/timeline/Scrubber"), exports);
55
54
  __exportStar(require("./imodel-components-react/timeline/TimelineComponent"), exports);
56
55
  __exportStar(require("./imodel-components-react/timeline/SolarTimeline"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"imodel-components-react.js","sourceRoot":"","sources":["../../src/imodel-components-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;AAEhG,qEAAqE;AAErE,mFAAkF;AAAzE,wHAAA,kBAAkB,OAAA;AAE3B,8EAA4D;AAC5D,oFAAkE;AAClE,oFAAkE;AAClE,mFAAiE;AACjE,qFAAmE;AACnE,4EAA0D;AAC1D,mFAAiE;AACjE,yEAAuD;AAEvD,gFAA8D;AAC9D,iFAA+D;AAE/D,iFAA+D;AAC/D,uFAAqE;AAErE,8EAA4D;AAC5D,0FAAwE;AAExE,gFAA8D;AAC9D,6FAA2E;AAC3E,gGAA8E;AAE9E,uFAAqE;AACrE,2FAAyE;AACzE,wFAAsE;AACtE,sFAAoE;AACpE,2FAAyE;AACzE,uFAAqE;AACrE,6FAA2E;AAC3E,+FAA6E;AAE7E,gFAA8D;AAC9D,8FAA4E;AAC5E,gFAA8D;AAC9D,kFAAgE;AAChE,8EAA4D;AAC5D,uFAAqE;AACrE,mFAAiE;AACjE,2FAAyE;AAEzE,uFAAqE;AACrE,6FAA2E;AAE3E;;;;GAIG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n// cSpell:ignore iconpicker lineweight hocs datepicker quantityformat\n\nexport { UiIModelComponents } from \"./imodel-components-react/UiIModelComponents\";\n\nexport * from \"./imodel-components-react/color/AlphaSlider\";\nexport * from \"./imodel-components-react/color/ColorPickerButton\";\nexport * from \"./imodel-components-react/color/ColorPickerDialog\";\nexport * from \"./imodel-components-react/color/ColorPickerPopup\";\nexport * from \"./imodel-components-react/color/getCSSColorFromDef\";\nexport * from \"./imodel-components-react/color/HueSlider\";\nexport * from \"./imodel-components-react/color/SaturationPicker\";\nexport * from \"./imodel-components-react/color/Swatch\";\n\nexport * from \"./imodel-components-react/editors/ColorEditor\";\nexport * from \"./imodel-components-react/editors/WeightEditor\";\n\nexport * from \"./imodel-components-react/inputs/QuantityInput\";\nexport * from \"./imodel-components-react/inputs/QuantityNumberInput\";\n\nexport * from \"./imodel-components-react/lineweight/Swatch\";\nexport * from \"./imodel-components-react/lineweight/WeightPickerButton\";\n\nexport * from \"./imodel-components-react/navigationaids/Cube\";\nexport * from \"./imodel-components-react/navigationaids/CubeNavigationAid\";\nexport * from \"./imodel-components-react/navigationaids/DrawingNavigationAid\";\n\nexport * from \"./imodel-components-react/quantityformat/FormatPanel\";\nexport * from \"./imodel-components-react/quantityformat/FormatPrecision\";\nexport * from \"./imodel-components-react/quantityformat/FormatSample\";\nexport * from \"./imodel-components-react/quantityformat/FormatType\";\nexport * from \"./imodel-components-react/quantityformat/FormatUnitLabel\";\nexport * from \"./imodel-components-react/quantityformat/FormatUnits\";\nexport * from \"./imodel-components-react/quantityformat/MiscFormatOptions\";\nexport * from \"./imodel-components-react/quantityformat/QuantityFormatPanel\";\n\nexport * from \"./imodel-components-react/timeline/interfaces\";\nexport * from \"./imodel-components-react/timeline/BaseTimelineDataProvider\";\nexport * from \"./imodel-components-react/timeline/InlineEdit\";\nexport * from \"./imodel-components-react/timeline/PlayerButton\";\nexport * from \"./imodel-components-react/timeline/Scrubber\";\nexport * from \"./imodel-components-react/timeline/TimelineComponent\";\nexport * from \"./imodel-components-react/timeline/SolarTimeline\";\nexport * from \"./imodel-components-react/timeline/BaseSolarDataProvider\";\n\nexport * from \"./imodel-components-react/viewport/ViewportComponent\";\nexport * from \"./imodel-components-react/viewport/ViewportComponentEvents\";\n\n/** @docs-package-description\n * The imodel-components-react package contains React components that depend on the core-frontend, core-common or core-quantity packages.\n * The components pertain to Color, Cube, LineWeight, Navigation Aids, Quantity Inputs, Timeline and Viewport.\n * For more information, see [learning about imodel-components-react]($docs/learning/ui/imodel-components/index.md).\n */\n/**\n * @docs-group-description Color\n * Classes and components for working with and picking a Color.\n */\n/**\n * @docs-group-description Common\n * Common classes used across various UI components.\n */\n/**\n * @docs-group-description Cube\n * Component for 3D Cube.\n */\n/**\n * @docs-group-description Inputs\n * Input Components that format and parse input for IModelApps.\n */\n/**\n * @docs-group-description LineWeight\n * Classes and components for working with and picking a Line Weight.\n */\n/**\n * @docs-group-description NavigationAids\n * Classes and components for working with Navigation Aids.\n */\n/**\n * @docs-group-description PropertyEditors\n * Classes and components for working with Property Editors.\n */\n/**\n * @docs-group-description QuantityFormat\n * Classes and components for working with a Quantity Formats.\n */\n/**\n * @docs-group-description Timeline\n * Classes and components that provide a timeline\n */\n/**\n * @docs-group-description Viewport\n * Classes and components for working with a Viewport.\n */\n"]}
1
+ {"version":3,"file":"imodel-components-react.js","sourceRoot":"","sources":["../../src/imodel-components-react.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;AAEhG,qEAAqE;AAErE,mFAAkF;AAAzE,wHAAA,kBAAkB,OAAA;AAE3B,8EAA4D;AAC5D,oFAAkE;AAClE,oFAAkE;AAClE,mFAAiE;AACjE,qFAAmE;AACnE,4EAA0D;AAC1D,mFAAiE;AACjE,yEAAuD;AAEvD,gFAA8D;AAC9D,iFAA+D;AAE/D,iFAA+D;AAC/D,uFAAqE;AAErE,8EAA4D;AAC5D,0FAAwE;AAExE,gFAA8D;AAC9D,6FAA2E;AAC3E,gGAA8E;AAE9E,uFAAqE;AACrE,2FAAyE;AACzE,wFAAsE;AACtE,sFAAoE;AACpE,2FAAyE;AACzE,uFAAqE;AACrE,6FAA2E;AAC3E,+FAA6E;AAE7E,gFAA8D;AAC9D,8FAA4E;AAC5E,gFAA8D;AAC9D,8EAA4D;AAC5D,uFAAqE;AACrE,mFAAiE;AACjE,2FAAyE;AAEzE,uFAAqE;AACrE,6FAA2E;AAE3E;;;;GAIG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n// cSpell:ignore iconpicker lineweight hocs datepicker quantityformat\n\nexport { UiIModelComponents } from \"./imodel-components-react/UiIModelComponents\";\n\nexport * from \"./imodel-components-react/color/AlphaSlider\";\nexport * from \"./imodel-components-react/color/ColorPickerButton\";\nexport * from \"./imodel-components-react/color/ColorPickerDialog\";\nexport * from \"./imodel-components-react/color/ColorPickerPopup\";\nexport * from \"./imodel-components-react/color/getCSSColorFromDef\";\nexport * from \"./imodel-components-react/color/HueSlider\";\nexport * from \"./imodel-components-react/color/SaturationPicker\";\nexport * from \"./imodel-components-react/color/Swatch\";\n\nexport * from \"./imodel-components-react/editors/ColorEditor\";\nexport * from \"./imodel-components-react/editors/WeightEditor\";\n\nexport * from \"./imodel-components-react/inputs/QuantityInput\";\nexport * from \"./imodel-components-react/inputs/QuantityNumberInput\";\n\nexport * from \"./imodel-components-react/lineweight/Swatch\";\nexport * from \"./imodel-components-react/lineweight/WeightPickerButton\";\n\nexport * from \"./imodel-components-react/navigationaids/Cube\";\nexport * from \"./imodel-components-react/navigationaids/CubeNavigationAid\";\nexport * from \"./imodel-components-react/navigationaids/DrawingNavigationAid\";\n\nexport * from \"./imodel-components-react/quantityformat/FormatPanel\";\nexport * from \"./imodel-components-react/quantityformat/FormatPrecision\";\nexport * from \"./imodel-components-react/quantityformat/FormatSample\";\nexport * from \"./imodel-components-react/quantityformat/FormatType\";\nexport * from \"./imodel-components-react/quantityformat/FormatUnitLabel\";\nexport * from \"./imodel-components-react/quantityformat/FormatUnits\";\nexport * from \"./imodel-components-react/quantityformat/MiscFormatOptions\";\nexport * from \"./imodel-components-react/quantityformat/QuantityFormatPanel\";\n\nexport * from \"./imodel-components-react/timeline/interfaces\";\nexport * from \"./imodel-components-react/timeline/BaseTimelineDataProvider\";\nexport * from \"./imodel-components-react/timeline/InlineEdit\";\nexport * from \"./imodel-components-react/timeline/Scrubber\";\nexport * from \"./imodel-components-react/timeline/TimelineComponent\";\nexport * from \"./imodel-components-react/timeline/SolarTimeline\";\nexport * from \"./imodel-components-react/timeline/BaseSolarDataProvider\";\n\nexport * from \"./imodel-components-react/viewport/ViewportComponent\";\nexport * from \"./imodel-components-react/viewport/ViewportComponentEvents\";\n\n/** @docs-package-description\n * The imodel-components-react package contains React components that depend on the core-frontend, core-common or core-quantity packages.\n * The components pertain to Color, Cube, LineWeight, Navigation Aids, Quantity Inputs, Timeline and Viewport.\n * For more information, see [learning about imodel-components-react]($docs/learning/ui/imodel-components/index.md).\n */\n/**\n * @docs-group-description Color\n * Classes and components for working with and picking a Color.\n */\n/**\n * @docs-group-description Common\n * Common classes used across various UI components.\n */\n/**\n * @docs-group-description Cube\n * Component for 3D Cube.\n */\n/**\n * @docs-group-description Inputs\n * Input Components that format and parse input for IModelApps.\n */\n/**\n * @docs-group-description LineWeight\n * Classes and components for working with and picking a Line Weight.\n */\n/**\n * @docs-group-description NavigationAids\n * Classes and components for working with Navigation Aids.\n */\n/**\n * @docs-group-description PropertyEditors\n * Classes and components for working with Property Editors.\n */\n/**\n * @docs-group-description QuantityFormat\n * Classes and components for working with a Quantity Formats.\n */\n/**\n * @docs-group-description Timeline\n * Classes and components that provide a timeline\n */\n/**\n * @docs-group-description Viewport\n * Classes and components for working with a Viewport.\n */\n"]}
@@ -19,12 +19,11 @@ class UiIModelComponents {
19
19
  * initialize UiIModelComponents.
20
20
  */
21
21
  static async initialize() {
22
- var _a;
23
22
  if (UiIModelComponents._initialized) {
24
23
  Logger.logInfo(UiIModelComponents.loggerCategory(UiIModelComponents), `UiIModelComponents.initialize already called`);
25
24
  return;
26
25
  }
27
- await ((_a = IModelApp.localization) === null || _a === void 0 ? void 0 : _a.registerNamespace(UiIModelComponents.localizationNamespace));
26
+ await IModelApp.localization?.registerNamespace(UiIModelComponents.localizationNamespace);
28
27
  if (!IModelApp.localization) {
29
28
  // it should only get here in unit test where IModelApp is not setup
30
29
  const localization = new EmptyLocalization();
@@ -38,8 +37,7 @@ class UiIModelComponents {
38
37
  }
39
38
  /** Unregisters the UiIModelComponents localization namespace */
40
39
  static terminate() {
41
- var _a;
42
- (_a = IModelApp.localization) === null || _a === void 0 ? void 0 : _a.unregisterNamespace(UiIModelComponents.localizationNamespace);
40
+ IModelApp.localization?.unregisterNamespace(UiIModelComponents.localizationNamespace);
43
41
  UiComponents.terminate();
44
42
  UiIModelComponents._initialized = false;
45
43
  }