@editframe/elements 0.24.1-beta.0 → 0.25.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DelayedLoadingState.js +31 -0
- package/dist/DelayedLoadingState.js.map +1 -0
- package/dist/EF_FRAMEGEN.d.ts +50 -46
- package/dist/EF_FRAMEGEN.js +5 -1
- package/dist/EF_FRAMEGEN.js.map +1 -0
- package/dist/EF_INTERACTIVE.js +4 -0
- package/dist/EF_INTERACTIVE.js.map +1 -0
- package/dist/EF_RENDERING.js +4 -0
- package/dist/EF_RENDERING.js.map +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js +4 -1
- package/dist/attachContextRoot.js +6 -1
- package/dist/attachContextRoot.js.map +1 -0
- package/dist/elements/CrossUpdateController.js +4 -0
- package/dist/elements/CrossUpdateController.js.map +1 -0
- package/dist/elements/EFAudio.d.ts +24 -16
- package/dist/elements/EFAudio.js +10 -1
- package/dist/elements/EFAudio.js.map +1 -0
- package/dist/elements/EFCaptions.d.ts +118 -109
- package/dist/elements/EFCaptions.js +11 -6
- package/dist/elements/EFCaptions.js.map +1 -0
- package/dist/elements/EFImage.d.ts +31 -20
- package/dist/elements/EFImage.js +6 -1
- package/dist/elements/EFImage.js.map +1 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js +5 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js +12 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js +53 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +47 -46
- package/dist/elements/EFMedia/BufferedSeekingInput.js +6 -1
- package/dist/elements/EFMedia/BufferedSeekingInput.js.map +1 -0
- package/dist/elements/EFMedia/JitMediaEngine.js +12 -0
- package/dist/elements/EFMedia/JitMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +9 -13
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +6 -1
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +6 -1
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js.map +1 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js +18 -2
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js.map +1 -0
- package/dist/elements/EFMedia/shared/BufferUtils.d.ts +9 -67
- package/dist/elements/EFMedia/shared/BufferUtils.js +15 -0
- package/dist/elements/EFMedia/shared/BufferUtils.js.map +1 -0
- package/dist/elements/EFMedia/shared/GlobalInputCache.js +29 -0
- package/dist/elements/EFMedia/shared/GlobalInputCache.js.map +1 -0
- package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +11 -17
- package/dist/elements/EFMedia/shared/PrecisionUtils.js +25 -0
- package/dist/elements/EFMedia/shared/PrecisionUtils.js.map +1 -0
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +22 -0
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.js.map +1 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +13 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js +21 -0
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js +18 -0
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js +10 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js +6 -1
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js +16 -2
- package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +9 -13
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js.map +1 -0
- package/dist/elements/EFMedia.d.ts +115 -104
- package/dist/elements/EFMedia.js +25 -1
- package/dist/elements/EFMedia.js.map +1 -0
- package/dist/elements/EFSourceMixin.d.ts +10 -11
- package/dist/elements/EFSourceMixin.js +5 -0
- package/dist/elements/EFSourceMixin.js.map +1 -0
- package/dist/elements/EFSurface.d.ts +35 -27
- package/dist/elements/EFSurface.js +6 -1
- package/dist/elements/EFSurface.js.map +1 -0
- package/dist/elements/EFTemporal.d.ts +200 -213
- package/dist/elements/EFTemporal.js +24 -4
- package/dist/elements/EFTemporal.js.map +1 -0
- package/dist/elements/EFThumbnailStrip.d.ts +91 -83
- package/dist/elements/EFThumbnailStrip.js +49 -4
- package/dist/elements/EFThumbnailStrip.js.map +1 -0
- package/dist/elements/EFTimegroup.d.ts +107 -101
- package/dist/elements/EFTimegroup.js +58 -3
- package/dist/elements/EFTimegroup.js.map +1 -0
- package/dist/elements/EFVideo.d.ts +120 -108
- package/dist/elements/EFVideo.js +46 -2
- package/dist/elements/EFVideo.js.map +1 -0
- package/dist/elements/EFWaveform.d.ts +48 -41
- package/dist/elements/EFWaveform.js +6 -1
- package/dist/elements/EFWaveform.js.map +1 -0
- package/dist/elements/FetchMixin.d.ts +8 -6
- package/dist/elements/FetchMixin.js +4 -0
- package/dist/elements/FetchMixin.js.map +1 -0
- package/dist/elements/SampleBuffer.d.ts +18 -13
- package/dist/elements/SampleBuffer.js +5 -0
- package/dist/elements/SampleBuffer.js.map +1 -0
- package/dist/elements/TargetController.d.ts +23 -24
- package/dist/elements/TargetController.js +8 -3
- package/dist/elements/TargetController.js.map +1 -0
- package/dist/elements/TimegroupController.d.ts +17 -12
- package/dist/elements/TimegroupController.js +4 -0
- package/dist/elements/TimegroupController.js.map +1 -0
- package/dist/elements/durationConverter.js +9 -4
- package/dist/elements/durationConverter.js.map +1 -0
- package/dist/elements/parseTimeToMs.js +4 -0
- package/dist/elements/parseTimeToMs.js.map +1 -0
- package/dist/elements/renderTemporalAudio.js +4 -0
- package/dist/elements/renderTemporalAudio.js.map +1 -0
- package/dist/elements/updateAnimations.js +29 -8
- package/dist/elements/updateAnimations.js.map +1 -0
- package/dist/elements-ZhsB7B5N.css +9 -0
- package/dist/elements-ZhsB7B5N.css.map +1 -0
- package/dist/getRenderInfo.d.ts +53 -47
- package/dist/getRenderInfo.js +5 -0
- package/dist/getRenderInfo.js.map +1 -0
- package/dist/gui/ContextMixin.d.ts +19 -20
- package/dist/gui/ContextMixin.js +32 -1
- package/dist/gui/ContextMixin.js.map +1 -0
- package/dist/gui/Controllable.d.ts +13 -14
- package/dist/gui/Controllable.js +5 -0
- package/dist/gui/Controllable.js.map +1 -0
- package/dist/gui/EFConfiguration.d.ts +18 -14
- package/dist/gui/EFConfiguration.js +6 -1
- package/dist/gui/EFConfiguration.js.map +1 -0
- package/dist/gui/EFControls.d.ts +35 -31
- package/dist/gui/EFControls.js +8 -3
- package/dist/gui/EFControls.js.map +1 -0
- package/dist/gui/EFDial.d.ts +23 -16
- package/dist/gui/EFDial.js +6 -1
- package/dist/gui/EFDial.js.map +1 -0
- package/dist/gui/EFFilmstrip.d.ts +183 -177
- package/dist/gui/EFFilmstrip.js +30 -25
- package/dist/gui/EFFilmstrip.js.map +1 -0
- package/dist/gui/EFFitScale.d.ts +30 -24
- package/dist/gui/EFFitScale.js +6 -1
- package/dist/gui/EFFitScale.js.map +1 -0
- package/dist/gui/EFFocusOverlay.d.ts +22 -14
- package/dist/gui/EFFocusOverlay.js +6 -1
- package/dist/gui/EFFocusOverlay.js.map +1 -0
- package/dist/gui/EFPause.d.ts +24 -18
- package/dist/gui/EFPause.js +6 -1
- package/dist/gui/EFPause.js.map +1 -0
- package/dist/gui/EFPlay.d.ts +24 -18
- package/dist/gui/EFPlay.js +6 -1
- package/dist/gui/EFPlay.js.map +1 -0
- package/dist/gui/EFPreview.d.ts +22 -15
- package/dist/gui/EFPreview.js +9 -1
- package/dist/gui/EFPreview.js.map +1 -0
- package/dist/gui/EFResizableBox.d.ts +39 -32
- package/dist/gui/EFResizableBox.js +8 -3
- package/dist/gui/EFResizableBox.js.map +1 -0
- package/dist/gui/EFScrubber.d.ts +31 -25
- package/dist/gui/EFScrubber.js +6 -1
- package/dist/gui/EFScrubber.js.map +1 -0
- package/dist/gui/EFTimeDisplay.d.ts +21 -14
- package/dist/gui/EFTimeDisplay.js +6 -1
- package/dist/gui/EFTimeDisplay.js.map +1 -0
- package/dist/gui/EFToggleLoop.d.ts +19 -13
- package/dist/gui/EFToggleLoop.js +6 -1
- package/dist/gui/EFToggleLoop.js.map +1 -0
- package/dist/gui/EFTogglePlay.d.ts +23 -17
- package/dist/gui/EFTogglePlay.js +6 -1
- package/dist/gui/EFTogglePlay.js.map +1 -0
- package/dist/gui/EFWorkbench.d.ts +24 -16
- package/dist/gui/EFWorkbench.js +6 -1
- package/dist/gui/EFWorkbench.js.map +1 -0
- package/dist/gui/PlaybackController.d.ts +54 -50
- package/dist/gui/PlaybackController.js +18 -0
- package/dist/gui/PlaybackController.js.map +1 -0
- package/dist/gui/TWMixin.js +5 -1
- package/dist/gui/TWMixin.js.map +1 -0
- package/dist/gui/TWMixin2.js +6 -1
- package/dist/gui/TWMixin2.js.map +1 -0
- package/dist/gui/TargetOrContextMixin.js +5 -0
- package/dist/gui/TargetOrContextMixin.js.map +1 -0
- package/dist/gui/currentTimeContext.js +5 -0
- package/dist/gui/currentTimeContext.js.map +1 -0
- package/dist/gui/durationContext.js +5 -0
- package/dist/gui/durationContext.js.map +1 -0
- package/dist/gui/efContext.js +5 -0
- package/dist/gui/efContext.js.map +1 -0
- package/dist/gui/fetchContext.js +5 -0
- package/dist/gui/fetchContext.js.map +1 -0
- package/dist/gui/focusContext.d.ts +6 -5
- package/dist/gui/focusContext.js +5 -0
- package/dist/gui/focusContext.js.map +1 -0
- package/dist/gui/focusedElementContext.js +5 -0
- package/dist/gui/focusedElementContext.js.map +1 -0
- package/dist/gui/playingContext.js +5 -0
- package/dist/gui/playingContext.js.map +1 -0
- package/dist/index.d.ts +27 -26
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -0
- package/dist/msToTimeCode.js +4 -0
- package/dist/msToTimeCode.js.map +1 -0
- package/dist/otel/BridgeSpanExporter.js +5 -0
- package/dist/otel/BridgeSpanExporter.js.map +1 -0
- package/dist/otel/setupBrowserTracing.js +7 -2
- package/dist/otel/setupBrowserTracing.js.map +1 -0
- package/dist/otel/tracingHelpers.d.ts +7 -34
- package/dist/otel/tracingHelpers.js +34 -2
- package/dist/otel/tracingHelpers.js.map +1 -0
- package/dist/transcoding/cache/RequestDeduplicator.js +25 -0
- package/dist/transcoding/cache/RequestDeduplicator.js.map +1 -0
- package/dist/transcoding/cache/URLTokenDeduplicator.js +23 -0
- package/dist/transcoding/cache/URLTokenDeduplicator.js.map +1 -0
- package/dist/transcoding/types/index.d.ts +96 -270
- package/dist/transcoding/utils/UrlGenerator.d.ts +30 -25
- package/dist/transcoding/utils/UrlGenerator.js +19 -0
- package/dist/transcoding/utils/UrlGenerator.js.map +1 -0
- package/dist/utils/LRUCache.js +44 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/package.json +11 -24
- package/tsdown.config.ts +36 -0
- package/dist/DelayedLoadingState.d.ts +0 -48
- package/dist/DelayedLoadingState.integration.test.d.ts +0 -1
- package/dist/DelayedLoadingState.test.d.ts +0 -1
- package/dist/EF_INTERACTIVE.d.ts +0 -1
- package/dist/EF_RENDERING.d.ts +0 -1
- package/dist/LoadingDebounce.test.d.ts +0 -1
- package/dist/ManualScrubTest.test.d.ts +0 -1
- package/dist/ScrubResolvedFlashing.test.d.ts +0 -1
- package/dist/ScrubTrackManager.test.d.ts +0 -1
- package/dist/VideoSeekFlashing.browsertest.d.ts +0 -0
- package/dist/VideoStuckDiagnostic.test.d.ts +0 -1
- package/dist/attachContextRoot.d.ts +0 -1
- package/dist/elements/ContextProxiesController.d.ts +0 -39
- package/dist/elements/CrossUpdateController.d.ts +0 -8
- package/dist/elements/EFAudio.browsertest.d.ts +0 -0
- package/dist/elements/EFCaptions.browsertest.d.ts +0 -0
- package/dist/elements/EFImage.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +0 -19
- package/dist/elements/EFMedia/AssetIdMediaEngine.test.d.ts +0 -1
- package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/AssetMediaEngine.d.ts +0 -56
- package/dist/elements/EFMedia/BaseMediaEngine.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/BaseMediaEngine.d.ts +0 -103
- package/dist/elements/EFMedia/BufferedSeekingInput.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/JitMediaEngine.d.ts +0 -46
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +0 -3
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +0 -3
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +0 -7
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +0 -4
- package/dist/elements/EFMedia/audioTasks/makeAudioTasksVideoOnly.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +0 -3
- package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +0 -7
- package/dist/elements/EFMedia/shared/GlobalInputCache.d.ts +0 -39
- package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +0 -28
- package/dist/elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +0 -11
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.d.ts +0 -27
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +0 -17
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.d.ts +0 -29
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.d.ts +0 -25
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.d.ts +0 -8
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.d.ts +0 -3
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.d.ts +0 -6
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.d.ts +0 -4
- package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.d.ts +0 -6
- package/dist/elements/EFMedia.browsertest.d.ts +0 -10
- package/dist/elements/EFSurface.browsertest.d.ts +0 -0
- package/dist/elements/EFTemporal.browsertest.d.ts +0 -22
- package/dist/elements/EFThumbnailStrip.browsertest.d.ts +0 -0
- package/dist/elements/EFThumbnailStrip.media-engine.browsertest.d.ts +0 -0
- package/dist/elements/EFTimegroup.browsertest.d.ts +0 -41
- package/dist/elements/EFVideo.browsertest.d.ts +0 -0
- package/dist/elements/FetchContext.browsertest.d.ts +0 -0
- package/dist/elements/TargetController.browsertest.d.ts +0 -19
- package/dist/elements/durationConverter.d.ts +0 -16
- package/dist/elements/parseTimeToMs.d.ts +0 -1
- package/dist/elements/printTaskStatus.d.ts +0 -2
- package/dist/elements/renderTemporalAudio.d.ts +0 -10
- package/dist/elements/updateAnimations.browsertest.d.ts +0 -13
- package/dist/elements/updateAnimations.d.ts +0 -24
- package/dist/elements/util.d.ts +0 -3
- package/dist/gui/ContextMixin.browsertest.d.ts +0 -15
- package/dist/gui/Controllable.browsertest.d.ts +0 -0
- package/dist/gui/EFControls.browsertest.d.ts +0 -11
- package/dist/gui/EFDial.browsertest.d.ts +0 -0
- package/dist/gui/EFFilmstrip.browsertest.d.ts +0 -11
- package/dist/gui/EFPause.browsertest.d.ts +0 -0
- package/dist/gui/EFPlay.browsertest.d.ts +0 -0
- package/dist/gui/EFResizableBox.browsertest.d.ts +0 -0
- package/dist/gui/EFTimeDisplay.browsertest.d.ts +0 -0
- package/dist/gui/TWMixin.d.ts +0 -2
- package/dist/gui/TargetOrContextMixin.d.ts +0 -10
- package/dist/gui/currentTimeContext.d.ts +0 -3
- package/dist/gui/durationContext.d.ts +0 -3
- package/dist/gui/efContext.d.ts +0 -4
- package/dist/gui/fetchContext.d.ts +0 -3
- package/dist/gui/focusedElementContext.d.ts +0 -3
- package/dist/gui/playingContext.d.ts +0 -6
- package/dist/msToTimeCode.d.ts +0 -1
- package/dist/otel/BridgeSpanExporter.d.ts +0 -13
- package/dist/otel/setupBrowserTracing.d.ts +0 -12
- package/dist/style.css +0 -2
- package/dist/transcoding/cache/RequestDeduplicator.d.ts +0 -29
- package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +0 -1
- package/dist/transcoding/cache/URLTokenDeduplicator.d.ts +0 -38
- package/dist/transcoding/cache/URLTokenDeduplicator.test.d.ts +0 -1
- package/dist/transcoding/utils/MediaUtils.d.ts +0 -9
- package/dist/transcoding/utils/constants.d.ts +0 -27
- package/dist/utils/LRUCache.d.ts +0 -80
- package/dist/utils/LRUCache.test.d.ts +0 -1
- /package/dist/{LoadingIndicator.browsertest.d.ts → elements.js} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/DelayedLoadingState.ts
|
|
1
2
|
var DelayedLoadingState = class {
|
|
2
3
|
constructor(delayMs = 250, onStateChange) {
|
|
3
4
|
this.operations = /* @__PURE__ */ new Map();
|
|
@@ -6,6 +7,9 @@ var DelayedLoadingState = class {
|
|
|
6
7
|
this.loadingDelayMs = delayMs;
|
|
7
8
|
this.onStateChange = onStateChange;
|
|
8
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Start a delayed loading operation
|
|
12
|
+
*/
|
|
9
13
|
startLoading(operationId, message, options = {}) {
|
|
10
14
|
const isBackground = options.background || false;
|
|
11
15
|
const existingOp = this.operations.get(operationId);
|
|
@@ -31,6 +35,9 @@ var DelayedLoadingState = class {
|
|
|
31
35
|
isBackground: false
|
|
32
36
|
});
|
|
33
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Clear a loading operation
|
|
40
|
+
*/
|
|
34
41
|
clearLoading(operationId) {
|
|
35
42
|
const operation = this.operations.get(operationId);
|
|
36
43
|
if (!operation) return;
|
|
@@ -38,21 +45,36 @@ var DelayedLoadingState = class {
|
|
|
38
45
|
this.operations.delete(operationId);
|
|
39
46
|
this.updateLoadingState();
|
|
40
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Clear all loading operations
|
|
50
|
+
*/
|
|
41
51
|
clearAllLoading() {
|
|
42
52
|
for (const operation of this.operations.values()) if (operation.timeout) clearTimeout(operation.timeout);
|
|
43
53
|
this.operations.clear();
|
|
44
54
|
this.updateLoadingState();
|
|
45
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Get current loading state
|
|
58
|
+
*/
|
|
46
59
|
get isLoading() {
|
|
47
60
|
return this.isCurrentlyLoading;
|
|
48
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Get current loading message
|
|
64
|
+
*/
|
|
49
65
|
get message() {
|
|
50
66
|
return this.currentMessage;
|
|
51
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if any non-background operations are active
|
|
70
|
+
*/
|
|
52
71
|
hasActiveOperations() {
|
|
53
72
|
for (const operation of this.operations.values()) if (!operation.isBackground) return true;
|
|
54
73
|
return false;
|
|
55
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the message for the most recent non-background operation
|
|
77
|
+
*/
|
|
56
78
|
getCurrentMessage() {
|
|
57
79
|
let latestTime = 0;
|
|
58
80
|
let latestMessage = "";
|
|
@@ -62,6 +84,9 @@ var DelayedLoadingState = class {
|
|
|
62
84
|
}
|
|
63
85
|
return latestMessage;
|
|
64
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Trigger loading state (called by timeout)
|
|
89
|
+
*/
|
|
65
90
|
triggerLoadingState() {
|
|
66
91
|
if (this.hasActiveOperations() && !this.isCurrentlyLoading) {
|
|
67
92
|
this.isCurrentlyLoading = true;
|
|
@@ -69,6 +94,9 @@ var DelayedLoadingState = class {
|
|
|
69
94
|
this.onStateChange?.(true, this.currentMessage);
|
|
70
95
|
}
|
|
71
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Update loading state based on current operations
|
|
99
|
+
*/
|
|
72
100
|
updateLoadingState() {
|
|
73
101
|
const shouldBeLoading = this.hasActiveOperations();
|
|
74
102
|
if (shouldBeLoading !== this.isCurrentlyLoading) {
|
|
@@ -83,4 +111,7 @@ var DelayedLoadingState = class {
|
|
|
83
111
|
}
|
|
84
112
|
}
|
|
85
113
|
};
|
|
114
|
+
|
|
115
|
+
//#endregion
|
|
86
116
|
export { DelayedLoadingState };
|
|
117
|
+
//# sourceMappingURL=DelayedLoadingState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DelayedLoadingState.js","names":[],"sources":["../src/DelayedLoadingState.ts"],"sourcesContent":["interface LoadingOperation {\n id: string;\n message: string;\n startTime: number;\n timeout?: NodeJS.Timeout;\n isBackground: boolean;\n}\n\ninterface LoadingOptions {\n background?: boolean;\n}\n\nexport class DelayedLoadingState {\n private operations = new Map<string, LoadingOperation>();\n private loadingDelayMs: number;\n private isCurrentlyLoading = false;\n private currentMessage = \"\";\n private onStateChange?: (isLoading: boolean, message: string) => void;\n\n constructor(\n delayMs = 250,\n onStateChange?: (isLoading: boolean, message: string) => void,\n ) {\n this.loadingDelayMs = delayMs;\n this.onStateChange = onStateChange;\n }\n\n /**\n * Start a delayed loading operation\n */\n startLoading(\n operationId: string,\n message: string,\n options: LoadingOptions = {},\n ): void {\n const isBackground = options.background || false;\n\n // Clear existing timeout for this operation if it exists\n const existingOp = this.operations.get(operationId);\n if (existingOp?.timeout) {\n clearTimeout(existingOp.timeout);\n }\n\n // Don't create timeout for background operations\n if (isBackground) {\n this.operations.set(operationId, {\n id: operationId,\n message,\n startTime: Date.now(),\n isBackground: true,\n });\n return;\n }\n\n // Create timeout to show loading after delay\n const timeout = setTimeout(() => {\n // Only trigger if operation still exists and is not background\n const operation = this.operations.get(operationId);\n if (operation && !operation.isBackground) {\n this.triggerLoadingState();\n }\n }, this.loadingDelayMs);\n\n this.operations.set(operationId, {\n id: operationId,\n message,\n startTime: Date.now(),\n timeout,\n isBackground: false,\n });\n }\n\n /**\n * Clear a loading operation\n */\n clearLoading(operationId: string): void {\n const operation = this.operations.get(operationId);\n if (!operation) return;\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n\n this.operations.delete(operationId);\n\n // Update loading state\n this.updateLoadingState();\n }\n\n /**\n * Clear all loading operations\n */\n clearAllLoading(): void {\n for (const operation of this.operations.values()) {\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n }\n this.operations.clear();\n this.updateLoadingState();\n }\n\n /**\n * Get current loading state\n */\n get isLoading(): boolean {\n return this.isCurrentlyLoading;\n }\n\n /**\n * Get current loading message\n */\n get message(): string {\n return this.currentMessage;\n }\n\n /**\n * Check if any non-background operations are active\n */\n private hasActiveOperations(): boolean {\n for (const operation of this.operations.values()) {\n if (!operation.isBackground) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the message for the most recent non-background operation\n */\n private getCurrentMessage(): string {\n let latestTime = 0;\n let latestMessage = \"\";\n\n for (const operation of this.operations.values()) {\n if (!operation.isBackground && operation.startTime > latestTime) {\n latestTime = operation.startTime;\n latestMessage = operation.message;\n }\n }\n\n return latestMessage;\n }\n\n /**\n * Trigger loading state (called by timeout)\n */\n private triggerLoadingState(): void {\n if (this.hasActiveOperations() && !this.isCurrentlyLoading) {\n this.isCurrentlyLoading = true;\n this.currentMessage = this.getCurrentMessage();\n this.onStateChange?.(true, this.currentMessage);\n }\n }\n\n /**\n * Update loading state based on current operations\n */\n private updateLoadingState(): void {\n const shouldBeLoading = this.hasActiveOperations();\n\n if (shouldBeLoading !== this.isCurrentlyLoading) {\n this.isCurrentlyLoading = shouldBeLoading;\n\n if (shouldBeLoading) {\n this.currentMessage = this.getCurrentMessage();\n this.onStateChange?.(true, this.currentMessage);\n } else {\n this.currentMessage = \"\";\n this.onStateChange?.(false, \"\");\n }\n }\n }\n}\n"],"mappings":";AAYA,IAAa,sBAAb,MAAiC;CAO/B,YACE,UAAU,KACV,eACA;oCATmB,IAAI,KAA+B;4BAE3B;wBACJ;AAOvB,OAAK,iBAAiB;AACtB,OAAK,gBAAgB;;;;;CAMvB,aACE,aACA,SACA,UAA0B,EAAE,EACtB;EACN,MAAM,eAAe,QAAQ,cAAc;EAG3C,MAAM,aAAa,KAAK,WAAW,IAAI,YAAY;AACnD,MAAI,YAAY,QACd,cAAa,WAAW,QAAQ;AAIlC,MAAI,cAAc;AAChB,QAAK,WAAW,IAAI,aAAa;IAC/B,IAAI;IACJ;IACA,WAAW,KAAK,KAAK;IACrB,cAAc;IACf,CAAC;AACF;;EAIF,MAAM,UAAU,iBAAiB;GAE/B,MAAM,YAAY,KAAK,WAAW,IAAI,YAAY;AAClD,OAAI,aAAa,CAAC,UAAU,aAC1B,MAAK,qBAAqB;KAE3B,KAAK,eAAe;AAEvB,OAAK,WAAW,IAAI,aAAa;GAC/B,IAAI;GACJ;GACA,WAAW,KAAK,KAAK;GACrB;GACA,cAAc;GACf,CAAC;;;;;CAMJ,aAAa,aAA2B;EACtC,MAAM,YAAY,KAAK,WAAW,IAAI,YAAY;AAClD,MAAI,CAAC,UAAW;AAGhB,MAAI,UAAU,QACZ,cAAa,UAAU,QAAQ;AAGjC,OAAK,WAAW,OAAO,YAAY;AAGnC,OAAK,oBAAoB;;;;;CAM3B,kBAAwB;AACtB,OAAK,MAAM,aAAa,KAAK,WAAW,QAAQ,CAC9C,KAAI,UAAU,QACZ,cAAa,UAAU,QAAQ;AAGnC,OAAK,WAAW,OAAO;AACvB,OAAK,oBAAoB;;;;;CAM3B,IAAI,YAAqB;AACvB,SAAO,KAAK;;;;;CAMd,IAAI,UAAkB;AACpB,SAAO,KAAK;;;;;CAMd,AAAQ,sBAA+B;AACrC,OAAK,MAAM,aAAa,KAAK,WAAW,QAAQ,CAC9C,KAAI,CAAC,UAAU,aACb,QAAO;AAGX,SAAO;;;;;CAMT,AAAQ,oBAA4B;EAClC,IAAI,aAAa;EACjB,IAAI,gBAAgB;AAEpB,OAAK,MAAM,aAAa,KAAK,WAAW,QAAQ,CAC9C,KAAI,CAAC,UAAU,gBAAgB,UAAU,YAAY,YAAY;AAC/D,gBAAa,UAAU;AACvB,mBAAgB,UAAU;;AAI9B,SAAO;;;;;CAMT,AAAQ,sBAA4B;AAClC,MAAI,KAAK,qBAAqB,IAAI,CAAC,KAAK,oBAAoB;AAC1D,QAAK,qBAAqB;AAC1B,QAAK,iBAAiB,KAAK,mBAAmB;AAC9C,QAAK,gBAAgB,MAAM,KAAK,eAAe;;;;;;CAOnD,AAAQ,qBAA2B;EACjC,MAAM,kBAAkB,KAAK,qBAAqB;AAElD,MAAI,oBAAoB,KAAK,oBAAoB;AAC/C,QAAK,qBAAqB;AAE1B,OAAI,iBAAiB;AACnB,SAAK,iBAAiB,KAAK,mBAAmB;AAC9C,SAAK,gBAAgB,MAAM,KAAK,eAAe;UAC1C;AACL,SAAK,iBAAiB;AACtB,SAAK,gBAAgB,OAAO,GAAG"}
|
package/dist/EF_FRAMEGEN.d.ts
CHANGED
|
@@ -1,53 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { TraceContext } from "./otel/tracingHelpers.js";
|
|
2
|
+
import { VideoRenderOptions } from "@editframe/assets";
|
|
3
|
+
|
|
4
|
+
//#region src/EF_FRAMEGEN.d.ts
|
|
3
5
|
interface Bridge {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
onInitialize: (callback: (renderOptions: VideoRenderOptions, traceContext?: TraceContext, otelEndpoint?: string) => void) => void;
|
|
7
|
+
initialized(): void;
|
|
8
|
+
onBeginFrame(callback: (frameNumber: number, isLast: boolean, traceContext?: TraceContext) => void): void;
|
|
9
|
+
onTriggerCanvas(callback: (traceContext?: TraceContext) => void): void;
|
|
10
|
+
frameReady(frameNumber: number, audioSamples: ArrayBuffer): void;
|
|
11
|
+
error(error: Error): void;
|
|
12
|
+
syncLog(sequence: number, message: string, callback: () => void): void;
|
|
13
|
+
exportSpans?: (endpoint: string, payload: string) => void;
|
|
12
14
|
}
|
|
13
15
|
declare global {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
interface Window {
|
|
17
|
+
EF_FRAMEGEN?: EFFramegen;
|
|
18
|
+
FRAMEGEN_BRIDGE?: Bridge;
|
|
19
|
+
FRAMEGEN_BINDING?: any;
|
|
20
|
+
FRAMEGEN_BINDING_error?: (error: Error) => void;
|
|
21
|
+
EF_RENDERING?: () => boolean;
|
|
22
|
+
}
|
|
21
23
|
}
|
|
22
24
|
declare class TriggerCanvas {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
private canvas;
|
|
26
|
+
private ctx;
|
|
27
|
+
private canvasInitialized;
|
|
28
|
+
constructor();
|
|
29
|
+
initialize(): void;
|
|
30
|
+
trigger(): void;
|
|
29
31
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
32
|
+
declare class EFFramegen {
|
|
33
|
+
time: number;
|
|
34
|
+
frameDurationMs: number;
|
|
35
|
+
audioBufferPromise?: Promise<AudioBuffer>;
|
|
36
|
+
renderOptions?: VideoRenderOptions;
|
|
37
|
+
frameBox: HTMLDivElement;
|
|
38
|
+
BRIDGE: typeof window.FRAMEGEN_BRIDGE;
|
|
39
|
+
triggerCanvas: TriggerCanvas;
|
|
40
|
+
verificationCanvas?: HTMLCanvasElement;
|
|
41
|
+
verificationCtx?: CanvasRenderingContext2D;
|
|
42
|
+
private logSequence;
|
|
43
|
+
frameTasksInProgress: boolean;
|
|
44
|
+
currentFrameNumber: number;
|
|
45
|
+
trace(...args: any[]): void;
|
|
46
|
+
syncLog(...args: any[]): Promise<void>;
|
|
47
|
+
private initializeVerificationCanvas;
|
|
48
|
+
private drawVerificationStrip;
|
|
49
|
+
constructor();
|
|
50
|
+
connectToBridge(): void;
|
|
51
|
+
get showFrameBox(): boolean;
|
|
52
|
+
initialize(renderOptions: VideoRenderOptions): Promise<void>;
|
|
53
|
+
beginFrame(frameNumber: number, isLast: boolean): Promise<string | ArrayBuffer | null | undefined>;
|
|
52
54
|
}
|
|
53
|
-
|
|
55
|
+
//#endregion
|
|
56
|
+
export { EFFramegen };
|
|
57
|
+
//# sourceMappingURL=EF_FRAMEGEN.d.ts.map
|
package/dist/EF_FRAMEGEN.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { clearCurrentFrameSpan, enableTracing, extractParentContext, setCurrentFrameSpan, withSpan, withSpanAndContext } from "./otel/tracingHelpers.js";
|
|
2
2
|
import { shallowGetTimegroups } from "./elements/EFTimegroup.js";
|
|
3
3
|
import { setupBrowserTracing } from "./otel/setupBrowserTracing.js";
|
|
4
|
+
|
|
5
|
+
//#region src/EF_FRAMEGEN.ts
|
|
4
6
|
var TriggerCanvas = class {
|
|
5
7
|
constructor() {
|
|
6
8
|
this.canvasInitialized = false;
|
|
@@ -220,4 +222,6 @@ var EFFramegen = class {
|
|
|
220
222
|
}
|
|
221
223
|
};
|
|
222
224
|
if (typeof window !== "undefined") window.EF_FRAMEGEN = new EFFramegen();
|
|
223
|
-
|
|
225
|
+
|
|
226
|
+
//#endregion
|
|
227
|
+
//# sourceMappingURL=EF_FRAMEGEN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EF_FRAMEGEN.js","names":[],"sources":["../src/EF_FRAMEGEN.ts"],"sourcesContent":["import type { VideoRenderOptions } from \"@editframe/assets\";\n\nimport { shallowGetTimegroups } from \"./elements/EFTimegroup.js\";\nimport { setupBrowserTracing } from \"./otel/setupBrowserTracing.js\";\nimport {\n clearCurrentFrameSpan,\n enableTracing,\n extractParentContext,\n setCurrentFrameSpan,\n type TraceContext,\n withSpan,\n withSpanAndContext,\n} from \"./otel/tracingHelpers.js\";\n\ninterface Bridge {\n onInitialize: (\n callback: (\n renderOptions: VideoRenderOptions,\n traceContext?: TraceContext,\n otelEndpoint?: string,\n ) => void,\n ) => void;\n\n initialized(): void;\n\n onBeginFrame(\n callback: (\n frameNumber: number,\n isLast: boolean,\n traceContext?: TraceContext,\n ) => void,\n ): void;\n\n onTriggerCanvas(callback: (traceContext?: TraceContext) => void): void;\n\n frameReady(frameNumber: number, audioSamples: ArrayBuffer): void;\n\n error(error: Error): void;\n\n syncLog(sequence: number, message: string, callback: () => void): void;\n\n exportSpans?: (endpoint: string, payload: string) => void;\n}\n\ndeclare global {\n interface Window {\n EF_FRAMEGEN?: EFFramegen;\n FRAMEGEN_BRIDGE?: Bridge;\n FRAMEGEN_BINDING?: any;\n FRAMEGEN_BINDING_error?: (error: Error) => void;\n EF_RENDERING?: () => boolean;\n }\n}\n\nclass TriggerCanvas {\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n\n private canvasInitialized = false;\n\n constructor() {\n this.canvas = document.createElement(\"canvas\");\n const ctx = this.canvas.getContext(\"2d\", { willReadFrequently: true });\n if (!ctx) throw new Error(\"Canvas 2d context not ready\");\n this.ctx = ctx;\n this.ctx.fillStyle = \"transparent\";\n }\n\n initialize() {\n if (this.canvasInitialized) return;\n this.canvasInitialized = true;\n this.canvas.width = 1;\n this.canvas.height = 1;\n Object.assign(this.canvas.style, {\n position: \"fixed\",\n top: \"0px\",\n left: \"0px\",\n width: \"100%\",\n height: \"100%\",\n zIndex: \"100000\",\n });\n document.body.appendChild(this.canvas);\n }\n\n trigger() {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n}\n\nexport class EFFramegen {\n time = 0;\n frameDurationMs = 0;\n audioBufferPromise?: Promise<AudioBuffer>;\n renderOptions?: VideoRenderOptions;\n frameBox = document.createElement(\"div\");\n BRIDGE: typeof window.FRAMEGEN_BRIDGE;\n triggerCanvas = new TriggerCanvas();\n verificationCanvas?: HTMLCanvasElement;\n verificationCtx?: CanvasRenderingContext2D;\n private logSequence = 0;\n\n // Frame sequence coordination\n public frameTasksInProgress = false;\n public currentFrameNumber = 0;\n\n trace(...args: any[]) {\n console.trace(\"[EF_FRAMEGEN]\", ...args);\n }\n\n async syncLog(...args: any[]): Promise<void> {\n if (!this.BRIDGE) {\n // Fallback to regular console.log if no bridge\n console.log(\"[EF_FRAMEGEN]\", ...args);\n return;\n }\n\n const sequence = ++this.logSequence;\n const message = args\n .map((arg) =>\n typeof arg === \"object\" ? JSON.stringify(arg) : String(arg),\n )\n .join(\" \");\n\n return new Promise<void>((resolve) => {\n // biome-ignore lint/style/noNonNullAssertion: We know BRIDGE is set due to the guard above\n this.BRIDGE!.syncLog(sequence, message, () => {\n resolve();\n });\n });\n }\n\n private initializeVerificationCanvas() {\n if (this.verificationCanvas) {\n return;\n }\n\n this.verificationCanvas = document.createElement(\"canvas\");\n const ctx = this.verificationCanvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Verification canvas 2d context not ready\");\n this.verificationCtx = ctx;\n\n // Size to match the workbench width, 1 pixel height for verification strip\n const workbench = document.querySelector(\"ef-workbench\") as HTMLElement;\n if (workbench) {\n this.verificationCanvas.width = workbench.clientWidth;\n this.verificationCanvas.height = 1;\n\n // Position at the bottom of the workbench (beyond content height)\n Object.assign(this.verificationCanvas.style, {\n position: \"fixed\",\n left: \"0px\",\n bottom: \"0px\",\n width: `${workbench.clientWidth}px`,\n height: \"1px\",\n zIndex: \"99999\", // Above trigger canvas\n });\n\n document.body.appendChild(this.verificationCanvas);\n }\n }\n\n private drawVerificationStrip(frameNumber: number) {\n this.initializeVerificationCanvas();\n\n if (!this.verificationCanvas || !this.verificationCtx) {\n return;\n }\n\n const width = this.verificationCanvas.width;\n const height = this.verificationCanvas.height;\n\n // Clear the strip\n this.verificationCtx.clearRect(0, 0, width, height);\n\n // Encode frame number into RGB (24-bit)\n // R=high byte, G=middle byte, B=low byte\n const red = Math.floor(frameNumber / (256 * 256)) % 256;\n const green = Math.floor(frameNumber / 256) % 256;\n const blue = frameNumber % 256;\n\n // Fill the entire strip with the encoded frame number\n this.verificationCtx.fillStyle = `rgb(${red}, ${green}, ${blue})`;\n this.verificationCtx.fillRect(0, 0, width, height);\n }\n\n constructor() {\n this.BRIDGE = window.FRAMEGEN_BRIDGE;\n if (this.BRIDGE) {\n this.connectToBridge();\n }\n }\n\n connectToBridge() {\n const BRIDGE = this.BRIDGE;\n if (!BRIDGE) {\n throw new Error(\"No BRIDGE when attempting to connect to bridge\");\n }\n\n BRIDGE.onInitialize(async (renderOptions, traceContext, otelEndpoint) => {\n // Only enable tracing if explicitly requested in renderOptions\n if (renderOptions.enableTracing && otelEndpoint) {\n enableTracing();\n await setupBrowserTracing({\n otelEndpoint,\n serviceName: \"telecine-browser\",\n bridge: BRIDGE,\n useBatching: true, // Batch spans to reduce overhead during rendering\n });\n }\n\n const parentContext = extractParentContext(traceContext);\n\n await withSpan(\n \"browser.initialize\",\n {\n width: renderOptions.encoderOptions.video.width,\n height: renderOptions.encoderOptions.video.height,\n fps: renderOptions.encoderOptions.video.framerate,\n durationMs:\n renderOptions.encoderOptions.toMs -\n renderOptions.encoderOptions.fromMs,\n },\n parentContext,\n async () => {\n await this.initialize(renderOptions).catch((error) => {\n console.error(\n \"[EF_FRAMEGEN.connectToBridge] error initializing\",\n error,\n );\n throw error;\n });\n },\n );\n\n BRIDGE.initialized();\n });\n\n BRIDGE.onBeginFrame((frameNumber, isLast, traceContext) => {\n const parentContext = extractParentContext(traceContext);\n withSpanAndContext(\n \"browser.frame.render\",\n {\n frameNumber,\n isLast,\n },\n parentContext,\n async (span, _spanContext) => {\n // Store the span itself for child operations\n // This allows spans created in Lit Tasks to use it as their parent\n setCurrentFrameSpan(span);\n\n try {\n await this.beginFrame(frameNumber, isLast);\n } finally {\n clearCurrentFrameSpan();\n }\n },\n ).catch((error) => {\n console.error(\"[EF_FRAMEGEN.beginFrame] error:\", error);\n clearCurrentFrameSpan();\n throw error;\n });\n });\n\n BRIDGE.onTriggerCanvas((traceContext) => {\n const parentContext = extractParentContext(traceContext);\n\n withSpan(\"browser.canvas.trigger\", {}, parentContext, async () => {\n this.triggerCanvas.trigger();\n }).catch((error) => {\n console.error(\"[EF_FRAMEGEN.triggerCanvas] error:\", error);\n });\n });\n }\n\n get showFrameBox() {\n return this.renderOptions?.showFrameBox ?? false;\n }\n\n async initialize(renderOptions: VideoRenderOptions) {\n this.renderOptions = renderOptions;\n\n const workbench = document.querySelector(\"ef-workbench\");\n if (!workbench) {\n throw new Error(\"No workbench found\");\n }\n workbench.rendering = true;\n workbench.playing = false;\n const timegroups = shallowGetTimegroups(workbench);\n const firstGroup = timegroups[0];\n if (!firstGroup) {\n throw new Error(\"No temporal elements found\");\n }\n const startingTimeMs = renderOptions.encoderOptions.fromMs;\n await firstGroup.waitForMediaDurations();\n await firstGroup.waitForFrameTasks();\n\n this.frameDurationMs = 1000 / renderOptions.encoderOptions.video.framerate;\n\n this.time = startingTimeMs;\n if (this.showFrameBox) {\n Object.assign(this.frameBox.style, {\n width: \"200px\",\n height: \"100px\",\n font: \"10px Arial\",\n backgroundColor: \"white\",\n position: \"absolute\",\n top: \"0px\",\n right: \"0px\",\n zIndex: \"100000\",\n });\n document.body.prepend(this.frameBox);\n }\n\n this.triggerCanvas.initialize();\n\n // These times are aligned to the audio frame boundaries\n // And they include padding if any.\n this.audioBufferPromise = firstGroup.renderAudio(\n renderOptions.encoderOptions.alignedFromUs / 1000,\n renderOptions.encoderOptions.alignedToUs / 1000,\n );\n }\n\n async beginFrame(frameNumber: number, isLast: boolean) {\n if (this.renderOptions === undefined) {\n throw new Error(\"No renderOptions\");\n }\n const workbench = document.querySelector(\"ef-workbench\");\n if (!workbench) {\n throw new Error(\"No workbench found\");\n }\n workbench.rendering = true;\n const timegroups = shallowGetTimegroups(workbench);\n const firstGroup = timegroups[0];\n if (!firstGroup) {\n throw new Error(\"No temporal elements found\");\n }\n\n // Calculate base frame time using normal progression\n const frameTime =\n this.renderOptions.encoderOptions.fromMs +\n frameNumber * this.frameDurationMs;\n firstGroup.currentTimeMs = Number(Number(frameTime).toFixed(5));\n await firstGroup.waitForFrameTasks();\n if (this.showFrameBox) {\n this.frameBox.innerHTML = `\n <div>🖼️ Frame: ${frameNumber}</div>\n <div>🕛 Segment: ${this.time.toFixed(4)}</div>\n <div>🕛 Frame: ${firstGroup.currentTimeMs.toFixed(4)}</div>\n <div> from-to: ${this.renderOptions.encoderOptions.fromMs.toFixed(4)} - ${this.renderOptions.encoderOptions.toMs.toFixed(4)}</div>\n `;\n }\n\n // Draw verification pixel strip for frame verification\n this.drawVerificationStrip(frameNumber);\n\n if (isLast && this.audioBufferPromise) {\n // Currently we emit the audio in one belch at the end of the render.\n // This is not ideal, but it's the simplest thing that could possibly work.\n // We could either emit it slices, or in parallel with the video.\n // But in any case, it's fine for now.\n const renderedAudio = await this.audioBufferPromise;\n\n const channelCount = renderedAudio.numberOfChannels;\n\n const interleavedSamples = new Float32Array(\n channelCount * renderedAudio.length,\n );\n\n for (let i = 0; i < renderedAudio.length; i++) {\n for (let j = 0; j < channelCount; j++) {\n interleavedSamples.set(\n renderedAudio.getChannelData(j).slice(i, i + 1),\n i * channelCount + j,\n );\n }\n }\n\n if (this.BRIDGE) {\n this.BRIDGE.frameReady(frameNumber, interleavedSamples.buffer);\n } else {\n const fileReader = new FileReader();\n fileReader.readAsDataURL(new Blob([interleavedSamples.buffer]));\n await new Promise((resolve, reject) => {\n fileReader.onload = resolve;\n fileReader.onerror = reject;\n });\n return fileReader.result;\n }\n } else {\n if (this.BRIDGE) {\n this.BRIDGE.frameReady(frameNumber, new ArrayBuffer(0));\n } else {\n const fileReader = new FileReader();\n fileReader.readAsDataURL(new Blob([]));\n await new Promise((resolve, reject) => {\n fileReader.onload = resolve;\n fileReader.onerror = reject;\n });\n return fileReader.result;\n }\n }\n }\n}\n\nif (typeof window !== \"undefined\") {\n window.EF_FRAMEGEN = new EFFramegen();\n}\n"],"mappings":"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"}
|
package/dist/EF_INTERACTIVE.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EF_INTERACTIVE.js","names":[],"sources":["../src/EF_INTERACTIVE.ts"],"sourcesContent":["export let EF_INTERACTIVE = false;\n\nif (typeof window !== \"undefined\") {\n EF_INTERACTIVE = !window.location?.search.includes(\"EF_NONINTERACTIVE\");\n}\n"],"mappings":";AAAA,IAAW,iBAAiB;AAE5B,IAAI,OAAO,WAAW,YACpB,kBAAiB,CAAC,OAAO,UAAU,OAAO,SAAS,oBAAoB"}
|
package/dist/EF_RENDERING.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EF_RENDERING.js","names":[],"sources":["../src/EF_RENDERING.ts"],"sourcesContent":["export const EF_RENDERING = () =>\n typeof window !== \"undefined\" && \"FRAMEGEN_BRIDGE\" in window;\n"],"mappings":";AAAA,MAAa,qBACX,OAAO,WAAW,eAAe,qBAAqB"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
//#region \0@oxc-project+runtime@0.94.0/helpers/decorate.js
|
|
1
2
|
function __decorate(decorators, target, key, desc) {
|
|
2
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
7
|
}
|
|
7
|
-
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { __decorate };
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { ContextRoot } from "@lit/context";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
//#region src/attachContextRoot.ts
|
|
4
|
+
let contextRoot = null;
|
|
3
5
|
const attachContextRoot = () => {
|
|
4
6
|
if (typeof window === "undefined") return;
|
|
5
7
|
if (contextRoot !== null) return;
|
|
6
8
|
contextRoot = new ContextRoot();
|
|
7
9
|
contextRoot.attach(document.body);
|
|
8
10
|
};
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
9
13
|
export { attachContextRoot };
|
|
14
|
+
//# sourceMappingURL=attachContextRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachContextRoot.js","names":["contextRoot: ContextRoot | null"],"sources":["../src/attachContextRoot.ts"],"sourcesContent":["import { ContextRoot } from \"@lit/context\";\n\nlet contextRoot: ContextRoot | null = null;\nexport const attachContextRoot = () => {\n if (typeof window === \"undefined\") {\n return;\n }\n if (contextRoot !== null) {\n return;\n }\n contextRoot = new ContextRoot();\n contextRoot.attach(document.body);\n};\n"],"mappings":";;;AAEA,IAAIA,cAAkC;AACtC,MAAa,0BAA0B;AACrC,KAAI,OAAO,WAAW,YACpB;AAEF,KAAI,gBAAgB,KAClB;AAEF,eAAc,IAAI,aAAa;AAC/B,aAAY,OAAO,SAAS,KAAK"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/elements/CrossUpdateController.ts
|
|
1
2
|
var CrossUpdateController = class {
|
|
2
3
|
constructor(host, target) {
|
|
3
4
|
this.host = host;
|
|
@@ -11,4 +12,7 @@ var CrossUpdateController = class {
|
|
|
11
12
|
this.host.removeController(this);
|
|
12
13
|
}
|
|
13
14
|
};
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
14
17
|
export { CrossUpdateController };
|
|
18
|
+
//# sourceMappingURL=CrossUpdateController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossUpdateController.js","names":["host: ReactiveControllerHost","target: LitElement"],"sources":["../../src/elements/CrossUpdateController.ts"],"sourcesContent":["import type {\n LitElement,\n ReactiveController,\n ReactiveControllerHost,\n} from \"lit\";\n\nexport class CrossUpdateController implements ReactiveController {\n constructor(\n private host: ReactiveControllerHost,\n private target: LitElement,\n ) {\n this.host.addController(this);\n }\n\n hostUpdate(): void {\n this.target.requestUpdate();\n }\n\n remove(): void {\n this.host.removeController(this);\n }\n}\n"],"mappings":";AAMA,IAAa,wBAAb,MAAiE;CAC/D,YACE,AAAQA,MACR,AAAQC,QACR;EAFQ;EACA;AAER,OAAK,KAAK,cAAc,KAAK;;CAG/B,aAAmB;AACjB,OAAK,OAAO,eAAe;;CAG7B,SAAe;AACb,OAAK,KAAK,iBAAiB,KAAK"}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { EFMedia } from
|
|
1
|
+
import { MediaEngine } from "../transcoding/types/index.js";
|
|
2
|
+
import { EFMedia } from "./EFMedia.js";
|
|
3
|
+
import * as _lit_task8 from "@lit/task";
|
|
4
|
+
import { Task } from "@lit/task";
|
|
5
|
+
import * as lit_html1 from "lit-html";
|
|
6
|
+
import * as lit_html_directives_ref_js1 from "lit-html/directives/ref.js";
|
|
7
|
+
|
|
8
|
+
//#region src/elements/EFAudio.d.ts
|
|
3
9
|
declare const EFAudio_base: typeof EFMedia;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
declare class EFAudio extends EFAudio_base {
|
|
11
|
+
private _propertyHack;
|
|
12
|
+
audioElementRef: lit_html_directives_ref_js1.Ref<HTMLAudioElement>;
|
|
13
|
+
render(): lit_html1.TemplateResult<1>;
|
|
14
|
+
frameTask: Task<readonly [_lit_task8.TaskStatus, _lit_task8.TaskStatus, _lit_task8.TaskStatus, _lit_task8.TaskStatus], void>;
|
|
15
|
+
/**
|
|
16
|
+
* Legacy getter for fragment index task (maps to audioSegmentIdTask)
|
|
17
|
+
* Still used by EFCaptions
|
|
18
|
+
*/
|
|
19
|
+
get fragmentIndexTask(): Task<readonly [MediaEngine | undefined, number], number | undefined>;
|
|
14
20
|
}
|
|
15
21
|
declare global {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
"ef-audio": EFAudio;
|
|
24
|
+
}
|
|
19
25
|
}
|
|
20
|
-
|
|
26
|
+
//#endregion
|
|
27
|
+
export { EFAudio };
|
|
28
|
+
//# sourceMappingURL=EFAudio.d.ts.map
|
package/dist/elements/EFAudio.js
CHANGED
|
@@ -6,7 +6,9 @@ import { Task } from "@lit/task";
|
|
|
6
6
|
import { html } from "lit";
|
|
7
7
|
import { customElement, property } from "lit/decorators.js";
|
|
8
8
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
//#region src/elements/EFAudio.ts
|
|
11
|
+
let EFAudio = class EFAudio$1 extends TWMixin(EFMedia) {
|
|
10
12
|
constructor(..._args) {
|
|
11
13
|
super(..._args);
|
|
12
14
|
this._propertyHack = false;
|
|
@@ -31,6 +33,10 @@ var EFAudio = class EFAudio$1 extends TWMixin(EFMedia) {
|
|
|
31
33
|
render() {
|
|
32
34
|
return html`<audio ${ref(this.audioElementRef)}></audio>`;
|
|
33
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Legacy getter for fragment index task (maps to audioSegmentIdTask)
|
|
38
|
+
* Still used by EFCaptions
|
|
39
|
+
*/
|
|
34
40
|
get fragmentIndexTask() {
|
|
35
41
|
return this.audioSegmentIdTask;
|
|
36
42
|
}
|
|
@@ -40,4 +46,7 @@ __decorate([property({
|
|
|
40
46
|
attribute: "dummy-property"
|
|
41
47
|
})], EFAudio.prototype, "_propertyHack", void 0);
|
|
42
48
|
EFAudio = __decorate([customElement("ef-audio")], EFAudio);
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
43
51
|
export { EFAudio };
|
|
52
|
+
//# sourceMappingURL=EFAudio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFAudio.js","names":["EFAudio"],"sources":["../../src/elements/EFAudio.ts"],"sourcesContent":["import { Task } from \"@lit/task\";\nimport { html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { createRef, ref } from \"lit/directives/ref.js\";\nimport { EF_INTERACTIVE } from \"../EF_INTERACTIVE.js\";\nimport { TWMixin } from \"../gui/TWMixin.js\";\nimport { EFMedia } from \"./EFMedia.js\";\n\n@customElement(\"ef-audio\")\nexport class EFAudio extends TWMixin(EFMedia) {\n // HACK: This dummy property is needed to activate Lit's property processing system\n // Without it, inherited properties from EFMedia don't work correctly\n // TODO: Remove this as soon as we have an audio-specific property that needs @property\n @property({ type: Boolean, attribute: \"dummy-property\" })\n // @ts-expect-error - This is a hack to activate Lit's property processing system\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: Used to activate Lit's property processing\n private _propertyHack = false;\n\n audioElementRef = createRef<HTMLAudioElement>();\n\n render() {\n return html`<audio ${ref(this.audioElementRef)}></audio>`;\n }\n\n frameTask = new Task(this, {\n autoRun: EF_INTERACTIVE,\n args: () =>\n [\n this.audioBufferTask.status,\n this.audioSeekTask.status,\n this.audioSegmentFetchTask.status,\n this.mediaEngineTask.status,\n ] as const,\n task: async () => {\n await this.mediaEngineTask.taskComplete;\n await this.audioSegmentFetchTask.taskComplete;\n await this.audioSeekTask.taskComplete;\n await this.audioBufferTask.taskComplete;\n this.rootTimegroup?.requestUpdate();\n },\n });\n\n /**\n * Legacy getter for fragment index task (maps to audioSegmentIdTask)\n * Still used by EFCaptions\n */\n get fragmentIndexTask() {\n return this.audioSegmentIdTask;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-audio\": EFAudio;\n }\n}\n"],"mappings":";;;;;;;;;;AASO,oBAAMA,kBAAgB,QAAQ,QAAQ,CAAC;;;uBAOpB;yBAEN,WAA6B;mBAMnC,IAAI,KAAK,MAAM;GACzB,SAAS;GACT,YACE;IACE,KAAK,gBAAgB;IACrB,KAAK,cAAc;IACnB,KAAK,sBAAsB;IAC3B,KAAK,gBAAgB;IACtB;GACH,MAAM,YAAY;AAChB,UAAM,KAAK,gBAAgB;AAC3B,UAAM,KAAK,sBAAsB;AACjC,UAAM,KAAK,cAAc;AACzB,UAAM,KAAK,gBAAgB;AAC3B,SAAK,eAAe,eAAe;;GAEtC,CAAC;;CApBF,SAAS;AACP,SAAO,IAAI,UAAU,IAAI,KAAK,gBAAgB,CAAC;;;;;;CAyBjD,IAAI,oBAAoB;AACtB,SAAO,KAAK;;;YAlCb,SAAS;CAAE,MAAM;CAAS,WAAW;CAAkB,CAAC;sBAL1D,cAAc,WAAW"}
|