@editframe/elements 0.47.2 → 0.48.1
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 +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 +8 -9
- 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 +0 -3
- package/dist/elements/EFMedia/SegmentIndex.js +1 -2
- 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 +2 -2
- package/dist/elements/EFMedia.js +2 -3
- 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 +12 -9
- 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 +6 -7
- package/dist/elements/EFVideo.js +7 -9
- 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 +3 -4
- 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 +8 -33
- 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 +16 -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":"EFMedia.js","names":["assignedElements: Element[]","#value","#error","#status","#promise","#resolvePromise","#mediaEngineSrcKey","#mediaEngine","#mediaEnginePromise","#loadMediaEngine","#createMediaEngine","#mediaEngineError","#handleMediaEngineComplete","#frequencyDataCache","#analyzeFrequencies","#timeDomainDataCache","#analyzeTimeDomain"],"sources":["../../src/elements/EFMedia.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { css, LitElement, type PropertyValueMap } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { isContextMixin } from \"../gui/ContextMixin.js\";\nimport type { ControllableInterface } from \"../gui/Controllable.js\";\nimport { efContext } from \"../gui/efContext.js\";\nimport { withSpan } from \"../otel/tracingHelpers.js\";\nimport type { MediaEngine } from \"../transcoding/types/index.ts\";\nimport type { AudioSpan } from \"../transcoding/types/index.ts\";\nimport { createMediaEngineFromSource } from \"./EFMedia/MediaEngine.js\";\nimport { UrlGenerator } from \"../transcoding/utils/UrlGenerator.ts\";\nimport { LRUCache } from \"../utils/LRUCache.js\";\nimport { EFSourceMixin } from \"./EFSourceMixin.js\";\nimport { FetchMixin } from \"./FetchMixin.js\";\nimport { renderTemporalAudio } from \"./renderTemporalAudio.js\";\nimport { EFTargetable } from \"./TargetController.ts\";\n\n// EF_FRAMEGEN is a global instance created in EF_FRAMEGEN.ts\ndeclare global {\n var EF_FRAMEGEN: import(\"../EF_FRAMEGEN.js\").EFFramegen;\n}\n\nconst freqWeightsCache = new Map<number, Float32Array>();\n\nexport class IgnorableError extends Error {}\n\n/**\n * Gets all child elements including slotted content for shadow DOM elements.\n * Duplicated here to avoid circular imports from EFTemporal.\n */\nconst getChildrenIncludingSlotted = (element: Element): Element[] => {\n if (element.shadowRoot) {\n const slots = element.shadowRoot.querySelectorAll(\"slot\");\n if (slots.length > 0) {\n const assignedElements: Element[] = [];\n for (const slot of slots) {\n assignedElements.push(...slot.assignedElements());\n }\n for (const child of element.shadowRoot.children) {\n if (child.tagName !== \"SLOT\") {\n assignedElements.push(child);\n }\n }\n return assignedElements;\n }\n }\n return Array.from(element.children);\n};\n\nexport const deepGetMediaElements = (element: Element, medias: EFMedia[] = []) => {\n const children = getChildrenIncludingSlotted(element);\n for (const child of children) {\n if (child instanceof EFMedia) {\n medias.push(child);\n } else {\n deepGetMediaElements(child, medias);\n }\n }\n return medias;\n};\n\n// Import EFTemporal - use a function wrapper to defer evaluation until class definition\n// This breaks the circular dependency: EFTimegroup -> EFMedia -> EFTemporal\nimport { EFTemporal } from \"./EFTemporal.js\";\n\n/**\n * Simple async value wrapper that mimics Lit Task interface.\n * Used for backwards compatibility with code expecting task-like objects.\n */\nexport class AsyncValue<T> {\n #value: T | undefined = undefined;\n #error: Error | undefined = undefined;\n // oxlint-disable-next-line no-unused-private-class-members -- false positive; read via get status()\n #status: \"initial\" | \"pending\" | \"complete\" | \"error\" = \"initial\";\n #promise: Promise<T | undefined> = Promise.resolve(undefined);\n #resolvePromise: ((value: T | undefined) => void) | undefined;\n\n // Use properties instead of getters to avoid TypeScript declaration generation bug\n get value(): T | undefined {\n return this.#value;\n }\n\n get error(): Error | undefined {\n return this.#error;\n }\n\n get status(): number {\n // Match TaskStatus enum: INITIAL=0, PENDING=1, COMPLETE=2, ERROR=3\n switch (this.#status) {\n case \"initial\":\n return 0;\n case \"pending\":\n return 1;\n case \"complete\":\n return 2;\n case \"error\":\n return 3;\n }\n }\n\n get taskComplete(): Promise<T | undefined> {\n return this.#promise;\n }\n\n /**\n * Set the value (marks status as complete)\n */\n setValue(value: T): void {\n this.#value = value;\n this.#error = undefined;\n this.#status = \"complete\";\n this.#resolvePromise?.(value);\n }\n\n /**\n * Set an error (marks status as error)\n */\n setError(error: Error): void {\n this.#error = error;\n this.#value = undefined;\n this.#status = \"error\";\n // Don't reject - just resolve with undefined to match old behavior\n this.#resolvePromise?.(undefined);\n }\n\n /**\n * Start a new async operation\n */\n startPending(): void {\n this.#status = \"pending\";\n this.#promise = new Promise((resolve) => {\n this.#resolvePromise = resolve;\n });\n // Prevent unhandled rejection warnings\n this.#promise.catch(() => {});\n }\n\n /**\n * Run an async function and update status accordingly\n */\n async run(fn: () => Promise<T>): Promise<T | undefined> {\n this.startPending();\n try {\n const result = await fn();\n this.setValue(result);\n return result;\n } catch (error) {\n if (error instanceof Error) {\n this.setError(error);\n } else {\n this.setError(new Error(String(error)));\n }\n return undefined;\n }\n }\n}\n\n// Audio analysis helper functions\nconst DECAY_WEIGHT = 0.8;\n\nfunction processFFTData(fftData: Uint8Array, zeroThresholdPercent = 0.1): Uint8Array {\n const totalBins = fftData.length;\n const zeroThresholdCount = Math.floor(totalBins * zeroThresholdPercent);\n\n let zeroCount = 0;\n let cutoffIndex = totalBins;\n\n for (let i = totalBins - 1; i >= 0; i--) {\n if (fftData[i] ?? 0 < 10) {\n zeroCount++;\n } else {\n if (zeroCount >= zeroThresholdCount) {\n cutoffIndex = i + 1;\n break;\n }\n }\n }\n\n if (cutoffIndex < zeroThresholdCount) {\n return fftData;\n }\n\n const goodData = fftData.slice(0, cutoffIndex);\n const resampledData = interpolateData(goodData, fftData.length);\n\n const attenuationStartIndex = Math.floor(totalBins * 0.9);\n for (let i = attenuationStartIndex; i < totalBins; i++) {\n const attenuationProgress =\n (i - attenuationStartIndex) / (totalBins - attenuationStartIndex) + 0.2;\n const attenuationFactor = Math.max(0, 1 - attenuationProgress);\n resampledData[i] = Math.floor((resampledData[i] ?? 0) * attenuationFactor);\n }\n\n return resampledData;\n}\n\nfunction interpolateData(data: Uint8Array, targetSize: number): Uint8Array {\n const resampled = new Uint8Array(targetSize);\n const dataLength = data.length;\n\n for (let i = 0; i < targetSize; i++) {\n const ratio = (i / (targetSize - 1)) * (dataLength - 1);\n const index = Math.floor(ratio);\n const fraction = ratio - index;\n\n if (index >= dataLength - 1) {\n resampled[i] = data[dataLength - 1] ?? 0;\n } else {\n resampled[i] = Math.round(\n (data[index] ?? 0) * (1 - fraction) + (data[index + 1] ?? 0) * fraction,\n );\n }\n }\n\n return resampled;\n}\n\nexport class EFMedia extends EFTargetable(\n EFSourceMixin(EFTemporal(FetchMixin(LitElement)), {\n assetType: \"isobmff_files\",\n }),\n) {\n @provide({ context: efContext })\n get efContext(): ControllableInterface | null {\n return this.rootTimegroup ?? this;\n }\n\n override shouldAutoReady(): boolean {\n return false;\n }\n\n // Sample buffer size configuration\n // 90 frames = 3 seconds at 30fps. A rolling buffer this large means backward\n // seeks within a 3-second window are pure buffer hits — no VideoDecoder reset,\n // no re-decode from the keyframe. SampleBuffer.push() closes evicted frames so\n // GPU memory stays bounded to ~90 frames × ~3 MB ≈ 270 MB across all instances.\n static readonly VIDEO_SAMPLE_BUFFER_SIZE = 90;\n static readonly AUDIO_SAMPLE_BUFFER_SIZE = 120;\n\n /**\n * Which tracks this media element requires.\n * Subclasses can override to specify their needs:\n * - \"audio\" - Only needs audio track (e.g., EFAudio)\n * - \"video\" - Only needs video track\n * - \"both\" - Needs both tracks (default for backwards compatibility)\n *\n * This is used during media engine creation to skip validation\n * of tracks that won't be used, avoiding unnecessary network requests.\n */\n get requiredTracks(): \"audio\" | \"video\" | \"both\" {\n return \"both\";\n }\n\n static get observedAttributes() {\n // biome-ignore lint/complexity/noThisInStatic: We need to access super\n const parentAttributes = super.observedAttributes || [];\n return [\n ...parentAttributes,\n \"mute\",\n \"fft-size\",\n \"fft-decay\",\n \"fft-gain\",\n \"interpolate-frequencies\",\n \"file-id\",\n \"asset-id\",\n \"audio-buffer-duration\",\n \"max-audio-buffer-fetches\",\n \"enable-audio-buffering\",\n \"sourcein\",\n \"sourceout\",\n ];\n }\n\n static styles = [\n css`\n :host {\n display: block;\n position: relative;\n overflow: hidden;\n }\n `,\n ];\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (name === \"asset-id\") {\n this.fileId = newValue;\n return;\n }\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n\n /**\n * Duration in milliseconds for audio buffering ahead of current time\n * @domAttribute \"audio-buffer-duration\"\n */\n @property({ type: Number, attribute: \"audio-buffer-duration\" })\n audioBufferDurationMs = 10000; // 10 seconds - reasonable for JIT encoding\n\n /**\n * Maximum number of concurrent audio segment fetches for buffering\n * @domAttribute \"max-audio-buffer-fetches\"\n */\n @property({ type: Number, attribute: \"max-audio-buffer-fetches\" })\n maxAudioBufferFetches = 2;\n\n /**\n * Enable/disable audio buffering system\n * @domAttribute \"enable-audio-buffering\"\n */\n @property({ type: Boolean, attribute: \"enable-audio-buffering\" })\n enableAudioBuffering = true;\n\n /**\n * Mute/unmute the media element\n * @domAttribute \"mute\"\n */\n @property({\n type: Boolean,\n attribute: \"mute\",\n reflect: true,\n })\n mute = false;\n\n /**\n * FFT size for frequency analysis\n * @domAttribute \"fft-size\"\n */\n @property({ type: Number, attribute: \"fft-size\", reflect: true })\n fftSize = 128;\n\n /**\n * FFT decay rate for frequency analysis\n * @domAttribute \"fft-decay\"\n */\n @property({ type: Number, attribute: \"fft-decay\", reflect: true })\n fftDecay = 8;\n\n /**\n * FFT gain for frequency analysis\n * @domAttribute \"fft-gain\"\n */\n @property({ type: Number, attribute: \"fft-gain\", reflect: true })\n fftGain = 3.0;\n\n /**\n * Enable/disable frequency interpolation\n * @domAttribute \"interpolate-frequencies\"\n */\n @property({\n type: Boolean,\n attribute: \"interpolate-frequencies\",\n reflect: true,\n })\n interpolateFrequencies = false;\n\n // Update FREQ_WEIGHTS to use the instance fftSize instead of a static value\n getFreqWeights() {\n if (freqWeightsCache.has(this.fftSize)) {\n // biome-ignore lint/style/noNonNullAssertion: We know the value is set due to the guard above\n return freqWeightsCache.get(this.fftSize)!;\n }\n\n const weights = new Float32Array(this.fftSize / 2).map((_, i) => {\n const frequency = (i * 48000) / this.fftSize;\n if (frequency < 60) return 0.3;\n if (frequency < 250) return 0.4;\n if (frequency < 500) return 0.6;\n if (frequency < 2000) return 0.8;\n if (frequency < 4000) return 1.2;\n if (frequency < 8000) return 1.6;\n return 2.0;\n });\n\n freqWeightsCache.set(this.fftSize, weights);\n return weights;\n }\n\n // Helper method for backwards compatibility\n getShouldInterpolateFrequencies() {\n return this.interpolateFrequencies;\n }\n\n getUrlGenerator() {\n return new UrlGenerator(() => this.apiHost ?? \"\");\n }\n\n // ============================================================================\n // Media Engine - replaced task with async method + cached wrapper\n // ============================================================================\n\n #mediaEngine: MediaEngine | undefined = undefined;\n #mediaEnginePromise: Promise<MediaEngine | undefined> | undefined = undefined;\n #mediaEngineError: Error | undefined = undefined;\n #mediaEngineSrcKey: string | null = null;\n\n /**\n * Async wrapper that mimics Task interface for backwards compatibility.\n * Code expecting mediaEngineTask.value, .taskComplete, .error, .status will still work.\n */\n mediaEngineTask = new AsyncValue<MediaEngine>();\n\n /**\n * Get or create the MediaEngine for this element.\n * Uses caching based on src/fileId to avoid redundant fetches.\n */\n async getMediaEngine(signal?: AbortSignal): Promise<MediaEngine | undefined> {\n if (!this.src && !this.fileId) {\n return undefined;\n }\n\n const srcKey = `${this.src}|${this.fileId}`;\n\n // Return cached if src hasn't changed\n if (this.#mediaEngineSrcKey === srcKey && this.#mediaEngine) {\n this.setContentReadyState(\"ready\");\n return this.#mediaEngine;\n }\n\n // If already loading for this src, wait for it\n if (this.#mediaEngineSrcKey === srcKey && this.#mediaEnginePromise) {\n return this.#mediaEnginePromise;\n }\n\n // Start new load\n this.#mediaEngineSrcKey = srcKey;\n this.mediaEngineTask.startPending();\n this.setContentReadyState(\"loading\");\n\n // Store the handled promise so that concurrent callers at the cache check\n // (line above) get a resolved promise, not a raw rejecting one.\n const loadPromise = this.#loadMediaEngine(signal);\n this.#mediaEnginePromise = loadPromise;\n return loadPromise;\n }\n\n async #loadMediaEngine(signal?: AbortSignal): Promise<MediaEngine | undefined> {\n try {\n this.#mediaEngine = await this.#createMediaEngine(signal);\n this.#mediaEngineError = undefined;\n if (this.#mediaEngine) {\n this.mediaEngineTask.setValue(this.#mediaEngine);\n this.#handleMediaEngineComplete();\n this.setContentReadyState(\"ready\");\n } else {\n // No engine (empty/invalid src) — return to idle\n this.setContentReadyState(\"idle\");\n }\n return this.#mediaEngine;\n } catch (error) {\n this.#mediaEngineError = error instanceof Error ? error : new Error(String(error));\n this.mediaEngineTask.setError(this.#mediaEngineError);\n this.setContentReadyState(\"error\");\n\n // Don't throw for expected errors\n const isExpectedError =\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (error instanceof Error &&\n (error.message === \"No valid media source\" ||\n error.message.includes(\"File not found\") ||\n error.message.includes(\"404\") ||\n error.message.includes(\"Failed to fetch\")));\n\n if (!isExpectedError) {\n console.error(\"Media engine error:\", error);\n }\n\n return undefined;\n }\n }\n\n async #createMediaEngine(signal?: AbortSignal): Promise<MediaEngine | undefined> {\n const { src, fileId, apiHost, requiredTracks } = this;\n const urlGenerator = this.getUrlGenerator();\n return createMediaEngineFromSource({\n src,\n fileId,\n apiHost,\n requiredTracks,\n fetchFn: (url, init) => this.fetch(url, init),\n urlGenerator,\n signal,\n });\n }\n\n #handleMediaEngineComplete(): void {\n // Update self synchronously\n this.requestUpdate(\"intrinsicDurationMs\");\n this.requestUpdate(\"ownCurrentTimeMs\");\n\n // Defer updates to parent/root timegroup\n if (this.rootTimegroup) {\n queueMicrotask(() => {\n this.rootTimegroup?.requestUpdate(\"ownCurrentTimeMs\");\n this.rootTimegroup?.requestUpdate(\"durationMs\");\n });\n }\n }\n\n // ============================================================================\n // Audio Analysis - replaced tasks with async methods + cached wrappers\n // ============================================================================\n\n #frequencyDataCache = new LRUCache<string, Uint8Array>(100);\n #timeDomainDataCache = new LRUCache<string, Uint8Array>(100);\n\n /**\n * Async wrapper for frequency data - mimics Task interface for EFWaveform compatibility\n */\n frequencyDataTask = new AsyncValue<Uint8Array | null>();\n\n /**\n * Async wrapper for time domain data - mimics Task interface for EFWaveform compatibility\n */\n byteTimeDomainTask = new AsyncValue<Uint8Array | null>();\n\n /**\n * Get frequency data for audio visualization at a given time.\n */\n async getFrequencyData(timeMs: number, signal?: AbortSignal): Promise<Uint8Array | null> {\n if (timeMs < 0) return null;\n\n const cacheKey = `${this.getShouldInterpolateFrequencies()}:${this.fftSize}:${this.fftDecay}:${this.fftGain}:${timeMs}`;\n const cached = this.#frequencyDataCache.get(cacheKey);\n if (cached) return cached;\n\n try {\n const result = await this.#analyzeFrequencies(timeMs, signal);\n if (result) {\n this.#frequencyDataCache.set(cacheKey, result);\n this.frequencyDataTask.setValue(result);\n }\n return result;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n return null;\n }\n }\n\n /**\n * Get time domain data for audio visualization at a given time.\n */\n async getTimeDomainData(timeMs: number, signal?: AbortSignal): Promise<Uint8Array | null> {\n if (timeMs < 0) return null;\n\n const cacheKey = `${this.fftSize}:${timeMs}`;\n const cached = this.#timeDomainDataCache.get(cacheKey);\n if (cached) return cached;\n\n try {\n const result = await this.#analyzeTimeDomain(timeMs, signal);\n if (result) {\n this.#timeDomainDataCache.set(cacheKey, result);\n this.byteTimeDomainTask.setValue(result);\n }\n return result;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n return null;\n }\n }\n\n async #analyzeFrequencies(\n currentTimeMs: number,\n signal?: AbortSignal,\n ): Promise<Uint8Array | null> {\n const mediaEngine = await this.getMediaEngine(signal);\n signal?.throwIfAborted();\n\n if (!mediaEngine?.tracks.audio) {\n return null;\n }\n\n // Calculate exact audio window needed based on fftDecay and frame timing\n const frameIntervalMs = 1000 / 30;\n const earliestFrameMs = currentTimeMs - (this.fftDecay - 1) * frameIntervalMs;\n const fromMs = Math.max(0, earliestFrameMs);\n const maxToMs = currentTimeMs + frameIntervalMs;\n const videoDurationMs = this.intrinsicDurationMs || 0;\n const toMs = videoDurationMs > 0 ? Math.min(maxToMs, videoDurationMs) : maxToMs;\n\n if (fromMs >= toMs) {\n return null;\n }\n\n const { fetchAudioSpanningTime: fetchAudioSpan } =\n await import(\"./EFMedia/shared/AudioSpanUtils.js\");\n\n let audioSpan;\n try {\n audioSpan = await fetchAudioSpan(this, fromMs, toMs, signal!);\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n return null;\n }\n\n if (!audioSpan?.blob || audioSpan.blob.size < 100) {\n return null;\n }\n\n // Decode the real audio data\n const tempAudioContext = new OfflineAudioContext(2, 48000, 48000);\n const arrayBuffer = await audioSpan.blob.arrayBuffer();\n signal?.throwIfAborted();\n\n let audioBuffer;\n try {\n audioBuffer = await tempAudioContext.decodeAudioData(arrayBuffer);\n signal?.throwIfAborted();\n } catch {\n return null;\n }\n\n const startOffsetMs = audioSpan.startMs;\n\n const framesData = await Promise.all(\n Array.from({ length: this.fftDecay }, async (_, i) => {\n const frameOffset = i * (1000 / 30);\n const startTime = Math.max(0, (currentTimeMs - frameOffset - startOffsetMs) / 1000);\n\n const SIZE = 48000 / 30;\n const audioContext = new OfflineAudioContext(2, SIZE, 48000);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = this.fftSize;\n analyser.minDecibels = -90;\n analyser.maxDecibels = -10;\n\n const gainNode = audioContext.createGain();\n gainNode.gain.value = this.fftGain;\n\n const filter = audioContext.createBiquadFilter();\n filter.type = \"bandpass\";\n filter.frequency.value = 15000;\n filter.Q.value = 0.05;\n\n const audioBufferSource = audioContext.createBufferSource();\n audioBufferSource.buffer = audioBuffer;\n\n audioBufferSource.connect(filter);\n filter.connect(gainNode);\n gainNode.connect(analyser);\n analyser.connect(audioContext.destination);\n\n audioBufferSource.start(0, startTime, 1 / 30);\n\n try {\n await audioContext.startRendering();\n signal?.throwIfAborted();\n\n const frameData = new Uint8Array(this.fftSize / 2);\n analyser.getByteFrequencyData(frameData);\n return frameData;\n } finally {\n audioBufferSource.disconnect();\n analyser.disconnect();\n }\n }),\n );\n\n const frameLength = framesData[0]?.length ?? 0;\n\n // Combine frames with decay\n const smoothedData = new Uint8Array(frameLength);\n for (let i = 0; i < frameLength; i++) {\n let weightedSum = 0;\n let weightSum = 0;\n\n framesData.forEach((frame: Uint8Array, frameIndex: number) => {\n const decayWeight = DECAY_WEIGHT ** frameIndex;\n weightedSum += (frame[i] ?? 0) * decayWeight;\n weightSum += decayWeight;\n });\n\n smoothedData[i] = Math.min(255, Math.round(weightedSum / weightSum));\n }\n\n // Apply frequency weights\n smoothedData.forEach((value, i) => {\n const freqWeight = this.getFreqWeights()[i] ?? 0;\n smoothedData[i] = Math.min(255, Math.round(value * freqWeight));\n });\n\n // Only return the lower half of the frequency data\n const slicedData = smoothedData.slice(0, Math.floor(smoothedData.length / 2));\n return this.getShouldInterpolateFrequencies() ? processFFTData(slicedData) : slicedData;\n }\n\n async #analyzeTimeDomain(\n currentTimeMs: number,\n signal?: AbortSignal,\n ): Promise<Uint8Array | null> {\n const mediaEngine = await this.getMediaEngine(signal);\n signal?.throwIfAborted();\n\n if (!mediaEngine?.tracks.audio) {\n return null;\n }\n\n const frameIntervalMs = 1000 / 30;\n const earliestFrameMs = currentTimeMs - (this.fftDecay - 1) * frameIntervalMs;\n const fromMs = Math.max(0, earliestFrameMs);\n const maxToMs = currentTimeMs + frameIntervalMs;\n const videoDurationMs = this.intrinsicDurationMs || 0;\n const toMs = videoDurationMs > 0 ? Math.min(maxToMs, videoDurationMs) : maxToMs;\n\n if (fromMs >= toMs) {\n return null;\n }\n\n const { fetchAudioSpanningTime: fetchAudioSpan } =\n await import(\"./EFMedia/shared/AudioSpanUtils.js\");\n\n let audioSpan;\n try {\n audioSpan = await fetchAudioSpan(this, fromMs, toMs, signal!);\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw error;\n }\n return null;\n }\n\n if (!audioSpan?.blob || audioSpan.blob.size < 100) {\n return null;\n }\n\n const tempAudioContext = new OfflineAudioContext(2, 48000, 48000);\n const arrayBuffer = await audioSpan.blob.arrayBuffer();\n signal?.throwIfAborted();\n\n let audioBuffer;\n try {\n audioBuffer = await tempAudioContext.decodeAudioData(arrayBuffer);\n signal?.throwIfAborted();\n } catch {\n return null;\n }\n\n const startOffsetMs = audioSpan.startMs;\n\n const framesData = await Promise.all(\n Array.from({ length: this.fftDecay }, async (_, i) => {\n const frameOffset = i * (1000 / 30);\n const startTime = Math.max(0, (currentTimeMs - frameOffset - startOffsetMs) / 1000);\n\n const SIZE = 48000 / 30;\n const audioContext = new OfflineAudioContext(2, SIZE, 48000);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = this.fftSize;\n analyser.minDecibels = -90;\n analyser.maxDecibels = -10;\n\n const gainNode = audioContext.createGain();\n gainNode.gain.value = this.fftGain;\n\n const filter = audioContext.createBiquadFilter();\n filter.type = \"bandpass\";\n filter.frequency.value = 15000;\n filter.Q.value = 0.05;\n\n const audioBufferSource = audioContext.createBufferSource();\n audioBufferSource.buffer = audioBuffer;\n\n audioBufferSource.connect(filter);\n filter.connect(gainNode);\n gainNode.connect(analyser);\n analyser.connect(audioContext.destination);\n\n audioBufferSource.start(0, startTime, 1 / 30);\n\n try {\n await audioContext.startRendering();\n signal?.throwIfAborted();\n\n const frameData = new Uint8Array(this.fftSize);\n analyser.getByteTimeDomainData(frameData);\n return frameData;\n } finally {\n audioBufferSource.disconnect();\n analyser.disconnect();\n }\n }),\n );\n\n const frameLength = framesData[0]?.length ?? 0;\n\n // Use RMS calculation to preserve waveform shape\n const smoothedData = new Uint8Array(frameLength);\n for (let i = 0; i < frameLength; i++) {\n let sumSquares = 0;\n framesData.forEach((frame: Uint8Array) => {\n const value = (frame[i] ?? 128) - 128;\n sumSquares += value * value;\n });\n const rms = Math.sqrt(sumSquares / framesData.length);\n smoothedData[i] = Math.min(255, Math.max(0, Math.round(rms + 128)));\n }\n\n return smoothedData;\n }\n\n // ============================================================================\n // Removed task properties - these are kept as stubs for backwards compatibility\n // ============================================================================\n\n // These tasks are no longer used but kept for API compatibility\n audioSegmentIdTask = new AsyncValue<number | undefined>();\n audioInitSegmentFetchTask = new AsyncValue<ArrayBuffer | undefined>();\n audioSegmentFetchTask = new AsyncValue<ArrayBuffer | undefined>();\n audioInputTask = new AsyncValue<any>();\n audioSeekTask = new AsyncValue<any>();\n audioBufferTask = new AsyncValue<any>();\n\n /**\n * The unique identifier for the media file.\n * This property can be set programmatically or via the \"file-id\" attribute.\n * The \"asset-id\" attribute is also supported for backward compatibility.\n * @domAttribute \"file-id\"\n */\n @property({ type: String, attribute: \"file-id\", reflect: true })\n fileId: string | null = null;\n\n /** @deprecated Use fileId instead */\n get assetId(): string | null {\n return this.fileId;\n }\n set assetId(value: string | null) {\n this.fileId = value;\n }\n\n get intrinsicDurationMs(): number | undefined {\n return this.#mediaEngine?.durationMs;\n }\n\n protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n super.updated(changedProperties);\n\n // Trigger media engine load when src or fileId changes\n if (changedProperties.has(\"src\") || changedProperties.has(\"fileId\")) {\n this.getMediaEngine().catch(() => {});\n // Source identity changed — cached renderable output is stale\n if (\n changedProperties.get(\"src\") !== undefined ||\n changedProperties.get(\"fileId\") !== undefined\n ) {\n this.emitContentChange(\"source\");\n }\n }\n\n // Check if our timeline position has actually changed, even if ownCurrentTimeMs isn't tracked as a property\n const newCurrentSourceTimeMs = this.currentSourceTimeMs;\n if (newCurrentSourceTimeMs !== this.desiredSeekTimeMs) {\n this.executeSeek(newCurrentSourceTimeMs);\n }\n\n if (changedProperties.has(\"ownCurrentTimeMs\")) {\n this.executeSeek(this.currentSourceTimeMs);\n }\n\n // Check if trim/source properties changed that affect duration\n const durationAffectingProps = [\"_trimStartMs\", \"_trimEndMs\", \"_sourceInMs\", \"_sourceOutMs\"];\n\n const hasDurationChange = durationAffectingProps.some((prop) => changedProperties.has(prop));\n\n if (hasDurationChange) {\n this.emitContentChange(\"bounds\");\n if (this.parentTimegroup) {\n this.parentTimegroup.requestUpdate(\"durationMs\");\n this.parentTimegroup.requestUpdate(\"currentTime\");\n\n // Also find and directly notify any context provider (ContextMixin)\n let parent = this.parentNode;\n while (parent) {\n if (isContextMixin(parent)) {\n parent.dispatchEvent(\n new CustomEvent(\"child-duration-changed\", {\n detail: { source: this },\n }),\n );\n break;\n }\n parent = parent.parentNode;\n }\n }\n }\n }\n\n get hasOwnDuration(): boolean {\n return true;\n }\n\n @state()\n private _desiredSeekTimeMs = 0; // Initialize to 0 for proper segment loading\n\n get desiredSeekTimeMs(): number {\n return this._desiredSeekTimeMs;\n }\n\n set desiredSeekTimeMs(value: number) {\n if (this._desiredSeekTimeMs !== value) {\n this._desiredSeekTimeMs = value;\n }\n }\n\n protected async executeSeek(seekToMs: number) {\n // The seekToMs parameter should be the timeline-relative media time\n // calculated from currentSourceTimeMs which includes timeline positioning\n this._desiredSeekTimeMs = seekToMs;\n }\n\n /**\n * Main integration method for EFTimegroup audio playback\n * Now powered by clean, testable utility functions\n * Returns undefined if no audio rendition is available\n */\n async fetchAudioSpanningTime(\n fromMs: number,\n toMs: number,\n signal?: AbortSignal,\n ): Promise<AudioSpan | undefined> {\n return withSpan(\n \"media.fetchAudioSpanningTime\",\n {\n elementId: this.id || \"unknown\",\n tagName: this.tagName.toLowerCase(),\n fromMs,\n toMs,\n durationMs: toMs - fromMs,\n src: this.src || \"none\",\n },\n undefined,\n async () => {\n // Create a default signal if not provided (public API convenience)\n const effectiveSignal = signal ?? new AbortController().signal;\n const { fetchAudioSpanningTime } = await import(\"./EFMedia/shared/AudioSpanUtils.js\");\n return fetchAudioSpanningTime(this, fromMs, toMs, effectiveSignal);\n },\n );\n }\n\n /**\n * Wait for media engine to load and determine duration\n * Ensures media is ready for playback\n */\n async waitForMediaDurations(signal?: AbortSignal): Promise<void> {\n if (this.#mediaEngine) {\n return;\n }\n\n try {\n await this.getMediaEngine(signal);\n } catch (error) {\n // Don't throw AbortError - these are intentional cancellations when element is disconnected\n const isAbortError =\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (error instanceof Error &&\n (error.name === \"AbortError\" ||\n error.message.includes(\"signal is aborted\") ||\n error.message.includes(\"The user aborted a request\")));\n\n // If explicitly aborted via signal, throw to propagate cancellation\n if (signal?.aborted) {\n throw error;\n }\n\n // For task abort (element disconnected), silently return\n if (isAbortError) {\n return;\n }\n\n // Re-throw other errors\n throw error;\n }\n }\n\n /**\n * Returns media elements for playback audio rendering\n * For standalone media, returns [this]; for timegroups, returns all descendants\n * Used by PlaybackController for audio-driven playback\n */\n getMediaElements(): EFMedia[] {\n return [this];\n }\n\n /**\n * Render audio buffer for playback\n * Called by PlaybackController during live playback\n * Delegates to shared renderTemporalAudio utility for consistent behavior\n */\n async renderAudio(fromMs: number, toMs: number): Promise<AudioBuffer> {\n return renderTemporalAudio(this, fromMs, toMs);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EFMedia.js","names":["#value","#error","#status","#promise","#resolvePromise","#mediaEngineSrcKey","#mediaEngine","#mediaEnginePromise","#loadMediaEngine","#createMediaEngine","#mediaEngineError","#handleMediaEngineComplete","#frequencyDataCache","#analyzeFrequencies","#timeDomainDataCache","#analyzeTimeDomain"],"sources":["../../src/elements/EFMedia.ts"],"mappings":"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"}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import { getTrackedAnimationsForSubtree } from "./updateAnimations.js";
|
|
2
|
-
|
|
3
|
-
//#region src/elements/EFMotionBlur.ts
|
|
4
|
-
/** Multiplier on rotAmount → rotScale for centered displacement range. */
|
|
5
|
-
const ROT_SCALE_FACTOR = 2;
|
|
6
|
-
/** Multiplier on isotropicAmount → zoomScale. >2 amplifies zoom visibility;
|
|
7
|
-
* higher values tilt the spiral angle toward radial. */
|
|
8
|
-
const ZOOM_SCALE_FACTOR = 3;
|
|
9
2
|
/** Maximum arc displacement in pixels (caps rotAmount). */
|
|
10
3
|
const MAX_ROT_AMOUNT_PX = 50;
|
|
11
4
|
/** Maximum zoom displacement in pixels (caps isotropicAmount). */
|
|
@@ -83,8 +76,8 @@ function readTransformMatrix(child, anims) {
|
|
|
83
76
|
if (!(effect instanceof KeyframeEffect)) continue;
|
|
84
77
|
const progress = effect.getComputedTiming().progress;
|
|
85
78
|
if (progress === null || progress === void 0) continue;
|
|
86
|
-
const result
|
|
87
|
-
if (result
|
|
79
|
+
const result = interpolateTransformKeyframes(effect.getKeyframes(), progress);
|
|
80
|
+
if (result !== null) return result;
|
|
88
81
|
}
|
|
89
82
|
let committed = false;
|
|
90
83
|
for (const anim of anims) try {
|
|
@@ -153,9 +146,9 @@ function solveCubicBezier(x1, y1, x2, y2, t) {
|
|
|
153
146
|
if (t >= 1) return 1;
|
|
154
147
|
let u = t;
|
|
155
148
|
for (let i = 0; i < 8; i++) {
|
|
156
|
-
const u2
|
|
157
|
-
const xu = 3 * (1 - u) * (1 - u) * u * x1 + 3 * (1 - u) * u2
|
|
158
|
-
const dxu = 3 * (1 - u) * (1 - u) * x1 + 6 * (1 - u) * u * (x2 - x1) + 3 * u2
|
|
149
|
+
const u2 = u * u, u3 = u2 * u;
|
|
150
|
+
const xu = 3 * (1 - u) * (1 - u) * u * x1 + 3 * (1 - u) * u2 * x2 + u3;
|
|
151
|
+
const dxu = 3 * (1 - u) * (1 - u) * x1 + 6 * (1 - u) * u * (x2 - x1) + 3 * u2 * (1 - x2);
|
|
159
152
|
if (Math.abs(dxu) < 1e-9) break;
|
|
160
153
|
u -= (xu - t) / dxu;
|
|
161
154
|
u = Math.max(0, Math.min(1, u));
|
|
@@ -586,8 +579,8 @@ var EFMotionBlur = class extends _EFMotionBlurBase {
|
|
|
586
579
|
if (this._outer) this._outer._cachedFilterSVG = void 0;
|
|
587
580
|
return;
|
|
588
581
|
}
|
|
589
|
-
const rotScale = rotAmount *
|
|
590
|
-
const zoomScale = isotropicAmount *
|
|
582
|
+
const rotScale = rotAmount * 2;
|
|
583
|
+
const zoomScale = isotropicAmount * 3;
|
|
591
584
|
const combinedScale = Math.sqrt(rotScale ** 2 + zoomScale ** 2);
|
|
592
585
|
const spiralAngle = Math.atan2(rotScale, zoomScale);
|
|
593
586
|
const anySpiralBlur = combinedScale > this.threshold;
|
|
@@ -803,7 +796,7 @@ var EFMotionBlur = class extends _EFMotionBlurBase {
|
|
|
803
796
|
}
|
|
804
797
|
};
|
|
805
798
|
if (typeof customElements !== "undefined") customElements.define("ef-motionblur", EFMotionBlur);
|
|
806
|
-
|
|
807
799
|
//#endregion
|
|
808
800
|
export { EFMotionBlur };
|
|
801
|
+
|
|
809
802
|
//# sourceMappingURL=EFMotionBlur.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFMotionBlur.js","names":["result","u2","u3","EASING_KEYWORDS: Record<string, [number, number, number, number]>","seekable: Animation[]","currentTimes: number[]"],"sources":["../../src/elements/EFMotionBlur.ts"],"sourcesContent":["import { getTrackedAnimationsForSubtree } from \"./updateAnimations.js\";\n\n// ── Tuning constants ─────────────────────────────────────────────────────────\n// All magic numbers that control blur quality live here. Changing any value\n// is immediately visible as a single-location diff and can be reviewed\n// against the others.\n\n/** Multiplier on rotAmount → rotScale for centered displacement range. */\nexport const ROT_SCALE_FACTOR = 2;\n/** Multiplier on isotropicAmount → zoomScale. >2 amplifies zoom visibility;\n * higher values tilt the spiral angle toward radial. */\nexport const ZOOM_SCALE_FACTOR = 3;\n/** Maximum arc displacement in pixels (caps rotAmount). */\nconst MAX_ROT_AMOUNT_PX = 50;\n/** Maximum zoom displacement in pixels (caps isotropicAmount). */\nconst MAX_ZOOM_AMOUNT_PX = 50;\n/** Maximum translation displacement in pixels. */\nconst MAX_TRANS_AMOUNT_PX = 100;\n/** Gaussian sigma for temporal weights: sigma = max(n / SIGMA_DIVISOR, 2). */\nconst GAUSSIAN_SIGMA_DIVISOR = 5.5;\n/** Spiral output blur: coefficient on step spacing. Must stay small to\n * preserve zero-displacement center sharpness. */\nexport const SPIRAL_BLUR_COEFF = 0.15;\n/** Spiral output blur: hard cap in pixels. */\nexport const SPIRAL_BLUR_CAP = 0.8;\n/** Spiral output blur: floor in pixels. */\nconst SPIRAL_BLUR_FLOOR = 0.3;\n/** Translation output blur: coefficient on step spacing. Can be larger than\n * spiral because all pixels shift equally (no center-vs-edge gradient). */\nconst TRANS_BLUR_COEFF = 0.35;\n/** Translation output blur: hard cap in pixels. */\nconst TRANS_BLUR_CAP = 1.5;\n/** Translation output blur: floor in pixels. */\nconst TRANS_BLUR_FLOOR = 0.3;\n/** Spiral angle quantization: angles rounded to π/(12*2) ≈ 7.5° steps. */\nconst SPIRAL_ANGLE_QUANT = 12;\n\n/**\n * Extracts the 2D rotation angle (degrees) and uniform scale from a CSS\n * transform string. Handles `matrix(a,b,c,d,tx,ty)`, `rotate(Ndeg)`,\n * `scale(N)`, and `none`.\n */\nfunction parseMatrix(transform: string): { angle: number; scale: number } {\n if (!transform || transform === \"none\") return { angle: 0, scale: 1 };\n\n // matrix(a, b, c, d, tx, ty)\n const mm = transform.match(/^matrix\\(([^)]+)\\)/);\n if (mm) {\n const [a, b] = mm[1]!.split(\",\").map(Number) as [number, number, ...number[]];\n const scale = Math.sqrt(a! * a! + b! * b!);\n const angle = (Math.atan2(b!, a!) * 180) / Math.PI;\n return { angle, scale: scale || 1 };\n }\n\n // rotate(Ndeg) or rotate(Nrad)\n const rm = transform.match(/rotate\\(([^)]+)\\)/);\n if (rm) {\n const v = rm[1]!.trim();\n const angle = v.endsWith(\"rad\") ? (parseFloat(v) * 180) / Math.PI : parseFloat(v); // deg\n return { angle, scale: 1 };\n }\n\n // scale(N) or scale(N, N)\n const sm = transform.match(/^scale\\(([^)]+)\\)/);\n if (sm) {\n const parts = sm[1]!.split(\",\").map(Number);\n return { angle: 0, scale: parts[0] ?? 1 };\n }\n\n return { angle: 0, scale: 1 };\n}\n\n/**\n * Reads the rotation angle and scale from an element's current animation state.\n *\n * Prefers direct keyframe interpolation via `getComputedTiming().progress` +\n * `getKeyframes()` — this is synchronous and not subject to Chromium's deferred\n * WAAPI style application (where `getComputedStyle` may lag behind `currentTime`).\n *\n * Falls back to `commitStyles()` + `getComputedStyle` for animations whose keyframes\n * use complex transform lists that our simple interpolation can't handle.\n */\nfunction readTransformMatrix(\n child: HTMLElement,\n anims: Animation[],\n): { angle: number; scale: number } {\n // Preferred path: analytical interpolation from keyframes.\n // Works reliably for cancelled CSS animations whose getComputedStyle output\n // is deferred by Chromium until the next compositor frame.\n for (const anim of anims) {\n const effect = anim.effect;\n if (!(effect instanceof KeyframeEffect)) continue;\n const timing = effect.getComputedTiming();\n const progress = timing.progress;\n if (progress === null || progress === undefined) continue;\n const keyframes = effect.getKeyframes();\n const result = interpolateTransformKeyframes(keyframes, progress as number);\n if (result !== null) return result;\n }\n\n // Fallback: commitStyles() + getComputedStyle.\n let committed = false;\n for (const anim of anims) {\n try {\n (anim as any).commitStyles?.();\n committed = true;\n } catch (_) {\n /* fill:none or not replaceable */\n }\n }\n void child.getBoundingClientRect();\n const result = parseMatrix(getComputedStyle(child).transform);\n if (committed) child.style.removeProperty(\"transform\");\n return result;\n}\n\n/**\n * Decomposes a CSS transform string into cumulative rotation (degrees) and\n * uniform scale. Handles compound transforms like `scale(0.3) rotate(90deg)`,\n * pure rotations, pure scales, and matrix() values.\n *\n * Multiple rotate() functions are summed (so the orbit pattern\n * `rotate(360deg) translateX(90px) rotate(-360deg)` correctly yields 0°).\n *\n * Returns null only when no rotation or scale function is found and the\n * string is not a matrix.\n */\nfunction decomposeKeyframeTransform(transform: string): { angle: number; scale: number } | null {\n if (!transform || transform === \"none\") return { angle: 0, scale: 1 };\n\n const mm = transform.match(/^matrix\\(([^)]+)\\)/);\n if (mm) {\n const [a, b] = mm[1]!.split(\",\").map(Number) as [number, number, ...number[]];\n const scale = Math.sqrt(a! * a! + b! * b!);\n const angle = (Math.atan2(b!, a!) * 180) / Math.PI;\n return { angle, scale: scale || 1 };\n }\n\n let totalAngle = 0;\n let totalScale = 1;\n let found = false;\n\n for (const m of transform.matchAll(/rotate\\(([^)]+)\\)/g)) {\n const v = m[1]!.trim();\n totalAngle += v.endsWith(\"rad\") ? (parseFloat(v) * 180) / Math.PI : parseFloat(v);\n found = true;\n }\n\n const sm = transform.match(/scale\\(([^),]+)(?:,\\s*([^)]+))?\\)/);\n if (sm) {\n const sx = parseFloat(sm[1]!);\n const sy = sm[2] !== undefined ? parseFloat(sm[2]!) : sx;\n if (Math.abs(sx - sy) < 0.001) {\n totalScale = sx;\n found = true;\n }\n }\n\n return found ? { angle: totalAngle, scale: totalScale } : null;\n}\n\n/**\n * Solves a cubic-bezier curve: given control points (x1,y1,x2,y2) and input\n * parameter `t` (0–1), returns the output value y. Uses Newton-Raphson\n * iteration to invert the x(u) polynomial.\n */\nfunction solveCubicBezier(x1: number, y1: number, x2: number, y2: number, t: number): number {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n let u = t;\n for (let i = 0; i < 8; i++) {\n const u2 = u * u,\n u3 = u2 * u;\n const xu = 3 * (1 - u) * (1 - u) * u * x1 + 3 * (1 - u) * u2 * x2 + u3;\n const dxu = 3 * (1 - u) * (1 - u) * x1 + 6 * (1 - u) * u * (x2 - x1) + 3 * u2 * (1 - x2);\n if (Math.abs(dxu) < 1e-9) break;\n u -= (xu - t) / dxu;\n u = Math.max(0, Math.min(1, u));\n }\n const u2 = u * u,\n u3 = u2 * u;\n return 3 * (1 - u) * (1 - u) * u * y1 + 3 * (1 - u) * u2 * y2 + u3;\n}\n\nconst EASING_KEYWORDS: Record<string, [number, number, number, number]> = {\n ease: [0.25, 0.1, 0.25, 1.0],\n \"ease-in\": [0.42, 0, 1.0, 1.0],\n \"ease-out\": [0, 0, 0.58, 1.0],\n \"ease-in-out\": [0.42, 0, 0.58, 1.0],\n};\n\n/**\n * Applies a CSS easing function to a linear parameter t (0–1).\n * Handles keyword easings and `cubic-bezier(x1,y1,x2,y2)`.\n */\nfunction applyEasing(easing: string | undefined | null, t: number): number {\n if (!easing || easing === \"linear\") return t;\n const kw = EASING_KEYWORDS[easing];\n if (kw) return solveCubicBezier(kw[0], kw[1], kw[2], kw[3], t);\n const cbm = easing.match(/cubic-bezier\\(\\s*([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*([^)]+)\\)/);\n if (cbm)\n return solveCubicBezier(\n parseFloat(cbm[1]!),\n parseFloat(cbm[2]!),\n parseFloat(cbm[3]!),\n parseFloat(cbm[4]!),\n t,\n );\n return t;\n}\n\n/**\n * Interpolates angle (degrees) and scale from a WAAPI keyframe list at the\n * given progress (0–1).\n *\n * Uses the original CSS value strings from the keyframes (not computed matrices)\n * so `rotate(0deg) → rotate(360deg)` interpolates correctly as 0→360°.\n *\n * Handles compound transforms (e.g. `scale(0.3) rotate(90deg)`) by decomposing\n * each keyframe individually, and applies per-keyframe easing so that blur\n * intensity tracks the actual eased velocity rather than the linear one.\n */\nfunction interpolateTransformKeyframes(\n keyframes: ComputedKeyframe[],\n progress: number,\n): { angle: number; scale: number } | null {\n const withTransform = keyframes.filter((k) => k.transform != null);\n if (withTransform.length < 2) return null;\n\n let lo = withTransform[0]!;\n let hi = withTransform[withTransform.length - 1]!;\n for (let i = 0; i < withTransform.length - 1; i++) {\n const a = withTransform[i]!;\n const b = withTransform[i + 1]!;\n const aOff = typeof a.offset === \"number\" ? a.offset : i / (withTransform.length - 1);\n const bOff = typeof b.offset === \"number\" ? b.offset : (i + 1) / (withTransform.length - 1);\n if (progress >= aOff && progress <= bOff) {\n lo = a;\n hi = b;\n break;\n }\n }\n\n const loOff = typeof lo.offset === \"number\" ? lo.offset : 0;\n const hiOff = typeof hi.offset === \"number\" ? hi.offset : 1;\n const linearT = hiOff === loOff ? 0 : (progress - loOff) / (hiOff - loOff);\n const t = applyEasing(lo.easing as string | undefined, linearT);\n\n const loD = decomposeKeyframeTransform(String(lo.transform ?? \"none\"));\n const hiD = decomposeKeyframeTransform(String(hi.transform ?? \"none\"));\n if (!loD || !hiD) return null;\n if (loD.angle === 0 && hiD.angle === 0 && loD.scale === 1 && hiD.scale === 1) return null;\n\n return {\n angle: loD.angle + (hiD.angle - loD.angle) * t,\n scale: loD.scale + (hiD.scale - loD.scale) * t,\n };\n}\n\n/**\n * Gaussian temporal weights for N blur steps.\n * Soft window (vs equal weights) eliminates the \"stack of discrete frames\" look.\n */\nfunction gaussianWeights(n: number): number[] {\n if (n <= 1) return [1];\n const mid = (n - 1) / 2;\n const sigma = Math.max(n / GAUSSIAN_SIGMA_DIVISOR, 2);\n return Array.from({ length: n }, (_, i) => Math.exp(-0.5 * ((i - mid) / sigma) ** 2));\n}\n\n/**\n * Maximum distance from a point to any corner of a rectangle.\n */\nfunction maxDistToCorner(cx: number, cy: number, w: number, h: number): number {\n let m = 0;\n for (const px of [0, w])\n for (const py of [0, h]) {\n const d = Math.hypot(px - cx, py - cy);\n if (d > m) m = d;\n }\n return m || 1;\n}\n\n/**\n * Generates a canvas displacement map encoding a **spiral** vector field.\n *\n * Each pixel encodes a 2D displacement direction as (R, G) where:\n * R = 128 + vx*127 G = 128 + vy*127\n *\n * The vector at each pixel is:\n * v = sin(spiralAngle) × tangent + cos(spiralAngle) × radial\n *\n * Because tangent ⊥ radial and both have magnitude r/maxR, the combined\n * vector also has magnitude r/maxR regardless of spiralAngle. This means\n * one map + one set of N displaced copies correctly captures simultaneous\n * rotation and zoom as a single spiral smear — no sequential stages needed.\n *\n * spiralAngle = atan2(rotScale, zoomScale):\n * π/2 → pure tangential (rotation only)\n * 0 → pure radial (zoom only)\n * between → spiral\n */\nfunction buildSpiralMap(\n pw: number,\n ph: number,\n ox: number,\n oy: number,\n iw: number,\n ih: number,\n cx: number,\n cy: number,\n spiralAngle: number,\n): string {\n const canvas = new OffscreenCanvas(pw, ph);\n const ctx = canvas.getContext(\"2d\")!;\n const img = ctx.createImageData(pw, ph);\n const maxR = maxDistToCorner(cx, cy, iw, ih);\n const sinA = Math.sin(spiralAngle);\n const cosA = Math.cos(spiralAngle);\n\n for (let py = 0; py < ph; py++) {\n for (let px = 0; px < pw; px++) {\n const ux = px - ox;\n const uy = py - oy;\n const i = (py * pw + px) * 4;\n const dx = ux - cx;\n const dy = uy - cy;\n const vx = sinA * (-dy / maxR) + cosA * (dx / maxR);\n const vy = sinA * (dx / maxR) + cosA * (dy / maxR);\n img.data[i] = Math.round(128 + vx * 127);\n img.data[i + 1] = Math.round(128 + vy * 127);\n img.data[i + 2] = 128;\n img.data[i + 3] = 255;\n }\n }\n ctx.putImageData(img, 0, 0);\n const c = document.createElement(\"canvas\");\n c.width = pw;\n c.height = ph;\n c.getContext(\"2d\")!.putImageData(img, 0, 0);\n return c.toDataURL();\n}\n\n/**\n * Appends the SVG filter primitives for one temporal displacement blur stage\n * into an existing filter string. Takes `inResult` as input and writes\n * the final blended output to `outResult`.\n *\n * When `centered=true`, steps run from -totalScale/2 → +totalScale/2, placing\n * the un-displaced copy at the center of the range. This is used for rotation\n * blur so the current frame sits in the middle of the smear.\n * When `centered=false` (default), steps run from 0 → totalScale.\n *\n * Produces N copies each displaced by the map at increasing scale,\n * blended with Gaussian temporal weights. A small feGaussianBlur softens slice edges.\n */\nfunction appendTemporalBlurStage(\n xml: string,\n prefix: string,\n inResult: string,\n outResult: string,\n steps: number,\n totalScale: number,\n mapResult: string,\n centered = false,\n): string {\n const weights = gaussianWeights(steps);\n // Minimal smoothing to merge adjacent displaced copies at the element edges.\n // Must be conservative because feGaussianBlur is isotropic — it softens the\n // CENTER (where displacement is zero and the image should stay sharp) just as\n // much as the edges. Gaussian temporal weighting already handles most blending.\n const stepSpacing = steps > 1 ? Math.abs(totalScale) / (steps - 1) / 2 : 0;\n const outBlur = Math.min(\n SPIRAL_BLUR_CAP,\n Math.max(SPIRAL_BLUR_FLOOR, stepSpacing * SPIRAL_BLUR_COEFF),\n );\n\n for (let i = 0; i < steps; i++) {\n const t = steps > 1 ? i / (steps - 1) : 0;\n const scale = centered ? ((t - 0.5) * totalScale).toFixed(4) : (t * totalScale).toFixed(4);\n xml += ` <feDisplacementMap in=\"${inResult}\" in2=\"${mapResult}\"\n scale=\"${scale}\" xChannelSelector=\"R\" yChannelSelector=\"G\"\n result=\"${prefix}s${i}\"/>\\n`;\n }\n\n xml += ` <feComposite in=\"${prefix}s0\" in2=\"${prefix}s0\" operator=\"arithmetic\"\n k1=\"0\" k2=\"1\" k3=\"0\" k4=\"0\" result=\"${prefix}avg0\"/>\\n`;\n let sumW = weights[0]!;\n for (let i = 1; i < steps; i++) {\n const sumWNew = sumW + weights[i]!;\n const k2 = (sumW / sumWNew).toFixed(8);\n const k3 = (weights[i]! / sumWNew).toFixed(8);\n xml += ` <feComposite in=\"${prefix}avg${i - 1}\" in2=\"${prefix}s${i}\" operator=\"arithmetic\"\n k1=\"0\" k2=\"${k2}\" k3=\"${k3}\" k4=\"0\" result=\"${prefix}avg${i}\"/>\\n`;\n sumW = sumWNew;\n }\n\n xml += ` <feGaussianBlur in=\"${prefix}avg${steps - 1}\"\n stdDeviation=\"${outBlur.toFixed(3)}\" result=\"${outResult}\"/>\\n`;\n return xml;\n}\n\n/**\n * Appends SVG filter primitives for a directional translation blur using\n * feOffset. Produces N copies of `inResult` shifted along (vx, vy) from\n * 0 → (totalDx, totalDy), blended with Gaussian temporal weights.\n * No wrapper rotation needed — direction is encoded directly as dx/dy offsets.\n */\nfunction appendTranslationBlurStage(\n xml: string,\n prefix: string,\n inResult: string,\n outResult: string,\n steps: number,\n totalDx: number,\n totalDy: number,\n): string {\n const weights = gaussianWeights(steps);\n const sweep = Math.sqrt(totalDx ** 2 + totalDy ** 2);\n // Translation: all pixels shift equally, so isotropic blur doesn't selectively\n // soften any region. Can tolerate more smoothing than the spiral stage.\n const stepSpacing = steps > 1 ? sweep / (steps - 1) : 0;\n const outBlur = Math.min(\n TRANS_BLUR_CAP,\n Math.max(TRANS_BLUR_FLOOR, stepSpacing * TRANS_BLUR_COEFF),\n );\n\n for (let i = 0; i < steps; i++) {\n const t = steps > 1 ? i / (steps - 1) : 0;\n const dx = (t * totalDx).toFixed(3);\n const dy = (t * totalDy).toFixed(3);\n xml += ` <feOffset in=\"${inResult}\" dx=\"${dx}\" dy=\"${dy}\" result=\"${prefix}s${i}\"/>\\n`;\n }\n\n xml += ` <feComposite in=\"${prefix}s0\" in2=\"${prefix}s0\" operator=\"arithmetic\"\n k1=\"0\" k2=\"1\" k3=\"0\" k4=\"0\" result=\"${prefix}avg0\"/>\\n`;\n let sumW = weights[0]!;\n for (let i = 1; i < steps; i++) {\n const sumWNew = sumW + weights[i]!;\n const k2 = (sumW / sumWNew).toFixed(8);\n const k3 = (weights[i]! / sumWNew).toFixed(8);\n xml += ` <feComposite in=\"${prefix}avg${i - 1}\" in2=\"${prefix}s${i}\" operator=\"arithmetic\"\n k1=\"0\" k2=\"${k2}\" k3=\"${k3}\" k4=\"0\" result=\"${prefix}avg${i}\"/>\\n`;\n sumW = sumWNew;\n }\n\n xml += ` <feGaussianBlur in=\"${prefix}avg${steps - 1}\"\n stdDeviation=\"${outBlur.toFixed(3)}\" result=\"${outResult}\"/>\\n`;\n return xml;\n}\n\n/**\n * Step-count limits for each render quality tier.\n *\n * \"preview\" — real-time playback in the workbench. Caps steps aggressively\n * to keep the SVG filter primitive count under ~30 per element so\n * imgLoad stays under 2ms for combined blur.\n *\n * \"render\" — final MP4 export. Uses the full step budget for smooth,\n * artifact-free motion blur at the cost of heavier SVG rendering.\n */\nconst STEP_LIMITS = {\n preview: { trans: 16, spiral: 16 },\n render: { trans: 31, spiral: 50 },\n} as const;\n\nfunction transSteps(sweepPx: number): number {\n if (sweepPx <= 0) return 2;\n const cap = STEP_LIMITS[EFMotionBlur.renderQuality].trans;\n return Math.max(2, Math.min(cap, Math.ceil(sweepPx) + 1));\n}\n\nfunction spiralSteps(sweepPx: number, rotDeg: number): number {\n const cap = STEP_LIMITS[EFMotionBlur.renderQuality].spiral;\n const fromPx = sweepPx > 0 ? Math.ceil(sweepPx / 1) + 1 : 2;\n const fromAngle = rotDeg > 0 ? Math.ceil(rotDeg / 0.65) + 1 : 2;\n return Math.max(2, Math.min(cap, Math.max(fromPx, fromAngle)));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * `<ef-motionblur>` applies motion blur to its child for two types of motion:\n *\n * **Translation** — N `feOffset` copies along the velocity vector, Gaussian-blended.\n *\n * **Spiral** (rotation + zoom combined) — N displaced copies using a single\n * spiral vector map that encodes the weighted sum of tangential (rotation) and\n * radial (zoom) components. Because tangent ⊥ radial with equal magnitude,\n * the combined map always has magnitude r/maxR regardless of the rot/zoom ratio.\n * One pass correctly captures simultaneous rotation and scaling as a spiral\n * smear rather than the generic blur that sequential stages produce.\n */\nconst _EFMotionBlurBase =\n typeof HTMLElement !== \"undefined\" ? HTMLElement : (class {} as unknown as typeof HTMLElement);\n\nexport class EFMotionBlur extends _EFMotionBlurBase {\n static observedAttributes = [\n \"angle\",\n \"amount\",\n \"shutter-angle\",\n \"fps\",\n \"sensitivity\",\n \"threshold\",\n ];\n\n /** Controls filter primitive density. \"preview\" for real-time playback, \"render\" for export. */\n static renderQuality: \"preview\" | \"render\" = \"preview\";\n\n private _outer: HTMLDivElement | null = null;\n private _filterEl: HTMLDivElement | null = null;\n private _svg: SVGSVGElement | null = null;\n private _filterId: string | null = null;\n\n // Cached spiral map data URI — rebuilt when element size or spiral angle changes\n private _spiralMapURI: string | null = null;\n private _lastMapW = 0;\n private _lastMapH = 0;\n private _lastSpiralAngle = NaN;\n\n // Cached SVG filter DOM nodes for attribute-only updates (avoids innerHTML rebuild)\n private _filterNode: SVGFilterElement | null = null;\n private _transOffsets: SVGFEOffsetElement[] = [];\n private _spiralDisplacements: SVGFEDisplacementMapElement[] = [];\n private _spiralFeImage: SVGFEImageElement | null = null;\n private _spiralBlur: SVGFEGaussianBlurElement | null = null;\n private _lastStepConfig = \"\"; // fingerprint of step counts for structural rebuild\n\n /** Translation blur: pixel displacement in X (screen space). */\n _computedDx: number = 0;\n /** Translation blur: pixel displacement in Y (screen space). */\n _computedDy: number = 0;\n _computedAngle: number = 0;\n _computedDirectionalAmount: number = 0;\n /** Signed rotation arc displacement (px at half-diagonal). Negative = CW, positive = CCW. */\n _computedRotAmount: number = 0;\n /** Absolute rotation delta in degrees (for step count calculation). */\n _computedRotDeg: number = 0;\n _computedIsotropicAmount: number = 0;\n\n _hasExplicitAngle: boolean = false;\n _hasExplicitAmount: boolean = false;\n\n get _computedAmount(): number {\n return this._computedDirectionalAmount;\n }\n set _computedAmount(v: number) {\n this._computedDirectionalAmount = v;\n }\n\n // ── Lifecycle ───────────────────────────────────────────────────────────────\n\n connectedCallback(): void {\n this._filterId = \"ef-mb-\" + Math.random().toString(36).slice(2);\n this._inject();\n this._update();\n }\n\n disconnectedCallback(): void {\n // Don't remove the SVG — it lives inside _outer which stays in our DOM tree.\n // If the element reconnects (e.g. after workbench auto-wrapping), _inject()\n // will re-acquire the reference. Removing it here caused filter:none because\n // _inject's querySelector(\"svg\") would find nothing on reconnect.\n }\n\n attributeChangedCallback(name: string, _old: string | null, newValue: string | null): void {\n if (name === \"angle\") this._hasExplicitAngle = newValue !== null;\n if (name === \"amount\") this._hasExplicitAmount = newValue !== null;\n if (this._outer) this._update();\n }\n\n // ── Public property API ─────────────────────────────────────────────────────\n\n get angle(): number {\n return parseFloat(this.getAttribute(\"angle\") ?? \"0\");\n }\n set angle(v: number) {\n this.setAttribute(\"angle\", String(v));\n }\n get amount(): number {\n return parseFloat(this.getAttribute(\"amount\") ?? \"0\");\n }\n set amount(v: number) {\n this.setAttribute(\"amount\", String(v));\n }\n get shutterAngle(): number {\n return parseFloat(this.getAttribute(\"shutter-angle\") ?? \"180\");\n }\n set shutterAngle(v: number) {\n this.setAttribute(\"shutter-angle\", String(v));\n }\n get fps(): number {\n return parseFloat(this.getAttribute(\"fps\") ?? \"30\");\n }\n set fps(v: number) {\n this.setAttribute(\"fps\", String(v));\n }\n get sensitivity(): number {\n return parseFloat(this.getAttribute(\"sensitivity\") ?? \"1\");\n }\n set sensitivity(v: number) {\n this.setAttribute(\"sensitivity\", String(v));\n }\n get threshold(): number {\n return parseFloat(this.getAttribute(\"threshold\") ?? \"0.5\");\n }\n set threshold(v: number) {\n this.setAttribute(\"threshold\", String(v));\n }\n\n get shutterMs(): number {\n return (this.shutterAngle / 360) * (1000 / this.fps);\n }\n\n // ── Private methods ─────────────────────────────────────────────────────────\n\n /**\n * One-time DOM setup. Creates the SVG filter host and two wrapper divs\n * (_outer for the SVG definition, _filterEl for the filtered content).\n * The SVG filter is rebuilt dynamically in _update().\n */\n private _inject(): void {\n const existingOuter = this.querySelector(\"[data-blur-outer]\") as HTMLDivElement | null;\n if (existingOuter) {\n this._outer = existingOuter;\n this._filterEl = existingOuter.querySelector(\"[data-blur-filter]\") as HTMLDivElement;\n this._svg = existingOuter.querySelector(\"svg\") as SVGSVGElement;\n if (!this._svg) {\n this._svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\") as SVGSVGElement;\n this._svg.style.cssText =\n \"position:absolute;width:0;height:0;overflow:hidden;pointer-events:none\";\n existingOuter.insertBefore(this._svg, this._filterEl);\n }\n this._svg.innerHTML = `<defs><filter id=\"${this._filterId}\"></filter></defs>`;\n this.style.display = \"contents\";\n return;\n }\n\n this._svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\") as SVGSVGElement;\n this._svg.style.cssText =\n \"position:absolute;width:0;height:0;overflow:hidden;pointer-events:none\";\n this._svg.innerHTML = `<defs><filter id=\"${this._filterId}\"></filter></defs>`;\n\n this._outer = document.createElement(\"div\");\n this._outer.dataset.blurOuter = \"\";\n this._outer.dataset.efStaticStyle =\n \"display:block;transform:none;transform-origin:center center\";\n this._outer.style.transformOrigin = \"center center\";\n\n this._filterEl = document.createElement(\"div\");\n this._filterEl.dataset.blurFilter = \"\";\n this._filterEl.style.transformOrigin = \"center center\";\n\n while (this.firstChild) this._filterEl.appendChild(this.firstChild);\n\n this._outer.appendChild(this._svg);\n this._outer.appendChild(this._filterEl);\n this.appendChild(this._outer);\n this.style.display = \"contents\";\n }\n\n /**\n * Rebuilds wrapper transforms and the SVG filter. Called on attribute changes\n * and after each sample().\n *\n * The SVG contains up to two filter stages:\n * 1. feOffset×N — directional (translation) blur\n * 2. Spiral (feImage + feDisplacementMap×N + feComposite blend + feGaussianBlur)\n * — combined rotation + zoom in one pass via a spiral vector map.\n *\n * On first call (or when step counts change), builds the full SVG filter DOM.\n * On subsequent calls, updates only the attributes that change per frame.\n */\n private _update(): void {\n if (!this._outer || !this._filterEl || !this._svg) return;\n\n this._outer.style.transform = \"none\";\n this._outer.style.display = \"block\";\n this._filterEl.style.transform = \"none\";\n this._filterEl.style.display = \"block\";\n\n const dx = this._hasExplicitAmount\n ? this.amount * Math.cos((this.angle * Math.PI) / 180)\n : this._computedDx;\n const dy = this._hasExplicitAmount\n ? this.amount * Math.sin((this.angle * Math.PI) / 180)\n : this._computedDy;\n const directionalMag = Math.sqrt(dx * dx + dy * dy);\n const rotAmount = this._hasExplicitAmount ? 0 : this._computedRotAmount;\n const isotropicAmount = this._hasExplicitAmount ? 0 : this._computedIsotropicAmount;\n\n const anyBlur =\n directionalMag > this.threshold ||\n Math.abs(rotAmount) > this.threshold ||\n isotropicAmount > this.threshold;\n this._filterEl.style.display = \"block\";\n\n if (!anyBlur) {\n this._filterEl.style.filter = \"none\";\n this._filterNode = null;\n this._svg.innerHTML = `<defs><filter id=\"${this._filterId}\"></filter></defs>`;\n if (this._outer) (this._outer as any)._cachedFilterSVG = undefined;\n return;\n }\n\n // Combined spiral: rotation (tangential) and zoom (radial) in one pass.\n // rotScale: physical rotation displacement (signed, ×2 for centered range)\n // zoomScale: mildly amplified zoom (×3 vs physical ×2). Stronger amplification\n // distorts the spiral angle for rotation-dominant animations, making arc\n // smears look radial. ×3 keeps the spiral close to physical while giving\n // zoom-only animations 50% more visible displacement.\n const rotScale = rotAmount * ROT_SCALE_FACTOR;\n const zoomScale = isotropicAmount * ZOOM_SCALE_FACTOR;\n const combinedScale = Math.sqrt(rotScale ** 2 + zoomScale ** 2);\n const spiralAngle = Math.atan2(rotScale, zoomScale);\n const anySpiralBlur = combinedScale > this.threshold;\n\n const child = (this._filterEl.firstElementChild as HTMLElement | null) ?? this._filterEl;\n const childRect = child.getBoundingClientRect();\n const filterElRect = this._filterEl.getBoundingClientRect();\n\n const filterElLogicalW = this._filterEl.offsetWidth || 1;\n const ancestorScale = filterElRect.width / filterElLogicalW || 1;\n\n const iw = (child as HTMLElement).offsetWidth || childRect.width || 100;\n const ih = (child as HTMLElement).offsetHeight || childRect.height || 100;\n\n const bw = childRect.width / ancestorScale;\n const bh = childRect.height / ancestorScale;\n const cx = ((childRect.left + childRect.right) / 2 - filterElRect.left) / ancestorScale;\n const cy = ((childRect.top + childRect.bottom) / 2 - filterElRect.top) / ancestorScale;\n\n const maxBBox = Math.ceil(Math.hypot(iw, ih));\n const mapPad = 64;\n const mapSide = maxBBox + 2 * mapPad;\n const mapContentOx = mapPad + Math.round((maxBBox - iw) / 2);\n const mapContentOy = mapPad + Math.round((maxBBox - ih) / 2);\n this._ensureMaps(mapSide, mapSide, mapContentOx, mapContentOy, iw, ih, spiralAngle);\n\n const halfDiag = Math.ceil(Math.hypot(bw, bh) / 2);\n const margin =\n halfDiag +\n Math.ceil(combinedScale / 2) +\n Math.ceil(Math.abs(dx)) +\n Math.ceil(Math.abs(dy)) +\n 64;\n const filterX = Math.floor(cx - margin);\n const filterY = Math.floor(cy - margin);\n const filterW = Math.ceil(margin * 2);\n const filterH = Math.ceil(margin * 2);\n const mapImgX = Math.round(cx - mapSide / 2);\n const mapImgY = Math.round(cy - mapSide / 2);\n\n const transStepCount = directionalMag > this.threshold ? transSteps(directionalMag) : 0;\n const spiralStepCount = anySpiralBlur ? spiralSteps(combinedScale, this._computedRotDeg) : 0;\n const stepConfig = `${transStepCount},${spiralStepCount}`;\n\n if (stepConfig !== this._lastStepConfig || !this._filterNode) {\n this._lastStepConfig = stepConfig;\n this._buildFilterDOM(transStepCount, spiralStepCount, mapSide);\n }\n\n const f = this._filterNode!;\n f.setAttribute(\"x\", String(filterX));\n f.setAttribute(\"y\", String(filterY));\n f.setAttribute(\"width\", String(filterW));\n f.setAttribute(\"height\", String(filterH));\n\n if (transStepCount > 0) {\n for (let i = 0; i < this._transOffsets.length; i++) {\n const t = this._transOffsets.length > 1 ? i / (this._transOffsets.length - 1) : 0;\n this._transOffsets[i]!.setAttribute(\"dx\", String(t * dx));\n this._transOffsets[i]!.setAttribute(\"dy\", String(t * dy));\n }\n }\n\n if (spiralStepCount > 0 && this._spiralFeImage) {\n this._spiralFeImage.setAttribute(\"x\", String(mapImgX));\n this._spiralFeImage.setAttribute(\"y\", String(mapImgY));\n if (this._spiralMapURI) {\n this._spiralFeImage.setAttribute(\"href\", this._spiralMapURI);\n }\n for (let i = 0; i < this._spiralDisplacements.length; i++) {\n const t =\n this._spiralDisplacements.length > 1 ? i / (this._spiralDisplacements.length - 1) : 0;\n this._spiralDisplacements[i]!.setAttribute(\"scale\", String((t - 0.5) * combinedScale));\n }\n const nSpiral = this._spiralDisplacements.length;\n const spiralSpacing = nSpiral > 1 ? combinedScale / (nSpiral - 1) / 2 : 0;\n this._spiralBlur?.setAttribute(\n \"stdDeviation\",\n String(\n Math.min(SPIRAL_BLUR_CAP, Math.max(SPIRAL_BLUR_FLOOR, spiralSpacing * SPIRAL_BLUR_COEFF)),\n ),\n );\n }\n\n this._filterEl.style.filter = `url(#${this._filterId})`;\n this._refreshSerializationCache();\n }\n\n /**\n * Refreshes the serialization cache on _outer. The serializer reads this\n * instead of calling XMLSerializer on the SVG defs, which is important\n * when rotation/zoom displacement maps embed large base64 data URIs.\n */\n private _refreshSerializationCache(): void {\n if (!this._filterNode || !this._outer) return;\n (this._outer as any)._cachedFilterSVG = new XMLSerializer().serializeToString(this._filterNode);\n }\n\n /**\n * Builds the full SVG filter DOM tree. Called once when step configuration changes.\n * Stores references to mutable elements for fast per-frame attribute updates.\n */\n private _buildFilterDOM(transStepCount: number, spiralStepCount: number, mapSide: number): void {\n const filterId = this._filterId!;\n\n let xml = `<filter id=\"${filterId}\" filterUnits=\"userSpaceOnUse\" primitiveUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\\n`;\n let lastResult = \"SourceGraphic\";\n\n // ① Translation\n if (transStepCount > 0) {\n xml = appendTranslationBlurStage(xml, \"t\", lastResult, \"transblur\", transStepCount, 0, 0);\n lastResult = \"transblur\";\n }\n\n // ② Spiral (combined rotation + zoom)\n if (spiralStepCount > 0 && this._spiralMapURI) {\n xml += ` <feImage href=\"${this._spiralMapURI}\" preserveAspectRatio=\"none\" width=\"${mapSide}\" height=\"${mapSide}\" result=\"spiralmap\"/>\\n`;\n xml = appendTemporalBlurStage(\n xml,\n \"sp\",\n lastResult,\n \"spiralblur\",\n spiralStepCount,\n 0,\n \"spiralmap\",\n true,\n );\n lastResult = \"spiralblur\";\n }\n\n if (lastResult === \"SourceGraphic\") {\n xml += ` <feComposite in=\"SourceGraphic\" in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"0\" k2=\"1\" k3=\"0\" k4=\"0\"/>\\n`;\n }\n xml += `</filter>`;\n this._svg!.innerHTML = `<defs>${xml}</defs>`;\n\n this._filterNode = this._svg!.querySelector(\"filter\") as SVGFilterElement;\n this._transOffsets = Array.from(\n this._svg!.querySelectorAll(\"feOffset\"),\n ) as SVGFEOffsetElement[];\n this._spiralFeImage = this._svg!.querySelector(\n 'feImage[result=\"spiralmap\"]',\n ) as SVGFEImageElement | null;\n this._spiralDisplacements = Array.from(\n this._svg!.querySelectorAll('feDisplacementMap[result^=\"sps\"]'),\n ) as SVGFEDisplacementMapElement[];\n this._spiralBlur = this._svg!.querySelector(\n 'feGaussianBlur[result=\"spiralblur\"]',\n ) as SVGFEGaussianBlurElement | null;\n }\n\n /**\n * Generates or refreshes the spiral displacement map.\n * Cached by element size and spiral angle (quantized to ~5°).\n * The feImage href is updated in the fast path when the map URI changes.\n */\n private _ensureMaps(\n pw: number,\n ph: number,\n ox: number,\n oy: number,\n iw: number,\n ih: number,\n spiralAngle: number,\n ): void {\n const riw = Math.round(iw) || 100;\n const rih = Math.round(ih) || 100;\n const quantizedAngle = Math.round(spiralAngle * SPIRAL_ANGLE_QUANT) / SPIRAL_ANGLE_QUANT;\n\n const sizeChanged = Math.abs(riw - this._lastMapW) > 4 || Math.abs(rih - this._lastMapH) > 4;\n const angleChanged =\n Math.abs(quantizedAngle - this._lastSpiralAngle) > 0.001 || isNaN(this._lastSpiralAngle);\n\n if (!sizeChanged && !angleChanged) return;\n\n this._lastMapW = riw;\n this._lastMapH = rih;\n this._lastSpiralAngle = quantizedAngle;\n this._spiralMapURI = buildSpiralMap(pw, ph, ox, oy, riw, rih, riw / 2, rih / 2, quantizedAngle);\n }\n\n // ── Public API ──────────────────────────────────────────────────────────────\n\n /**\n * Samples the child's current position and transform, computing blur amounts.\n * Called by `updateAnimations` after all animation times are settled.\n */\n sample(_timestamp: number = performance.now()): void {\n if (this._hasExplicitAngle && this._hasExplicitAmount) return;\n if (!this._filterEl) return;\n\n const child = (this._filterEl.firstElementChild as HTMLElement | null) ?? this._filterEl;\n const det = this._computeDeterministicTransform(child);\n if (det !== null) {\n this._applyTransform(det.dx, det.dy, det.dAngle, det.dScale, det.halfDiag);\n }\n }\n\n /**\n * Deterministic two-seek measurement. Seeks all animations back by shutterMs,\n * reads positions and transforms, restores. Returns null when no seekable\n * animations exist or currentTime < shutterMs.\n */\n private _computeDeterministicTransform(child: HTMLElement): {\n dx: number;\n dy: number;\n dAngle: number;\n dScale: number;\n halfDiag: number;\n } | null {\n const tracked = getTrackedAnimationsForSubtree(child);\n const animations = (\n tracked.length > 0 ? tracked : child.getAnimations({ subtree: true })\n ) as Animation[];\n if (animations.length === 0) return null;\n\n const seekable: Animation[] = [];\n const currentTimes: number[] = [];\n for (const anim of animations) {\n const t = anim.currentTime;\n if (t !== null && typeof t === \"number\") {\n seekable.push(anim);\n currentTimes.push(t);\n }\n }\n if (seekable.length === 0) return null;\n\n const shutterMs = this.shutterMs;\n if (currentTimes.every((t) => t < shutterMs)) return null;\n\n // If all animations are in their fill phase (progress === null, activeDuration finite),\n // the element is stationary — no blur.\n const allInFill = seekable.every((anim) => {\n const timing = (anim.effect as KeyframeEffect)?.getComputedTiming();\n if (!timing) return false;\n const { activeDuration, progress } = timing;\n return progress === null && typeof activeDuration === \"number\" && isFinite(activeDuration);\n });\n if (allInFill) return null;\n\n const outerWas = this._outer!.style.transform;\n const filterWas = this._filterEl!.style.transform;\n this._outer!.style.transform = \"none\";\n this._filterEl!.style.transform = \"none\";\n\n // Ancestor-only scale from _filterEl (transform:none), not from the child\n // whose CSS animation rotation inflates its bbox.\n const filterElLogicalW = this._filterEl!.offsetWidth || 1;\n const filterElRect = this._filterEl!.getBoundingClientRect();\n const ancestorScale = filterElRect.width / filterElLogicalW || 1;\n\n // Read position and transform at t_now.\n const r1 = child.getBoundingClientRect();\n const cx1 = r1.left + r1.width / 2;\n const cy1 = r1.top + r1.height / 2;\n const halfDiag = Math.sqrt((child.offsetWidth || 1) ** 2 + (child.offsetHeight || 1) ** 2) / 2;\n const { angle: angle1, scale: scale1 } = readTransformMatrix(child, seekable);\n\n // Seek back to t_now - shutterMs, but never past the animation's active range.\n for (let i = 0; i < seekable.length; i++) {\n const timing = (seekable[i]!.effect as KeyframeEffect)?.getComputedTiming();\n const activeDuration = timing?.activeDuration;\n const endTime =\n typeof activeDuration === \"number\" && isFinite(activeDuration) ? activeDuration : Infinity;\n seekable[i]!.currentTime = Math.min(Math.max(0, currentTimes[i]! - shutterMs), endTime);\n }\n\n // Read position and transform at t_past.\n const r0 = child.getBoundingClientRect();\n const cx0 = r0.left + r0.width / 2;\n const cy0 = r0.top + r0.height / 2;\n const { angle: angle0, scale: scale0 } = readTransformMatrix(child, seekable);\n\n // Restore animation times and wrapper transforms.\n for (let i = 0; i < seekable.length; i++) {\n seekable[i]!.currentTime = currentTimes[i]!;\n }\n this._outer!.style.transform = outerWas;\n this._filterEl!.style.transform = filterWas;\n\n return {\n dx: (cx1 - cx0) / ancestorScale,\n dy: (cy1 - cy0) / ancestorScale,\n dAngle: angle1 - angle0,\n dScale: scale1 - scale0,\n halfDiag,\n };\n }\n\n /**\n * Converts measured deltas to blur amounts and calls _update() when changed.\n *\n * Translation → directional box blur amount + angle.\n * Rotation → arc displacement amount (signed: + = CCW, − = CW).\n * Arc length at half-diagonal radius: R × |Δθ_rad|.\n * Stored signed so the displacement map is applied in the\n * correct tangential direction.\n * Scale → radial displacement amount: |Δscale| × half-diagonal.\n */\n private _applyTransform(\n dx: number,\n dy: number,\n dAngle: number,\n dScale: number,\n halfDiag: number,\n ): void {\n const s = this.sensitivity;\n\n // Translation: store raw dx/dy scaled by sensitivity (capped at 100px)\n const mag = Math.sqrt(dx ** 2 + dy ** 2);\n const scaledMag = Math.min(mag * s, MAX_TRANS_AMOUNT_PX);\n const newDx = mag < this.threshold ? 0 : (dx / mag) * scaledMag;\n const newDy = mag < this.threshold ? 0 : (dy / mag) * scaledMag;\n const newDir = mag < this.threshold ? 0 : scaledMag;\n const newAngle =\n mag < this.threshold ? this._computedAngle : (Math.atan2(dy, dx) * 180) / Math.PI;\n\n // Rotation arc (signed)\n const dAngleRad = (dAngle * Math.PI) / 180;\n const arcLen = halfDiag * Math.abs(dAngleRad) * s;\n const newRot = Math.min(arcLen, MAX_ROT_AMOUNT_PX) * (dAngle > 0 ? -1 : 1);\n const newRotDeg = Math.abs(dAngle);\n\n // Scale zoom (same threshold as translation)\n const rawZoom = Math.abs(dScale) * halfDiag * s;\n const newZoom = rawZoom < this.threshold ? 0 : Math.min(rawZoom, MAX_ZOOM_AMOUNT_PX);\n\n const changed =\n newDx !== this._computedDx ||\n newDy !== this._computedDy ||\n newDir !== this._computedDirectionalAmount ||\n newAngle !== this._computedAngle ||\n newRot !== this._computedRotAmount ||\n newRotDeg !== this._computedRotDeg ||\n newZoom !== this._computedIsotropicAmount;\n\n if (!changed) return;\n\n this._computedDx = newDx;\n this._computedDy = newDy;\n this._computedDirectionalAmount = newDir;\n this._computedAngle = newAngle;\n this._computedRotAmount = newRot;\n this._computedRotDeg = newRotDeg;\n this._computedIsotropicAmount = newZoom;\n this._update();\n }\n}\n\nif (typeof customElements !== \"undefined\") {\n customElements.define(\"ef-motionblur\", EFMotionBlur);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-motionblur\": EFMotionBlur;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EFMotionBlur.js","names":[],"sources":["../../src/elements/EFMotionBlur.ts"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { TemplateResult as TemplateResult$1 } from "../node_modules/lit-html/development/lit-html.js";
|
|
2
|
+
import * as _$lit from "lit";
|
|
2
3
|
import { LitElement } from "lit";
|
|
3
|
-
import * as lit_html26 from "lit-html";
|
|
4
4
|
|
|
5
5
|
//#region src/elements/EFPanZoom.d.ts
|
|
6
6
|
interface PanZoomTransform {
|
|
@@ -9,7 +9,7 @@ interface PanZoomTransform {
|
|
|
9
9
|
scale: number;
|
|
10
10
|
}
|
|
11
11
|
declare class EFPanZoom extends LitElement {
|
|
12
|
-
static styles:
|
|
12
|
+
static styles: _$lit.CSSResult[];
|
|
13
13
|
x: number;
|
|
14
14
|
y: number;
|
|
15
15
|
scale: number;
|
|
@@ -89,7 +89,7 @@ declare class EFPanZoom extends LitElement {
|
|
|
89
89
|
* @param padding - Padding factor (0-1), e.g., 0.1 = 10% padding on each side. Default: 0.05
|
|
90
90
|
*/
|
|
91
91
|
fitToContent(padding?: number): void;
|
|
92
|
-
render():
|
|
92
|
+
render(): TemplateResult$1<1>;
|
|
93
93
|
}
|
|
94
94
|
//#endregion
|
|
95
95
|
export { EFPanZoom, PanZoomTransform };
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
2
2
|
import { panZoomTransformContext } from "../gui/panZoomTransformContext.js";
|
|
3
3
|
import { provide } from "@lit/context";
|
|
4
4
|
import { LitElement, css, html } from "lit";
|
|
5
5
|
import { customElement, property } from "lit/decorators.js";
|
|
6
|
-
|
|
7
6
|
//#region src/elements/EFPanZoom.ts
|
|
8
|
-
let EFPanZoom = class EFPanZoom
|
|
7
|
+
let EFPanZoom = class EFPanZoom extends LitElement {
|
|
9
8
|
constructor(..._args) {
|
|
10
9
|
super(..._args);
|
|
11
10
|
this.x = 0;
|
|
@@ -285,7 +284,7 @@ __decorate([property({
|
|
|
285
284
|
})], EFPanZoom.prototype, "autoFit", void 0);
|
|
286
285
|
__decorate([provide({ context: panZoomTransformContext })], EFPanZoom.prototype, "panZoomTransform", void 0);
|
|
287
286
|
EFPanZoom = __decorate([customElement("ef-pan-zoom")], EFPanZoom);
|
|
288
|
-
|
|
289
287
|
//#endregion
|
|
290
288
|
export { EFPanZoom };
|
|
289
|
+
|
|
291
290
|
//# sourceMappingURL=EFPanZoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFPanZoom.js","names":["EFPanZoom"],"sources":["../../src/elements/EFPanZoom.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { provide } from \"@lit/context\";\nimport { panZoomTransformContext } from \"../gui/panZoomTransformContext.js\";\n\nexport interface PanZoomTransform {\n x: number;\n y: number;\n scale: number;\n}\n\n@customElement(\"ef-pan-zoom\")\nexport class EFPanZoom extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n overflow: hidden;\n position: relative;\n touch-action: none;\n }\n .content-wrapper {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n transform-origin: 0 0;\n }\n `,\n ];\n\n @property({ type: Number, reflect: true })\n x = 0;\n\n @property({ type: Number, reflect: true })\n y = 0;\n\n @property({ type: Number, reflect: true })\n scale = 1;\n\n /**\n * When true, automatically fits content to view on first render.\n * Centers content and scales it to fit within the container with padding.\n */\n @property({ type: Boolean, attribute: \"auto-fit\" })\n autoFit = false;\n\n @provide({ context: panZoomTransformContext })\n panZoomTransform: PanZoomTransform = { x: 0, y: 0, scale: 1 };\n\n private _isDragging = false;\n private _dragStartPointerPos: { x: number; y: number } | null = null;\n private _dragStartTransform: PanZoomTransform | null = null;\n private _capturedPointerId: number | null = null;\n\n /**\n * Document-level wheel handler in capture phase to prevent browser navigation.\n * This prevents back/forward navigation on two-finger swipe gestures.\n * We use capture phase to catch events before they bubble, but only prevent default\n * (not stop propagation) so the normal wheel handler can still process them.\n */\n private _onDocumentWheelCapture = (e: WheelEvent) => {\n // Check if event is over this panzoom element or its children\n let isOverThisPanZoom = false;\n if (e.target instanceof Element) {\n const targetPanZoom = e.target.closest(\"ef-pan-zoom\");\n if (targetPanZoom === this) {\n isOverThisPanZoom = true;\n } else if (!targetPanZoom && e.target.closest(\"ef-canvas-selection-overlay\")) {\n // Also check if target is an overlay sibling (selection overlay, etc.)\n // Overlays have pointer-events: none but can still be the event target\n // Event is over selection overlay - check if it's over this panzoom's area\n const rect = this.getBoundingClientRect();\n if (\n e.clientX >= rect.left &&\n e.clientX <= rect.right &&\n e.clientY >= rect.top &&\n e.clientY <= rect.bottom\n ) {\n isOverThisPanZoom = true;\n }\n }\n }\n if (isOverThisPanZoom) {\n // Prevent browser navigation gestures (back/forward on swipe)\n // Don't stop propagation - let the normal wheel handler process the event\n e.preventDefault();\n }\n };\n\n connectedCallback() {\n super.connectedCallback();\n // Add document-level capture listener to prevent browser navigation\n document.addEventListener(\"wheel\", this._onDocumentWheelCapture, {\n passive: false,\n capture: true,\n });\n // Add element-level event listeners\n this.addEventListener(\"wheel\", this._onWheel, { passive: false });\n this.addEventListener(\"pointerdown\", this._onPointerDown);\n this.addEventListener(\"pointermove\", this._onPointerMove);\n this.addEventListener(\"pointerup\", this._onPointerUp);\n this.addEventListener(\"pointercancel\", this._onPointerUp);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n // Remove document-level capture listener\n document.removeEventListener(\"wheel\", this._onDocumentWheelCapture, {\n capture: true,\n });\n // Remove element-level event listeners\n this.removeEventListener(\"wheel\", this._onWheel);\n this.removeEventListener(\"pointerdown\", this._onPointerDown);\n this.removeEventListener(\"pointermove\", this._onPointerMove);\n this.removeEventListener(\"pointerup\", this._onPointerUp);\n this.removeEventListener(\"pointercancel\", this._onPointerUp);\n // Clean up pointer capture if dragging\n if (this._isDragging && this._capturedPointerId !== null) {\n try {\n this.releasePointerCapture(this._capturedPointerId);\n } catch (_err) {\n // Ignore pointer capture errors (e.g., in test environments)\n }\n }\n }\n\n private _updateTransform(updates: Partial<PanZoomTransform>) {\n const newTransform = {\n x: updates.x !== undefined ? updates.x : this.x,\n y: updates.y !== undefined ? updates.y : this.y,\n scale: updates.scale !== undefined ? Math.max(0.1, Math.min(5, updates.scale)) : this.scale,\n };\n\n const changed =\n newTransform.x !== this.x || newTransform.y !== this.y || newTransform.scale !== this.scale;\n\n if (changed) {\n this.x = newTransform.x;\n this.y = newTransform.y;\n this.scale = newTransform.scale;\n\n // Update context for overlay components\n this.panZoomTransform = { ...newTransform };\n\n this.dispatchEvent(\n new CustomEvent<PanZoomTransform>(\"transform-changed\", {\n detail: { ...newTransform },\n bubbles: true,\n composed: true,\n }),\n );\n }\n }\n\n private _onPointerDown = (e: PointerEvent) => {\n if (e.button !== 0) return;\n\n this._isDragging = true;\n this._capturedPointerId = e.pointerId;\n this._dragStartPointerPos = { x: e.clientX, y: e.clientY };\n this._dragStartTransform = {\n x: this.x,\n y: this.y,\n scale: this.scale,\n };\n\n try {\n this.setPointerCapture(e.pointerId);\n } catch (_err) {\n // Ignore pointer capture errors (e.g., in test environments)\n }\n };\n\n private _onPointerMove = (e: PointerEvent) => {\n if (!this._isDragging || !this._dragStartPointerPos || !this._dragStartTransform) return;\n\n const deltaX = e.clientX - this._dragStartPointerPos.x;\n const deltaY = e.clientY - this._dragStartPointerPos.y;\n\n this._updateTransform({\n x: this._dragStartTransform.x - deltaX,\n y: this._dragStartTransform.y - deltaY,\n });\n };\n\n private _onPointerUp = (e: PointerEvent) => {\n if (!this._isDragging) return;\n if (this._capturedPointerId !== null) {\n try {\n this.releasePointerCapture(e.pointerId);\n } catch (_err) {\n // Ignore pointer capture errors (e.g., in test environments)\n }\n }\n\n this._isDragging = false;\n this._capturedPointerId = null;\n this._dragStartPointerPos = null;\n this._dragStartTransform = null;\n };\n\n private _onWheel = (e: WheelEvent) => {\n // Always prevent default to prevent browser navigation (back/forward on swipe)\n // This is critical for full-page app interfaces\n e.preventDefault();\n e.stopPropagation();\n\n const isZoom = e.metaKey || e.ctrlKey;\n\n if (isZoom) {\n const containerRect = this.getBoundingClientRect();\n const pointerX = e.clientX - containerRect.left;\n const pointerY = e.clientY - containerRect.top;\n\n const currentX = this.x;\n const currentY = this.y;\n const currentScale = this.scale;\n\n const canvasX = (pointerX - currentX) / currentScale;\n const canvasY = (pointerY - currentY) / currentScale;\n\n const delta = e.deltaY > 0 ? 0.95 : 1.05;\n const newScale = Math.max(0.1, Math.min(5, currentScale * delta));\n\n const newX = pointerX - canvasX * newScale;\n const newY = pointerY - canvasY * newScale;\n\n this._updateTransform({\n x: newX,\n y: newY,\n scale: newScale,\n });\n } else {\n const deltaX = -e.deltaX;\n const deltaY = -e.deltaY;\n\n this._updateTransform({\n x: this.x + deltaX,\n y: this.y + deltaY,\n });\n }\n };\n\n firstUpdated(changedProperties: Map<PropertyKey, unknown>) {\n super.firstUpdated(changedProperties);\n // Initialize context with current transform\n this.panZoomTransform = { x: this.x, y: this.y, scale: this.scale };\n\n // Auto-fit content if enabled (use RAF to ensure content is rendered)\n if (this.autoFit) {\n requestAnimationFrame(() => {\n this.fitToContent();\n });\n }\n }\n\n /**\n * Convert screen coordinates (e.g., mouse event clientX/clientY) to canvas coordinates.\n * This handles all pan/zoom transformations automatically.\n *\n * @param screenX - X coordinate in screen space (e.g., event.clientX)\n * @param screenY - Y coordinate in screen space (e.g., event.clientY)\n * @returns Object with x, y in canvas coordinate space\n *\n * @example\n * handleClick(e: MouseEvent) {\n * const canvasPos = panZoom.screenToCanvas(e.clientX, e.clientY);\n * console.log(`Clicked at canvas position: ${canvasPos.x}, ${canvasPos.y}`);\n * }\n */\n screenToCanvas(screenX: number, screenY: number): { x: number; y: number } {\n const rect = this.getBoundingClientRect();\n return {\n x: (screenX - rect.left - this.x) / this.scale,\n y: (screenY - rect.top - this.y) / this.scale,\n };\n }\n\n /**\n * Convert canvas coordinates to screen coordinates.\n * Useful for positioning overlays or tooltips relative to canvas elements.\n *\n * @param canvasX - X coordinate in canvas space\n * @param canvasY - Y coordinate in canvas space\n * @returns Object with x, y in screen coordinate space\n *\n * @example\n * const screenPos = panZoom.canvasToScreen(element.x, element.y);\n * tooltip.style.left = `${screenPos.x}px`;\n * tooltip.style.top = `${screenPos.y}px`;\n */\n canvasToScreen(canvasX: number, canvasY: number): { x: number; y: number } {\n const rect = this.getBoundingClientRect();\n return {\n x: rect.left + canvasX * this.scale + this.x,\n y: rect.top + canvasY * this.scale + this.y,\n };\n }\n\n /**\n * Reset the pan-zoom transform to its default values (x: 0, y: 0, scale: 1).\n * This method can be called programmatically to reset the view.\n *\n * @example\n * const panZoomRef = useRef(null);\n * <button onClick={() => panZoomRef.current.reset()}>Reset View</button>\n */\n reset(): void {\n this._updateTransform({ x: 0, y: 0, scale: 1 });\n }\n\n /**\n * Fit content to the container, centering it and scaling to fit.\n * Uses a padding factor to leave some margin around the content.\n *\n * @param padding - Padding factor (0-1), e.g., 0.1 = 10% padding on each side. Default: 0.05\n */\n fitToContent(padding = 0.05): void {\n const containerRect = this.getBoundingClientRect();\n if (containerRect.width === 0 || containerRect.height === 0) return;\n\n // Find the first child element to measure\n const contentWrapper = this.shadowRoot?.querySelector(\".content-wrapper\");\n const slottedContent = contentWrapper?.querySelector(\"slot\")?.assignedElements()[0] as\n | HTMLElement\n | undefined;\n\n if (!slottedContent) return;\n\n // Get content dimensions\n const contentRect = slottedContent.getBoundingClientRect();\n const contentWidth = contentRect.width / this.scale;\n const contentHeight = contentRect.height / this.scale;\n\n if (contentWidth === 0 || contentHeight === 0) return;\n\n // Calculate available space with padding\n const availableWidth = containerRect.width * (1 - 2 * padding);\n const availableHeight = containerRect.height * (1 - 2 * padding);\n\n // Calculate scale to fit\n const scaleX = availableWidth / contentWidth;\n const scaleY = availableHeight / contentHeight;\n const newScale = Math.min(scaleX, scaleY);\n\n // Calculate position to center\n const scaledWidth = contentWidth * newScale;\n const scaledHeight = contentHeight * newScale;\n const newX = (containerRect.width - scaledWidth) / 2;\n const newY = (containerRect.height - scaledHeight) / 2;\n\n this._updateTransform({\n x: newX,\n y: newY,\n scale: newScale,\n });\n }\n\n render() {\n return html`\n <div\n class=\"content-wrapper\"\n style=\"transform: translate(${this.x}px, ${this.y}px) scale(${this.scale});\"\n >\n <slot></slot>\n </div>\n `;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EFPanZoom.js","names":[],"sources":["../../src/elements/EFPanZoom.ts"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
2
2
|
import { property } from "lit/decorators/property.js";
|
|
3
|
-
|
|
4
3
|
//#region src/elements/EFSourceMixin.ts
|
|
5
4
|
function EFSourceMixin(superClass, options) {
|
|
6
5
|
class EFSourceElement extends superClass {
|
|
@@ -69,7 +68,7 @@ function EFSourceMixin(superClass, options) {
|
|
|
69
68
|
})], EFSourceElement.prototype, "src", void 0);
|
|
70
69
|
return EFSourceElement;
|
|
71
70
|
}
|
|
72
|
-
|
|
73
71
|
//#endregion
|
|
74
72
|
export { EFSourceMixin };
|
|
73
|
+
|
|
75
74
|
//# sourceMappingURL=EFSourceMixin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFSourceMixin.js","names":["#md5Value","#md5LastSrc","#md5Promise","#doLoadMd5"],"sources":["../../src/elements/EFSourceMixin.ts"],"
|
|
1
|
+
{"version":3,"file":"EFSourceMixin.js","names":["#md5Value","#md5LastSrc","#md5Promise","#doLoadMd5"],"sources":["../../src/elements/EFSourceMixin.ts"],"mappings":";;;AAeA,SAAgB,cACd,YACA,SACA;CACA,MAAM,wBAAwB,WAAW;;;cAYjC;uBAyES,IAAI,MACjB;IACE,WAAW,KAAK,YAAY;IAC5B,MAAM;IACP,EASD,EACE,IAAI,QAAQ,MAAM;AAChB,QAAI,SAAS,QACX,QAAO,OAAO,KAAK,cAAc;AAEnC,QAAI,SAAS,eAEX,QADU,OAAO,KAAK,gBAAgB,IAC1B,QAAQ,QAAQ,OAAO,KAAK,cAAc,CAAC;AAEzD,WAAQ,OAAe;MAE1B,CACF;;EA7GD,IAAI,UAAU;AACZ,UACG,KAAK,QAAQ,mBAAmB,EAAU,WAC1C,KAAK,QAAQ,eAAe,EAAU,WACtC,KAAK,QAAQ,aAAa,EAAU,WACpC,WAAmB,eAAe,WAAA;;EAQvC,YAAgC,KAAA;EAChC,cAAkD;EAClD,cAA6B;EAE7B,gBAAgB;AACd,OAAI,CAAC,MAAA,SACH,OAAM,IAAI,MAAM,6BAA6B,KAAK,kCAAkC;AAGtF,OAAI,CAAC,KAAK,QACR,OAAM,IAAI,MAAM,6BAA6B,KAAK,kCAAkC;AAGtF,UAAO,GAAG,KAAK,QAAQ,UAAU,QAAQ,UAAU,GAAG,MAAA;;;;;EAMxD,MAAM,WAAW,QAAmD;AAClE,OAAI,MAAA,eAAqB,KAAK,OAAO,MAAA,SACnC,QAAO,MAAA;AAGT,OAAI,MAAA,cAAoB,MAAA,eAAqB,KAAK,IAChD,QAAO,MAAA;AAGT,SAAA,aAAmB,KAAK;AACxB,SAAA,aAAmB,MAAA,UAAgB,KAAK,KAAK,OAAO;AAEpD,OAAI;AACF,UAAA,WAAiB,MAAM,MAAA;AACvB,WAAO,MAAA;YACA,OAAO;AACd,QAAI,iBAAiB,gBAAgB,MAAM,SAAS,aAClD,OAAM;AAER,YAAQ,MAAM,8BAA8B,MAAM;AAClD;aACQ;AACR,UAAA,aAAmB;;;EAIvB,OAAA,UAAiB,KAAa,QAAmD;GAE/E,IAAI,gBAAgB,IAAI,WAAW,IAAI,GAAG,IAAI,MAAM,EAAE,GAAG;AACzD,mBAAgB,cAAc,QAAQ,QAAQ,GAAG;GACjD,MAAM,UAAU,yBAAyB,mBAAmB,cAAc;GAC1E,MAAM,WAAW,MAAM,MAAM,SAAS,EAAE,QAAQ,CAAC;AACjD,OAAI,CAAC,SAAS,GACZ;AAGF,WADa,MAAM,SAAS,MAAM,EACtB,OAAO,KAAA;;;EAIrB,eAAmC;AACjC,UAAO,MAAA;;;EAIT,iBAAqD;AACnD,UAAO,MAAA;;;aApER,SAAS;EAAE,MAAM;EAAQ,SAAS;EAAM,CAAC,CAAA,EAAA,gBAAA,WAAA,OAAA,KAAA,EAAA;AAsG5C,QAAO"}
|
|
@@ -1,18 +1,18 @@
|
|
|
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 { ContextMixinInterface } from "../gui/ContextMixin.js";
|
|
3
|
-
import
|
|
4
|
+
import { Ref } from "../node_modules/lit-html/development/directives/ref.js";
|
|
5
|
+
import * as _$lit from "lit";
|
|
4
6
|
import { LitElement } from "lit";
|
|
5
|
-
import * as lit_html25 from "lit-html";
|
|
6
|
-
import * as lit_html_directives_ref3 from "lit-html/directives/ref";
|
|
7
7
|
|
|
8
8
|
//#region src/elements/EFSurface.d.ts
|
|
9
9
|
declare class EFSurface extends LitElement implements FrameRenderable {
|
|
10
10
|
#private;
|
|
11
|
-
static styles:
|
|
12
|
-
canvasRef:
|
|
11
|
+
static styles: _$lit.CSSResult[];
|
|
12
|
+
canvasRef: Ref<HTMLCanvasElement>;
|
|
13
13
|
targetElement: ContextMixinInterface | null;
|
|
14
14
|
target: string;
|
|
15
|
-
render():
|
|
15
|
+
render(): TemplateResult$1<1>;
|
|
16
16
|
get rootTimegroup(): any;
|
|
17
17
|
get currentTimeMs(): number;
|
|
18
18
|
get durationMs(): number;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
2
2
|
import { TargetController } from "./TargetController.js";
|
|
3
3
|
import { LitElement, css, html } from "lit";
|
|
4
4
|
import { customElement, property, state } from "lit/decorators.js";
|
|
5
5
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
6
|
-
|
|
7
6
|
//#region src/elements/EFSurface.ts
|
|
8
|
-
let EFSurface = class EFSurface
|
|
7
|
+
let EFSurface = class EFSurface extends LitElement {
|
|
9
8
|
constructor(..._args) {
|
|
10
9
|
super(..._args);
|
|
11
10
|
this.canvasRef = createRef();
|
|
@@ -100,7 +99,7 @@ let EFSurface = class EFSurface$1 extends LitElement {
|
|
|
100
99
|
__decorate([state()], EFSurface.prototype, "targetElement", void 0);
|
|
101
100
|
__decorate([property({ type: String })], EFSurface.prototype, "target", void 0);
|
|
102
101
|
EFSurface = __decorate([customElement("ef-surface")], EFSurface);
|
|
103
|
-
|
|
104
102
|
//#endregion
|
|
105
103
|
export { EFSurface };
|
|
104
|
+
|
|
106
105
|
//# sourceMappingURL=EFSurface.js.map
|