@editframe/elements 0.24.1-beta.0 → 0.25.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DelayedLoadingState.js +31 -0
- package/dist/DelayedLoadingState.js.map +1 -0
- package/dist/EF_FRAMEGEN.d.ts +50 -46
- package/dist/EF_FRAMEGEN.js +5 -1
- package/dist/EF_FRAMEGEN.js.map +1 -0
- package/dist/EF_INTERACTIVE.js +4 -0
- package/dist/EF_INTERACTIVE.js.map +1 -0
- package/dist/EF_RENDERING.js +4 -0
- package/dist/EF_RENDERING.js.map +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js +4 -1
- package/dist/attachContextRoot.js +6 -1
- package/dist/attachContextRoot.js.map +1 -0
- package/dist/elements/CrossUpdateController.js +4 -0
- package/dist/elements/CrossUpdateController.js.map +1 -0
- package/dist/elements/EFAudio.d.ts +24 -16
- package/dist/elements/EFAudio.js +10 -1
- package/dist/elements/EFAudio.js.map +1 -0
- package/dist/elements/EFCaptions.d.ts +118 -109
- package/dist/elements/EFCaptions.js +11 -6
- package/dist/elements/EFCaptions.js.map +1 -0
- package/dist/elements/EFImage.d.ts +31 -20
- package/dist/elements/EFImage.js +6 -1
- package/dist/elements/EFImage.js.map +1 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js +5 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js +12 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js +53 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +47 -46
- package/dist/elements/EFMedia/BufferedSeekingInput.js +6 -1
- package/dist/elements/EFMedia/BufferedSeekingInput.js.map +1 -0
- package/dist/elements/EFMedia/JitMediaEngine.js +12 -0
- package/dist/elements/EFMedia/JitMediaEngine.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +9 -13
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +6 -1
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +5 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js.map +1 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +6 -1
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js.map +1 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js +18 -2
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js.map +1 -0
- package/dist/elements/EFMedia/shared/BufferUtils.d.ts +9 -67
- package/dist/elements/EFMedia/shared/BufferUtils.js +15 -0
- package/dist/elements/EFMedia/shared/BufferUtils.js.map +1 -0
- package/dist/elements/EFMedia/shared/GlobalInputCache.js +29 -0
- package/dist/elements/EFMedia/shared/GlobalInputCache.js.map +1 -0
- package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +11 -17
- package/dist/elements/EFMedia/shared/PrecisionUtils.js +25 -0
- package/dist/elements/EFMedia/shared/PrecisionUtils.js.map +1 -0
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +22 -0
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.js.map +1 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +13 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js +21 -0
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js +18 -0
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js +10 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js +6 -1
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js +16 -2
- package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js.map +1 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +9 -13
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +5 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js.map +1 -0
- package/dist/elements/EFMedia.d.ts +115 -104
- package/dist/elements/EFMedia.js +25 -1
- package/dist/elements/EFMedia.js.map +1 -0
- package/dist/elements/EFSourceMixin.d.ts +10 -11
- package/dist/elements/EFSourceMixin.js +5 -0
- package/dist/elements/EFSourceMixin.js.map +1 -0
- package/dist/elements/EFSurface.d.ts +35 -27
- package/dist/elements/EFSurface.js +6 -1
- package/dist/elements/EFSurface.js.map +1 -0
- package/dist/elements/EFTemporal.d.ts +200 -213
- package/dist/elements/EFTemporal.js +24 -4
- package/dist/elements/EFTemporal.js.map +1 -0
- package/dist/elements/EFThumbnailStrip.d.ts +91 -83
- package/dist/elements/EFThumbnailStrip.js +49 -4
- package/dist/elements/EFThumbnailStrip.js.map +1 -0
- package/dist/elements/EFTimegroup.d.ts +107 -101
- package/dist/elements/EFTimegroup.js +58 -3
- package/dist/elements/EFTimegroup.js.map +1 -0
- package/dist/elements/EFVideo.d.ts +120 -108
- package/dist/elements/EFVideo.js +46 -2
- package/dist/elements/EFVideo.js.map +1 -0
- package/dist/elements/EFWaveform.d.ts +48 -41
- package/dist/elements/EFWaveform.js +6 -1
- package/dist/elements/EFWaveform.js.map +1 -0
- package/dist/elements/FetchMixin.d.ts +8 -6
- package/dist/elements/FetchMixin.js +4 -0
- package/dist/elements/FetchMixin.js.map +1 -0
- package/dist/elements/SampleBuffer.d.ts +18 -13
- package/dist/elements/SampleBuffer.js +5 -0
- package/dist/elements/SampleBuffer.js.map +1 -0
- package/dist/elements/TargetController.d.ts +23 -24
- package/dist/elements/TargetController.js +8 -3
- package/dist/elements/TargetController.js.map +1 -0
- package/dist/elements/TimegroupController.d.ts +17 -12
- package/dist/elements/TimegroupController.js +4 -0
- package/dist/elements/TimegroupController.js.map +1 -0
- package/dist/elements/durationConverter.js +9 -4
- package/dist/elements/durationConverter.js.map +1 -0
- package/dist/elements/parseTimeToMs.js +4 -0
- package/dist/elements/parseTimeToMs.js.map +1 -0
- package/dist/elements/renderTemporalAudio.js +4 -0
- package/dist/elements/renderTemporalAudio.js.map +1 -0
- package/dist/elements/updateAnimations.js +29 -8
- package/dist/elements/updateAnimations.js.map +1 -0
- package/dist/elements-ZhsB7B5N.css +9 -0
- package/dist/elements-ZhsB7B5N.css.map +1 -0
- package/dist/getRenderInfo.d.ts +53 -47
- package/dist/getRenderInfo.js +5 -0
- package/dist/getRenderInfo.js.map +1 -0
- package/dist/gui/ContextMixin.d.ts +19 -20
- package/dist/gui/ContextMixin.js +32 -1
- package/dist/gui/ContextMixin.js.map +1 -0
- package/dist/gui/Controllable.d.ts +13 -14
- package/dist/gui/Controllable.js +5 -0
- package/dist/gui/Controllable.js.map +1 -0
- package/dist/gui/EFConfiguration.d.ts +18 -14
- package/dist/gui/EFConfiguration.js +6 -1
- package/dist/gui/EFConfiguration.js.map +1 -0
- package/dist/gui/EFControls.d.ts +35 -31
- package/dist/gui/EFControls.js +8 -3
- package/dist/gui/EFControls.js.map +1 -0
- package/dist/gui/EFDial.d.ts +23 -16
- package/dist/gui/EFDial.js +6 -1
- package/dist/gui/EFDial.js.map +1 -0
- package/dist/gui/EFFilmstrip.d.ts +183 -177
- package/dist/gui/EFFilmstrip.js +30 -25
- package/dist/gui/EFFilmstrip.js.map +1 -0
- package/dist/gui/EFFitScale.d.ts +30 -24
- package/dist/gui/EFFitScale.js +6 -1
- package/dist/gui/EFFitScale.js.map +1 -0
- package/dist/gui/EFFocusOverlay.d.ts +22 -14
- package/dist/gui/EFFocusOverlay.js +6 -1
- package/dist/gui/EFFocusOverlay.js.map +1 -0
- package/dist/gui/EFPause.d.ts +24 -18
- package/dist/gui/EFPause.js +6 -1
- package/dist/gui/EFPause.js.map +1 -0
- package/dist/gui/EFPlay.d.ts +24 -18
- package/dist/gui/EFPlay.js +6 -1
- package/dist/gui/EFPlay.js.map +1 -0
- package/dist/gui/EFPreview.d.ts +22 -15
- package/dist/gui/EFPreview.js +9 -1
- package/dist/gui/EFPreview.js.map +1 -0
- package/dist/gui/EFResizableBox.d.ts +39 -32
- package/dist/gui/EFResizableBox.js +8 -3
- package/dist/gui/EFResizableBox.js.map +1 -0
- package/dist/gui/EFScrubber.d.ts +31 -25
- package/dist/gui/EFScrubber.js +6 -1
- package/dist/gui/EFScrubber.js.map +1 -0
- package/dist/gui/EFTimeDisplay.d.ts +21 -14
- package/dist/gui/EFTimeDisplay.js +6 -1
- package/dist/gui/EFTimeDisplay.js.map +1 -0
- package/dist/gui/EFToggleLoop.d.ts +19 -13
- package/dist/gui/EFToggleLoop.js +6 -1
- package/dist/gui/EFToggleLoop.js.map +1 -0
- package/dist/gui/EFTogglePlay.d.ts +23 -17
- package/dist/gui/EFTogglePlay.js +6 -1
- package/dist/gui/EFTogglePlay.js.map +1 -0
- package/dist/gui/EFWorkbench.d.ts +24 -16
- package/dist/gui/EFWorkbench.js +6 -1
- package/dist/gui/EFWorkbench.js.map +1 -0
- package/dist/gui/PlaybackController.d.ts +54 -50
- package/dist/gui/PlaybackController.js +18 -0
- package/dist/gui/PlaybackController.js.map +1 -0
- package/dist/gui/TWMixin.js +5 -1
- package/dist/gui/TWMixin.js.map +1 -0
- package/dist/gui/TWMixin2.js +6 -1
- package/dist/gui/TWMixin2.js.map +1 -0
- package/dist/gui/TargetOrContextMixin.js +5 -0
- package/dist/gui/TargetOrContextMixin.js.map +1 -0
- package/dist/gui/currentTimeContext.js +5 -0
- package/dist/gui/currentTimeContext.js.map +1 -0
- package/dist/gui/durationContext.js +5 -0
- package/dist/gui/durationContext.js.map +1 -0
- package/dist/gui/efContext.js +5 -0
- package/dist/gui/efContext.js.map +1 -0
- package/dist/gui/fetchContext.js +5 -0
- package/dist/gui/fetchContext.js.map +1 -0
- package/dist/gui/focusContext.d.ts +6 -5
- package/dist/gui/focusContext.js +5 -0
- package/dist/gui/focusContext.js.map +1 -0
- package/dist/gui/focusedElementContext.js +5 -0
- package/dist/gui/focusedElementContext.js.map +1 -0
- package/dist/gui/playingContext.js +5 -0
- package/dist/gui/playingContext.js.map +1 -0
- package/dist/index.d.ts +27 -26
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -0
- package/dist/msToTimeCode.js +4 -0
- package/dist/msToTimeCode.js.map +1 -0
- package/dist/otel/BridgeSpanExporter.js +5 -0
- package/dist/otel/BridgeSpanExporter.js.map +1 -0
- package/dist/otel/setupBrowserTracing.js +7 -2
- package/dist/otel/setupBrowserTracing.js.map +1 -0
- package/dist/otel/tracingHelpers.d.ts +7 -34
- package/dist/otel/tracingHelpers.js +34 -2
- package/dist/otel/tracingHelpers.js.map +1 -0
- package/dist/transcoding/cache/RequestDeduplicator.js +25 -0
- package/dist/transcoding/cache/RequestDeduplicator.js.map +1 -0
- package/dist/transcoding/cache/URLTokenDeduplicator.js +23 -0
- package/dist/transcoding/cache/URLTokenDeduplicator.js.map +1 -0
- package/dist/transcoding/types/index.d.ts +96 -270
- package/dist/transcoding/utils/UrlGenerator.d.ts +30 -25
- package/dist/transcoding/utils/UrlGenerator.js +19 -0
- package/dist/transcoding/utils/UrlGenerator.js.map +1 -0
- package/dist/utils/LRUCache.js +44 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/package.json +11 -24
- package/tsdown.config.ts +36 -0
- package/dist/DelayedLoadingState.d.ts +0 -48
- package/dist/DelayedLoadingState.integration.test.d.ts +0 -1
- package/dist/DelayedLoadingState.test.d.ts +0 -1
- package/dist/EF_INTERACTIVE.d.ts +0 -1
- package/dist/EF_RENDERING.d.ts +0 -1
- package/dist/LoadingDebounce.test.d.ts +0 -1
- package/dist/ManualScrubTest.test.d.ts +0 -1
- package/dist/ScrubResolvedFlashing.test.d.ts +0 -1
- package/dist/ScrubTrackManager.test.d.ts +0 -1
- package/dist/VideoSeekFlashing.browsertest.d.ts +0 -0
- package/dist/VideoStuckDiagnostic.test.d.ts +0 -1
- package/dist/attachContextRoot.d.ts +0 -1
- package/dist/elements/ContextProxiesController.d.ts +0 -39
- package/dist/elements/CrossUpdateController.d.ts +0 -8
- package/dist/elements/EFAudio.browsertest.d.ts +0 -0
- package/dist/elements/EFCaptions.browsertest.d.ts +0 -0
- package/dist/elements/EFImage.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +0 -19
- package/dist/elements/EFMedia/AssetIdMediaEngine.test.d.ts +0 -1
- package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/AssetMediaEngine.d.ts +0 -56
- package/dist/elements/EFMedia/BaseMediaEngine.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/BaseMediaEngine.d.ts +0 -103
- package/dist/elements/EFMedia/BufferedSeekingInput.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/JitMediaEngine.d.ts +0 -46
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +0 -3
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +0 -3
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +0 -7
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +0 -4
- package/dist/elements/EFMedia/audioTasks/makeAudioTasksVideoOnly.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +0 -3
- package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +0 -7
- package/dist/elements/EFMedia/shared/GlobalInputCache.d.ts +0 -39
- package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +0 -28
- package/dist/elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts +0 -1
- package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +0 -11
- package/dist/elements/EFMedia/shared/ThumbnailExtractor.d.ts +0 -27
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts +0 -9
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +0 -17
- package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.d.ts +0 -29
- package/dist/elements/EFMedia/videoTasks/ScrubInputCache.d.ts +0 -25
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.d.ts +0 -8
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.d.ts +0 -3
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.d.ts +0 -6
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.d.ts +0 -4
- package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.d.ts +0 -4
- package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.d.ts +0 -6
- package/dist/elements/EFMedia.browsertest.d.ts +0 -10
- package/dist/elements/EFSurface.browsertest.d.ts +0 -0
- package/dist/elements/EFTemporal.browsertest.d.ts +0 -22
- package/dist/elements/EFThumbnailStrip.browsertest.d.ts +0 -0
- package/dist/elements/EFThumbnailStrip.media-engine.browsertest.d.ts +0 -0
- package/dist/elements/EFTimegroup.browsertest.d.ts +0 -41
- package/dist/elements/EFVideo.browsertest.d.ts +0 -0
- package/dist/elements/FetchContext.browsertest.d.ts +0 -0
- package/dist/elements/TargetController.browsertest.d.ts +0 -19
- package/dist/elements/durationConverter.d.ts +0 -16
- package/dist/elements/parseTimeToMs.d.ts +0 -1
- package/dist/elements/printTaskStatus.d.ts +0 -2
- package/dist/elements/renderTemporalAudio.d.ts +0 -10
- package/dist/elements/updateAnimations.browsertest.d.ts +0 -13
- package/dist/elements/updateAnimations.d.ts +0 -24
- package/dist/elements/util.d.ts +0 -3
- package/dist/gui/ContextMixin.browsertest.d.ts +0 -15
- package/dist/gui/Controllable.browsertest.d.ts +0 -0
- package/dist/gui/EFControls.browsertest.d.ts +0 -11
- package/dist/gui/EFDial.browsertest.d.ts +0 -0
- package/dist/gui/EFFilmstrip.browsertest.d.ts +0 -11
- package/dist/gui/EFPause.browsertest.d.ts +0 -0
- package/dist/gui/EFPlay.browsertest.d.ts +0 -0
- package/dist/gui/EFResizableBox.browsertest.d.ts +0 -0
- package/dist/gui/EFTimeDisplay.browsertest.d.ts +0 -0
- package/dist/gui/TWMixin.d.ts +0 -2
- package/dist/gui/TargetOrContextMixin.d.ts +0 -10
- package/dist/gui/currentTimeContext.d.ts +0 -3
- package/dist/gui/durationContext.d.ts +0 -3
- package/dist/gui/efContext.d.ts +0 -4
- package/dist/gui/fetchContext.d.ts +0 -3
- package/dist/gui/focusedElementContext.d.ts +0 -3
- package/dist/gui/playingContext.d.ts +0 -6
- package/dist/msToTimeCode.d.ts +0 -1
- package/dist/otel/BridgeSpanExporter.d.ts +0 -13
- package/dist/otel/setupBrowserTracing.d.ts +0 -12
- package/dist/style.css +0 -2
- package/dist/transcoding/cache/RequestDeduplicator.d.ts +0 -29
- package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +0 -1
- package/dist/transcoding/cache/URLTokenDeduplicator.d.ts +0 -38
- package/dist/transcoding/cache/URLTokenDeduplicator.test.d.ts +0 -1
- package/dist/transcoding/utils/MediaUtils.d.ts +0 -9
- package/dist/transcoding/utils/constants.d.ts +0 -27
- package/dist/utils/LRUCache.d.ts +0 -80
- package/dist/utils/LRUCache.test.d.ts +0 -1
- /package/dist/{LoadingIndicator.browsertest.d.ts → elements.js} +0 -0
|
@@ -2,8 +2,10 @@ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/dec
|
|
|
2
2
|
import { LitElement, css, html } from "lit";
|
|
3
3
|
import { customElement, property, state } from "lit/decorators.js";
|
|
4
4
|
import { styleMap } from "lit/directives/style-map.js";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
|
|
6
|
+
//#region src/gui/EFResizableBox.ts
|
|
7
|
+
const DEFAULT_MIN_SIZE = 10;
|
|
8
|
+
const CENTER_RESIZE_MULTIPLIER = 2;
|
|
7
9
|
function constrainMovementDeltas(initialBounds, deltaX, deltaY, container) {
|
|
8
10
|
const maxLeftMovement = -initialBounds.x;
|
|
9
11
|
const maxRightMovement = container.width - (initialBounds.x + initialBounds.width);
|
|
@@ -207,7 +209,7 @@ function calculateCenterResizeWithAspectRatio(context, handle) {
|
|
|
207
209
|
height: newHeight
|
|
208
210
|
};
|
|
209
211
|
}
|
|
210
|
-
|
|
212
|
+
let EFResizableBox = class EFResizableBox$1 extends LitElement {
|
|
211
213
|
constructor(..._args) {
|
|
212
214
|
super(..._args);
|
|
213
215
|
this.bounds = {
|
|
@@ -544,4 +546,7 @@ __decorate([property({ type: Number })], EFResizableBox.prototype, "minSize", vo
|
|
|
544
546
|
__decorate([state()], EFResizableBox.prototype, "isDragging", void 0);
|
|
545
547
|
__decorate([state()], EFResizableBox.prototype, "dragMode", void 0);
|
|
546
548
|
EFResizableBox = __decorate([customElement("ef-resizable-box")], EFResizableBox);
|
|
549
|
+
|
|
550
|
+
//#endregion
|
|
547
551
|
export { EFResizableBox };
|
|
552
|
+
//# sourceMappingURL=EFResizableBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFResizableBox.js","names":["movementValue: number","newBounds: BoxBounds","EFResizableBox","context: ResizeContext","idealBounds: BoxBounds","result: BoxBounds"],"sources":["../../src/gui/EFResizableBox.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\n// Constants\nconst DEFAULT_MIN_SIZE = 10;\nconst CENTER_RESIZE_MULTIPLIER = 2;\n\nexport interface BoxBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ntype ResizeCorner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\ntype ResizeSide = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype ResizeHandle = ResizeCorner | ResizeSide;\n\ninterface Dimensions {\n width: number;\n height: number;\n}\n\ninterface ResizeContext {\n readonly initialBounds: BoxBounds;\n readonly container: Dimensions;\n readonly constraints: {\n minSize: number;\n aspectRatio?: number;\n };\n readonly movement: {\n deltaX: number;\n deltaY: number;\n };\n readonly modifiers: {\n centerResize: boolean;\n preserveAspectRatio: boolean;\n };\n}\n\n// Pure calculation functions\nfunction constrainMovementDeltas(\n initialBounds: BoxBounds,\n deltaX: number,\n deltaY: number,\n container: Dimensions,\n): { deltaX: number; deltaY: number } {\n const maxLeftMovement = -initialBounds.x;\n const maxRightMovement =\n container.width - (initialBounds.x + initialBounds.width);\n const maxUpMovement = -initialBounds.y;\n const maxDownMovement =\n container.height - (initialBounds.y + initialBounds.height);\n\n return {\n deltaX: Math.max(maxLeftMovement, Math.min(maxRightMovement, deltaX)),\n deltaY: Math.max(maxUpMovement, Math.min(maxDownMovement, deltaY)),\n };\n}\n\nfunction calculateNormalResize(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement } = context;\n const { deltaX, deltaY } = movement;\n\n switch (handle) {\n case \"bottom-right\":\n return {\n ...initialBounds,\n width: initialBounds.width + deltaX,\n height: initialBounds.height + deltaY,\n };\n\n case \"top-left\": {\n const rightEdge = initialBounds.x + initialBounds.width;\n const bottomEdge = initialBounds.y + initialBounds.height;\n const newX = initialBounds.x + deltaX;\n const newY = initialBounds.y + deltaY;\n\n return {\n x: newX,\n y: newY,\n width: rightEdge - newX,\n height: bottomEdge - newY,\n };\n }\n\n case \"top-right\": {\n const bottomEdge = initialBounds.y + initialBounds.height;\n const newY = initialBounds.y + deltaY;\n\n return {\n ...initialBounds,\n y: newY,\n width: initialBounds.width + deltaX,\n height: bottomEdge - newY,\n };\n }\n\n case \"bottom-left\": {\n const rightEdge = initialBounds.x + initialBounds.width;\n const newX = initialBounds.x + deltaX;\n\n return {\n ...initialBounds,\n x: newX,\n width: rightEdge - newX,\n height: initialBounds.height + deltaY,\n };\n }\n\n case \"top\": {\n const bottomEdge = initialBounds.y + initialBounds.height;\n const newY = initialBounds.y + deltaY;\n\n return {\n ...initialBounds,\n y: newY,\n height: bottomEdge - newY,\n };\n }\n\n case \"right\":\n return {\n ...initialBounds,\n width: initialBounds.width + deltaX,\n };\n\n case \"bottom\":\n return {\n ...initialBounds,\n height: initialBounds.height + deltaY,\n };\n\n case \"left\": {\n const rightEdge = initialBounds.x + initialBounds.width;\n const newX = initialBounds.x + deltaX;\n\n return {\n ...initialBounds,\n x: newX,\n width: rightEdge - newX,\n };\n }\n\n default:\n return initialBounds;\n }\n}\n\nfunction calculateAspectRatioResize(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement, constraints } = context;\n const { deltaX, deltaY } = movement;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n const widthMovement = deltaX;\n const heightMovement = deltaY * aspectRatio;\n\n let movementValue: number;\n switch (handle) {\n case \"bottom-right\":\n case \"top-left\":\n movementValue = (widthMovement + heightMovement) / 2;\n break;\n case \"top-right\":\n case \"bottom-left\":\n movementValue = (widthMovement - heightMovement) / 2;\n break;\n default:\n movementValue = widthMovement;\n }\n\n const baseWidth =\n handle === \"top-left\" || handle === \"bottom-left\"\n ? initialBounds.width - movementValue\n : initialBounds.width + movementValue;\n\n const width = Math.max(constraints.minSize, baseWidth);\n const height = width / aspectRatio;\n\n const newBounds: BoxBounds = { ...initialBounds, width, height };\n\n // Adjust position for handles that move the origin\n switch (handle) {\n case \"top-left\":\n newBounds.x = initialBounds.x + initialBounds.width - width;\n newBounds.y = initialBounds.y + initialBounds.height - height;\n break;\n case \"top-right\":\n newBounds.y = initialBounds.y + initialBounds.height - height;\n break;\n case \"bottom-left\":\n newBounds.x = initialBounds.x + initialBounds.width - width;\n break;\n }\n\n return newBounds;\n}\n\nfunction calculateCenterResize(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement } = context;\n const { deltaX, deltaY } = movement;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n let widthChange = 0;\n let heightChange = 0;\n\n switch (handle) {\n case \"bottom-right\":\n widthChange = deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"top-left\":\n widthChange = -deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = -deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"top-right\":\n widthChange = deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = -deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"bottom-left\":\n widthChange = -deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"top\":\n case \"bottom\":\n heightChange =\n (handle === \"bottom\" ? deltaY : -deltaY) * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"left\":\n case \"right\":\n widthChange =\n (handle === \"right\" ? deltaX : -deltaX) * CENTER_RESIZE_MULTIPLIER;\n break;\n }\n\n const newWidth = initialBounds.width + widthChange;\n const newHeight = initialBounds.height + heightChange;\n\n return {\n x: centerX - newWidth / 2,\n y: centerY - newHeight / 2,\n width: newWidth,\n height: newHeight,\n };\n}\n\nfunction calculateCenterResizeWithAspectRatio(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement, constraints } = context;\n const { deltaX, deltaY } = movement;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n let movementValue: number;\n switch (handle) {\n case \"bottom-right\":\n movementValue = Math.max(deltaX, deltaY);\n break;\n case \"top-left\":\n movementValue = -Math.max(-deltaX, -deltaY);\n break;\n case \"top-right\":\n movementValue = Math.max(deltaX, -deltaY);\n break;\n case \"bottom-left\":\n movementValue = Math.max(-deltaX, deltaY);\n break;\n case \"top\":\n case \"bottom\":\n movementValue = handle === \"bottom\" ? deltaY : -deltaY;\n break;\n case \"left\":\n case \"right\":\n movementValue = handle === \"right\" ? deltaX : -deltaX;\n break;\n default:\n movementValue = Math.max(deltaX, deltaY);\n }\n\n const newWidth = Math.max(\n constraints.minSize,\n initialBounds.width + movementValue * CENTER_RESIZE_MULTIPLIER,\n );\n const newHeight = newWidth / aspectRatio;\n\n return {\n x: centerX - newWidth / 2,\n y: centerY - newHeight / 2,\n width: newWidth,\n height: newHeight,\n };\n}\n\n@customElement(\"ef-resizable-box\")\nexport class EFResizableBox extends LitElement {\n @property({ type: Object })\n bounds: BoxBounds = { x: 0, y: 0, width: 100, height: 100 };\n\n @state()\n private containerWidth = 0;\n\n @state()\n private containerHeight = 0;\n\n @property({ type: Number })\n minSize = DEFAULT_MIN_SIZE;\n\n @state()\n private isDragging = false;\n\n @state()\n private dragMode: \"move\" | \"resize\" | null = null;\n\n private interaction: {\n startPoint: { x: number; y: number };\n target: { mode: \"move\" | \"resize\"; handle?: ResizeHandle };\n initialBounds: BoxBounds;\n pointerId: number;\n } | null = null;\n\n private modifiers = { shift: false, alt: false };\n\n static styles = css`\n .box {\n position: absolute;\n border: 2px solid var(--ef-resizable-box-border-color, #3b82f6);\n background-color: var(--ef-resizable-box-bg-color, rgba(59, 130, 246, 0.2));\n cursor: grab;\n }\n .box.dragging {\n border-color: var(--ef-resizable-box-dragging-border-color, #2563eb);\n background-color: var(--ef-resizable-box-dragging-bg-color, rgba(37, 99, 235, 0.3));\n }\n .handle {\n position: absolute;\n background-color: var(--ef-resizable-box-handle-color, #3b82f6);\n touch-action: none;\n }\n .top-left { top: -4px; left: -4px; width: 8px; height: 8px; cursor: nwse-resize; }\n .top-right { top: -4px; right: -4px; width: 8px; height: 8px; cursor: nesw-resize; }\n .bottom-left { bottom: -4px; left: -4px; width: 8px; height: 8px; cursor: nesw-resize; }\n .bottom-right { bottom: -4px; right: -4px; width: 8px; height: 8px; cursor: nwse-resize; }\n .top { top: -4px; left: 4px; right: 4px; height: 8px; cursor: ns-resize; }\n .right { top: 4px; bottom: 4px; right: -4px; width: 8px; cursor: ew-resize; }\n .bottom { bottom: -4px; left: 4px; right: 4px; height: 8px; cursor: ns-resize; }\n .left { top: 4px; bottom: 4px; left: -4px; width: 8px; cursor: ew-resize; }\n `;\n\n private resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n if (this.offsetParent) {\n this.containerWidth = this.offsetParent.clientWidth;\n this.containerHeight = this.offsetParent.clientHeight;\n }\n this.resizeObserver = new ResizeObserver(() => {\n if (this.offsetParent) {\n this.containerWidth = this.offsetParent.clientWidth;\n this.containerHeight = this.offsetParent.clientHeight;\n }\n });\n if (this.offsetParent) {\n this.resizeObserver.observe(this.offsetParent);\n }\n }\n\n private handlePointerDown(\n e: PointerEvent,\n mode: \"move\" | \"resize\",\n handle?: ResizeHandle,\n ) {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = true;\n this.dragMode = mode;\n\n this.interaction = {\n startPoint: { x: e.clientX, y: e.clientY },\n target: { mode, handle },\n initialBounds: { ...this.bounds },\n pointerId: e.pointerId,\n };\n this.modifiers = { shift: e.shiftKey, alt: e.altKey };\n\n document.addEventListener(\"pointermove\", this.handlePointerMove);\n document.addEventListener(\"pointerup\", this.handlePointerUp);\n }\n\n private handlePointerMove = (e: PointerEvent) => {\n if (\n !this.isDragging ||\n !this.interaction ||\n e.pointerId !== this.interaction.pointerId\n )\n return;\n\n const deltaX = e.clientX - this.interaction.startPoint.x;\n const deltaY = e.clientY - this.interaction.startPoint.y;\n\n this.modifiers = { shift: e.shiftKey, alt: e.altKey };\n\n if (this.dragMode === \"move\") {\n const constrainedMovement = constrainMovementDeltas(\n this.interaction.initialBounds,\n deltaX,\n deltaY,\n { width: this.containerWidth, height: this.containerHeight },\n );\n this.bounds = {\n ...this.interaction.initialBounds,\n x: this.interaction.initialBounds.x + constrainedMovement.deltaX,\n y: this.interaction.initialBounds.y + constrainedMovement.deltaY,\n };\n } else if (this.dragMode === \"resize\" && this.interaction.target.handle) {\n const context: ResizeContext = {\n initialBounds: this.interaction.initialBounds,\n container: { width: this.containerWidth, height: this.containerHeight },\n constraints: {\n minSize: this.minSize,\n aspectRatio: this.modifiers.shift\n ? this.interaction.initialBounds.width /\n this.interaction.initialBounds.height\n : undefined,\n },\n movement: { deltaX, deltaY },\n modifiers: {\n centerResize: this.modifiers.alt,\n preserveAspectRatio: this.modifiers.shift,\n },\n };\n this.bounds = this.calculateBoundsWithModeAwareConstraints(\n context,\n this.interaction.target.handle,\n );\n }\n\n this.dispatchBoundsChange();\n };\n\n private handlePointerUp = () => {\n this.isDragging = false;\n this.dragMode = null;\n this.interaction = null;\n document.removeEventListener(\"pointermove\", this.handlePointerMove);\n document.removeEventListener(\"pointerup\", this.handlePointerUp);\n };\n\n private calculateBoundsWithModeAwareConstraints(\n context: ResizeContext,\n handle: ResizeHandle,\n ): BoxBounds {\n const { modifiers, constraints, container, initialBounds } = context;\n\n // For normal resize, use the simple delta constraint approach\n if (!modifiers.centerResize && !modifiers.preserveAspectRatio) {\n const constrainedMovement = this.constrainResizeDeltas(\n initialBounds,\n context.movement.deltaX,\n context.movement.deltaY,\n handle,\n container,\n constraints.minSize,\n );\n\n return calculateNormalResize(\n {\n ...context,\n movement: constrainedMovement,\n },\n handle,\n );\n }\n\n // For modifier-based resizes, calculate ideal bounds then constrain smartly\n let idealBounds: BoxBounds;\n\n if (modifiers.centerResize && modifiers.preserveAspectRatio) {\n idealBounds = calculateCenterResizeWithAspectRatio(context, handle);\n } else if (modifiers.centerResize) {\n idealBounds = calculateCenterResize(context, handle);\n } else {\n idealBounds = calculateAspectRatioResize(context, handle);\n }\n\n // Smart constraint that preserves the resize mode's behavior\n return this.constrainBoundsForMode(idealBounds, context, handle);\n }\n\n private constrainBoundsForMode(\n idealBounds: BoxBounds,\n context: ResizeContext,\n handle: ResizeHandle,\n ): BoxBounds {\n const { container, constraints, modifiers } = context;\n\n // Check if bounds are already valid\n if (this.isValidBounds(idealBounds, container, constraints.minSize)) {\n return idealBounds;\n }\n\n // For combined center + aspect ratio, need special handling\n if (\n modifiers.centerResize &&\n modifiers.preserveAspectRatio &&\n constraints.aspectRatio\n ) {\n return this.constrainCenterResizeWithAspectRatio(idealBounds, context);\n }\n\n // For aspect ratio modes, we need to scale the bounds proportionally\n if (modifiers.preserveAspectRatio && constraints.aspectRatio) {\n return this.constrainWithAspectRatio(idealBounds, context, handle);\n }\n\n // For center resize, we need to adjust from the center\n if (modifiers.centerResize) {\n return this.constrainCenterResize(idealBounds, context);\n }\n\n // Fallback to simple constraint\n return this.simpleConstrainBounds(\n idealBounds,\n container,\n constraints.minSize,\n );\n }\n\n private isValidBounds(\n bounds: BoxBounds,\n container: Dimensions,\n minSize: number,\n ): boolean {\n return (\n bounds.x >= 0 &&\n bounds.y >= 0 &&\n bounds.width >= minSize &&\n bounds.height >= minSize &&\n bounds.x + bounds.width <= container.width &&\n bounds.y + bounds.height <= container.height\n );\n }\n\n private constrainWithAspectRatio(\n idealBounds: BoxBounds,\n context: ResizeContext,\n handle: ResizeHandle,\n ): BoxBounds {\n const { container, constraints, initialBounds } = context;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n // Calculate maximum allowed dimensions\n const maxWidth = container.width - Math.max(0, idealBounds.x);\n const maxHeight = container.height - Math.max(0, idealBounds.y);\n\n // Find the largest size that fits both constraints\n let constrainedWidth = Math.max(\n constraints.minSize,\n Math.min(maxWidth, idealBounds.width),\n );\n let constrainedHeight = constrainedWidth / aspectRatio;\n\n // If height is too big, constrain by height instead\n if (constrainedHeight > maxHeight) {\n constrainedHeight = Math.max(constraints.minSize, maxHeight);\n constrainedWidth = constrainedHeight * aspectRatio;\n }\n\n // Ensure we don't go smaller than minimum\n if (constrainedWidth < constraints.minSize) {\n constrainedWidth = constraints.minSize;\n constrainedHeight = constrainedWidth / aspectRatio;\n }\n\n const result: BoxBounds = {\n ...idealBounds,\n width: constrainedWidth,\n height: constrainedHeight,\n };\n\n // Adjust position for handles that move the origin\n switch (handle) {\n case \"top-left\":\n result.x = initialBounds.x + initialBounds.width - constrainedWidth;\n result.y = initialBounds.y + initialBounds.height - constrainedHeight;\n break;\n case \"top-right\":\n result.y = initialBounds.y + initialBounds.height - constrainedHeight;\n break;\n case \"bottom-left\":\n result.x = initialBounds.x + initialBounds.width - constrainedWidth;\n break;\n }\n\n // Ensure position is within bounds\n result.x = Math.max(0, Math.min(container.width - result.width, result.x));\n result.y = Math.max(\n 0,\n Math.min(container.height - result.height, result.y),\n );\n\n return result;\n }\n\n private constrainCenterResize(\n idealBounds: BoxBounds,\n context: ResizeContext,\n ): BoxBounds {\n const { container, constraints, initialBounds } = context;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n // Calculate maximum dimensions from center\n const maxWidthFromCenter = Math.min(\n centerX * 2,\n (container.width - centerX) * 2,\n );\n const maxHeightFromCenter = Math.min(\n centerY * 2,\n (container.height - centerY) * 2,\n );\n\n const constrainedWidth = Math.max(\n constraints.minSize,\n Math.min(maxWidthFromCenter, idealBounds.width),\n );\n const constrainedHeight = Math.max(\n constraints.minSize,\n Math.min(maxHeightFromCenter, idealBounds.height),\n );\n\n return {\n x: centerX - constrainedWidth / 2,\n y: centerY - constrainedHeight / 2,\n width: constrainedWidth,\n height: constrainedHeight,\n };\n }\n\n private constrainCenterResizeWithAspectRatio(\n idealBounds: BoxBounds,\n context: ResizeContext,\n ): BoxBounds {\n const { container, constraints, initialBounds } = context;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n // Calculate maximum dimensions from center while maintaining aspect ratio\n const maxWidthFromCenter = Math.min(\n centerX * 2,\n (container.width - centerX) * 2,\n );\n const maxHeightFromCenter = Math.min(\n centerY * 2,\n (container.height - centerY) * 2,\n );\n\n // Start with the ideal width, then constrain\n let constrainedWidth = Math.max(\n constraints.minSize,\n Math.min(maxWidthFromCenter, idealBounds.width),\n );\n let constrainedHeight = constrainedWidth / aspectRatio;\n\n // If height doesn't fit, constrain by height instead\n if (constrainedHeight > maxHeightFromCenter) {\n constrainedHeight = Math.max(constraints.minSize, maxHeightFromCenter);\n constrainedWidth = constrainedHeight * aspectRatio;\n }\n\n // Ensure minimum size\n if (constrainedWidth < constraints.minSize) {\n constrainedWidth = constraints.minSize;\n constrainedHeight = constrainedWidth / aspectRatio;\n }\n\n if (constrainedHeight < constraints.minSize) {\n constrainedHeight = constraints.minSize;\n constrainedWidth = constrainedHeight * aspectRatio;\n }\n\n return {\n x: centerX - constrainedWidth / 2,\n y: centerY - constrainedHeight / 2,\n width: constrainedWidth,\n height: constrainedHeight,\n };\n }\n\n private simpleConstrainBounds(\n bounds: BoxBounds,\n container: Dimensions,\n minSize: number,\n ): BoxBounds {\n return {\n x: Math.max(0, Math.min(container.width - bounds.width, bounds.x)),\n y: Math.max(0, Math.min(container.height - bounds.height, bounds.y)),\n width: Math.max(\n minSize,\n Math.min(container.width - bounds.x, bounds.width),\n ),\n height: Math.max(\n minSize,\n Math.min(container.height - bounds.y, bounds.height),\n ),\n };\n }\n\n private constrainResizeDeltas(\n initialBounds: BoxBounds,\n deltaX: number,\n deltaY: number,\n handle: ResizeHandle,\n container: Dimensions,\n minSize: number,\n ): { deltaX: number; deltaY: number } {\n let constrainedDeltaX = deltaX;\n let constrainedDeltaY = deltaY;\n\n switch (handle) {\n case \"bottom-right\":\n // Can't make smaller than minSize, can't go beyond container\n constrainedDeltaX = Math.max(\n minSize - initialBounds.width,\n Math.min(\n container.width - initialBounds.x - initialBounds.width,\n deltaX,\n ),\n );\n constrainedDeltaY = Math.max(\n minSize - initialBounds.height,\n Math.min(\n container.height - initialBounds.y - initialBounds.height,\n deltaY,\n ),\n );\n break;\n\n case \"top-left\":\n // Can't make smaller than minSize, can't go beyond 0\n constrainedDeltaX = Math.max(\n -initialBounds.x,\n Math.min(initialBounds.width - minSize, deltaX),\n );\n constrainedDeltaY = Math.max(\n -initialBounds.y,\n Math.min(initialBounds.height - minSize, deltaY),\n );\n break;\n\n case \"top-right\":\n constrainedDeltaX = Math.max(\n minSize - initialBounds.width,\n Math.min(\n container.width - initialBounds.x - initialBounds.width,\n deltaX,\n ),\n );\n constrainedDeltaY = Math.max(\n -initialBounds.y,\n Math.min(initialBounds.height - minSize, deltaY),\n );\n break;\n\n case \"bottom-left\":\n constrainedDeltaX = Math.max(\n -initialBounds.x,\n Math.min(initialBounds.width - minSize, deltaX),\n );\n constrainedDeltaY = Math.max(\n minSize - initialBounds.height,\n Math.min(\n container.height - initialBounds.y - initialBounds.height,\n deltaY,\n ),\n );\n break;\n\n case \"right\":\n constrainedDeltaX = Math.max(\n minSize - initialBounds.width,\n Math.min(\n container.width - initialBounds.x - initialBounds.width,\n deltaX,\n ),\n );\n break;\n\n case \"left\":\n constrainedDeltaX = Math.max(\n -initialBounds.x,\n Math.min(initialBounds.width - minSize, deltaX),\n );\n break;\n\n case \"bottom\":\n constrainedDeltaY = Math.max(\n minSize - initialBounds.height,\n Math.min(\n container.height - initialBounds.y - initialBounds.height,\n deltaY,\n ),\n );\n break;\n\n case \"top\":\n constrainedDeltaY = Math.max(\n -initialBounds.y,\n Math.min(initialBounds.height - minSize, deltaY),\n );\n break;\n }\n\n return { deltaX: constrainedDeltaX, deltaY: constrainedDeltaY };\n }\n\n private dispatchBoundsChange() {\n this.dispatchEvent(\n new CustomEvent(\"bounds-change\", {\n detail: { bounds: this.bounds },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render() {\n const boxStyles = {\n left: `${this.bounds.x}px`,\n top: `${this.bounds.y}px`,\n width: `${this.bounds.width}px`,\n height: `${this.bounds.height}px`,\n };\n\n return html`\n <div\n class=\"box ${this.isDragging ? \"dragging\" : \"\"}\"\n style=${styleMap(boxStyles)}\n @pointerdown=${(e: PointerEvent) => this.handlePointerDown(e, \"move\")}\n >\n ${this.renderHandles()}\n <slot></slot>\n </div>\n `;\n }\n\n private renderHandles() {\n const handles: ResizeHandle[] = [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n ];\n return handles.map(\n (handle) => html`\n <div\n class=\"handle ${handle}\"\n @pointerdown=${(e: PointerEvent) => this.handlePointerDown(e, \"resize\", handle)}\n ></div>\n `,\n );\n }\n}\n"],"mappings":"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"}
|
package/dist/gui/EFScrubber.d.ts
CHANGED
|
@@ -1,30 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { ControllableInterface } from "./Controllable.js";
|
|
2
|
+
import * as lit18 from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
import * as lit_html16 from "lit-html";
|
|
5
|
+
|
|
6
|
+
//#region src/gui/EFScrubber.d.ts
|
|
3
7
|
declare const EFScrubber_base: (new (...args: any[]) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
target: string;
|
|
9
|
+
targetElement: ControllableInterface | null;
|
|
10
|
+
effectiveContext: ControllableInterface | null;
|
|
7
11
|
}) & typeof LitElement;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
declare class EFScrubber extends EFScrubber_base {
|
|
13
|
+
static styles: lit18.CSSResult[];
|
|
14
|
+
playing: boolean;
|
|
15
|
+
currentTimeMs: number;
|
|
16
|
+
durationMs: number;
|
|
17
|
+
get context(): ControllableInterface | null;
|
|
18
|
+
private scrubProgress;
|
|
19
|
+
private isMoving;
|
|
20
|
+
private scrubberRef?;
|
|
21
|
+
private updateProgress;
|
|
22
|
+
private boundHandlePointerDown;
|
|
23
|
+
private boundHandlePointerMove;
|
|
24
|
+
private boundHandlePointerUp;
|
|
25
|
+
render(): lit_html16.TemplateResult<1>;
|
|
26
|
+
connectedCallback(): void;
|
|
27
|
+
disconnectedCallback(): void;
|
|
24
28
|
}
|
|
25
29
|
declare global {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
"ef-scrubber": EFScrubber;
|
|
32
|
+
}
|
|
29
33
|
}
|
|
30
|
-
|
|
34
|
+
//#endregion
|
|
35
|
+
export { EFScrubber };
|
|
36
|
+
//# sourceMappingURL=EFScrubber.d.ts.map
|
package/dist/gui/EFScrubber.js
CHANGED
|
@@ -8,7 +8,9 @@ import { consume } from "@lit/context";
|
|
|
8
8
|
import { LitElement, css, html } from "lit";
|
|
9
9
|
import { customElement, state } from "lit/decorators.js";
|
|
10
10
|
import { ref } from "lit/directives/ref.js";
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
//#region src/gui/EFScrubber.ts
|
|
13
|
+
let EFScrubber = class EFScrubber$1 extends TargetOrContextMixin(LitElement, efContext) {
|
|
12
14
|
constructor(..._args) {
|
|
13
15
|
super(..._args);
|
|
14
16
|
this.playing = false;
|
|
@@ -128,4 +130,7 @@ __decorate([consume({
|
|
|
128
130
|
__decorate([state()], EFScrubber.prototype, "scrubProgress", void 0);
|
|
129
131
|
__decorate([state()], EFScrubber.prototype, "isMoving", void 0);
|
|
130
132
|
EFScrubber = __decorate([customElement("ef-scrubber")], EFScrubber);
|
|
133
|
+
|
|
134
|
+
//#endregion
|
|
131
135
|
export { EFScrubber };
|
|
136
|
+
//# sourceMappingURL=EFScrubber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFScrubber.js","names":["EFScrubber"],"sources":["../../src/gui/EFScrubber.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\n\nimport { ref } from \"lit/directives/ref.js\";\nimport type { ControllableInterface } from \"./Controllable.js\";\nimport { currentTimeContext } from \"./currentTimeContext.js\";\nimport { durationContext } from \"./durationContext.js\";\nimport { efContext } from \"./efContext.js\";\nimport { playingContext } from \"./playingContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\n@customElement(\"ef-scrubber\")\nexport class EFScrubber extends TargetOrContextMixin(LitElement, efContext) {\n static styles = [\n css`\n :host {\n --ef-scrubber-height: 4px;\n --ef-scrubber-background: rgb(209 213 219);\n --ef-scrubber-progress-color: rgb(37 99 235);\n --ef-scrubber-handle-size: 12px;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .scrubber {\n width: 100%;\n height: var(--ef-scrubber-height);\n background: var(--ef-scrubber-background);\n position: relative;\n cursor: pointer;\n border-radius: 2px;\n }\n\n .progress {\n position: absolute;\n height: 100%;\n background: var(--ef-scrubber-progress-color);\n border-radius: 2px;\n }\n\n .handle {\n position: absolute;\n width: var(--ef-scrubber-handle-size);\n height: var(--ef-scrubber-handle-size);\n background: var(--ef-scrubber-progress-color);\n border-radius: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n cursor: grab;\n }\n\n /* Add CSS Shadow Parts */\n ::part(scrubber) { }\n ::part(progress) { }\n ::part(handle) { }\n `,\n ];\n\n @consume({ context: playingContext, subscribe: true })\n playing = false;\n\n @consume({ context: currentTimeContext, subscribe: true })\n currentTimeMs = Number.NaN;\n\n @consume({ context: durationContext, subscribe: true })\n durationMs = 0;\n\n get context(): ControllableInterface | null {\n return this.effectiveContext;\n }\n\n @state()\n private scrubProgress = 0;\n\n @state()\n private isMoving = false;\n\n private scrubberRef?: HTMLElement;\n\n private updateProgress(e: MouseEvent) {\n if (!this.context || !this.scrubberRef) return;\n\n const rect = this.scrubberRef.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const progress = Math.max(0, Math.min(1, x / rect.width));\n\n this.scrubProgress = progress;\n this.context.currentTimeMs = progress * this.durationMs;\n }\n\n private boundHandlePointerDown = (e: MouseEvent) => {\n this.isMoving = true;\n e.preventDefault();\n this.updateProgress(e);\n };\n\n private boundHandlePointerMove = (e: MouseEvent) => {\n if (this.isMoving) {\n this.updateProgress(e);\n }\n };\n\n private boundHandlePointerUp = () => {\n this.isMoving = false;\n };\n\n render() {\n // Calculate progress from currentTimeMs and duration\n const currentProgress =\n this.durationMs > 0 ? (this.currentTimeMs ?? 0) / this.durationMs : 0;\n\n const displayProgress = this.isMoving\n ? this.scrubProgress\n : currentProgress;\n\n return html`\n <div \n ${ref((el) => {\n this.scrubberRef = el as HTMLElement;\n })}\n part=\"scrubber\"\n class=\"scrubber\"\n @mousedown=${this.boundHandlePointerDown}\n >\n <div class=\"progress\" style=\"width: ${displayProgress * 100}%\"></div>\n <div class=\"handle\" style=\"left: ${displayProgress * 100}%\"></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"pointerup\", this.boundHandlePointerUp);\n window.addEventListener(\"pointermove\", this.boundHandlePointerMove);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"pointerup\", this.boundHandlePointerUp);\n window.removeEventListener(\"pointermove\", this.boundHandlePointerMove);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-scrubber\": EFScrubber;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAaO,uBAAMA,qBAAmB,qBAAqB,YAAY,UAAU,CAAC;;;iBAiDhE;uBAGM;oBAGH;uBAOW;kBAGL;iCAee,MAAkB;AAClD,QAAK,WAAW;AAChB,KAAE,gBAAgB;AAClB,QAAK,eAAe,EAAE;;iCAGU,MAAkB;AAClD,OAAI,KAAK,SACP,MAAK,eAAe,EAAE;;oCAIW;AACnC,QAAK,WAAW;;;;gBA5FF,CACd,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA4CJ;;CAWD,IAAI,UAAwC;AAC1C,SAAO,KAAK;;CAWd,AAAQ,eAAe,GAAe;AACpC,MAAI,CAAC,KAAK,WAAW,CAAC,KAAK,YAAa;EAExC,MAAM,OAAO,KAAK,YAAY,uBAAuB;EACrD,MAAM,IAAI,EAAE,UAAU,KAAK;EAC3B,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC;AAEzD,OAAK,gBAAgB;AACrB,OAAK,QAAQ,gBAAgB,WAAW,KAAK;;CAmB/C,SAAS;EAEP,MAAM,kBACJ,KAAK,aAAa,KAAK,KAAK,iBAAiB,KAAK,KAAK,aAAa;EAEtE,MAAM,kBAAkB,KAAK,WACzB,KAAK,gBACL;AAEJ,SAAO,IAAI;;UAEL,KAAK,OAAO;AACZ,QAAK,cAAc;IACnB,CAAC;;;qBAGU,KAAK,uBAAuB;;8CAEH,kBAAkB,IAAI;2CACzB,kBAAkB,IAAI;;;;CAK/D,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,SAAO,iBAAiB,aAAa,KAAK,qBAAqB;AAC/D,SAAO,iBAAiB,eAAe,KAAK,uBAAuB;;CAGrE,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,SAAO,oBAAoB,aAAa,KAAK,qBAAqB;AAClE,SAAO,oBAAoB,eAAe,KAAK,uBAAuB;;;YAjFvE,QAAQ;CAAE,SAAS;CAAgB,WAAW;CAAM,CAAC;YAGrD,QAAQ;CAAE,SAAS;CAAoB,WAAW;CAAM,CAAC;YAGzD,QAAQ;CAAE,SAAS;CAAiB,WAAW;CAAM,CAAC;YAOtD,OAAO;YAGP,OAAO;yBAjET,cAAc,cAAc"}
|
|
@@ -1,19 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ControllableInterface } from "./Controllable.js";
|
|
2
|
+
import * as lit19 from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
import * as lit_html17 from "lit-html";
|
|
5
|
+
|
|
6
|
+
//#region src/gui/EFTimeDisplay.d.ts
|
|
2
7
|
declare const EFTimeDisplay_base: (new (...args: any[]) => {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
8
|
+
target: string;
|
|
9
|
+
targetElement: ControllableInterface | null;
|
|
10
|
+
effectiveContext: ControllableInterface | null;
|
|
6
11
|
}) & typeof LitElement;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
declare class EFTimeDisplay extends EFTimeDisplay_base {
|
|
13
|
+
static styles: lit19.CSSResult;
|
|
14
|
+
currentTimeMs: number;
|
|
15
|
+
durationMs: number;
|
|
16
|
+
private formatTime;
|
|
17
|
+
render(): lit_html17.TemplateResult<1>;
|
|
13
18
|
}
|
|
14
19
|
declare global {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
"ef-time-display": EFTimeDisplay;
|
|
22
|
+
}
|
|
18
23
|
}
|
|
19
|
-
|
|
24
|
+
//#endregion
|
|
25
|
+
export { EFTimeDisplay };
|
|
26
|
+
//# sourceMappingURL=EFTimeDisplay.d.ts.map
|
|
@@ -6,7 +6,9 @@ import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
|
|
|
6
6
|
import { consume } from "@lit/context";
|
|
7
7
|
import { LitElement, css, html } from "lit";
|
|
8
8
|
import { customElement } from "lit/decorators.js";
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
//#region src/gui/EFTimeDisplay.ts
|
|
11
|
+
let EFTimeDisplay = class EFTimeDisplay$1 extends TargetOrContextMixin(LitElement, efContext) {
|
|
10
12
|
constructor(..._args) {
|
|
11
13
|
super(..._args);
|
|
12
14
|
this.currentTimeMs = NaN;
|
|
@@ -47,4 +49,7 @@ __decorate([consume({
|
|
|
47
49
|
subscribe: true
|
|
48
50
|
})], EFTimeDisplay.prototype, "durationMs", void 0);
|
|
49
51
|
EFTimeDisplay = __decorate([customElement("ef-time-display")], EFTimeDisplay);
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
50
54
|
export { EFTimeDisplay };
|
|
55
|
+
//# sourceMappingURL=EFTimeDisplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFTimeDisplay.js","names":["EFTimeDisplay"],"sources":["../../src/gui/EFTimeDisplay.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport { currentTimeContext } from \"./currentTimeContext.js\";\nimport { durationContext } from \"./durationContext.js\";\nimport { efContext } from \"./efContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\n@customElement(\"ef-time-display\")\nexport class EFTimeDisplay extends TargetOrContextMixin(LitElement, efContext) {\n static styles = css`\n :host {\n display: inline-block;\n font-family: var(--ef-font-family, system-ui);\n font-size: var(--ef-font-size-xs, 0.75rem);\n color: var(--ef-text-color, rgb(75 85 99));\n white-space: nowrap;\n }\n `;\n\n @consume({ context: currentTimeContext, subscribe: true })\n currentTimeMs = Number.NaN;\n\n @consume({ context: durationContext, subscribe: true })\n durationMs = 0;\n\n private formatTime(ms: number): string {\n // Handle NaN, undefined, null, or negative values\n if (!Number.isFinite(ms) || ms < 0) {\n return \"0:00\";\n }\n\n const totalSeconds = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${minutes}:${seconds.toString().padStart(2, \"0\")}`;\n }\n\n render() {\n const currentTime = this.currentTimeMs;\n const totalTime = this.durationMs;\n\n return html`\n <span part=\"time\">\n ${this.formatTime(currentTime)} / ${this.formatTime(totalTime)}\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-time-display\": EFTimeDisplay;\n }\n}\n"],"mappings":";;;;;;;;;;AASO,0BAAMA,wBAAsB,qBAAqB,YAAY,UAAU,CAAC;;;uBAY7D;oBAGH;;;gBAdG,GAAG;;;;;;;;;;CAgBnB,AAAQ,WAAW,IAAoB;AAErC,MAAI,CAAC,OAAO,SAAS,GAAG,IAAI,KAAK,EAC/B,QAAO;EAGT,MAAM,eAAe,KAAK,MAAM,KAAK,IAAK;AAG1C,SAAO,GAFS,KAAK,MAAM,eAAe,GAAG,CAE3B,IADF,eAAe,IACF,UAAU,CAAC,SAAS,GAAG,IAAI;;CAG1D,SAAS;EACP,MAAM,cAAc,KAAK;EACzB,MAAM,YAAY,KAAK;AAEvB,SAAO,IAAI;;UAEL,KAAK,WAAW,YAAY,CAAC,KAAK,KAAK,WAAW,UAAU,CAAC;;;;;YAxBpE,QAAQ;CAAE,SAAS;CAAoB,WAAW;CAAM,CAAC;YAGzD,QAAQ;CAAE,SAAS;CAAiB,WAAW;CAAM,CAAC;4BAfxD,cAAc,kBAAkB"}
|
|
@@ -1,18 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { ControllableInterface } from "./Controllable.js";
|
|
2
|
+
import * as lit17 from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
import * as lit_html15 from "lit-html";
|
|
5
|
+
|
|
6
|
+
//#region src/gui/EFToggleLoop.d.ts
|
|
3
7
|
declare const EFToggleLoop_base: (new (...args: any[]) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
target: string;
|
|
9
|
+
targetElement: ControllableInterface | null;
|
|
10
|
+
effectiveContext: ControllableInterface | null;
|
|
7
11
|
}) & typeof LitElement;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
declare class EFToggleLoop extends EFToggleLoop_base {
|
|
13
|
+
static styles: lit17.CSSResult[];
|
|
14
|
+
get context(): ControllableInterface | null;
|
|
15
|
+
render(): lit_html15.TemplateResult<1>;
|
|
12
16
|
}
|
|
13
17
|
declare global {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
interface HTMLElementTagNameMap {
|
|
19
|
+
"ef-toggle-loop": EFToggleLoop;
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
|
-
|
|
22
|
+
//#endregion
|
|
23
|
+
export { EFToggleLoop };
|
|
24
|
+
//# sourceMappingURL=EFToggleLoop.d.ts.map
|
package/dist/gui/EFToggleLoop.js
CHANGED
|
@@ -3,7 +3,9 @@ import { efContext } from "./efContext.js";
|
|
|
3
3
|
import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
|
|
4
4
|
import { LitElement, css, html } from "lit";
|
|
5
5
|
import { customElement } from "lit/decorators.js";
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
//#region src/gui/EFToggleLoop.ts
|
|
8
|
+
let EFToggleLoop = class EFToggleLoop$1 extends TargetOrContextMixin(LitElement, efContext) {
|
|
7
9
|
static {
|
|
8
10
|
this.styles = [css`
|
|
9
11
|
:host {}
|
|
@@ -21,4 +23,7 @@ var EFToggleLoop = class EFToggleLoop$1 extends TargetOrContextMixin(LitElement,
|
|
|
21
23
|
}
|
|
22
24
|
};
|
|
23
25
|
EFToggleLoop = __decorate([customElement("ef-toggle-loop")], EFToggleLoop);
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
24
28
|
export { EFToggleLoop };
|
|
29
|
+
//# sourceMappingURL=EFToggleLoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFToggleLoop.js","names":["EFToggleLoop"],"sources":["../../src/gui/EFToggleLoop.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\nimport type { ControllableInterface } from \"./Controllable.js\";\nimport { efContext } from \"./efContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\n@customElement(\"ef-toggle-loop\")\nexport class EFToggleLoop extends TargetOrContextMixin(LitElement, efContext) {\n static styles = [\n css`\n :host {}\n `,\n ];\n\n get context(): ControllableInterface | null {\n return this.effectiveContext;\n }\n\n render() {\n return html`\n <slot @click=${() => {\n if (this.context) {\n this.context.loop = !this.context.loop;\n }\n }}></slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-toggle-loop\": EFToggleLoop;\n }\n}\n"],"mappings":";;;;;;;AAQO,yBAAMA,uBAAqB,qBAAqB,YAAY,UAAU,CAAC;;gBAC5D,CACd,GAAG;;MAGJ;;CAED,IAAI,UAAwC;AAC1C,SAAO,KAAK;;CAGd,SAAS;AACP,SAAO,IAAI;2BACY;AACnB,OAAI,KAAK,QACP,MAAK,QAAQ,OAAO,CAAC,KAAK,QAAQ;IAEpC;;;;2BAlBP,cAAc,iBAAiB"}
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { ControllableInterface } from "./Controllable.js";
|
|
2
|
+
import * as lit14 from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
import * as lit_html12 from "lit-html";
|
|
5
|
+
|
|
6
|
+
//#region src/gui/EFTogglePlay.d.ts
|
|
3
7
|
declare const EFTogglePlay_base: (new (...args: any[]) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
target: string;
|
|
9
|
+
targetElement: ControllableInterface | null;
|
|
10
|
+
effectiveContext: ControllableInterface | null;
|
|
7
11
|
}) & typeof LitElement;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
declare class EFTogglePlay extends EFTogglePlay_base {
|
|
13
|
+
static styles: lit14.CSSResult[];
|
|
14
|
+
playing: boolean;
|
|
15
|
+
get efContext(): ControllableInterface | null;
|
|
16
|
+
connectedCallback(): void;
|
|
17
|
+
disconnectedCallback(): void;
|
|
18
|
+
render(): lit_html12.TemplateResult<1>;
|
|
19
|
+
togglePlay: () => void;
|
|
16
20
|
}
|
|
17
21
|
declare global {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
"ef-toggle-play": EFTogglePlay;
|
|
24
|
+
}
|
|
21
25
|
}
|
|
22
|
-
|
|
26
|
+
//#endregion
|
|
27
|
+
export { EFTogglePlay };
|
|
28
|
+
//# sourceMappingURL=EFTogglePlay.d.ts.map
|
package/dist/gui/EFTogglePlay.js
CHANGED
|
@@ -6,8 +6,10 @@ import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
|
|
|
6
6
|
import { consume } from "@lit/context";
|
|
7
7
|
import { LitElement, css, html } from "lit";
|
|
8
8
|
import { customElement, state } from "lit/decorators.js";
|
|
9
|
+
|
|
10
|
+
//#region src/gui/EFTogglePlay.ts
|
|
9
11
|
attachContextRoot();
|
|
10
|
-
|
|
12
|
+
let EFTogglePlay = class EFTogglePlay$1 extends TargetOrContextMixin(LitElement, efContext) {
|
|
11
13
|
constructor(..._args) {
|
|
12
14
|
super(..._args);
|
|
13
15
|
this.playing = false;
|
|
@@ -48,4 +50,7 @@ __decorate([consume({
|
|
|
48
50
|
subscribe: true
|
|
49
51
|
}), state()], EFTogglePlay.prototype, "playing", void 0);
|
|
50
52
|
EFTogglePlay = __decorate([customElement("ef-toggle-play")], EFTogglePlay);
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
51
55
|
export { EFTogglePlay };
|
|
56
|
+
//# sourceMappingURL=EFTogglePlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFTogglePlay.js","names":["EFTogglePlay"],"sources":["../../src/gui/EFTogglePlay.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { attachContextRoot } from \"../attachContextRoot.js\";\nimport type { ControllableInterface } from \"./Controllable.js\";\nimport { efContext } from \"./efContext.js\";\nimport { playingContext } from \"./playingContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\nattachContextRoot();\n\n@customElement(\"ef-toggle-play\")\nexport class EFTogglePlay extends TargetOrContextMixin(LitElement, efContext) {\n static styles = [\n css`\n :host {}\n div {\n all: inherit;\n }\n `,\n ];\n\n @consume({ context: playingContext, subscribe: true })\n @state()\n playing = false;\n\n get efContext(): ControllableInterface | null {\n return this.effectiveContext;\n }\n\n // Attach click listener to host\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"click\", this.togglePlay);\n }\n\n // Detach click listener from host\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.togglePlay);\n }\n\n render() {\n return html`\n <div>\n ${\n this.playing\n ? html`<slot name=\"pause\"></slot>`\n : html`<slot name=\"play\"></slot>`\n }\n </div>\n `;\n }\n\n togglePlay = () => {\n if (this.efContext) {\n if (this.playing) {\n this.efContext.pause();\n } else {\n this.efContext.play();\n }\n }\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-toggle-play\": EFTogglePlay;\n }\n}\n"],"mappings":";;;;;;;;;;AASA,mBAAmB;AAGZ,yBAAMA,uBAAqB,qBAAqB,YAAY,UAAU,CAAC;;;iBAYlE;0BA8BS;AACjB,OAAI,KAAK,UACP,KAAI,KAAK,QACP,MAAK,UAAU,OAAO;OAEtB,MAAK,UAAU,MAAM;;;;gBA9CX,CACd,GAAG;;;;;MAMJ;;CAMD,IAAI,YAA0C;AAC5C,SAAO,KAAK;;CAId,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,OAAK,iBAAiB,SAAS,KAAK,WAAW;;CAIjD,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,OAAK,oBAAoB,SAAS,KAAK,WAAW;;CAGpD,SAAS;AACP,SAAO,IAAI;;UAGL,KAAK,UACD,IAAI,+BACJ,IAAI,4BACT;;;;;YA3BN,QAAQ;CAAE,SAAS;CAAgB,WAAW;CAAM,CAAC,EACrD,OAAO;2BAZT,cAAc,iBAAiB"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { ContextMixinInterface } from "./ContextMixin.js";
|
|
2
|
+
import * as lit10 from "lit";
|
|
3
|
+
import { LitElement, PropertyValueMap } from "lit";
|
|
4
|
+
import * as lit_html10 from "lit-html";
|
|
5
|
+
import * as lit_html_directives_ref_js2 from "lit-html/directives/ref.js";
|
|
6
|
+
|
|
7
|
+
//#region src/gui/EFWorkbench.d.ts
|
|
8
|
+
declare const EFWorkbench_base: (new (...args: any[]) => ContextMixinInterface) & typeof LitElement;
|
|
9
|
+
declare class EFWorkbench extends EFWorkbench_base {
|
|
10
|
+
static styles: lit10.CSSResult[];
|
|
11
|
+
rendering: boolean;
|
|
12
|
+
focusOverlay: lit_html_directives_ref_js2.Ref<HTMLDivElement>;
|
|
13
|
+
handleStageWheel(event: WheelEvent): void;
|
|
14
|
+
connectedCallback(): void;
|
|
15
|
+
disconnectedCallback(): void;
|
|
16
|
+
update(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
17
|
+
drawOverlays: () => void;
|
|
18
|
+
render(): lit_html10.TemplateResult<1>;
|
|
13
19
|
}
|
|
14
20
|
declare global {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
interface HTMLElementTagNameMap {
|
|
22
|
+
"ef-workbench": EFWorkbench;
|
|
23
|
+
}
|
|
18
24
|
}
|
|
19
|
-
|
|
25
|
+
//#endregion
|
|
26
|
+
export { EFWorkbench };
|
|
27
|
+
//# sourceMappingURL=EFWorkbench.d.ts.map
|
package/dist/gui/EFWorkbench.js
CHANGED
|
@@ -4,7 +4,9 @@ import { TWMixin } from "./TWMixin2.js";
|
|
|
4
4
|
import { LitElement, css, html } from "lit";
|
|
5
5
|
import { customElement, eventOptions, property } from "lit/decorators.js";
|
|
6
6
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
//#region src/gui/EFWorkbench.ts
|
|
9
|
+
let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement)) {
|
|
8
10
|
constructor(..._args) {
|
|
9
11
|
super(..._args);
|
|
10
12
|
this.rendering = false;
|
|
@@ -88,4 +90,7 @@ __decorate([eventOptions({
|
|
|
88
90
|
capture: true
|
|
89
91
|
})], EFWorkbench.prototype, "handleStageWheel", null);
|
|
90
92
|
EFWorkbench = __decorate([customElement("ef-workbench")], EFWorkbench);
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
91
95
|
export { EFWorkbench };
|
|
96
|
+
//# sourceMappingURL=EFWorkbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFWorkbench.js","names":["EFWorkbench"],"sources":["../../src/gui/EFWorkbench.ts"],"sourcesContent":["import { css, html, LitElement, type PropertyValueMap } from \"lit\";\nimport { customElement, eventOptions, property } from \"lit/decorators.js\";\nimport { createRef, ref } from \"lit/directives/ref.js\";\n\nimport { ContextMixin } from \"./ContextMixin.js\";\nimport { TWMixin } from \"./TWMixin.js\";\n\n@customElement(\"ef-workbench\")\nexport class EFWorkbench extends ContextMixin(TWMixin(LitElement)) {\n static styles = [\n css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ];\n\n @property({ type: Boolean })\n rendering = false;\n\n focusOverlay = createRef<HTMLDivElement>();\n\n @eventOptions({ passive: false, capture: true })\n handleStageWheel(event: WheelEvent) {\n event.preventDefault();\n }\n\n connectedCallback(): void {\n document.body.style.width = \"100%\";\n document.body.style.height = \"100%\";\n document.documentElement.style.width = \"100%\";\n document.documentElement.style.height = \"100%\";\n super.connectedCallback();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.body.style.width = \"\";\n document.body.style.height = \"\";\n document.documentElement.style.width = \"\";\n document.documentElement.style.height = \"\";\n }\n\n update(\n changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n super.update(changedProperties);\n\n if (changedProperties.has(\"focusedElement\")) {\n this.drawOverlays();\n }\n }\n\n drawOverlays = () => {\n const focusOverlay = this.focusOverlay.value;\n if (focusOverlay) {\n if (this.focusedElement) {\n focusOverlay.style.display = \"block\";\n const rect = this.focusedElement.getBoundingClientRect();\n Object.assign(focusOverlay.style, {\n position: \"fixed\",\n top: `${rect.top}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n });\n requestAnimationFrame(this.drawOverlays);\n } else {\n focusOverlay.style.display = \"none\";\n }\n }\n };\n\n render() {\n // TODO: this.rendering is not correctly set when using the framegen bridge\n // so to hack we're checking for the existence of EF_RENDERING on the window\n if (\n this.rendering ||\n (typeof window !== \"undefined\" && window.EF_RENDERING?.() === true)\n ) {\n return html`\n <slot class=\"fixed inset-0 h-full w-full\" name=\"canvas\"></slot>\n `;\n }\n return html`\n <div\n class=\"grid h-full w-full bg-slate-800\"\n style=\"grid-template-rows: 1fr 300px; grid-template-columns: 100%;\"\n >\n <div\n class=\"relative h-full w-full overflow-hidden\"\n @wheel=${this.handleStageWheel}\n >\n <ef-fit-scale class=\"h-full grid place-content-center\">\n <slot name=\"canvas\" class=\"contents\"></slot>\n </ef-fit-scale>\n <div\n class=\"border border-blue-500 bg-blue-200 bg-opacity-20 absolute\"\n ${ref(this.focusOverlay)}\n ></div>\n </div>\n\n <slot class=\"overflow inline-block\" name=\"timeline\"></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-workbench\": EFWorkbench;\n }\n}\n"],"mappings":";;;;;;;;AAQO,wBAAMA,sBAAoB,aAAa,QAAQ,WAAW,CAAC,CAAC;;;mBAYrD;sBAEG,WAA2B;4BAiCrB;GACnB,MAAM,eAAe,KAAK,aAAa;AACvC,OAAI,aACF,KAAI,KAAK,gBAAgB;AACvB,iBAAa,MAAM,UAAU;IAC7B,MAAM,OAAO,KAAK,eAAe,uBAAuB;AACxD,WAAO,OAAO,aAAa,OAAO;KAChC,UAAU;KACV,KAAK,GAAG,KAAK,IAAI;KACjB,MAAM,GAAG,KAAK,KAAK;KACnB,OAAO,GAAG,KAAK,MAAM;KACrB,QAAQ,GAAG,KAAK,OAAO;KACxB,CAAC;AACF,0BAAsB,KAAK,aAAa;SAExC,cAAa,MAAM,UAAU;;;;gBA7DnB,CACd,GAAG;;;;;;MAOJ;;CAOD,AACA,iBAAiB,OAAmB;AAClC,QAAM,gBAAgB;;CAGxB,oBAA0B;AACxB,WAAS,KAAK,MAAM,QAAQ;AAC5B,WAAS,KAAK,MAAM,SAAS;AAC7B,WAAS,gBAAgB,MAAM,QAAQ;AACvC,WAAS,gBAAgB,MAAM,SAAS;AACxC,QAAM,mBAAmB;;CAG3B,uBAA6B;AAC3B,QAAM,sBAAsB;AAC5B,WAAS,KAAK,MAAM,QAAQ;AAC5B,WAAS,KAAK,MAAM,SAAS;AAC7B,WAAS,gBAAgB,MAAM,QAAQ;AACvC,WAAS,gBAAgB,MAAM,SAAS;;CAG1C,OACE,mBACM;AACN,QAAM,OAAO,kBAAkB;AAE/B,MAAI,kBAAkB,IAAI,iBAAiB,CACzC,MAAK,cAAc;;CAwBvB,SAAS;AAGP,MACE,KAAK,aACJ,OAAO,WAAW,eAAe,OAAO,gBAAgB,KAAK,KAE9D,QAAO,IAAI;;;AAIb,SAAO,IAAI;;;;;;;mBAOI,KAAK,iBAAiB;;;;;;;cAO3B,IAAI,KAAK,aAAa,CAAC;;;;;;;;;YAjFlC,SAAS,EAAE,MAAM,SAAS,CAAC;YAK3B,aAAa;CAAE,SAAS;CAAO,SAAS;CAAM,CAAC;0BAjBjD,cAAc,eAAe"}
|
|
@@ -1,30 +1,32 @@
|
|
|
1
|
-
import { Task } from
|
|
2
|
-
import { ReactiveController, ReactiveControllerHost } from
|
|
1
|
+
import { Task } from "@lit/task";
|
|
2
|
+
import { ReactiveController, ReactiveControllerHost } from "lit";
|
|
3
|
+
|
|
4
|
+
//#region src/gui/PlaybackController.d.ts
|
|
3
5
|
interface PlaybackHost extends HTMLElement, ReactiveControllerHost {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
6
|
+
currentTimeMs: number;
|
|
7
|
+
durationMs: number;
|
|
8
|
+
endTimeMs: number;
|
|
9
|
+
frameTask: {
|
|
10
|
+
run(): void;
|
|
11
|
+
taskComplete: Promise<unknown>;
|
|
12
|
+
};
|
|
13
|
+
renderAudio?(fromMs: number, toMs: number): Promise<AudioBuffer>;
|
|
14
|
+
waitForMediaDurations?(): Promise<void>;
|
|
15
|
+
saveTimeToLocalStorage?(time: number): void;
|
|
16
|
+
loadTimeFromLocalStorage?(): number | undefined;
|
|
17
|
+
requestUpdate(property?: string): void;
|
|
18
|
+
updateComplete: Promise<boolean>;
|
|
19
|
+
playing: boolean;
|
|
20
|
+
loop: boolean;
|
|
21
|
+
play(): void;
|
|
22
|
+
pause(): void;
|
|
23
|
+
playbackController?: PlaybackController;
|
|
24
|
+
parentTimegroup?: any;
|
|
25
|
+
rootTimegroup?: any;
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
type PlaybackControllerUpdateEvent = {
|
|
28
|
+
property: "playing" | "loop" | "currentTimeMs";
|
|
29
|
+
value: boolean | number;
|
|
28
30
|
};
|
|
29
31
|
/**
|
|
30
32
|
* Manages playback state and audio-driven timing for root temporal elements
|
|
@@ -39,29 +41,31 @@ export type PlaybackControllerUpdateEvent = {
|
|
|
39
41
|
*
|
|
40
42
|
* Works with any temporal element (timegroups or standalone media) via PlaybackHost interface
|
|
41
43
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
44
|
+
declare class PlaybackController implements ReactiveController {
|
|
45
|
+
#private;
|
|
46
|
+
seekTask: Task<readonly [number | undefined], number | undefined>;
|
|
47
|
+
constructor(host: PlaybackHost);
|
|
48
|
+
get currentTime(): number;
|
|
49
|
+
set currentTime(time: number);
|
|
50
|
+
get playing(): boolean;
|
|
51
|
+
setPlaying(value: boolean): void;
|
|
52
|
+
get loop(): boolean;
|
|
53
|
+
setLoop(value: boolean): void;
|
|
54
|
+
get currentTimeMs(): number;
|
|
55
|
+
setCurrentTimeMs(value: number): void;
|
|
56
|
+
play(): void;
|
|
57
|
+
pause(): void;
|
|
58
|
+
hostConnected(): void;
|
|
59
|
+
hostDisconnected(): void;
|
|
60
|
+
hostUpdated(): void;
|
|
61
|
+
runThrottledFrameTask(): Promise<void>;
|
|
62
|
+
addListener(listener: (event: PlaybackControllerUpdateEvent) => void): void;
|
|
63
|
+
removeListener(listener: (event: PlaybackControllerUpdateEvent) => void): void;
|
|
64
|
+
remove(): void;
|
|
65
|
+
private maybeLoopPlayback;
|
|
66
|
+
private stopPlayback;
|
|
67
|
+
private startPlayback;
|
|
66
68
|
}
|
|
67
|
-
|
|
69
|
+
//#endregion
|
|
70
|
+
export { PlaybackController };
|
|
71
|
+
//# sourceMappingURL=PlaybackController.d.ts.map
|