@editframe/elements 0.47.1 → 0.48.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/LICENSE.md +58 -0
- package/dist/DelayedLoadingState.js +1 -1
- package/dist/DelayedLoadingState.js.map +1 -1
- package/dist/EF_FRAMEGEN.js +1 -2
- package/dist/EF_FRAMEGEN.js.map +1 -1
- package/dist/EF_RENDERING.js +1 -1
- package/dist/EF_RENDERING.js.map +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.95.0 → _@oxc-project_runtime@0.122.0}/helpers/decorate.js +2 -3
- package/dist/attachContextRoot.js +1 -2
- package/dist/attachContextRoot.js.map +1 -1
- package/dist/canvas/EFCanvas.d.ts +4 -7
- package/dist/canvas/EFCanvas.js +20 -21
- package/dist/canvas/EFCanvas.js.map +1 -1
- package/dist/canvas/EFCanvasItem.d.ts +4 -5
- package/dist/canvas/EFCanvasItem.js +3 -4
- package/dist/canvas/EFCanvasItem.js.map +1 -1
- package/dist/canvas/api/CanvasAPI.d.ts +0 -1
- package/dist/canvas/api/CanvasAPI.js +1 -1
- package/dist/canvas/api/CanvasAPI.js.map +1 -1
- package/dist/canvas/coordinateTransform.js +1 -1
- package/dist/canvas/coordinateTransform.js.map +1 -1
- package/dist/canvas/getElementBounds.js +1 -1
- package/dist/canvas/getElementBounds.js.map +1 -1
- package/dist/canvas/overlays/SelectionOverlay.d.ts +4 -4
- package/dist/canvas/overlays/SelectionOverlay.js +6 -7
- package/dist/canvas/overlays/SelectionOverlay.js.map +1 -1
- package/dist/canvas/overlays/overlayState.js +1 -2
- package/dist/canvas/overlays/overlayState.js.map +1 -1
- package/dist/canvas/selection/SelectionController.js +1 -2
- package/dist/canvas/selection/SelectionController.js.map +1 -1
- package/dist/canvas/selection/SelectionModel.d.ts +0 -1
- package/dist/canvas/selection/SelectionModel.js +1 -1
- package/dist/canvas/selection/SelectionModel.js.map +1 -1
- package/dist/canvas/selection/selectionContext.d.ts +0 -1
- package/dist/canvas/selection/selectionContext.js +1 -2
- package/dist/canvas/selection/selectionContext.js.map +1 -1
- package/dist/elements/ContainerInfo.js +1 -1
- package/dist/elements/ContainerInfo.js.map +1 -1
- package/dist/elements/CrossUpdateController.js +1 -1
- package/dist/elements/CrossUpdateController.js.map +1 -1
- package/dist/elements/EFAudio.d.ts +4 -4
- package/dist/elements/EFAudio.js +4 -6
- package/dist/elements/EFAudio.js.map +1 -1
- package/dist/elements/EFCaptions.d.ts +4 -4
- package/dist/elements/EFCaptions.js +8 -10
- package/dist/elements/EFCaptions.js.map +1 -1
- package/dist/elements/EFImage.d.ts +7 -7
- package/dist/elements/EFImage.js +4 -6
- package/dist/elements/EFImage.js.map +1 -1
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +2 -2
- package/dist/elements/EFMedia/BufferedSeekingInput.js +14 -11
- package/dist/elements/EFMedia/BufferedSeekingInput.js.map +1 -1
- package/dist/elements/EFMedia/CachedFetcher.js +1 -2
- package/dist/elements/EFMedia/CachedFetcher.js.map +1 -1
- package/dist/elements/EFMedia/MediaEngine.d.ts +0 -2
- package/dist/elements/EFMedia/MediaEngine.js +1 -2
- package/dist/elements/EFMedia/MediaEngine.js.map +1 -1
- package/dist/elements/EFMedia/SegmentIndex.d.ts +2 -3
- package/dist/elements/EFMedia/SegmentIndex.js +10 -3
- package/dist/elements/EFMedia/SegmentIndex.js.map +1 -1
- package/dist/elements/EFMedia/SegmentTransport.d.ts +0 -2
- package/dist/elements/EFMedia/SegmentTransport.js +1 -1
- package/dist/elements/EFMedia/SegmentTransport.js.map +1 -1
- package/dist/elements/EFMedia/TimingModel.d.ts +0 -2
- package/dist/elements/EFMedia/TimingModel.js +1 -1
- package/dist/elements/EFMedia/TimingModel.js.map +1 -1
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js +1 -1
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js.map +1 -1
- package/dist/elements/EFMedia/shared/GlobalInputCache.js +1 -2
- package/dist/elements/EFMedia/shared/GlobalInputCache.js.map +1 -1
- package/dist/elements/EFMedia/shared/PrecisionUtils.js +1 -1
- package/dist/elements/EFMedia/shared/PrecisionUtils.js.map +1 -1
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +1 -2
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.js.map +1 -1
- package/dist/elements/EFMedia/shared/timeoutUtils.js +1 -2
- package/dist/elements/EFMedia/shared/timeoutUtils.js.map +1 -1
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js +1 -1
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js.map +1 -1
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.d.ts +0 -1
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js +12 -12
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js.map +1 -1
- package/dist/elements/EFMedia.d.ts +3 -3
- package/dist/elements/EFMedia.js +3 -4
- package/dist/elements/EFMedia.js.map +1 -1
- package/dist/elements/EFMotionBlur.d.ts +0 -1
- package/dist/elements/EFMotionBlur.js +8 -15
- package/dist/elements/EFMotionBlur.js.map +1 -1
- package/dist/elements/EFPanZoom.d.ts +4 -4
- package/dist/elements/EFPanZoom.js +3 -4
- package/dist/elements/EFPanZoom.js.map +1 -1
- package/dist/elements/EFSourceMixin.js +2 -3
- package/dist/elements/EFSourceMixin.js.map +1 -1
- package/dist/elements/EFSurface.d.ts +6 -6
- package/dist/elements/EFSurface.js +3 -4
- package/dist/elements/EFSurface.js.map +1 -1
- package/dist/elements/EFTemporal.d.ts +0 -1
- package/dist/elements/EFTemporal.js +6 -7
- package/dist/elements/EFTemporal.js.map +1 -1
- package/dist/elements/EFText.d.ts +4 -4
- package/dist/elements/EFText.js +6 -7
- package/dist/elements/EFText.js.map +1 -1
- package/dist/elements/EFTextSegment.d.ts +4 -4
- package/dist/elements/EFTextSegment.js +3 -4
- package/dist/elements/EFTextSegment.js.map +1 -1
- package/dist/elements/EFTimegroup.d.ts +4 -10
- package/dist/elements/EFTimegroup.js +11 -12
- package/dist/elements/EFTimegroup.js.map +1 -1
- package/dist/elements/EFVideo.d.ts +35 -8
- package/dist/elements/EFVideo.js +57 -12
- package/dist/elements/EFVideo.js.map +1 -1
- package/dist/elements/EFWaveform.d.ts +4 -4
- package/dist/elements/EFWaveform.js +4 -6
- package/dist/elements/EFWaveform.js.map +1 -1
- package/dist/elements/ElementPositionInfo.js +1 -1
- package/dist/elements/ElementPositionInfo.js.map +1 -1
- package/dist/elements/FetchMixin.js +1 -1
- package/dist/elements/FetchMixin.js.map +1 -1
- package/dist/elements/SampleBuffer.js +1 -2
- package/dist/elements/SampleBuffer.js.map +1 -1
- package/dist/elements/TargetController.d.ts +0 -1
- package/dist/elements/TargetController.js +1 -1
- package/dist/elements/TargetController.js.map +1 -1
- package/dist/elements/TimegroupController.js +1 -1
- package/dist/elements/TimegroupController.js.map +1 -1
- package/dist/elements/cloneFactoryRegistry.js +1 -1
- package/dist/elements/cloneFactoryRegistry.js.map +1 -1
- package/dist/elements/durationConverter.js +4 -5
- package/dist/elements/durationConverter.js.map +1 -1
- package/dist/elements/easingUtils.js +1 -1
- package/dist/elements/easingUtils.js.map +1 -1
- package/dist/elements/findRootTemporal.js +1 -2
- package/dist/elements/findRootTemporal.js.map +1 -1
- package/dist/elements/parseTimeToMs.js +1 -1
- package/dist/elements/parseTimeToMs.js.map +1 -1
- package/dist/elements/renderTemporalAudio.js +1 -2
- package/dist/elements/renderTemporalAudio.js.map +1 -1
- package/dist/elements/setupTemporalHierarchy.js +1 -1
- package/dist/elements/setupTemporalHierarchy.js.map +1 -1
- package/dist/elements/updateAnimations.js +1 -2
- package/dist/elements/updateAnimations.js.map +1 -1
- package/dist/getRenderInfo.d.ts +0 -1
- package/dist/getRenderInfo.js +1 -2
- package/dist/getRenderInfo.js.map +1 -1
- package/dist/gui/ContextMixin.d.ts +0 -1
- package/dist/gui/ContextMixin.js +2 -3
- package/dist/gui/ContextMixin.js.map +1 -1
- package/dist/gui/Controllable.d.ts +0 -2
- package/dist/gui/Controllable.js +1 -2
- package/dist/gui/Controllable.js.map +1 -1
- package/dist/gui/EFActiveRootTemporal.d.ts +4 -5
- package/dist/gui/EFActiveRootTemporal.js +3 -4
- package/dist/gui/EFActiveRootTemporal.js.map +1 -1
- package/dist/gui/EFConfiguration.d.ts +4 -4
- package/dist/gui/EFConfiguration.js +3 -4
- package/dist/gui/EFConfiguration.js.map +1 -1
- package/dist/gui/EFControls.d.ts +2 -3
- package/dist/gui/EFControls.js +4 -5
- package/dist/gui/EFControls.js.map +1 -1
- package/dist/gui/EFDial.d.ts +4 -4
- package/dist/gui/EFDial.js +3 -4
- package/dist/gui/EFDial.js.map +1 -1
- package/dist/gui/EFFilmstrip.d.ts +6 -7
- package/dist/gui/EFFilmstrip.js +3 -4
- package/dist/gui/EFFilmstrip.js.map +1 -1
- package/dist/gui/EFFitScale.d.ts +3 -3
- package/dist/gui/EFFitScale.js +6 -7
- package/dist/gui/EFFitScale.js.map +1 -1
- package/dist/gui/EFFocusOverlay.d.ts +6 -6
- package/dist/gui/EFFocusOverlay.js +3 -4
- package/dist/gui/EFFocusOverlay.js.map +1 -1
- package/dist/gui/EFOverlayItem.d.ts +4 -4
- package/dist/gui/EFOverlayItem.js +3 -4
- package/dist/gui/EFOverlayItem.js.map +1 -1
- package/dist/gui/EFOverlayLayer.d.ts +4 -5
- package/dist/gui/EFOverlayLayer.js +3 -4
- package/dist/gui/EFOverlayLayer.js.map +1 -1
- package/dist/gui/EFPause.d.ts +4 -4
- package/dist/gui/EFPause.js +3 -4
- package/dist/gui/EFPause.js.map +1 -1
- package/dist/gui/EFPlay.d.ts +4 -4
- package/dist/gui/EFPlay.js +3 -4
- package/dist/gui/EFPlay.js.map +1 -1
- package/dist/gui/EFPreview.d.ts +4 -4
- package/dist/gui/EFPreview.js +3 -4
- package/dist/gui/EFPreview.js.map +1 -1
- package/dist/gui/EFResizableBox.d.ts +4 -4
- package/dist/gui/EFResizableBox.js +3 -4
- package/dist/gui/EFResizableBox.js.map +1 -1
- package/dist/gui/EFScrubber.d.ts +4 -4
- package/dist/gui/EFScrubber.js +3 -4
- package/dist/gui/EFScrubber.js.map +1 -1
- package/dist/gui/EFTimeDisplay.d.ts +4 -4
- package/dist/gui/EFTimeDisplay.js +3 -4
- package/dist/gui/EFTimeDisplay.js.map +1 -1
- package/dist/gui/EFTimelineRuler.d.ts +4 -4
- package/dist/gui/EFTimelineRuler.js +5 -6
- package/dist/gui/EFTimelineRuler.js.map +1 -1
- package/dist/gui/EFToggleLoop.d.ts +4 -4
- package/dist/gui/EFToggleLoop.js +3 -4
- package/dist/gui/EFToggleLoop.js.map +1 -1
- package/dist/gui/EFTogglePlay.d.ts +4 -4
- package/dist/gui/EFTogglePlay.js +3 -4
- package/dist/gui/EFTogglePlay.js.map +1 -1
- package/dist/gui/EFTransformHandles.d.ts +4 -4
- package/dist/gui/EFTransformHandles.js +3 -4
- package/dist/gui/EFTransformHandles.js.map +1 -1
- package/dist/gui/EFWorkbench.d.ts +6 -7
- package/dist/gui/EFWorkbench.js +13 -15
- package/dist/gui/EFWorkbench.js.map +1 -1
- package/dist/gui/EFWorkbench.spacebar.js +1 -1
- package/dist/gui/EFWorkbench.spacebar.js.map +1 -1
- package/dist/gui/FitScaleHelpers.js +1 -2
- package/dist/gui/FitScaleHelpers.js.map +1 -1
- package/dist/gui/PlaybackController.js +38 -18
- package/dist/gui/PlaybackController.js.map +1 -1
- package/dist/gui/TWMixin.js +1 -1
- package/dist/gui/TWMixin.js.map +1 -1
- package/dist/gui/TWMixin2.js +1 -2
- package/dist/gui/TWMixin2.js.map +1 -1
- package/dist/gui/TargetOrContextMixin.js +2 -3
- package/dist/gui/TargetOrContextMixin.js.map +1 -1
- package/dist/gui/currentTimeContext.js +1 -2
- package/dist/gui/currentTimeContext.js.map +1 -1
- package/dist/gui/durationContext.js +1 -2
- package/dist/gui/durationContext.js.map +1 -1
- package/dist/gui/efContext.js +1 -2
- package/dist/gui/efContext.js.map +1 -1
- package/dist/gui/fetchContext.js +1 -2
- package/dist/gui/fetchContext.js.map +1 -1
- package/dist/gui/focusContext.js +1 -2
- package/dist/gui/focusContext.js.map +1 -1
- package/dist/gui/focusedElementContext.js +1 -2
- package/dist/gui/focusedElementContext.js.map +1 -1
- package/dist/gui/hierarchy/EFHierarchy.d.ts +4 -4
- package/dist/gui/hierarchy/EFHierarchy.js +3 -4
- package/dist/gui/hierarchy/EFHierarchy.js.map +1 -1
- package/dist/gui/hierarchy/EFHierarchyItem.d.ts +2 -2
- package/dist/gui/hierarchy/EFHierarchyItem.js +13 -14
- package/dist/gui/hierarchy/EFHierarchyItem.js.map +1 -1
- package/dist/gui/hierarchy/hierarchyContext.js +1 -2
- package/dist/gui/hierarchy/hierarchyContext.js.map +1 -1
- package/dist/gui/icons.js +1 -2
- package/dist/gui/icons.js.map +1 -1
- package/dist/gui/panZoomTransformContext.js +1 -2
- package/dist/gui/panZoomTransformContext.js.map +1 -1
- package/dist/gui/playingContext.js +1 -2
- package/dist/gui/playingContext.js.map +1 -1
- package/dist/gui/previewSettingsContext.d.ts +0 -1
- package/dist/gui/previewSettingsContext.js +1 -2
- package/dist/gui/previewSettingsContext.js.map +1 -1
- package/dist/gui/shouldSignUrl.js +1 -1
- package/dist/gui/shouldSignUrl.js.map +1 -1
- package/dist/gui/theme.js +1 -1
- package/dist/gui/theme.js.map +1 -1
- package/dist/gui/timeline/EFTimeline.d.ts +2 -5
- package/dist/gui/timeline/EFTimeline.js +19 -20
- package/dist/gui/timeline/EFTimeline.js.map +1 -1
- package/dist/gui/timeline/EFTimelineRow.d.ts +2 -2
- package/dist/gui/timeline/EFTimelineRow.js +3 -4
- package/dist/gui/timeline/EFTimelineRow.js.map +1 -1
- package/dist/gui/timeline/TrimHandles.d.ts +4 -4
- package/dist/gui/timeline/TrimHandles.js +3 -4
- package/dist/gui/timeline/TrimHandles.js.map +1 -1
- package/dist/gui/timeline/flattenHierarchy.js +1 -2
- package/dist/gui/timeline/flattenHierarchy.js.map +1 -1
- package/dist/gui/timeline/timelineEditingContext.js +1 -2
- package/dist/gui/timeline/timelineEditingContext.js.map +1 -1
- package/dist/gui/timeline/timelineStateContext.js +1 -14
- package/dist/gui/timeline/timelineStateContext.js.map +1 -1
- package/dist/gui/timeline/tracks/AudioTrack.d.ts +0 -1
- package/dist/gui/timeline/tracks/AudioTrack.js +3 -4
- package/dist/gui/timeline/tracks/AudioTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/CaptionsTrack.d.ts +2 -2
- package/dist/gui/timeline/tracks/CaptionsTrack.js +9 -9
- package/dist/gui/timeline/tracks/CaptionsTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/EFThumbnailStrip.d.ts +4 -4
- package/dist/gui/timeline/tracks/EFThumbnailStrip.js +3 -4
- package/dist/gui/timeline/tracks/EFThumbnailStrip.js.map +1 -1
- package/dist/gui/timeline/tracks/HTMLTrack.d.ts +2 -2
- package/dist/gui/timeline/tracks/HTMLTrack.js +3 -4
- package/dist/gui/timeline/tracks/HTMLTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/ImageTrack.d.ts +2 -2
- package/dist/gui/timeline/tracks/ImageTrack.js +3 -4
- package/dist/gui/timeline/tracks/ImageTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/TextTrack.d.ts +2 -2
- package/dist/gui/timeline/tracks/TextTrack.js +4 -5
- package/dist/gui/timeline/tracks/TextTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/TimegroupTrack.d.ts +5 -6
- package/dist/gui/timeline/tracks/TimegroupTrack.js +3 -4
- package/dist/gui/timeline/tracks/TimegroupTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/TrackItem.d.ts +2 -2
- package/dist/gui/timeline/tracks/TrackItem.js +3 -4
- package/dist/gui/timeline/tracks/TrackItem.js.map +1 -1
- package/dist/gui/timeline/tracks/VideoTrack.d.ts +6 -7
- package/dist/gui/timeline/tracks/VideoTrack.js +3 -4
- package/dist/gui/timeline/tracks/VideoTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/WaveformTrack.js +3 -4
- package/dist/gui/timeline/tracks/WaveformTrack.js.map +1 -1
- package/dist/gui/timeline/tracks/ensureTrackItemInit.js +1 -1
- package/dist/gui/timeline/tracks/preloadTracks.d.ts +1 -9
- package/dist/gui/timeline/tracks/renderTrackChildren.js +1 -2
- package/dist/gui/timeline/tracks/renderTrackChildren.js.map +1 -1
- package/dist/gui/timeline/tracks/waveformUtils.js +3 -6
- package/dist/gui/timeline/tracks/waveformUtils.js.map +1 -1
- package/dist/gui/transformCalculations.js +1 -2
- package/dist/gui/transformCalculations.js.map +1 -1
- package/dist/gui/transformUtils.js +1 -1
- package/dist/gui/transformUtils.js.map +1 -1
- package/dist/gui/tree/EFTree.d.ts +4 -6
- package/dist/gui/tree/EFTree.js +3 -4
- package/dist/gui/tree/EFTree.js.map +1 -1
- package/dist/gui/tree/EFTreeItem.d.ts +4 -5
- package/dist/gui/tree/EFTreeItem.js +3 -4
- package/dist/gui/tree/EFTreeItem.js.map +1 -1
- package/dist/gui/tree/treeContext.d.ts +0 -1
- package/dist/gui/tree/treeContext.js +1 -2
- package/dist/gui/tree/treeContext.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/node.js +1 -2
- package/dist/node_modules/lit-html/development/directives/ref.d.ts +14 -0
- package/dist/node_modules/lit-html/development/lit-html.d.ts +46 -0
- package/dist/otel/BridgeSpanExporter.js +1 -2
- package/dist/otel/BridgeSpanExporter.js.map +1 -1
- package/dist/otel/setupBrowserTracing.js +1 -2
- package/dist/otel/setupBrowserTracing.js.map +1 -1
- package/dist/otel/tracingHelpers.d.ts +0 -2
- package/dist/otel/tracingHelpers.js +1 -2
- package/dist/otel/tracingHelpers.js.map +1 -1
- package/dist/preview/AdaptiveResolutionTracker.js +11 -2
- package/dist/preview/AdaptiveResolutionTracker.js.map +1 -1
- package/dist/preview/FrameController.d.ts +0 -1
- package/dist/preview/FrameController.js +2 -32
- package/dist/preview/FrameController.js.map +1 -1
- package/dist/preview/QualityUpgradeScheduler.js +1 -1
- package/dist/preview/QualityUpgradeScheduler.js.map +1 -1
- package/dist/preview/RenderContext.d.ts +0 -1
- package/dist/preview/RenderContext.js +11 -2
- package/dist/preview/RenderContext.js.map +1 -1
- package/dist/preview/RenderProfiler.js +1 -1
- package/dist/preview/RenderProfiler.js.map +1 -1
- package/dist/preview/RenderStats.js +1 -1
- package/dist/preview/RenderStats.js.map +1 -1
- package/dist/preview/encoding/canvasEncoder.js +7 -2
- package/dist/preview/encoding/canvasEncoder.js.map +1 -1
- package/dist/preview/encoding/mainThreadEncoder.js +1 -1
- package/dist/preview/encoding/mainThreadEncoder.js.map +1 -1
- package/dist/preview/encoding/workerEncoder.js +1 -1
- package/dist/preview/encoding/workerEncoder.js.map +1 -1
- package/dist/preview/logger.js +1 -1
- package/dist/preview/logger.js.map +1 -1
- package/dist/preview/previewSettings.js +1 -1
- package/dist/preview/previewSettings.js.map +1 -1
- package/dist/preview/previewTypes.js +1 -1
- package/dist/preview/previewTypes.js.map +1 -1
- package/dist/preview/renderElementToCanvas.d.ts +0 -1
- package/dist/preview/renderElementToCanvas.js +12 -5
- package/dist/preview/renderElementToCanvas.js.map +1 -1
- package/dist/preview/renderTimegroupToCanvas.d.ts +0 -1
- package/dist/preview/renderTimegroupToCanvas.js +6 -7
- package/dist/preview/renderTimegroupToCanvas.js.map +1 -1
- package/dist/preview/renderTimegroupToVideo.d.ts +0 -1
- package/dist/preview/renderTimegroupToVideo.js +20 -8
- package/dist/preview/renderTimegroupToVideo.js.map +1 -1
- package/dist/preview/renderVideoToVideo.js +11 -2
- package/dist/preview/renderVideoToVideo.js.map +1 -1
- package/dist/preview/renderers.d.ts +0 -1
- package/dist/preview/renderers.js +5 -2
- package/dist/preview/renderers.js.map +1 -1
- package/dist/preview/rendering/ScaleConfig.js +2 -3
- package/dist/preview/rendering/ScaleConfig.js.map +1 -1
- package/dist/preview/rendering/inlineImages.d.ts +0 -1
- package/dist/preview/rendering/inlineImages.js +1 -1
- package/dist/preview/rendering/inlineImages.js.map +1 -1
- package/dist/preview/rendering/loadImage.js +1 -2
- package/dist/preview/rendering/loadImage.js.map +1 -1
- package/dist/preview/rendering/renderToImageNative.js +4 -5
- package/dist/preview/rendering/renderToImageNative.js.map +1 -1
- package/dist/preview/rendering/serializeTimelineDirect.js +18 -4
- package/dist/preview/rendering/serializeTimelineDirect.js.map +1 -1
- package/dist/preview/statsTrackingStrategy.js +1 -1
- package/dist/preview/statsTrackingStrategy.js.map +1 -1
- package/dist/preview/workers/WorkerPool.js +5 -2
- package/dist/preview/workers/WorkerPool.js.map +1 -1
- package/dist/preview/workers/encoderWorkerInline.js +1 -1
- package/dist/preview/workers/encoderWorkerInline.js.map +1 -1
- package/dist/render/EFRenderAPI.d.ts +0 -1
- package/dist/render/EFRenderAPI.js +1 -2
- package/dist/render/EFRenderAPI.js.map +1 -1
- package/dist/render/getRenderData.js +1 -1
- package/dist/render/getRenderData.js.map +1 -1
- package/dist/transcoding/cache/RequestDeduplicator.js +1 -1
- package/dist/transcoding/cache/RequestDeduplicator.js.map +1 -1
- package/dist/transcoding/cache/URLTokenDeduplicator.js +1 -1
- package/dist/transcoding/cache/URLTokenDeduplicator.js.map +1 -1
- package/dist/transcoding/types/index.d.ts +0 -1
- package/dist/transcoding/utils/UrlGenerator.js +1 -1
- package/dist/transcoding/utils/UrlGenerator.js.map +1 -1
- package/dist/utils/LRUCache.js +1 -1
- package/dist/utils/LRUCache.js.map +1 -1
- package/dist/utils/frameTime.js +2 -9
- package/dist/utils/frameTime.js.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlayState.js","names":[],"sources":["../../../src/canvas/overlays/overlayState.ts"],"sourcesContent":["/**\n * Overlay State Management\n *\n * This module provides a clean separation between:\n * - SEMANTICS: What should be shown? (OverlayTargets)\n * - MECHANISM: How to calculate screen bounds (calculateOverlayState)\n *\n * INVARIANTS:\n * 1. Overlay is visible iff bounds are non-null with positive dimensions\n * 2. All bounds are in screen coordinates (relative to viewport origin)\n * 3. Only one element can be highlighted at a time\n *\n * COORDINATE SPACES:\n * - Canvas space: Logical coordinates, unaffected by zoom (used for element positioning)\n * - Screen space: Viewport coordinates (used for overlay positioning)\n */\n\nimport type { PanZoomTransform } from \"../../elements/EFPanZoom.js\";\nimport type { SelectionContext } from \"../selection/selectionContext.js\";\nimport { getElementBounds } from \"../getElementBounds.js\";\n\n// ============================================================================\n// TYPES: Core Concepts\n// ============================================================================\n\n/**\n * Screen-space bounding box for overlay positioning.\n * All values are in viewport coordinates (pixels from viewport origin).\n */\nexport interface ScreenBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Canvas-space bounding box (from selection context).\n */\nexport interface CanvasBounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\n/**\n * The complete state of all overlays.\n * Each property is either a ScreenBounds or null.\n * An overlay is visible iff its bounds are non-null.\n */\nexport interface OverlayState {\n selection: ScreenBounds | null;\n boxSelect: ScreenBounds | null;\n highlight: ScreenBounds | null;\n}\n\n/**\n * SEMANTICS: What elements should have overlays?\n * This represents the \"what\" without the \"how\".\n */\nexport interface OverlayTargets {\n selectedIds: Set<string>;\n boxSelectBounds: CanvasBounds | null;\n highlightedElementId: string | null;\n}\n\n/**\n * Interface for canvas element data (metadata).\n */\nexport interface ElementMetadata {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n rotation?: number;\n}\n\n/**\n * Interface for canvas that provides element data.\n */\nexport interface CanvasWithMetadata {\n getElementData(elementId: string): ElementMetadata | undefined;\n getElement?(elementId: string): HTMLElement | undefined;\n querySelector(selector: string): HTMLElement | null;\n shadowRoot: ShadowRoot | null;\n}\n\n// ============================================================================\n// SEMANTICS: Extract what should be shown\n// ============================================================================\n\n/**\n * Extract overlay targets from selection context and highlighted element.\n * This is pure SEMANTICS - it determines WHAT should be shown.\n */\nexport function getOverlayTargets(\n selection: SelectionContext | undefined,\n highlightedElement: HTMLElement | null,\n): OverlayTargets {\n return {\n selectedIds: selection?.selectedIds ? new Set(selection.selectedIds) : new Set(),\n boxSelectBounds: selection?.boxSelectBounds ?? null,\n highlightedElementId:\n highlightedElement?.getAttribute(\"data-element-id\") ?? highlightedElement?.id ?? null,\n };\n}\n\n// ============================================================================\n// MECHANISM: Calculate screen bounds\n// ============================================================================\n\n/**\n * Calculate screen bounds for a single element.\n * This is the SINGLE SOURCE OF TRUTH for element → screen bounds conversion.\n *\n * Strategy:\n * 1. Try to use metadata (already in canvas coordinates)\n * 2. Fall back to DOM measurement if metadata unavailable\n *\n * @param elementId - The element's ID (data-element-id or id attribute)\n * @param canvas - Canvas element with getElementData method\n * @param canvasRect - Canvas content element's bounding rect\n * @param scale - Current zoom scale\n * @returns Screen bounds or null if element not found\n */\nexport function calculateElementScreenBounds(\n elementId: string,\n canvas: CanvasWithMetadata,\n canvasRect: DOMRect,\n scale: number,\n): ScreenBounds | null {\n const metadata = canvas.getElementData(elementId);\n\n if (metadata && metadata.width > 0 && metadata.height > 0) {\n // Use metadata (already in canvas coordinates)\n return {\n x: canvasRect.left + metadata.x * scale,\n y: canvasRect.top + metadata.y * scale,\n width: metadata.width * scale,\n height: metadata.height * scale,\n };\n }\n\n // Fallback: find element and use DOM measurement\n const element = findElement(elementId, canvas);\n if (!element) return null;\n\n const bounds = getElementBounds(element);\n return {\n x: bounds.left,\n y: bounds.top,\n width: bounds.width,\n height: bounds.height,\n };\n}\n\n/**\n * Find an element by ID in the canvas (checks both light DOM and shadow DOM).\n */\nfunction findElement(elementId: string, canvas: CanvasWithMetadata): HTMLElement | null {\n // Try canvas's getElement method first\n if (canvas.getElement) {\n const element = canvas.getElement(elementId);\n if (element) return element;\n }\n\n // Try shadow DOM\n if (canvas.shadowRoot) {\n const element = canvas.shadowRoot.querySelector(\n `[data-element-id=\"${elementId}\"]`,\n ) as HTMLElement | null;\n if (element) return element;\n }\n\n // Try light DOM\n return canvas.querySelector(`[data-element-id=\"${elementId}\"]`) as HTMLElement | null;\n}\n\n/**\n * Calculate the union of multiple bounds (bounding box that contains all).\n */\nexport function unionBounds(bounds: ScreenBounds[]): ScreenBounds | null {\n if (bounds.length === 0) return null;\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const b of bounds) {\n minX = Math.min(minX, b.x);\n minY = Math.min(minY, b.y);\n maxX = Math.max(maxX, b.x + b.width);\n maxY = Math.max(maxY, b.y + b.height);\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\n\n/**\n * Calculate selection bounds for all selected elements.\n */\nexport function calculateSelectionBounds(\n selectedIds: Set<string>,\n canvas: CanvasWithMetadata,\n canvasRect: DOMRect,\n scale: number,\n): ScreenBounds | null {\n if (selectedIds.size === 0) return null;\n\n const elementBounds = Array.from(selectedIds)\n .map((id) => calculateElementScreenBounds(id, canvas, canvasRect, scale))\n .filter((b): b is ScreenBounds => b !== null);\n\n return unionBounds(elementBounds);\n}\n\n/**\n * Calculate box-select bounds (convert canvas bounds to screen bounds).\n *\n * @param boxSelectBounds - Box selection bounds in canvas coordinates\n * @param panZoomElement - The pan-zoom element (for canvasToScreen conversion)\n * @param panZoomTransform - Current pan-zoom transform\n * @returns Screen bounds or null\n */\nexport function calculateBoxSelectBounds(\n boxSelectBounds: CanvasBounds | null,\n panZoomElement: HTMLElement | null,\n panZoomTransform: PanZoomTransform | undefined,\n): ScreenBounds | null {\n if (!boxSelectBounds || !panZoomElement || !panZoomTransform) {\n return null;\n }\n\n // Try to use EFPanZoom's canvasToScreen method if available\n const pz = panZoomElement as any;\n if (typeof pz.canvasToScreen === \"function\") {\n const topLeft = pz.canvasToScreen(boxSelectBounds.left, boxSelectBounds.top);\n const bottomRight = pz.canvasToScreen(boxSelectBounds.right, boxSelectBounds.bottom);\n\n return {\n x: topLeft.x,\n y: topLeft.y,\n width: bottomRight.x - topLeft.x,\n height: bottomRight.y - topLeft.y,\n };\n }\n\n // Fallback: manual calculation\n const panZoomRect = panZoomElement.getBoundingClientRect();\n const { scale, x, y } = panZoomTransform;\n\n const screenLeft = panZoomRect.left + boxSelectBounds.left * scale + x;\n const screenTop = panZoomRect.top + boxSelectBounds.top * scale + y;\n const screenRight = panZoomRect.left + boxSelectBounds.right * scale + x;\n const screenBottom = panZoomRect.top + boxSelectBounds.bottom * scale + y;\n\n return {\n x: screenLeft,\n y: screenTop,\n width: screenRight - screenLeft,\n height: screenBottom - screenTop,\n };\n}\n\n/**\n * Calculate highlight bounds for the highlighted element.\n */\nexport function calculateHighlightBounds(\n highlightedElementId: string | null,\n canvas: CanvasWithMetadata,\n canvasRect: DOMRect,\n scale: number,\n): ScreenBounds | null {\n if (!highlightedElementId) return null;\n\n return calculateElementScreenBounds(highlightedElementId, canvas, canvasRect, scale);\n}\n\n// ============================================================================\n// MAIN: Calculate complete overlay state\n// ============================================================================\n\n/**\n * Calculate the complete overlay state from targets.\n * This is the main entry point that combines semantics and mechanism.\n *\n * @param targets - What should be shown (from getOverlayTargets)\n * @param canvas - Canvas element with metadata\n * @param canvasRect - Canvas content bounding rect\n * @param panZoomElement - Pan-zoom element (for box-select conversion)\n * @param panZoomTransform - Current transform\n * @returns Complete overlay state\n */\nexport function calculateOverlayState(\n targets: OverlayTargets,\n canvas: CanvasWithMetadata,\n canvasRect: DOMRect,\n panZoomElement: HTMLElement | null,\n panZoomTransform: PanZoomTransform | undefined,\n): OverlayState {\n const scale = panZoomTransform?.scale ?? 1;\n\n return {\n selection: calculateSelectionBounds(targets.selectedIds, canvas, canvasRect, scale),\n boxSelect: calculateBoxSelectBounds(targets.boxSelectBounds, panZoomElement, panZoomTransform),\n highlight: calculateHighlightBounds(targets.highlightedElementId, canvas, canvasRect, scale),\n };\n}\n\n// ============================================================================\n// INVARIANTS: Helper functions to check invariants\n// ============================================================================\n\n/**\n * INVARIANT: Overlay is visible iff bounds exist with positive dimensions.\n */\nexport function isOverlayVisible(bounds: ScreenBounds | null): boolean {\n return bounds !== null && bounds.width > 0 && bounds.height > 0;\n}\n\n/**\n * Check if overlay state has any visible overlays.\n */\nexport function hasVisibleOverlays(state: OverlayState): boolean {\n return (\n isOverlayVisible(state.selection) ||\n isOverlayVisible(state.boxSelect) ||\n isOverlayVisible(state.highlight)\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"overlayState.js","names":[],"sources":["../../../src/canvas/overlays/overlayState.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { SelectionModel } from "./SelectionModel.js";
|
|
2
|
-
|
|
3
2
|
//#region src/canvas/selection/SelectionController.ts
|
|
4
3
|
/**
|
|
5
4
|
* Reactive controller that bridges SelectionModel and Lit element lifecycle.
|
|
@@ -97,7 +96,7 @@ var SelectionController = class {
|
|
|
97
96
|
} });
|
|
98
97
|
}
|
|
99
98
|
};
|
|
100
|
-
|
|
101
99
|
//#endregion
|
|
102
100
|
export { SelectionController };
|
|
101
|
+
|
|
103
102
|
//# sourceMappingURL=SelectionController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionController.js","names":[],"sources":["../../../src/canvas/selection/SelectionController.ts"],"
|
|
1
|
+
{"version":3,"file":"SelectionController.js","names":[],"sources":["../../../src/canvas/selection/SelectionController.ts"],"mappings":";;;;;;AAQA,IAAa,sBAAb,MAA+D;CAM7D,YAAY,MAA8B;mBAHkB;AAI1D,OAAK,OAAO;AACZ,OAAK,iBAAiB,IAAI,gBAAgB;AAC1C,OAAK,mBAAmB,KAAK,oBAAoB;AACjD,OAAK,cAAc,KAAK;AAKxB,OAAK,eAAe,iBAAiB,yBAAyB;AAC5D,wBAAqB,KAAK,KAAK,eAAe,CAAC;IAC/C;;CAGJ,gBAAsB;CAItB,mBAAyB;;;;CAOzB,WAAW,IAAyC;AAClD,OAAK,YAAY;;;;;CAMnB,WAA2B;AACzB,SAAO,KAAK;;;;;CAMd,qBAA+C;EAC7C,MAAM,iBAAiB,KAAK;EAC5B,MAAM,gBAAgB,KAAK;EAC3B,MAAM,qBAAqB,KAAK;AAChC,SAAO,IAAI,MACT;GACE,SAAS,OAAe;AACtB,mBAAe,OAAO,GAAG;;GAG3B,iBAAiB,QAAkB;AACjC,mBAAe,eAAe,IAAI;;GAGpC,iBAAiB,OAAe;AAC9B,mBAAe,eAAe,GAAG;;GAGnC,WAAW,OAAe;AACxB,mBAAe,SAAS,GAAG;;GAG7B,SAAS,OAAe;AACtB,mBAAe,OAAO,GAAG;;GAG3B,aAAa;AACX,mBAAe,OAAO;;GAGxB,iBAAiB,GAAW,MAAc;AACxC,mBAAe,eAAe,GAAG,EAAE;AACnC,yBAAqB,SAAS,CAAC,eAAe,CAAC;;GAEjD,kBAAkB,GAAW,MAAc;AACzC,mBAAe,gBAAgB,GAAG,EAAE;AACpC,yBAAqB,SAAS,CAAC,eAAe,CAAC;;GAEjD,eAAe,SAAwC,mBAA6B;IAClF,MAAM,KAAK,WAAW,cAAc;AACpC,QAAI,GACF,gBAAe,aAAa,IAAI,kBAAkB,MAAM;;GAI5D,cAAc,QAAkB;AAE9B,WADgB,eAAe,YAAY,IAAI;;GAGjD,UAAU,YAAoB;AAC5B,mBAAe,QAAQ,QAAQ;;GAEjC,cAAc,YAAoB;AAChC,mBAAe,YAAY,QAAQ;;GAGrC,aAAa,cAAsB;AACjC,WAAO,eAAe,WAAW,UAAU;;GAE7C,mBAAmB,YAAoB;AACrC,WAAO,eAAe,iBAAiB,QAAQ;;GAEjD,mBAAmB,MAAyB,aAA2C;AACrF,mBAAe,iBAAiB,MAAM,SAA0B;;GAElE,sBAAsB,MAAyB,aAA2C;AACxF,mBAAe,oBAAoB,MAAM,SAA0B;;GAEtE,EACD,EACE,IAAI,QAAQ,MAAM;AAChB,OAAI,SAAS,cACX,QAAO,eAAe;AAExB,OAAI,SAAS,gBACX,QAAO,eAAe;AAExB,OAAI,SAAS,kBACX,QAAO,eAAe;AAExB,UAAQ,OAAe;KAE1B,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionModel.js","names":[],"sources":["../../../src/canvas/selection/SelectionModel.ts"],"sourcesContent":["import type { SelectionState } from \"../api/types.js\";\n\n/**\n * Create a DOMRect-like object. Polyfill for Node.js environments.\n */\nfunction createRect(x: number, y: number, width: number, height: number): DOMRect {\n if (typeof DOMRect !== \"undefined\") {\n return new DOMRect(x, y, width, height);\n }\n // Polyfill for Node.js\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height,\n toJSON: () => ({ x, y, width, height }),\n } as DOMRect;\n}\n\n/**\n * Pure selection logic - semantics separate from mechanism.\n * Manages selection state and operations.\n */\nexport class SelectionModel extends EventTarget {\n private _selectedIds = new Set<string>();\n private _primaryId: string | null = null;\n private _selectionMode: SelectionState = \"none\";\n private _boxSelectStart: { x: number; y: number } | null = null;\n private _boxSelectCurrent: { x: number; y: number } | null = null;\n private _groups = new Map<string, Set<string>>();\n private _elementToGroup = new Map<string, string>();\n\n /**\n * Emit selectionchange event with current selection state.\n */\n private _emitSelectionChange(): void {\n // Convert Set to array with primary first\n const selectedIdsArray =\n this._primaryId && this._selectedIds.has(this._primaryId)\n ? [this._primaryId, ...Array.from(this._selectedIds).filter((id) => id !== this._primaryId)]\n : Array.from(this._selectedIds);\n\n this.dispatchEvent(\n new CustomEvent(\"selectionchange\", {\n detail: {\n selectedIds: selectedIdsArray,\n selectionMode: this._selectionMode,\n },\n bubbles: false,\n composed: false,\n }),\n );\n }\n\n /**\n * Get current selection state.\n */\n get selectedIds(): ReadonlySet<string> {\n return this._selectedIds;\n }\n\n /**\n * Get current selection mode.\n */\n get selectionMode(): SelectionState {\n return this._selectionMode;\n }\n\n /**\n * Get current box selection bounds, if active.\n */\n get boxSelectBounds(): DOMRect | null {\n if (!this._boxSelectStart || !this._boxSelectCurrent) {\n return null;\n }\n const left = Math.min(this._boxSelectStart.x, this._boxSelectCurrent.x);\n const top = Math.min(this._boxSelectStart.y, this._boxSelectCurrent.y);\n const right = Math.max(this._boxSelectStart.x, this._boxSelectCurrent.x);\n const bottom = Math.max(this._boxSelectStart.y, this._boxSelectCurrent.y);\n return createRect(left, top, right - left, bottom - top);\n }\n\n /**\n * Select a single element.\n */\n select(id: string): void {\n this._selectedIds.clear();\n this._selectedIds.add(id);\n this._primaryId = id;\n this._selectionMode = \"single\";\n this._emitSelectionChange();\n }\n\n /**\n * Select multiple elements.\n */\n selectMultiple(ids: string[]): void {\n this._selectedIds.clear();\n for (const id of ids) {\n this._selectedIds.add(id);\n }\n this._primaryId = ids.length > 0 ? (ids[0] ?? null) : null;\n this._selectionMode = ids.length === 0 ? \"none\" : ids.length === 1 ? \"single\" : \"multiple\";\n this._emitSelectionChange();\n }\n\n /**\n * Add element to selection (for multi-select).\n */\n addToSelection(id: string): void {\n this._selectedIds.add(id);\n if (!this._primaryId) {\n this._primaryId = id;\n }\n this._updateSelectionMode();\n this._emitSelectionChange();\n }\n\n /**\n * Remove element from selection.\n */\n deselect(id: string): void {\n this._selectedIds.delete(id);\n if (this._primaryId === id) {\n // Set primary to first remaining, or null if none\n const remaining = Array.from(this._selectedIds);\n this._primaryId = remaining.length > 0 ? (remaining[0] ?? null) : null;\n }\n this._updateSelectionMode();\n this._emitSelectionChange();\n }\n\n /**\n * Toggle element selection state.\n */\n toggle(id: string): void {\n if (this._selectedIds.has(id)) {\n this.deselect(id);\n } else {\n this.addToSelection(id);\n }\n }\n\n /**\n * Clear all selections.\n */\n clear(): void {\n this._selectedIds.clear();\n this._primaryId = null;\n this._selectionMode = \"none\";\n this._boxSelectStart = null;\n this._boxSelectCurrent = null;\n this._emitSelectionChange();\n }\n\n /**\n * Start box selection.\n */\n startBoxSelect(x: number, y: number): void {\n this._boxSelectStart = { x, y };\n this._boxSelectCurrent = { x, y };\n this._selectionMode = \"box-selecting\";\n }\n\n /**\n * Update box selection.\n */\n updateBoxSelect(x: number, y: number): void {\n if (this._selectionMode !== \"box-selecting\") {\n return;\n }\n this._boxSelectCurrent = { x, y };\n }\n\n /**\n * End box selection and select elements within bounds.\n * @param hitTest - Function to find elements within bounds\n * @param addToSelection - If true, add to existing selection; if false, replace selection\n */\n endBoxSelect(hitTest: (bounds: DOMRect) => string[], addToSelection = false): void {\n if (\n this._selectionMode !== \"box-selecting\" ||\n !this._boxSelectStart ||\n !this._boxSelectCurrent\n ) {\n return;\n }\n const bounds = this.boxSelectBounds;\n if (bounds) {\n const ids = hitTest(bounds);\n if (addToSelection) {\n // Add each element to selection\n for (const id of ids) {\n this.addToSelection(id);\n }\n } else {\n // Replace selection\n this.selectMultiple(ids);\n }\n }\n this._boxSelectStart = null;\n this._boxSelectCurrent = null;\n // Note: selectMultiple/addToSelection already emit events, so no need to emit again\n }\n\n /**\n * Create a group from selected elements.\n */\n createGroup(ids: string[]): string {\n if (ids.length === 0) {\n throw new Error(\"Cannot create group with no elements\");\n }\n const groupId = `group-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n const groupSet = new Set(ids);\n this._groups.set(groupId, groupSet);\n for (const id of ids) {\n this._elementToGroup.set(id, groupId);\n }\n return groupId;\n }\n\n /**\n * Ungroup a group.\n */\n ungroup(groupId: string): void {\n const group = this._groups.get(groupId);\n if (!group) {\n return;\n }\n for (const id of group) {\n this._elementToGroup.delete(id);\n }\n this._groups.delete(groupId);\n }\n\n /**\n * Select all elements in a group.\n */\n selectGroup(groupId: string): void {\n const group = this._groups.get(groupId);\n if (!group) {\n return;\n }\n this.selectMultiple(Array.from(group));\n // Note: selectMultiple already emits event\n }\n\n /**\n * Get group ID for an element, if any.\n */\n getGroupId(elementId: string): string | undefined {\n return this._elementToGroup.get(elementId);\n }\n\n /**\n * Get all element IDs in a group.\n */\n getGroupElements(groupId: string): string[] {\n const group = this._groups.get(groupId);\n return group ? Array.from(group) : [];\n }\n\n /**\n * Update selection mode based on current selection count.\n */\n private _updateSelectionMode(): void {\n const count = this._selectedIds.size;\n if (count === 0) {\n this._selectionMode = \"none\";\n } else if (count === 1) {\n this._selectionMode = \"single\";\n } else {\n this._selectionMode = \"multiple\";\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectionModel.js","names":[],"sources":["../../../src/canvas/selection/SelectionModel.ts"],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { createContext } from "@lit/context";
|
|
2
|
-
|
|
3
2
|
//#region src/canvas/selection/selectionContext.ts
|
|
4
3
|
/**
|
|
5
4
|
* Lit context for selection state.
|
|
6
5
|
* Provided by EFCanvas, consumed by child elements.
|
|
7
6
|
*/
|
|
8
7
|
const selectionContext = createContext(Symbol("selectionContext"));
|
|
9
|
-
|
|
10
8
|
//#endregion
|
|
11
9
|
export { selectionContext };
|
|
10
|
+
|
|
12
11
|
//# sourceMappingURL=selectionContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionContext.js","names":[],"sources":["../../../src/canvas/selection/selectionContext.ts"],"
|
|
1
|
+
{"version":3,"file":"selectionContext.js","names":[],"sources":["../../../src/canvas/selection/selectionContext.ts"],"mappings":";;;;;;AAgCA,MAAa,mBAAmB,cAAgC,OAAO,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContainerInfo.js","names":[
|
|
1
|
+
{"version":3,"file":"ContainerInfo.js","names":[],"sources":["../../src/elements/ContainerInfo.ts"],"mappings":";;;;;AA4BA,SAAgB,4BAA4B,SAA4C;AACtF,KAAI,CAAC,QACH,QAAO;EACL,aAAa;EACb,aAAa;EACb,oBAAoB;EACrB;CAIH,MAAM,UADgB,OAAO,iBAAiB,QAAQ,CACxB;CAG9B,MAAM,SAAS,YAAY,UAAU,YAAY;CACjD,MAAM,SAAS,YAAY,UAAU,YAAY;CACjD,MAAM,UAAU,YAAY,WAAW,YAAY;CAEnD,MAAM,cAAc,UAAU,UAAU;CAExC,IAAI,cAAgD;AACpD,KAAI,OACF,eAAc;UACL,OACT,eAAc;UACL,QACT,eAAc;AAGhB,QAAO;EACL;EACA;EACA,oBAAoB;EACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrossUpdateController.js","names":[
|
|
1
|
+
{"version":3,"file":"CrossUpdateController.js","names":[],"sources":["../../src/elements/CrossUpdateController.ts"],"mappings":";AAEA,IAAa,wBAAb,MAAiE;CAC/D,YACE,MACA,QACA;AAFQ,OAAA,OAAA;AACA,OAAA,SAAA;AAER,OAAK,KAAK,cAAc,KAAK;;CAG/B,aAAmB;AACjB,OAAK,OAAO,eAAe;;CAG7B,SAAe;AACb,OAAK,KAAK,iBAAiB,KAAK"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { TemplateResult } from "../node_modules/lit-html/development/lit-html.js";
|
|
1
2
|
import { FrameRenderable, FrameState } from "../preview/FrameController.js";
|
|
2
3
|
import { EFMedia } from "./EFMedia.js";
|
|
3
|
-
import
|
|
4
|
-
import * as lit_html_directives_ref_js1 from "lit-html/directives/ref.js";
|
|
4
|
+
import { Ref } from "../node_modules/lit-html/development/directives/ref.js";
|
|
5
5
|
|
|
6
6
|
//#region src/elements/EFAudio.d.ts
|
|
7
7
|
declare const EFAudio_base: typeof EFMedia;
|
|
@@ -17,9 +17,9 @@ declare class EFAudio extends EFAudio_base implements FrameRenderable {
|
|
|
17
17
|
* @domAttribute "volume"
|
|
18
18
|
*/
|
|
19
19
|
volume: number;
|
|
20
|
-
audioElementRef:
|
|
20
|
+
audioElementRef: Ref<HTMLAudioElement>;
|
|
21
21
|
protected updated(changedProperties: Map<PropertyKey, unknown>): void;
|
|
22
|
-
render():
|
|
22
|
+
render(): TemplateResult<1>;
|
|
23
23
|
/**
|
|
24
24
|
* Query readiness state for a given time.
|
|
25
25
|
* @implements FrameRenderable
|
package/dist/elements/EFAudio.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { TWMixin } from "../gui/TWMixin2.js";
|
|
2
|
-
import {
|
|
3
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.95.0/helpers/decorate.js";
|
|
2
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
4
3
|
import { EFMedia } from "./EFMedia.js";
|
|
5
4
|
import { html } from "lit";
|
|
6
5
|
import { customElement, property } from "lit/decorators.js";
|
|
7
6
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
8
|
-
|
|
9
7
|
//#region src/elements/EFAudio.ts
|
|
10
|
-
let EFAudio = class EFAudio
|
|
8
|
+
let EFAudio = class EFAudio extends TWMixin(EFMedia) {
|
|
11
9
|
constructor(..._args) {
|
|
12
10
|
super(..._args);
|
|
13
11
|
this.volume = 1;
|
|
@@ -39,7 +37,7 @@ let EFAudio = class EFAudio$1 extends TWMixin(EFMedia) {
|
|
|
39
37
|
return {
|
|
40
38
|
needsPreparation: !isReady,
|
|
41
39
|
isReady,
|
|
42
|
-
priority:
|
|
40
|
+
priority: 3
|
|
43
41
|
};
|
|
44
42
|
}
|
|
45
43
|
/**
|
|
@@ -62,7 +60,7 @@ __decorate([property({
|
|
|
62
60
|
reflect: true
|
|
63
61
|
})], EFAudio.prototype, "volume", void 0);
|
|
64
62
|
EFAudio = __decorate([customElement("ef-audio")], EFAudio);
|
|
65
|
-
|
|
66
63
|
//#endregion
|
|
67
64
|
export { EFAudio };
|
|
65
|
+
|
|
68
66
|
//# sourceMappingURL=EFAudio.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFAudio.js","names":["
|
|
1
|
+
{"version":3,"file":"EFAudio.js","names":["#mediaEngineLoaded"],"sources":["../../src/elements/EFAudio.ts"],"mappings":";;;;;;;AAYO,IAAA,UAAA,MAAM,gBAAgB,QAAQ,QAAQ,CAA4B;;;gBAc9D;yBAES,WAA6B;;;;;;CAX/C,IAAa,iBAA6C;AACxD,SAAO;;CAYT,qBAAqB;CAErB,QAAkB,mBAAoD;AACpE,QAAM,QAAQ,kBAAkB;AAGhC,MAAI,KAAK,gBAAgB;OACnB,kBAAkB,IAAI,SAAS,IAAI,kBAAkB,SAAS,EAChE,MAAK,gBAAgB,MAAM,SAAS,KAAK;;;CAK/C,SAAS;AACP,SAAO,IAAI,UAAU,IAAI,KAAK,gBAAgB,CAAC;;;;;;CAWjD,cAAc,SAA6B;EAEzC,MAAM,UAAU,MAAA,qBAA2B,KAAK,gBAAgB,WAAW;AAE3E,SAAO;GACL,kBAAkB,CAAC;GACnB;GACA,UAAA;GACD;;;;;;CAOH,MAAM,aAAa,SAAiB,QAAoC;AAGtE,QAAA,oBAA0B,CAAC,CADP,MAAM,KAAK,eAAe,OAAO;AAErD,SAAO,gBAAgB;;;;;;CAOzB,YAAY,SAAuB;;YAxDlC,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAU,SAAS;CAAM,CAAC,CAAA,EAAA,QAAA,WAAA,UAAA,KAAA,EAAA;sBAdhE,cAAc,WAAW,CAAA,EAAA,QAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TemplateResult as TemplateResult$1 } from "../node_modules/lit-html/development/lit-html.js";
|
|
1
2
|
import { FrameRenderable, FrameState } from "../preview/FrameController.js";
|
|
2
3
|
import { EFSourceMixinInterface } from "./EFSourceMixin.js";
|
|
3
4
|
import { TemporalMixinInterface } from "./EFTemporal.js";
|
|
@@ -5,9 +6,8 @@ import { FetchMixinInterface } from "./FetchMixin.js";
|
|
|
5
6
|
import { AsyncValue } from "./EFMedia.js";
|
|
6
7
|
import { EFAudio } from "./EFAudio.js";
|
|
7
8
|
import { EFVideo } from "./EFVideo.js";
|
|
8
|
-
import * as
|
|
9
|
+
import * as _$lit from "lit";
|
|
9
10
|
import { LitElement, PropertyValueMap } from "lit";
|
|
10
|
-
import * as lit_html0 from "lit-html";
|
|
11
11
|
|
|
12
12
|
//#region src/elements/EFCaptions.d.ts
|
|
13
13
|
interface WordSegment {
|
|
@@ -61,7 +61,7 @@ declare class EFCaptionsAfterActiveWord extends EFCaptionsSegment {
|
|
|
61
61
|
declare const EFCaptions_base: (new (...args: any[]) => EFSourceMixinInterface) & (new (...args: any[]) => TemporalMixinInterface) & (new (...args: any[]) => FetchMixinInterface) & typeof LitElement;
|
|
62
62
|
declare class EFCaptions extends EFCaptions_base implements FrameRenderable {
|
|
63
63
|
#private;
|
|
64
|
-
static styles:
|
|
64
|
+
static styles: _$lit.CSSResult[];
|
|
65
65
|
targetSelector: string;
|
|
66
66
|
set target(value: string);
|
|
67
67
|
wordStyle: string;
|
|
@@ -84,7 +84,7 @@ declare class EFCaptions extends EFCaptions_base implements FrameRenderable {
|
|
|
84
84
|
segmentContainers: HTMLCollectionOf<EFCaptionsSegment>;
|
|
85
85
|
beforeActiveWordContainers: HTMLCollectionOf<EFCaptionsBeforeActiveWord>;
|
|
86
86
|
afterActiveWordContainers: HTMLCollectionOf<EFCaptionsAfterActiveWord>;
|
|
87
|
-
render():
|
|
87
|
+
render(): TemplateResult$1<1>;
|
|
88
88
|
transcriptionsPath(): string | null;
|
|
89
89
|
captionsPath(): string | null;
|
|
90
90
|
/**
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.95.0/helpers/decorate.js";
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
3
2
|
import { EFTemporal, flushStartTimeMsCache } from "./EFTemporal.js";
|
|
4
3
|
import { EFSourceMixin } from "./EFSourceMixin.js";
|
|
5
4
|
import { FetchMixin } from "./FetchMixin.js";
|
|
@@ -10,7 +9,6 @@ import { EFVideo } from "./EFVideo.js";
|
|
|
10
9
|
import { flushSequenceDurationCache } from "./EFTimegroup.js";
|
|
11
10
|
import { LitElement, css, html } from "lit";
|
|
12
11
|
import { customElement, property } from "lit/decorators.js";
|
|
13
|
-
|
|
14
12
|
//#region src/elements/EFCaptions.ts
|
|
15
13
|
const stopWords = new Set([
|
|
16
14
|
"",
|
|
@@ -19,7 +17,7 @@ const stopWords = new Set([
|
|
|
19
17
|
"?",
|
|
20
18
|
","
|
|
21
19
|
]);
|
|
22
|
-
let EFCaptionsActiveWord = class EFCaptionsActiveWord
|
|
20
|
+
let EFCaptionsActiveWord = class EFCaptionsActiveWord extends LitElement {
|
|
23
21
|
#wordText = "";
|
|
24
22
|
#wordIndex = 0;
|
|
25
23
|
set wordText(text) {
|
|
@@ -45,7 +43,7 @@ let EFCaptionsActiveWord = class EFCaptionsActiveWord$1 extends LitElement {
|
|
|
45
43
|
}
|
|
46
44
|
};
|
|
47
45
|
EFCaptionsActiveWord = __decorate([customElement("ef-captions-active-word")], EFCaptionsActiveWord);
|
|
48
|
-
let EFCaptionsSegment = class EFCaptionsSegment
|
|
46
|
+
let EFCaptionsSegment = class EFCaptionsSegment extends LitElement {
|
|
49
47
|
#segmentText = "";
|
|
50
48
|
set segmentText(text) {
|
|
51
49
|
this.#segmentText = text;
|
|
@@ -62,7 +60,7 @@ let EFCaptionsSegment = class EFCaptionsSegment$1 extends LitElement {
|
|
|
62
60
|
}
|
|
63
61
|
};
|
|
64
62
|
EFCaptionsSegment = __decorate([customElement("ef-captions-segment")], EFCaptionsSegment);
|
|
65
|
-
let EFCaptionsBeforeActiveWord = class EFCaptionsBeforeActiveWord
|
|
63
|
+
let EFCaptionsBeforeActiveWord = class EFCaptionsBeforeActiveWord extends EFCaptionsSegment {
|
|
66
64
|
set segmentText(text) {
|
|
67
65
|
const hasActiveWord = (this.closest("ef-captions")?.querySelector("ef-captions-active-word"))?.wordText;
|
|
68
66
|
const finalText = text && hasActiveWord ? text + " " : text;
|
|
@@ -76,7 +74,7 @@ let EFCaptionsBeforeActiveWord = class EFCaptionsBeforeActiveWord$1 extends EFCa
|
|
|
76
74
|
}
|
|
77
75
|
};
|
|
78
76
|
EFCaptionsBeforeActiveWord = __decorate([customElement("ef-captions-before-active-word")], EFCaptionsBeforeActiveWord);
|
|
79
|
-
let EFCaptionsAfterActiveWord = class EFCaptionsAfterActiveWord
|
|
77
|
+
let EFCaptionsAfterActiveWord = class EFCaptionsAfterActiveWord extends EFCaptionsSegment {
|
|
80
78
|
set segmentText(text) {
|
|
81
79
|
const finalText = text;
|
|
82
80
|
if (!finalText || stopWords.has(finalText)) {
|
|
@@ -89,7 +87,7 @@ let EFCaptionsAfterActiveWord = class EFCaptionsAfterActiveWord$1 extends EFCapt
|
|
|
89
87
|
}
|
|
90
88
|
};
|
|
91
89
|
EFCaptionsAfterActiveWord = __decorate([customElement("ef-captions-after-active-word")], EFCaptionsAfterActiveWord);
|
|
92
|
-
let EFCaptions = class EFCaptions
|
|
90
|
+
let EFCaptions = class EFCaptions extends EFSourceMixin(EFTemporal(FetchMixin(LitElement)), { assetType: "caption_files" }) {
|
|
93
91
|
constructor(..._args) {
|
|
94
92
|
super(..._args);
|
|
95
93
|
this.targetSelector = "";
|
|
@@ -223,7 +221,7 @@ let EFCaptions = class EFCaptions$1 extends EFSourceMixin(EFTemporal(FetchMixin(
|
|
|
223
221
|
return {
|
|
224
222
|
needsPreparation: !hasData,
|
|
225
223
|
isReady: hasData,
|
|
226
|
-
priority:
|
|
224
|
+
priority: 2
|
|
227
225
|
};
|
|
228
226
|
}
|
|
229
227
|
/**
|
|
@@ -439,7 +437,7 @@ __decorate([property({
|
|
|
439
437
|
reflect: true
|
|
440
438
|
})], EFCaptions.prototype, "captionsScript", void 0);
|
|
441
439
|
EFCaptions = __decorate([customElement("ef-captions")], EFCaptions);
|
|
442
|
-
|
|
443
440
|
//#endregion
|
|
444
441
|
export { EFCaptions, EFCaptionsActiveWord, EFCaptionsAfterActiveWord, EFCaptionsBeforeActiveWord, EFCaptionsSegment };
|
|
442
|
+
|
|
445
443
|
//# sourceMappingURL=EFCaptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFCaptions.js","names":["EFCaptionsActiveWord","#wordText","#wordIndex","EFCaptionsSegment","#segmentText","EFCaptionsBeforeActiveWord","EFCaptionsAfterActiveWord","EFCaptions","#captionsDataLoaded","#captionsDataValue","#captionsDataPromise","#doLoadCaptionsData","#findElementById","#transcriptionData","#loadTranscriptionFragment","#rootTimegroupUpdateController","#cachedIntrinsicDurationMs","captionsData: Caption | null","result: number"],"sources":["../../src/elements/EFCaptions.ts"],"sourcesContent":["import { css, html, LitElement, type PropertyValueMap } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport type { ReactiveController } from \"lit\";\nimport type { GetISOBMFFFileTranscriptionResult } from \"../../../api/src/index.js\";\nimport {\n type FrameRenderable,\n type FrameState,\n PRIORITY_CAPTIONS,\n} from \"../preview/FrameController.js\";\nimport { AsyncValue } from \"./EFMedia.js\";\nimport { CrossUpdateController } from \"./CrossUpdateController.js\";\nimport { EFAudio } from \"./EFAudio.js\";\nimport { EFSourceMixin } from \"./EFSourceMixin.js\";\nimport { EFTemporal, flushStartTimeMsCache } from \"./EFTemporal.js\";\nimport { flushSequenceDurationCache, EFTimegroup } from \"./EFTimegroup.js\";\nimport { EFVideo } from \"./EFVideo.js\";\nimport { FetchMixin } from \"./FetchMixin.js\";\n\nexport interface WordSegment {\n text: string;\n start: number;\n end: number;\n}\n\nexport interface Segment {\n start: number;\n end: number;\n text: string;\n}\n\nexport interface Caption {\n segments: Segment[];\n word_segments: WordSegment[];\n}\n\nconst stopWords = new Set([\"\", \".\", \"!\", \"?\", \",\"]);\n\n/**\n * Caption active word element - displays the currently spoken word.\n * Uses light DOM for simplicity - parent sets textContent directly.\n */\n@customElement(\"ef-captions-active-word\")\nexport class EFCaptionsActiveWord extends LitElement {\n #wordText = \"\";\n #wordIndex = 0;\n\n set wordText(text: string) {\n this.#wordText = text;\n // Hide element if no content or only stop words\n if (!text || stopWords.has(text)) {\n this.hidden = true;\n this.textContent = \"\";\n } else {\n this.hidden = false;\n // Add trailing space to maintain consistent spacing with surrounding words\n this.textContent = text + \" \";\n }\n }\n\n get wordText(): string {\n return this.#wordText;\n }\n\n set wordIndex(index: number) {\n this.#wordIndex = index;\n // Set deterministic --ef-word-seed value based on word index\n const seed = (index * 9007) % 233; // Prime numbers for better distribution\n const seedValue = seed / 233; // Normalize to 0-1 range\n this.style.setProperty(\"--ef-word-seed\", seedValue.toString());\n }\n\n get wordIndex(): number {\n return this.#wordIndex;\n }\n}\n\n/**\n * Caption segment element - displays a full caption segment.\n * Uses light DOM for simplicity - parent sets textContent directly.\n */\n@customElement(\"ef-captions-segment\")\nexport class EFCaptionsSegment extends LitElement {\n #segmentText = \"\";\n\n set segmentText(text: string) {\n this.#segmentText = text;\n // Hide element if no content or only stop words\n if (!text || stopWords.has(text)) {\n this.hidden = true;\n this.textContent = \"\";\n } else {\n this.hidden = false;\n this.textContent = text;\n }\n }\n\n get segmentText(): string {\n return this.#segmentText;\n }\n}\n\n/**\n * Caption before-active-word element - displays words before the current word.\n * Uses light DOM for simplicity - parent sets textContent directly.\n */\n@customElement(\"ef-captions-before-active-word\")\nexport class EFCaptionsBeforeActiveWord extends EFCaptionsSegment {\n set segmentText(text: string) {\n // Check if there's an active word by looking for sibling active word element\n const activeWord = this.closest(\"ef-captions\")?.querySelector(\n \"ef-captions-active-word\",\n ) as EFCaptionsActiveWord;\n const hasActiveWord = activeWord?.wordText;\n\n // Add trailing space if there's an active word coming after us\n const finalText = text && hasActiveWord ? text + \" \" : text;\n\n // Hide element if no content or only stop words\n if (!finalText || stopWords.has(finalText)) {\n this.hidden = true;\n this.textContent = \"\";\n } else {\n this.hidden = false;\n this.textContent = finalText;\n }\n }\n}\n\n/**\n * Caption after-active-word element - displays words after the current word.\n * Uses light DOM for simplicity - parent sets textContent directly.\n */\n@customElement(\"ef-captions-after-active-word\")\nexport class EFCaptionsAfterActiveWord extends EFCaptionsSegment {\n set segmentText(text: string) {\n // No leading space - active word will add trailing space\n const finalText = text;\n\n // Hide element if no content or only stop words\n if (!finalText || stopWords.has(finalText)) {\n this.hidden = true;\n this.textContent = \"\";\n } else {\n this.hidden = false;\n this.textContent = finalText;\n }\n }\n}\n\n@customElement(\"ef-captions\")\nexport class EFCaptions\n extends EFSourceMixin(EFTemporal(FetchMixin(LitElement)), {\n assetType: \"caption_files\",\n })\n implements FrameRenderable\n{\n static styles = [\n css`\n :host {\n display: block;\n white-space: normal;\n line-height: 1;\n gap: 0;\n }\n ::slotted(*) {\n display: inline;\n margin: 0;\n padding: 0;\n }\n `,\n ];\n\n @property({ type: String, attribute: \"target\", reflect: true })\n targetSelector = \"\";\n\n set target(value: string) {\n this.targetSelector = value;\n }\n\n @property({ attribute: \"word-style\" })\n wordStyle = \"\";\n\n /**\n * URL or path to a JSON file containing custom captions data.\n * The JSON should conform to the Caption interface with 'segments' and 'word_segments' arrays.\n */\n @property({ type: String, attribute: \"captions-src\", reflect: true })\n captionsSrc = \"\";\n\n /**\n * Direct captions data object. Takes priority over captions-src and captions-script.\n * Should conform to the Caption interface with 'segments' and 'word_segments' arrays.\n */\n @property({ type: Object, attribute: false })\n captionsData: Caption | null = null;\n\n /**\n * ID of a <script> element containing JSON captions data.\n * The script's textContent should be valid JSON conforming to the Caption interface.\n */\n @property({ type: String, attribute: \"captions-script\", reflect: true })\n captionsScript = \"\";\n\n activeWordContainers = this.getElementsByTagName(\"ef-captions-active-word\");\n segmentContainers = this.getElementsByTagName(\"ef-captions-segment\");\n beforeActiveWordContainers = this.getElementsByTagName(\"ef-captions-before-active-word\");\n afterActiveWordContainers = this.getElementsByTagName(\"ef-captions-after-active-word\");\n\n // Cache for intrinsicDurationMs to avoid expensive O(n) recalculation every frame\n #cachedIntrinsicDurationMs: number | undefined | null = null; // null = not computed, undefined = no duration\n\n render() {\n return html`<slot></slot>`;\n }\n\n transcriptionsPath() {\n if (!this.targetElement) {\n return null;\n }\n const fileId = this.targetElement.fileId ?? this.targetElement.assetId;\n if (fileId) {\n return `${this.apiHost}/api/v1/files/${fileId}/transcription`;\n }\n return null;\n }\n\n captionsPath() {\n if (!this.targetElement) {\n return null;\n }\n const fileId = this.targetElement.fileId ?? this.targetElement.assetId;\n if (fileId) {\n return `${this.apiHost}/api/v1/files/${fileId}`;\n }\n const targetSrc = this.targetElement.src;\n // Normalize the path: remove leading slash and any double slashes\n let normalizedSrc = targetSrc.startsWith(\"/\") ? targetSrc.slice(1) : targetSrc;\n normalizedSrc = normalizedSrc.replace(/^\\/+/, \"\");\n // Use production API format for local files\n return `/api/v1/assets/captions?src=${encodeURIComponent(normalizedSrc)}`;\n }\n\n // ============================================================================\n // Captions Data Loading - async methods instead of Tasks\n // ============================================================================\n\n #captionsDataLoaded = false;\n #captionsDataPromise: Promise<Caption | null> | null = null;\n #captionsDataValue: Caption | null = null;\n #transcriptionData: GetISOBMFFFileTranscriptionResult | null = null;\n\n /**\n * AsyncValue wrapper for backwards compatibility\n */\n unifiedCaptionsDataTask = new AsyncValue<Caption | null>();\n\n override shouldAutoReady(): boolean {\n return false;\n }\n\n /**\n * Load captions data from all possible sources\n */\n async loadCaptionsData(signal?: AbortSignal): Promise<Caption | null> {\n // Return cached if already loaded\n if (this.#captionsDataLoaded && this.#captionsDataValue) {\n this.setContentReadyState(\"ready\");\n return this.#captionsDataValue;\n }\n\n // Return in-flight promise\n if (this.#captionsDataPromise) {\n return this.#captionsDataPromise;\n }\n\n this.unifiedCaptionsDataTask.startPending();\n this.setContentReadyState(\"loading\");\n this.#captionsDataPromise = this.#doLoadCaptionsData(signal);\n\n try {\n this.#captionsDataValue = await this.#captionsDataPromise;\n this.#captionsDataLoaded = true;\n if (this.#captionsDataValue) {\n this.unifiedCaptionsDataTask.setValue(this.#captionsDataValue);\n }\n this.setContentReadyState(\"ready\");\n return this.#captionsDataValue;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n console.error(\"Failed to load captions data:\", error);\n this.setContentReadyState(\"error\");\n return null;\n } finally {\n this.#captionsDataPromise = null;\n }\n }\n\n async #doLoadCaptionsData(signal?: AbortSignal): Promise<Caption | null> {\n // Priority 1: Direct captionsData property\n if (this.captionsData) {\n return this.captionsData;\n }\n\n // Priority 2: Script element reference\n if (this.captionsScript) {\n const scriptElement = this.#findElementById(this.captionsScript);\n if (scriptElement?.textContent) {\n try {\n return JSON.parse(scriptElement.textContent) as Caption;\n } catch (error) {\n console.error(`Failed to parse captions from script #${this.captionsScript}:`, error);\n }\n }\n }\n\n // Priority 3: External captions file\n if (this.captionsSrc) {\n try {\n const response = await this.fetch(this.captionsSrc, { signal });\n return (await response.json()) as Caption;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n console.error(`Failed to load captions from ${this.captionsSrc}:`, error);\n }\n }\n\n // Priority 4: Transcription from target element\n if (this.targetElement && !this.hasCustomCaptionsData) {\n const transcriptionPath = this.transcriptionsPath();\n if (transcriptionPath) {\n try {\n const response = await this.fetch(transcriptionPath, { signal });\n this.#transcriptionData = (await response.json()) as GetISOBMFFFileTranscriptionResult;\n signal?.throwIfAborted();\n\n // Load fragment for current time\n if (this.#transcriptionData) {\n return this.#loadTranscriptionFragment(signal);\n }\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n // Transcription not available - not an error\n }\n }\n }\n\n return null;\n }\n\n async #loadTranscriptionFragment(signal?: AbortSignal): Promise<Caption | null> {\n if (!this.#transcriptionData) return null;\n\n const fragmentIndex = Math.floor(this.ownCurrentTimeMs / this.#transcriptionData.work_slice_ms);\n const fragmentPath = `${this.apiHost}/api/v1/transcriptions/${this.#transcriptionData.id}/fragments/${fragmentIndex}`;\n\n try {\n const response = await this.fetch(fragmentPath, { signal });\n return (await response.json()) as Caption;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n console.error(\"Failed to load transcription fragment:\", error);\n return null;\n }\n }\n\n // ============================================================================\n // FrameRenderable Implementation\n // ============================================================================\n\n /**\n * Query readiness state for a given time.\n * @implements FrameRenderable\n */\n getFrameState(_timeMs: number): FrameState {\n // Check if captions data is loaded\n const hasData = this.#captionsDataLoaded && this.#captionsDataValue !== null;\n\n return {\n needsPreparation: !hasData,\n isReady: hasData,\n priority: PRIORITY_CAPTIONS,\n };\n }\n\n /**\n * Async preparation - waits for captions data to load.\n * @implements FrameRenderable\n */\n async prepareFrame(_timeMs: number, signal: AbortSignal): Promise<void> {\n await this.loadCaptionsData(signal);\n signal.throwIfAborted();\n }\n\n /**\n * Synchronous render - updates caption text containers.\n * Sets textContent directly on child elements (light DOM).\n * @implements FrameRenderable\n */\n renderFrame(_timeMs: number): void {\n // Update text containers by setting properties\n // Child elements update their textContent directly (light DOM)\n this.updateTextContainers();\n }\n\n // ============================================================================\n // End FrameRenderable Implementation\n // ============================================================================\n\n #rootTimegroupUpdateController?: ReactiveController;\n\n connectedCallback() {\n super.connectedCallback();\n\n // Start loading captions data\n this.loadCaptionsData().catch(() => {});\n\n // Try to get target element safely\n const target = this.targetSelector ? this.#findElementById(this.targetSelector) : null;\n if (target && (target instanceof EFAudio || target instanceof EFVideo)) {\n new CrossUpdateController(target, this);\n }\n // For standalone captions with custom data, ensure proper timeline sync\n else if (this.hasCustomCaptionsData && this.rootTimegroup) {\n new CrossUpdateController(this.rootTimegroup, this);\n }\n\n // Ensure captions update when root timegroup's currentTimeMs changes\n if (this.rootTimegroup) {\n this.#rootTimegroupUpdateController = {\n hostUpdated: () => {\n Promise.resolve().then(() => {\n this.updateTextContainers();\n });\n },\n hostDisconnected: () => {\n this.#rootTimegroupUpdateController = undefined;\n },\n };\n this.rootTimegroup.addController(this.#rootTimegroupUpdateController);\n }\n\n // Prevent display:none from being set on the parent caption element.\n // IMPORTANT: This only applies to the parent <ef-captions> element, NOT to\n // caption child elements (<ef-captions-segment>, <ef-captions-active-word>, etc.).\n // Child elements MUST respect display:none for proper temporal visibility\n // in video rendering. Video export relies on display:none to hide elements\n // outside their time range.\n const observer = new MutationObserver(() => {\n if (this.style.display === \"none\") {\n this.style.removeProperty(\"display\");\n this.style.opacity = \"0\";\n this.style.pointerEvents = \"none\";\n } else if (!this.style.display || this.style.display === \"\") {\n this.style.removeProperty(\"opacity\");\n this.style.removeProperty(\"pointer-events\");\n }\n });\n observer.observe(this, { attributes: true, attributeFilter: [\"style\"] });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.#rootTimegroupUpdateController && this.rootTimegroup) {\n this.rootTimegroup.removeController(this.#rootTimegroupUpdateController);\n this.#rootTimegroupUpdateController = undefined;\n }\n }\n\n protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n // Set up root timegroup controller if rootTimegroup is now available\n if (this.rootTimegroup && !this.#rootTimegroupUpdateController) {\n this.#rootTimegroupUpdateController = {\n hostUpdated: () => {\n Promise.resolve().then(() => {\n this.updateTextContainers();\n });\n },\n hostDisconnected: () => {\n this.#rootTimegroupUpdateController = undefined;\n },\n };\n this.rootTimegroup.addController(this.#rootTimegroupUpdateController);\n }\n\n // Clean up controller if rootTimegroup changed\n if (changedProperties.has(\"rootTimegroup\") && this.#rootTimegroupUpdateController) {\n const oldRootTimegroup = changedProperties.get(\"rootTimegroup\") as EFTimegroup | undefined;\n if (oldRootTimegroup && oldRootTimegroup !== this.rootTimegroup) {\n oldRootTimegroup.removeController(this.#rootTimegroupUpdateController);\n this.#rootTimegroupUpdateController = undefined;\n }\n }\n\n this.updateTextContainers();\n\n // Force duration recalculation when custom captions data changes\n if (\n changedProperties.has(\"captionsData\") ||\n changedProperties.has(\"captionsSrc\") ||\n changedProperties.has(\"captionsScript\")\n ) {\n this.emitContentChange(\"source\");\n this.#cachedIntrinsicDurationMs = null;\n this.#captionsDataLoaded = false;\n this.#captionsDataValue = null;\n this.loadCaptionsData().catch(() => {});\n\n this.requestUpdate(\"intrinsicDurationMs\");\n\n flushSequenceDurationCache();\n flushStartTimeMsCache();\n\n if (this.parentTimegroup) {\n this.parentTimegroup.requestUpdate(\"durationMs\");\n this.parentTimegroup.requestUpdate(\"currentTime\");\n }\n }\n\n // Update captions when timeline position changes\n if (changedProperties.has(\"ownCurrentTimeMs\")) {\n this.updateTextContainers();\n }\n }\n\n updateTextContainers() {\n const captionsData = this.#captionsDataValue;\n if (!captionsData) {\n return;\n }\n\n // For captions with custom data, try to use the video's source time\n let currentTimeMs = this.ownCurrentTimeMs;\n if (this.hasCustomCaptionsData && this.parentTimegroup) {\n const videoElement = Array.from(this.parentTimegroup.children).find(\n (child): child is EFVideo => child instanceof EFVideo,\n );\n if (videoElement) {\n const sourceInMs = videoElement.sourceInMs ?? 0;\n currentTimeMs = videoElement.currentSourceTimeMs - sourceInMs;\n currentTimeMs = Math.max(0, Math.min(currentTimeMs, this.durationMs));\n }\n }\n\n const currentTimeSec = currentTimeMs / 1000;\n\n // Find the current word from word_segments\n const currentWord = captionsData.word_segments.find(\n (word) => currentTimeSec >= word.start && currentTimeSec < word.end,\n );\n\n // Find the current segment\n const currentSegment = captionsData.segments.find(\n (segment) => currentTimeSec >= segment.start && currentTimeSec < segment.end,\n );\n\n for (const wordContainer of this.activeWordContainers) {\n if (currentWord) {\n const wordIndex = captionsData.word_segments.findIndex(\n (w) =>\n w.start === currentWord.start &&\n w.end === currentWord.end &&\n w.text === currentWord.text,\n );\n wordContainer.wordIndex = wordIndex >= 0 ? wordIndex : 0;\n wordContainer.wordText = currentWord.text; // Sets textContent directly\n } else {\n wordContainer.wordText = \"\"; // Hides element\n }\n }\n\n for (const segmentContainer of this.segmentContainers) {\n if (currentSegment) {\n segmentContainer.segmentText = currentSegment.text; // Sets textContent directly\n } else {\n segmentContainer.segmentText = \"\"; // Hides element\n }\n }\n\n // Process context for both word and segment cases\n if (currentWord && currentSegment) {\n const segmentWords = captionsData.word_segments.filter(\n (word) => word.start >= currentSegment.start && word.end <= currentSegment.end,\n );\n\n const currentWordIndex = segmentWords.findIndex(\n (word) => word.start === currentWord.start && word.end === currentWord.end,\n );\n\n if (currentWordIndex !== -1) {\n const beforeWords = segmentWords\n .slice(0, currentWordIndex)\n .map((w) => w.text.trim())\n .join(\" \");\n\n const afterWords = segmentWords\n .slice(currentWordIndex + 1)\n .map((w) => w.text.trim())\n .join(\" \");\n\n for (const container of this.beforeActiveWordContainers) {\n container.segmentText = beforeWords; // Sets textContent directly\n }\n\n for (const container of this.afterActiveWordContainers) {\n container.segmentText = afterWords; // Sets textContent directly\n }\n }\n } else if (currentSegment) {\n const segmentWords = captionsData.word_segments.filter(\n (word) => word.start >= currentSegment.start && word.end <= currentSegment.end,\n );\n\n const firstWord = segmentWords[0];\n const isBeforeFirstWord = firstWord && currentTimeSec < firstWord.start;\n\n if (isBeforeFirstWord) {\n const allWords = segmentWords.map((w) => w.text.trim()).join(\" \");\n\n for (const container of this.beforeActiveWordContainers) {\n container.segmentText = \"\"; // Hides element\n }\n\n for (const container of this.afterActiveWordContainers) {\n container.segmentText = allWords; // Sets textContent directly\n }\n } else {\n const allCompletedWords = segmentWords.map((w) => w.text.trim()).join(\" \");\n\n for (const container of this.beforeActiveWordContainers) {\n container.segmentText = allCompletedWords; // Sets textContent directly\n }\n\n for (const container of this.afterActiveWordContainers) {\n container.segmentText = \"\"; // Hides element\n }\n }\n } else {\n for (const container of this.beforeActiveWordContainers) {\n container.segmentText = \"\"; // Hides element\n }\n\n for (const container of this.afterActiveWordContainers) {\n container.segmentText = \"\"; // Hides element\n }\n }\n }\n\n get targetElement() {\n const target = this.targetSelector ? this.#findElementById(this.targetSelector) : null;\n if (target instanceof EFAudio || target instanceof EFVideo) {\n return target;\n }\n if (this.hasCustomCaptionsData) {\n return null;\n }\n return null;\n }\n\n get hasCustomCaptionsData(): boolean {\n return !!(this.captionsData || this.captionsSrc || this.captionsScript);\n }\n\n /**\n * Find element by ID, searching within clone scope first to avoid cross-boundary references.\n * @private\n */\n #findElementById(id: string): Element | null {\n // Search within nearest timegroup or configuration container first\n const container = this.closest(\"ef-timegroup, ef-configuration\");\n if (container) {\n const result = container.querySelector(`#${CSS.escape(id)}`);\n if (result) return result;\n }\n\n // Fall back to document-wide search\n return document.getElementById(id);\n }\n\n get intrinsicDurationMs(): number | undefined {\n if (this.#cachedIntrinsicDurationMs !== null) {\n return this.#cachedIntrinsicDurationMs;\n }\n\n let captionsData: Caption | null = null;\n\n if (this.captionsData) {\n captionsData = this.captionsData;\n } else if (this.captionsScript) {\n const scriptElement = this.#findElementById(this.captionsScript);\n if (scriptElement?.textContent) {\n try {\n captionsData = JSON.parse(scriptElement.textContent) as Caption;\n } catch {\n // Invalid JSON\n }\n }\n } else if (this.#captionsDataValue) {\n captionsData = this.#captionsDataValue;\n }\n\n if (!captionsData) {\n if (!this.captionsData && !this.captionsScript && !this.captionsSrc) {\n this.#cachedIntrinsicDurationMs = undefined;\n }\n return undefined;\n }\n\n let result: number;\n if (captionsData.segments.length === 0 && captionsData.word_segments.length === 0) {\n result = 0;\n } else {\n const maxSegmentEnd =\n captionsData.segments.length > 0\n ? captionsData.segments.reduce((max, s) => (s.end > max ? s.end : max), 0)\n : 0;\n const maxWordEnd =\n captionsData.word_segments.length > 0\n ? captionsData.word_segments.reduce((max, w) => (w.end > max ? w.end : max), 0)\n : 0;\n\n result = Math.max(maxSegmentEnd, maxWordEnd) * 1000;\n }\n\n this.#cachedIntrinsicDurationMs = result;\n return result;\n }\n\n get hasOwnDuration(): boolean {\n return !!(this.captionsData || this.captionsScript || this.#captionsDataValue);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-captions\": EFCaptions;\n \"ef-captions-active-word\": EFCaptionsActiveWord;\n \"ef-captions-segment\": EFCaptionsSegment;\n \"ef-captions-before-active-word\": EFCaptionsBeforeActiveWord;\n \"ef-captions-after-active-word\": EFCaptionsAfterActiveWord;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAmCA,MAAM,YAAY,IAAI,IAAI;CAAC;CAAI;CAAK;CAAK;CAAK;CAAI,CAAC;AAO5C,iCAAMA,+BAA6B,WAAW;CACnD,YAAY;CACZ,aAAa;CAEb,IAAI,SAAS,MAAc;AACzB,QAAKC,WAAY;AAEjB,MAAI,CAAC,QAAQ,UAAU,IAAI,KAAK,EAAE;AAChC,QAAK,SAAS;AACd,QAAK,cAAc;SACd;AACL,QAAK,SAAS;AAEd,QAAK,cAAc,OAAO;;;CAI9B,IAAI,WAAmB;AACrB,SAAO,MAAKA;;CAGd,IAAI,UAAU,OAAe;AAC3B,QAAKC,YAAa;EAGlB,MAAM,YADQ,QAAQ,OAAQ,MACL;AACzB,OAAK,MAAM,YAAY,kBAAkB,UAAU,UAAU,CAAC;;CAGhE,IAAI,YAAoB;AACtB,SAAO,MAAKA;;;mCA/Bf,cAAc,0BAA0B;AAwClC,8BAAMC,4BAA0B,WAAW;CAChD,eAAe;CAEf,IAAI,YAAY,MAAc;AAC5B,QAAKC,cAAe;AAEpB,MAAI,CAAC,QAAQ,UAAU,IAAI,KAAK,EAAE;AAChC,QAAK,SAAS;AACd,QAAK,cAAc;SACd;AACL,QAAK,SAAS;AACd,QAAK,cAAc;;;CAIvB,IAAI,cAAsB;AACxB,SAAO,MAAKA;;;gCAjBf,cAAc,sBAAsB;AA0B9B,uCAAMC,qCAAmC,kBAAkB;CAChE,IAAI,YAAY,MAAc;EAK5B,MAAM,iBAHa,KAAK,QAAQ,cAAc,EAAE,cAC9C,0BACD,GACiC;EAGlC,MAAM,YAAY,QAAQ,gBAAgB,OAAO,MAAM;AAGvD,MAAI,CAAC,aAAa,UAAU,IAAI,UAAU,EAAE;AAC1C,QAAK,SAAS;AACd,QAAK,cAAc;SACd;AACL,QAAK,SAAS;AACd,QAAK,cAAc;;;;yCAlBxB,cAAc,iCAAiC;AA4BzC,sCAAMC,oCAAkC,kBAAkB;CAC/D,IAAI,YAAY,MAAc;EAE5B,MAAM,YAAY;AAGlB,MAAI,CAAC,aAAa,UAAU,IAAI,UAAU,EAAE;AAC1C,QAAK,SAAS;AACd,QAAK,cAAc;SACd;AACL,QAAK,SAAS;AACd,QAAK,cAAc;;;;wCAZxB,cAAc,gCAAgC;AAkBxC,uBAAMC,qBACH,cAAc,WAAW,WAAW,WAAW,CAAC,EAAE,EACxD,WAAW,iBACZ,CAAC,CAEJ;;;wBAkBmB;mBAOL;qBAOE;sBAOiB;wBAOd;8BAEM,KAAK,qBAAqB,0BAA0B;2BACvD,KAAK,qBAAqB,sBAAsB;oCACvC,KAAK,qBAAqB,iCAAiC;mCAC5D,KAAK,qBAAqB,gCAAgC;iCAgD5D,IAAI,YAA4B;;;gBAlG1C,CACd,GAAG;;;;;;;;;;;;MAaJ;;CAKD,IAAI,OAAO,OAAe;AACxB,OAAK,iBAAiB;;CAiCxB,6BAAwD;CAExD,SAAS;AACP,SAAO,IAAI;;CAGb,qBAAqB;AACnB,MAAI,CAAC,KAAK,cACR,QAAO;EAET,MAAM,SAAS,KAAK,cAAc,UAAU,KAAK,cAAc;AAC/D,MAAI,OACF,QAAO,GAAG,KAAK,QAAQ,gBAAgB,OAAO;AAEhD,SAAO;;CAGT,eAAe;AACb,MAAI,CAAC,KAAK,cACR,QAAO;EAET,MAAM,SAAS,KAAK,cAAc,UAAU,KAAK,cAAc;AAC/D,MAAI,OACF,QAAO,GAAG,KAAK,QAAQ,gBAAgB;EAEzC,MAAM,YAAY,KAAK,cAAc;EAErC,IAAI,gBAAgB,UAAU,WAAW,IAAI,GAAG,UAAU,MAAM,EAAE,GAAG;AACrE,kBAAgB,cAAc,QAAQ,QAAQ,GAAG;AAEjD,SAAO,+BAA+B,mBAAmB,cAAc;;CAOzE,sBAAsB;CACtB,uBAAuD;CACvD,qBAAqC;CACrC,qBAA+D;CAO/D,AAAS,kBAA2B;AAClC,SAAO;;;;;CAMT,MAAM,iBAAiB,QAA+C;AAEpE,MAAI,MAAKC,sBAAuB,MAAKC,mBAAoB;AACvD,QAAK,qBAAqB,QAAQ;AAClC,UAAO,MAAKA;;AAId,MAAI,MAAKC,oBACP,QAAO,MAAKA;AAGd,OAAK,wBAAwB,cAAc;AAC3C,OAAK,qBAAqB,UAAU;AACpC,QAAKA,sBAAuB,MAAKC,mBAAoB,OAAO;AAE5D,MAAI;AACF,SAAKF,oBAAqB,MAAM,MAAKC;AACrC,SAAKF,qBAAsB;AAC3B,OAAI,MAAKC,kBACP,MAAK,wBAAwB,SAAS,MAAKA,kBAAmB;AAEhE,QAAK,qBAAqB,QAAQ;AAClC,UAAO,MAAKA;WACL,OAAO;AACd,OAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,OAAM;AAER,WAAQ,MAAM,iCAAiC,MAAM;AACrD,QAAK,qBAAqB,QAAQ;AAClC,UAAO;YACC;AACR,SAAKC,sBAAuB;;;CAIhC,OAAMC,mBAAoB,QAA+C;AAEvE,MAAI,KAAK,aACP,QAAO,KAAK;AAId,MAAI,KAAK,gBAAgB;GACvB,MAAM,gBAAgB,MAAKC,gBAAiB,KAAK,eAAe;AAChE,OAAI,eAAe,YACjB,KAAI;AACF,WAAO,KAAK,MAAM,cAAc,YAAY;YACrC,OAAO;AACd,YAAQ,MAAM,yCAAyC,KAAK,eAAe,IAAI,MAAM;;;AAM3F,MAAI,KAAK,YACP,KAAI;AAEF,UAAQ,OADS,MAAM,KAAK,MAAM,KAAK,aAAa,EAAE,QAAQ,CAAC,EACxC,MAAM;WACtB,OAAO;AACd,OAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,OAAM;AAER,WAAQ,MAAM,gCAAgC,KAAK,YAAY,IAAI,MAAM;;AAK7E,MAAI,KAAK,iBAAiB,CAAC,KAAK,uBAAuB;GACrD,MAAM,oBAAoB,KAAK,oBAAoB;AACnD,OAAI,kBACF,KAAI;AAEF,UAAKC,oBAAsB,OADV,MAAM,KAAK,MAAM,mBAAmB,EAAE,QAAQ,CAAC,EACtB,MAAM;AAChD,YAAQ,gBAAgB;AAGxB,QAAI,MAAKA,kBACP,QAAO,MAAKC,0BAA2B,OAAO;YAEzC,OAAO;AACd,QAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,OAAM;;;AAOd,SAAO;;CAGT,OAAMA,0BAA2B,QAA+C;AAC9E,MAAI,CAAC,MAAKD,kBAAoB,QAAO;EAErC,MAAM,gBAAgB,KAAK,MAAM,KAAK,mBAAmB,MAAKA,kBAAmB,cAAc;EAC/F,MAAM,eAAe,GAAG,KAAK,QAAQ,yBAAyB,MAAKA,kBAAmB,GAAG,aAAa;AAEtG,MAAI;AAEF,UAAQ,OADS,MAAM,KAAK,MAAM,cAAc,EAAE,QAAQ,CAAC,EACpC,MAAM;WACtB,OAAO;AACd,OAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,OAAM;AAER,WAAQ,MAAM,0CAA0C,MAAM;AAC9D,UAAO;;;;;;;CAYX,cAAc,SAA6B;EAEzC,MAAM,UAAU,MAAKL,sBAAuB,MAAKC,sBAAuB;AAExE,SAAO;GACL,kBAAkB,CAAC;GACnB,SAAS;GACT,UAAU;GACX;;;;;;CAOH,MAAM,aAAa,SAAiB,QAAoC;AACtE,QAAM,KAAK,iBAAiB,OAAO;AACnC,SAAO,gBAAgB;;;;;;;CAQzB,YAAY,SAAuB;AAGjC,OAAK,sBAAsB;;CAO7B;CAEA,oBAAoB;AAClB,QAAM,mBAAmB;AAGzB,OAAK,kBAAkB,CAAC,YAAY,GAAG;EAGvC,MAAM,SAAS,KAAK,iBAAiB,MAAKG,gBAAiB,KAAK,eAAe,GAAG;AAClF,MAAI,WAAW,kBAAkB,WAAW,kBAAkB,SAC5D,KAAI,sBAAsB,QAAQ,KAAK;WAGhC,KAAK,yBAAyB,KAAK,cAC1C,KAAI,sBAAsB,KAAK,eAAe,KAAK;AAIrD,MAAI,KAAK,eAAe;AACtB,SAAKG,gCAAiC;IACpC,mBAAmB;AACjB,aAAQ,SAAS,CAAC,WAAW;AAC3B,WAAK,sBAAsB;OAC3B;;IAEJ,wBAAwB;AACtB,WAAKA,gCAAiC;;IAEzC;AACD,QAAK,cAAc,cAAc,MAAKA,8BAA+B;;AAmBvE,EAViB,IAAI,uBAAuB;AAC1C,OAAI,KAAK,MAAM,YAAY,QAAQ;AACjC,SAAK,MAAM,eAAe,UAAU;AACpC,SAAK,MAAM,UAAU;AACrB,SAAK,MAAM,gBAAgB;cAClB,CAAC,KAAK,MAAM,WAAW,KAAK,MAAM,YAAY,IAAI;AAC3D,SAAK,MAAM,eAAe,UAAU;AACpC,SAAK,MAAM,eAAe,iBAAiB;;IAE7C,CACO,QAAQ,MAAM;GAAE,YAAY;GAAM,iBAAiB,CAAC,QAAQ;GAAE,CAAC;;CAG1E,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,MAAI,MAAKA,iCAAkC,KAAK,eAAe;AAC7D,QAAK,cAAc,iBAAiB,MAAKA,8BAA+B;AACxE,SAAKA,gCAAiC;;;CAI1C,AAAU,QAAQ,mBAA4E;AAE5F,MAAI,KAAK,iBAAiB,CAAC,MAAKA,+BAAgC;AAC9D,SAAKA,gCAAiC;IACpC,mBAAmB;AACjB,aAAQ,SAAS,CAAC,WAAW;AAC3B,WAAK,sBAAsB;OAC3B;;IAEJ,wBAAwB;AACtB,WAAKA,gCAAiC;;IAEzC;AACD,QAAK,cAAc,cAAc,MAAKA,8BAA+B;;AAIvE,MAAI,kBAAkB,IAAI,gBAAgB,IAAI,MAAKA,+BAAgC;GACjF,MAAM,mBAAmB,kBAAkB,IAAI,gBAAgB;AAC/D,OAAI,oBAAoB,qBAAqB,KAAK,eAAe;AAC/D,qBAAiB,iBAAiB,MAAKA,8BAA+B;AACtE,UAAKA,gCAAiC;;;AAI1C,OAAK,sBAAsB;AAG3B,MACE,kBAAkB,IAAI,eAAe,IACrC,kBAAkB,IAAI,cAAc,IACpC,kBAAkB,IAAI,iBAAiB,EACvC;AACA,QAAK,kBAAkB,SAAS;AAChC,SAAKC,4BAA6B;AAClC,SAAKR,qBAAsB;AAC3B,SAAKC,oBAAqB;AAC1B,QAAK,kBAAkB,CAAC,YAAY,GAAG;AAEvC,QAAK,cAAc,sBAAsB;AAEzC,+BAA4B;AAC5B,0BAAuB;AAEvB,OAAI,KAAK,iBAAiB;AACxB,SAAK,gBAAgB,cAAc,aAAa;AAChD,SAAK,gBAAgB,cAAc,cAAc;;;AAKrD,MAAI,kBAAkB,IAAI,mBAAmB,CAC3C,MAAK,sBAAsB;;CAI/B,uBAAuB;EACrB,MAAM,eAAe,MAAKA;AAC1B,MAAI,CAAC,aACH;EAIF,IAAI,gBAAgB,KAAK;AACzB,MAAI,KAAK,yBAAyB,KAAK,iBAAiB;GACtD,MAAM,eAAe,MAAM,KAAK,KAAK,gBAAgB,SAAS,CAAC,MAC5D,UAA4B,iBAAiB,QAC/C;AACD,OAAI,cAAc;IAChB,MAAM,aAAa,aAAa,cAAc;AAC9C,oBAAgB,aAAa,sBAAsB;AACnD,oBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,eAAe,KAAK,WAAW,CAAC;;;EAIzE,MAAM,iBAAiB,gBAAgB;EAGvC,MAAM,cAAc,aAAa,cAAc,MAC5C,SAAS,kBAAkB,KAAK,SAAS,iBAAiB,KAAK,IACjE;EAGD,MAAM,iBAAiB,aAAa,SAAS,MAC1C,YAAY,kBAAkB,QAAQ,SAAS,iBAAiB,QAAQ,IAC1E;AAED,OAAK,MAAM,iBAAiB,KAAK,qBAC/B,KAAI,aAAa;GACf,MAAM,YAAY,aAAa,cAAc,WAC1C,MACC,EAAE,UAAU,YAAY,SACxB,EAAE,QAAQ,YAAY,OACtB,EAAE,SAAS,YAAY,KAC1B;AACD,iBAAc,YAAY,aAAa,IAAI,YAAY;AACvD,iBAAc,WAAW,YAAY;QAErC,eAAc,WAAW;AAI7B,OAAK,MAAM,oBAAoB,KAAK,kBAClC,KAAI,eACF,kBAAiB,cAAc,eAAe;MAE9C,kBAAiB,cAAc;AAKnC,MAAI,eAAe,gBAAgB;GACjC,MAAM,eAAe,aAAa,cAAc,QAC7C,SAAS,KAAK,SAAS,eAAe,SAAS,KAAK,OAAO,eAAe,IAC5E;GAED,MAAM,mBAAmB,aAAa,WACnC,SAAS,KAAK,UAAU,YAAY,SAAS,KAAK,QAAQ,YAAY,IACxE;AAED,OAAI,qBAAqB,IAAI;IAC3B,MAAM,cAAc,aACjB,MAAM,GAAG,iBAAiB,CAC1B,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC,CACzB,KAAK,IAAI;IAEZ,MAAM,aAAa,aAChB,MAAM,mBAAmB,EAAE,CAC3B,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC,CACzB,KAAK,IAAI;AAEZ,SAAK,MAAM,aAAa,KAAK,2BAC3B,WAAU,cAAc;AAG1B,SAAK,MAAM,aAAa,KAAK,0BAC3B,WAAU,cAAc;;aAGnB,gBAAgB;GACzB,MAAM,eAAe,aAAa,cAAc,QAC7C,SAAS,KAAK,SAAS,eAAe,SAAS,KAAK,OAAO,eAAe,IAC5E;GAED,MAAM,YAAY,aAAa;AAG/B,OAF0B,aAAa,iBAAiB,UAAU,OAE3C;IACrB,MAAM,WAAW,aAAa,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC,CAAC,KAAK,IAAI;AAEjE,SAAK,MAAM,aAAa,KAAK,2BAC3B,WAAU,cAAc;AAG1B,SAAK,MAAM,aAAa,KAAK,0BAC3B,WAAU,cAAc;UAErB;IACL,MAAM,oBAAoB,aAAa,KAAK,MAAM,EAAE,KAAK,MAAM,CAAC,CAAC,KAAK,IAAI;AAE1E,SAAK,MAAM,aAAa,KAAK,2BAC3B,WAAU,cAAc;AAG1B,SAAK,MAAM,aAAa,KAAK,0BAC3B,WAAU,cAAc;;SAGvB;AACL,QAAK,MAAM,aAAa,KAAK,2BAC3B,WAAU,cAAc;AAG1B,QAAK,MAAM,aAAa,KAAK,0BAC3B,WAAU,cAAc;;;CAK9B,IAAI,gBAAgB;EAClB,MAAM,SAAS,KAAK,iBAAiB,MAAKG,gBAAiB,KAAK,eAAe,GAAG;AAClF,MAAI,kBAAkB,WAAW,kBAAkB,QACjD,QAAO;AAET,MAAI,KAAK,sBACP,QAAO;AAET,SAAO;;CAGT,IAAI,wBAAiC;AACnC,SAAO,CAAC,EAAE,KAAK,gBAAgB,KAAK,eAAe,KAAK;;;;;;CAO1D,iBAAiB,IAA4B;EAE3C,MAAM,YAAY,KAAK,QAAQ,iCAAiC;AAChE,MAAI,WAAW;GACb,MAAM,SAAS,UAAU,cAAc,IAAI,IAAI,OAAO,GAAG,GAAG;AAC5D,OAAI,OAAQ,QAAO;;AAIrB,SAAO,SAAS,eAAe,GAAG;;CAGpC,IAAI,sBAA0C;AAC5C,MAAI,MAAKI,8BAA+B,KACtC,QAAO,MAAKA;EAGd,IAAIC,eAA+B;AAEnC,MAAI,KAAK,aACP,gBAAe,KAAK;WACX,KAAK,gBAAgB;GAC9B,MAAM,gBAAgB,MAAKL,gBAAiB,KAAK,eAAe;AAChE,OAAI,eAAe,YACjB,KAAI;AACF,mBAAe,KAAK,MAAM,cAAc,YAAY;WAC9C;aAID,MAAKH,kBACd,gBAAe,MAAKA;AAGtB,MAAI,CAAC,cAAc;AACjB,OAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,kBAAkB,CAAC,KAAK,YACtD,OAAKO,4BAA6B;AAEpC;;EAGF,IAAIE;AACJ,MAAI,aAAa,SAAS,WAAW,KAAK,aAAa,cAAc,WAAW,EAC9E,UAAS;OACJ;GACL,MAAM,gBACJ,aAAa,SAAS,SAAS,IAC3B,aAAa,SAAS,QAAQ,KAAK,MAAO,EAAE,MAAM,MAAM,EAAE,MAAM,KAAM,EAAE,GACxE;GACN,MAAM,aACJ,aAAa,cAAc,SAAS,IAChC,aAAa,cAAc,QAAQ,KAAK,MAAO,EAAE,MAAM,MAAM,EAAE,MAAM,KAAM,EAAE,GAC7E;AAEN,YAAS,KAAK,IAAI,eAAe,WAAW,GAAG;;AAGjD,QAAKF,4BAA6B;AAClC,SAAO;;CAGT,IAAI,iBAA0B;AAC5B,SAAO,CAAC,EAAE,KAAK,gBAAgB,KAAK,kBAAkB,MAAKP;;;YApjB5D,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAU,SAAS;CAAM,CAAC;YAO9D,SAAS,EAAE,WAAW,cAAc,CAAC;YAOrC,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAgB,SAAS;CAAM,CAAC;YAOpE,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAO,CAAC;YAO5C,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAmB,SAAS;CAAM,CAAC;yBAnDzE,cAAc,cAAc"}
|
|
1
|
+
{"version":3,"file":"EFCaptions.js","names":["#wordText","#wordIndex","#segmentText","#captionsDataLoaded","#captionsDataValue","#captionsDataPromise","#doLoadCaptionsData","#findElementById","#transcriptionData","#loadTranscriptionFragment","#rootTimegroupUpdateController","#cachedIntrinsicDurationMs"],"sources":["../../src/elements/EFCaptions.ts"],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
+
import { TemplateResult as TemplateResult$1 } from "../node_modules/lit-html/development/lit-html.js";
|
|
1
2
|
import { FrameRenderable, FrameState } from "../preview/FrameController.js";
|
|
2
3
|
import { EFSourceMixinInterface } from "./EFSourceMixin.js";
|
|
3
4
|
import { TemporalMixinInterface } from "./EFTemporal.js";
|
|
4
5
|
import { FetchMixinInterface } from "./FetchMixin.js";
|
|
5
|
-
import
|
|
6
|
+
import { Ref } from "../node_modules/lit-html/development/directives/ref.js";
|
|
7
|
+
import * as _$lit from "lit";
|
|
6
8
|
import { LitElement, PropertyValueMap } from "lit";
|
|
7
|
-
import * as lit_html1 from "lit-html";
|
|
8
|
-
import * as lit_html_directives_ref_js0 from "lit-html/directives/ref.js";
|
|
9
9
|
|
|
10
10
|
//#region src/elements/EFImage.d.ts
|
|
11
11
|
declare const EFImage_base: (new (...args: any[]) => TemporalMixinInterface) & (new (...args: any[]) => EFSourceMixinInterface) & (new (...args: any[]) => FetchMixinInterface) & typeof LitElement;
|
|
12
12
|
declare class EFImage extends EFImage_base implements FrameRenderable {
|
|
13
13
|
#private;
|
|
14
|
-
static styles:
|
|
14
|
+
static styles: _$lit.CSSResult[];
|
|
15
15
|
static get observedAttributes(): string[];
|
|
16
16
|
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
17
|
-
imageRef:
|
|
18
|
-
canvasRef:
|
|
17
|
+
imageRef: Ref<HTMLImageElement>;
|
|
18
|
+
canvasRef: Ref<HTMLCanvasElement>;
|
|
19
19
|
/**
|
|
20
20
|
* Get the current render version.
|
|
21
21
|
* Version increments when src or fileId changes.
|
|
@@ -33,7 +33,7 @@ declare class EFImage extends EFImage_base implements FrameRenderable {
|
|
|
33
33
|
/** @deprecated Use fileId instead */
|
|
34
34
|
get assetId(): string | null;
|
|
35
35
|
set assetId(value: string | null);
|
|
36
|
-
render():
|
|
36
|
+
render(): TemplateResult$1<1>;
|
|
37
37
|
private isDirectUrl;
|
|
38
38
|
assetPath(): string;
|
|
39
39
|
get hasOwnDuration(): boolean;
|
package/dist/elements/EFImage.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.95.0/helpers/decorate.js";
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
3
2
|
import { EFTemporal } from "./EFTemporal.js";
|
|
4
3
|
import { EFSourceMixin } from "./EFSourceMixin.js";
|
|
5
4
|
import { FetchMixin } from "./FetchMixin.js";
|
|
6
5
|
import { LitElement, css, html } from "lit";
|
|
7
6
|
import { customElement, property } from "lit/decorators.js";
|
|
8
7
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
9
|
-
|
|
10
8
|
//#region src/elements/EFImage.ts
|
|
11
|
-
let EFImage = class EFImage
|
|
9
|
+
let EFImage = class EFImage extends EFTemporal(EFSourceMixin(FetchMixin(LitElement), { assetType: "image_files" })) {
|
|
12
10
|
constructor(..._args) {
|
|
13
11
|
super(..._args);
|
|
14
12
|
this.imageRef = createRef();
|
|
@@ -242,7 +240,7 @@ let EFImage = class EFImage$1 extends EFTemporal(EFSourceMixin(FetchMixin(LitEle
|
|
|
242
240
|
return {
|
|
243
241
|
needsPreparation: !this.#imageLoaded,
|
|
244
242
|
isReady: this.#imageLoaded,
|
|
245
|
-
priority:
|
|
243
|
+
priority: 5
|
|
246
244
|
};
|
|
247
245
|
}
|
|
248
246
|
/**
|
|
@@ -300,7 +298,7 @@ __decorate([property({
|
|
|
300
298
|
reflect: true
|
|
301
299
|
})], EFImage.prototype, "fileId", null);
|
|
302
300
|
EFImage = __decorate([customElement("ef-image")], EFImage);
|
|
303
|
-
|
|
304
301
|
//#endregion
|
|
305
302
|
export { EFImage };
|
|
303
|
+
|
|
306
304
|
//# sourceMappingURL=EFImage.js.map
|