@editframe/elements 0.17.6-beta.0 → 0.18.7-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/EF_FRAMEGEN.js +1 -1
- package/dist/elements/EFAudio.d.ts +21 -2
- package/dist/elements/EFAudio.js +41 -11
- package/dist/elements/EFImage.d.ts +1 -0
- package/dist/elements/EFImage.js +11 -3
- package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +18 -0
- package/dist/elements/EFMedia/AssetIdMediaEngine.js +41 -0
- package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/AssetMediaEngine.d.ts +45 -0
- package/dist/elements/EFMedia/AssetMediaEngine.js +135 -0
- package/dist/elements/EFMedia/BaseMediaEngine.d.ts +55 -0
- package/dist/elements/EFMedia/BaseMediaEngine.js +115 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +43 -0
- package/dist/elements/EFMedia/BufferedSeekingInput.js +179 -0
- package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/JitMediaEngine.d.ts +31 -0
- package/dist/elements/EFMedia/JitMediaEngine.js +81 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +48 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +141 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +16 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +30 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +7 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +32 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +28 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +4 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +17 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +3 -0
- package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +107 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +7 -0
- package/dist/elements/EFMedia/shared/AudioSpanUtils.js +54 -0
- package/dist/elements/EFMedia/shared/BufferUtils.d.ts +70 -0
- package/dist/elements/EFMedia/shared/BufferUtils.js +89 -0
- package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +23 -0
- package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +28 -0
- package/dist/elements/EFMedia/shared/PrecisionUtils.js +29 -0
- package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +19 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +18 -0
- package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +60 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +16 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +46 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.js +16 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.d.ts +3 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoInputTask.js +27 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.d.ts +7 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSeekTask.js +34 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.js +28 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.d.ts +9 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.d.ts +4 -0
- package/dist/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.js +17 -0
- package/dist/elements/EFMedia.browsertest.d.ts +1 -0
- package/dist/elements/EFMedia.d.ts +63 -111
- package/dist/elements/EFMedia.js +117 -1113
- package/dist/elements/EFTemporal.d.ts +1 -1
- package/dist/elements/EFTemporal.js +1 -1
- package/dist/elements/EFTimegroup.d.ts +11 -0
- package/dist/elements/EFTimegroup.js +83 -13
- package/dist/elements/EFVideo.d.ts +54 -32
- package/dist/elements/EFVideo.js +100 -207
- package/dist/elements/EFWaveform.js +2 -2
- package/dist/elements/SampleBuffer.d.ts +14 -0
- package/dist/elements/SampleBuffer.js +52 -0
- package/dist/getRenderInfo.js +2 -1
- package/dist/gui/ContextMixin.js +3 -2
- package/dist/gui/EFFilmstrip.d.ts +3 -3
- package/dist/gui/EFFilmstrip.js +1 -1
- package/dist/gui/EFFitScale.d.ts +2 -2
- package/dist/gui/TWMixin.js +1 -1
- package/dist/style.css +1 -1
- package/dist/transcoding/cache/CacheManager.d.ts +73 -0
- package/dist/transcoding/cache/RequestDeduplicator.d.ts +29 -0
- package/dist/transcoding/cache/RequestDeduplicator.js +53 -0
- package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +1 -0
- package/dist/transcoding/types/index.d.ts +242 -0
- package/dist/transcoding/utils/MediaUtils.d.ts +9 -0
- package/dist/transcoding/utils/UrlGenerator.d.ts +26 -0
- package/dist/transcoding/utils/UrlGenerator.js +45 -0
- package/dist/transcoding/utils/constants.d.ts +27 -0
- package/dist/utils/LRUCache.d.ts +34 -0
- package/dist/utils/LRUCache.js +115 -0
- package/package.json +3 -3
- package/src/elements/EFAudio.browsertest.ts +189 -49
- package/src/elements/EFAudio.ts +59 -13
- package/src/elements/EFImage.browsertest.ts +42 -0
- package/src/elements/EFImage.ts +23 -3
- package/src/elements/EFMedia/AssetIdMediaEngine.test.ts +222 -0
- package/src/elements/EFMedia/AssetIdMediaEngine.ts +70 -0
- package/src/elements/EFMedia/AssetMediaEngine.browsertest.ts +100 -0
- package/src/elements/EFMedia/AssetMediaEngine.ts +255 -0
- package/src/elements/EFMedia/BaseMediaEngine.test.ts +164 -0
- package/src/elements/EFMedia/BaseMediaEngine.ts +219 -0
- package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +481 -0
- package/src/elements/EFMedia/BufferedSeekingInput.ts +324 -0
- package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +165 -0
- package/src/elements/EFMedia/JitMediaEngine.ts +166 -0
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.ts +554 -0
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.ts +81 -0
- package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +250 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.ts +59 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts +23 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.ts +55 -0
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +43 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +199 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +64 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +45 -0
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +24 -0
- package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +183 -0
- package/src/elements/EFMedia/shared/AudioSpanUtils.ts +128 -0
- package/src/elements/EFMedia/shared/BufferUtils.ts +310 -0
- package/src/elements/EFMedia/shared/MediaTaskUtils.ts +44 -0
- package/src/elements/EFMedia/shared/PrecisionUtils.ts +46 -0
- package/src/elements/EFMedia/shared/RenditionHelpers.browsertest.ts +247 -0
- package/src/elements/EFMedia/shared/RenditionHelpers.ts +79 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.ts +128 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.test.ts +233 -0
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.ts +89 -0
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.browsertest.ts +555 -0
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.ts +79 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.browsertest.ts +59 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInitSegmentFetchTask.ts +23 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInputTask.browsertest.ts +55 -0
- package/src/elements/EFMedia/videoTasks/makeVideoInputTask.ts +45 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSeekTask.ts +68 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.browsertest.ts +57 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentFetchTask.ts +43 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.browsertest.ts +56 -0
- package/src/elements/EFMedia/videoTasks/makeVideoSegmentIdTask.ts +24 -0
- package/src/elements/EFMedia.browsertest.ts +706 -273
- package/src/elements/EFMedia.ts +136 -1769
- package/src/elements/EFTemporal.ts +3 -4
- package/src/elements/EFTimegroup.browsertest.ts +6 -3
- package/src/elements/EFTimegroup.ts +147 -21
- package/src/elements/EFVideo.browsertest.ts +980 -169
- package/src/elements/EFVideo.ts +113 -458
- package/src/elements/EFWaveform.ts +1 -1
- package/src/elements/MediaController.ts +2 -12
- package/src/elements/SampleBuffer.ts +95 -0
- package/src/gui/ContextMixin.ts +3 -6
- package/src/transcoding/cache/CacheManager.ts +208 -0
- package/src/transcoding/cache/RequestDeduplicator.test.ts +170 -0
- package/src/transcoding/cache/RequestDeduplicator.ts +65 -0
- package/src/transcoding/types/index.ts +269 -0
- package/src/transcoding/utils/MediaUtils.ts +63 -0
- package/src/transcoding/utils/UrlGenerator.ts +68 -0
- package/src/transcoding/utils/constants.ts +36 -0
- package/src/utils/LRUCache.ts +153 -0
- package/test/EFVideo.framegen.browsertest.ts +39 -30
- package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__32da3954ba60c96ad732020c65a08ebc/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__9ed2d25c675aa6bb6ff5b3ae23887c71/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_1_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__9ed2d25c675aa6bb6ff5b3ae23887c71/metadata.json +22 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__b0b2b07efcf607de8ee0f650328c32f7/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__d5a3309a2bf756dd6e304807eb402f56/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_2_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__d5a3309a2bf756dd6e304807eb402f56/metadata.json +22 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a75c2252b542e0c152c780e9a8d7b154/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__773254bb671e3466fca8677139fb239e/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_3_mp4_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4_bytes_0__773254bb671e3466fca8677139fb239e/metadata.json +22 -0
- package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a64ff1cfb1b52cae14df4b5dfa1e222b/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__91e8a522f950809b9f09f4173113b4b0/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_audio_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__e66d2c831d951e74ad0aeaa6489795d0/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_1_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__26197f6f7c46cacb0a71134131c3f775/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_2_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__4cb6774cd3650ccf59c8f8dc6678c0b9/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_3_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0b3b2b1c8933f7fcf8a9ecaa88d58b41/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a6fb05a22b18d850f7f2950bbcdbdeed/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_4_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a6fb05a22b18d850f7f2950bbcdbdeed/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a50058c7c3602e90879fe3428ed891f4/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_5_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__a50058c7c3602e90879fe3428ed891f4/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/data.bin +0 -0
- package/test/__cache__/GET__api_v1_transcode_high_init_m4s_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__0798c479b44aaeef850609a430f6e613/metadata.json +21 -0
- package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/data.bin +1 -0
- package/test/__cache__/GET__api_v1_transcode_manifest_json_url_http_3A_2F_2Fweb_3A3000_2Fhead_moov_480p_mp4__3be92a0437de726b431ed5af2369158a/metadata.json +19 -0
- package/test/createJitTestClips.ts +320 -188
- package/test/recordReplayProxyPlugin.js +352 -0
- package/test/useAssetMSW.ts +1 -1
- package/test/useMSW.ts +35 -22
- package/types.json +1 -1
- package/dist/JitTranscodingClient.d.ts +0 -167
- package/dist/JitTranscodingClient.js +0 -373
- package/dist/ScrubTrackManager.d.ts +0 -96
- package/dist/ScrubTrackManager.js +0 -216
- package/dist/elements/printTaskStatus.js +0 -11
- package/src/elements/__screenshots__/EFMedia.browsertest.ts/EFMedia-JIT-audio-playback-audioBufferTask-should-work-in-JIT-mode-without-URL-errors-1.png +0 -0
- package/test/EFVideo.frame-tasks.browsertest.ts +0 -524
- /package/dist/{DecoderResetFrequency.test.d.ts → elements/EFMedia/AssetIdMediaEngine.test.d.ts} +0 -0
- /package/dist/{DecoderResetRecovery.test.d.ts → elements/EFMedia/BaseMediaEngine.test.d.ts} +0 -0
- /package/dist/{JitTranscodingClient.browsertest.d.ts → elements/EFMedia/BufferedSeekingInput.browsertest.d.ts} +0 -0
- /package/dist/{JitTranscodingClient.test.d.ts → elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts} +0 -0
- /package/dist/{ScrubTrackIntegration.test.d.ts → elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts} +0 -0
- /package/dist/{SegmentSwitchLoading.test.d.ts → elements/EFMedia/tasks/makeMediaEngineTask.test.d.ts} +0 -0
package/dist/elements/EFVideo.js
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
import { EFMedia } from "./EFMedia.js";
|
|
2
|
-
import { DelayedLoadingState } from "../DelayedLoadingState.js";
|
|
3
2
|
import { TWMixin } from "../gui/TWMixin2.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { DelayedLoadingState } from "../DelayedLoadingState.js";
|
|
4
|
+
import { makeVideoBufferTask } from "./EFMedia/videoTasks/makeVideoBufferTask.js";
|
|
5
|
+
import { makeVideoInitSegmentFetchTask } from "./EFMedia/videoTasks/makeVideoInitSegmentFetchTask.js";
|
|
6
|
+
import { makeVideoInputTask } from "./EFMedia/videoTasks/makeVideoInputTask.js";
|
|
7
|
+
import { makeVideoSeekTask } from "./EFMedia/videoTasks/makeVideoSeekTask.js";
|
|
8
|
+
import { makeVideoSegmentFetchTask } from "./EFMedia/videoTasks/makeVideoSegmentFetchTask.js";
|
|
9
|
+
import { makeVideoSegmentIdTask } from "./EFMedia/videoTasks/makeVideoSegmentIdTask.js";
|
|
6
10
|
import { Task } from "@lit/task";
|
|
7
11
|
import debug from "debug";
|
|
8
12
|
import { css, html } from "lit";
|
|
9
|
-
import { customElement, state } from "lit/decorators.js";
|
|
13
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
10
14
|
import _decorate from "@oxc-project/runtime/helpers/decorate";
|
|
11
|
-
import { VideoAsset } from "@editframe/assets/EncodedAsset.js";
|
|
12
15
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
13
16
|
const log = debug("ef:elements:EFVideo");
|
|
14
17
|
let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
18
|
+
static get observedAttributes() {
|
|
19
|
+
const parentAttributes = EFMedia.observedAttributes || [];
|
|
20
|
+
return [
|
|
21
|
+
...parentAttributes,
|
|
22
|
+
"video-buffer-duration",
|
|
23
|
+
"max-video-buffer-fetches",
|
|
24
|
+
"enable-video-buffering"
|
|
25
|
+
];
|
|
26
|
+
}
|
|
15
27
|
static {
|
|
16
28
|
this.styles = [css`
|
|
17
29
|
:host {
|
|
@@ -76,7 +88,15 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
76
88
|
constructor() {
|
|
77
89
|
super();
|
|
78
90
|
this.canvasRef = createRef();
|
|
79
|
-
this.
|
|
91
|
+
this.videoBufferDurationMs = 6e4;
|
|
92
|
+
this.maxVideoBufferFetches = 2;
|
|
93
|
+
this.enableVideoBuffering = true;
|
|
94
|
+
this.videoSegmentIdTask = makeVideoSegmentIdTask(this);
|
|
95
|
+
this.videoInitSegmentFetchTask = makeVideoInitSegmentFetchTask(this);
|
|
96
|
+
this.videoSegmentFetchTask = makeVideoSegmentFetchTask(this);
|
|
97
|
+
this.videoInputTask = makeVideoInputTask(this);
|
|
98
|
+
this.videoSeekTask = makeVideoSeekTask(this);
|
|
99
|
+
this.videoBufferTask = makeVideoBufferTask(this);
|
|
80
100
|
this.loadingState = {
|
|
81
101
|
isLoading: false,
|
|
82
102
|
operation: null,
|
|
@@ -87,71 +107,28 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
87
107
|
onError: (error) => {
|
|
88
108
|
console.error("frameTask error", error);
|
|
89
109
|
},
|
|
110
|
+
onComplete: () => {},
|
|
90
111
|
task: async ([_desiredSeekTimeMs], { signal }) => {
|
|
91
|
-
await this.
|
|
92
|
-
if (signal.aborted) return;
|
|
93
|
-
await this.fragmentIndexTask.taskComplete;
|
|
94
|
-
if (signal.aborted) return;
|
|
95
|
-
await this.mediaSegmentsTask.taskComplete;
|
|
96
|
-
if (signal.aborted) return;
|
|
97
|
-
await this.videoAssetTask.taskComplete;
|
|
98
|
-
if (signal.aborted) return;
|
|
112
|
+
await this.videoSeekTask.taskComplete;
|
|
99
113
|
await this.paintTask.taskComplete;
|
|
100
114
|
if (signal.aborted) return;
|
|
101
115
|
}
|
|
102
116
|
});
|
|
103
|
-
this.videoAssetTask = new Task(this, {
|
|
104
|
-
autoRun: true,
|
|
105
|
-
args: () => [this.effectiveMode, this.mediaSegmentsTask.value],
|
|
106
|
-
onError: (error) => {
|
|
107
|
-
console.error("videoAsset task error", error);
|
|
108
|
-
},
|
|
109
|
-
task: async ([mode, _files], { signal: _signal }) => {
|
|
110
|
-
await this.mediaSegmentsTask.taskComplete;
|
|
111
|
-
if (_signal.aborted) return void 0;
|
|
112
|
-
await this.fragmentIndexTask.taskComplete;
|
|
113
|
-
if (_signal.aborted) return void 0;
|
|
114
|
-
const files = this.mediaSegmentsTask.value;
|
|
115
|
-
const fragmentIndex = this.fragmentIndexTask.value;
|
|
116
|
-
if (!files) {
|
|
117
|
-
log("trace: videoAsset task aborted - no files");
|
|
118
|
-
throw new Error(`Video asset creation failed: No media segment files available. This indicates a problem with media segment loading for source: "${this.src}"`);
|
|
119
|
-
}
|
|
120
|
-
const computedVideoTrackId = Object.values(fragmentIndex ?? {}).find((track) => track.type === "video")?.track;
|
|
121
|
-
if (computedVideoTrackId === void 0) {
|
|
122
|
-
log("trace: videoAsset task aborted - no video track");
|
|
123
|
-
throw new Error(`Video asset creation failed: No video track found in media segments. Source may not contain video content: "${this.src}"`);
|
|
124
|
-
}
|
|
125
|
-
const videoFile = files[computedVideoTrackId];
|
|
126
|
-
if (!videoFile) {
|
|
127
|
-
log("trace: videoAsset task aborted - no video file");
|
|
128
|
-
throw new Error(`Video asset creation failed: Video file not available for track ${computedVideoTrackId}. Media segment loading may have failed for source: "${this.src}"`);
|
|
129
|
-
}
|
|
130
|
-
const existingAsset = this.videoAssetTask.value;
|
|
131
|
-
if (existingAsset) {
|
|
132
|
-
for (const frame of existingAsset?.decodedFrames || []) frame.close();
|
|
133
|
-
const decoder = existingAsset?.videoDecoder;
|
|
134
|
-
if (decoder && decoder.state !== "closed") decoder.close();
|
|
135
|
-
}
|
|
136
|
-
if (_signal.aborted) return void 0;
|
|
137
|
-
log("trace: creating video asset", { mode });
|
|
138
|
-
const videoTrackFragmentIndex = Object.values(fragmentIndex ?? {}).find((track) => track.type === "video");
|
|
139
|
-
const startTimeOffsetMs = Number((videoTrackFragmentIndex?.startTimeOffsetMs ?? 0).toFixed(5));
|
|
140
|
-
if (mode === "jit-transcode") {
|
|
141
|
-
const result$1 = await VideoAsset.createFromCompleteMP4(`jit-segment-${computedVideoTrackId}`, videoFile, { startTimeOffsetMs });
|
|
142
|
-
return result$1;
|
|
143
|
-
}
|
|
144
|
-
const result = await VideoAsset.createFromReadableStream("video.mp4", videoFile.stream(), videoFile, { startTimeOffsetMs });
|
|
145
|
-
return result;
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
117
|
this.paintTask = new Task(this, {
|
|
149
118
|
args: () => [this.desiredSeekTimeMs],
|
|
150
119
|
onError: (error) => {
|
|
151
120
|
console.error("paintTask error", error);
|
|
152
121
|
},
|
|
122
|
+
onComplete: () => {},
|
|
153
123
|
task: async ([_seekToMs], { signal }) => {
|
|
124
|
+
await this.videoSeekTask.taskComplete;
|
|
154
125
|
const isProductionRendering = this.isInProductionRenderingMode();
|
|
126
|
+
const sample = this.videoSeekTask.value;
|
|
127
|
+
if (sample) {
|
|
128
|
+
const videoFrame = sample.toVideoFrame();
|
|
129
|
+
this.displayFrame(videoFrame, _seekToMs);
|
|
130
|
+
videoFrame.close();
|
|
131
|
+
}
|
|
155
132
|
if (!isProductionRendering) {
|
|
156
133
|
if (!this.rootTimegroup || this.rootTimegroup.currentTimeMs === 0 && this.desiredSeekTimeMs === 0) return;
|
|
157
134
|
} else {
|
|
@@ -159,83 +136,6 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
159
136
|
if (!this.isFrameRenderingActive()) return;
|
|
160
137
|
}
|
|
161
138
|
if (signal.aborted) return;
|
|
162
|
-
await this.mediaSegmentsTask.taskComplete;
|
|
163
|
-
if (signal.aborted) return;
|
|
164
|
-
await this.videoAssetTask.taskComplete;
|
|
165
|
-
if (signal.aborted) return;
|
|
166
|
-
const videoAsset = this.videoAssetTask.value;
|
|
167
|
-
const currentSeekToMs = this.desiredSeekTimeMs;
|
|
168
|
-
if (!videoAsset) {
|
|
169
|
-
log("trace: paintTask aborted - no video asset");
|
|
170
|
-
throw new Error(`Frame rendering failed: No video asset available. This may indicate a problem with video loading or an invalid source: "${this.src}"`);
|
|
171
|
-
}
|
|
172
|
-
if (this.#decoderNeedsReset) try {
|
|
173
|
-
if (videoAsset?.videoDecoder) videoAsset.configureDecoder();
|
|
174
|
-
else console.warn("No video decoder available for reset");
|
|
175
|
-
this.#decoderNeedsReset = false;
|
|
176
|
-
} catch (resetError) {
|
|
177
|
-
console.error("reset error", resetError);
|
|
178
|
-
throw new Error(`Frame rendering failed: Unable to reset video decoder after previous error. Decoder state: ${resetError instanceof Error ? resetError.message : "Unknown error"}. Try refreshing the page or reloading the video.`);
|
|
179
|
-
}
|
|
180
|
-
if (signal.aborted) return;
|
|
181
|
-
if (this.#decoderLock) return;
|
|
182
|
-
try {
|
|
183
|
-
this.#decoderLock = true;
|
|
184
|
-
const currentVideoAsset = this.videoAssetTask.value;
|
|
185
|
-
if (videoAsset !== currentVideoAsset) return;
|
|
186
|
-
const decoderState = videoAsset?.videoDecoder?.state;
|
|
187
|
-
if (decoderState === "closed") return;
|
|
188
|
-
if (this.effectiveMode === "jit-transcode" && this.scrubTrackManager) {
|
|
189
|
-
const shouldUseScrub = this.scrubTrackManager.shouldUseScrubTrack(currentSeekToMs);
|
|
190
|
-
const isFastSeeking = this.scrubTrackManager.isFastSeeking(this.lastSeekTimeMs, currentSeekToMs);
|
|
191
|
-
if (shouldUseScrub || isFastSeeking) try {
|
|
192
|
-
this.startDelayedLoading("scrub-segment-load", "Loading scrub segment...");
|
|
193
|
-
const scrubFrame = await this.scrubTrackManager.getScrubFrame(currentSeekToMs);
|
|
194
|
-
if (scrubFrame && this.canvasElement) {
|
|
195
|
-
this.scrubTrackManager.recordCacheMiss();
|
|
196
|
-
this.lastSeekTimeMs = currentSeekToMs;
|
|
197
|
-
this.clearDelayedLoading("scrub-segment-load");
|
|
198
|
-
return this.displayFrame(scrubFrame, currentSeekToMs);
|
|
199
|
-
}
|
|
200
|
-
console.warn("Scrub track returned null frame, falling back to normal video");
|
|
201
|
-
this.clearDelayedLoading("scrub-segment-load");
|
|
202
|
-
this.startDelayedLoading("video-segment-fallback", "Loading high quality video...");
|
|
203
|
-
} catch (error) {
|
|
204
|
-
this.clearDelayedLoading("scrub-segment-load");
|
|
205
|
-
console.warn("Scrub track failed, falling back to normal video:", error);
|
|
206
|
-
this.startDelayedLoading("video-segment-fallback", "Loading high quality video...");
|
|
207
|
-
}
|
|
208
|
-
else this.scrubTrackManager?.recordCacheHit();
|
|
209
|
-
}
|
|
210
|
-
const shouldShowLoading = !this.delayedLoadingState.isLoading && (this.effectiveMode !== "asset" || !videoAsset);
|
|
211
|
-
if (shouldShowLoading) this.startDelayedLoading("video-segment", "Loading video segment...");
|
|
212
|
-
this.lastSeekTimeMs = currentSeekToMs;
|
|
213
|
-
const result = await this.renderNormalVideo(videoAsset, currentSeekToMs);
|
|
214
|
-
this.clearDelayedLoading("video-segment");
|
|
215
|
-
this.clearDelayedLoading("video-segment-fallback");
|
|
216
|
-
return result;
|
|
217
|
-
} catch (error) {
|
|
218
|
-
this.clearDelayedLoading("scrub-segment-load");
|
|
219
|
-
this.clearDelayedLoading("video-segment");
|
|
220
|
-
this.clearDelayedLoading("video-segment-fallback");
|
|
221
|
-
if (error instanceof Error) {
|
|
222
|
-
if (error.name === "DataError" && error.message.includes("key frame is required")) {
|
|
223
|
-
console.warn("Decoder reset during VideoAsset due to key frame requirement");
|
|
224
|
-
this.#decoderNeedsReset = true;
|
|
225
|
-
if (this.effectiveMode === "jit-transcode") this.requestUpdate();
|
|
226
|
-
throw error;
|
|
227
|
-
}
|
|
228
|
-
if (error.name === "AbortError") throw new Error("Frame rendering cancelled: Operation was aborted, likely due to a new seek request or component unmounting.");
|
|
229
|
-
if (error.message.includes("VideoAsset decoder closed") || error.message.includes("recreation in progress")) return;
|
|
230
|
-
if (error.name === "InvalidStateError" && error.message.includes("closed codec")) return;
|
|
231
|
-
console.warn("Decoder reset during VideoAsset recreation", error);
|
|
232
|
-
this.#decoderNeedsReset = true;
|
|
233
|
-
throw error;
|
|
234
|
-
}
|
|
235
|
-
throw new Error(`Frame rendering failed: Unknown error during video rendering at ${currentSeekToMs}ms. Error: ${String(error)}`);
|
|
236
|
-
} finally {
|
|
237
|
-
this.#decoderLock = false;
|
|
238
|
-
}
|
|
239
139
|
}
|
|
240
140
|
});
|
|
241
141
|
this.delayedLoadingState = new DelayedLoadingState(250, (isLoading, message) => {
|
|
@@ -261,46 +161,8 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
261
161
|
get canvasElement() {
|
|
262
162
|
return this.canvasRef.value;
|
|
263
163
|
}
|
|
264
|
-
#decoderLock = false;
|
|
265
|
-
#decoderNeedsReset = false;
|
|
266
|
-
get frameTaskStatus() {
|
|
267
|
-
return {
|
|
268
|
-
desiredSeekTimeMs: this.desiredSeekTimeMs,
|
|
269
|
-
fragmentIndexTask: printTaskStatus(this.fragmentIndexTask.status),
|
|
270
|
-
seekTask: printTaskStatus(this.seekTask.status),
|
|
271
|
-
mediaSegmentsTask: printTaskStatus(this.mediaSegmentsTask.status),
|
|
272
|
-
assetSegmentLoader: printTaskStatus(this.assetSegmentLoader.status),
|
|
273
|
-
assetSegmentKeysTask: printTaskStatus(this.assetSegmentKeysTask.status),
|
|
274
|
-
assetInitSegmentsTask: printTaskStatus(this.assetInitSegmentsTask.status),
|
|
275
|
-
videoAssetTask: printTaskStatus(this.videoAssetTask.status),
|
|
276
|
-
paintTask: printTaskStatus(this.paintTask.status),
|
|
277
|
-
frameTask: printTaskStatus(this.frameTask.status)
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
#lastVideoAsset = null;
|
|
281
164
|
updated(changedProperties) {
|
|
282
165
|
super.updated(changedProperties);
|
|
283
|
-
const currentVideoAsset = this.videoAssetTask.value;
|
|
284
|
-
if (currentVideoAsset !== this.#lastVideoAsset) this.#lastVideoAsset = currentVideoAsset;
|
|
285
|
-
this.initializeScrubTrackManager();
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Initialize scrub track manager if needed
|
|
289
|
-
*/
|
|
290
|
-
async initializeScrubTrackManager() {
|
|
291
|
-
const mode = this.effectiveMode;
|
|
292
|
-
if (mode === "jit-transcode" && this.src && !this.scrubTrackManager) {
|
|
293
|
-
const jitClient = this.jitClientTask.value;
|
|
294
|
-
if (jitClient) try {
|
|
295
|
-
this.scrubTrackManager = new ScrubTrackManager(this.src, jitClient, { onLoadingStateChange: (isLoading, message) => {
|
|
296
|
-
if (isLoading) this.startDelayedLoading("scrub-segment", message || "Loading scrub track...");
|
|
297
|
-
else this.clearDelayedLoading("scrub-segment");
|
|
298
|
-
} });
|
|
299
|
-
await this.scrubTrackManager.initialize();
|
|
300
|
-
} catch (error) {
|
|
301
|
-
console.warn("Failed to initialize scrub track manager:", error);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
166
|
}
|
|
305
167
|
/**
|
|
306
168
|
* Start a delayed loading operation for testing
|
|
@@ -325,34 +187,6 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
325
187
|
};
|
|
326
188
|
}
|
|
327
189
|
/**
|
|
328
|
-
* Render normal video using existing logic
|
|
329
|
-
*/
|
|
330
|
-
async renderNormalVideo(videoAsset, seekToMs) {
|
|
331
|
-
let targetSeekTimeSeconds = seekToMs / 1e3;
|
|
332
|
-
try {
|
|
333
|
-
const currentVideoAsset = this.videoAssetTask.value;
|
|
334
|
-
if (videoAsset !== currentVideoAsset) throw new Error("VideoAsset decoder closed during seek - recreation in progress");
|
|
335
|
-
const decoderState = videoAsset?.videoDecoder?.state;
|
|
336
|
-
if (decoderState === "closed") throw new Error("VideoAsset decoder closed during seek - recreation in progress");
|
|
337
|
-
if (this.effectiveMode === "jit-transcode") targetSeekTimeSeconds %= 2;
|
|
338
|
-
const frame = await videoAsset.seekToTime(targetSeekTimeSeconds);
|
|
339
|
-
if (frame) {
|
|
340
|
-
const finalVideoAsset = this.videoAssetTask.value;
|
|
341
|
-
if (videoAsset !== finalVideoAsset) {
|
|
342
|
-
frame.close();
|
|
343
|
-
throw new Error("VideoAsset decoder closed during seek - recreation in progress");
|
|
344
|
-
}
|
|
345
|
-
const finalSeekToMs = this.desiredSeekTimeMs;
|
|
346
|
-
return this.displayFrame(frame, finalSeekToMs);
|
|
347
|
-
}
|
|
348
|
-
log("trace: no frame returned from seekToTime");
|
|
349
|
-
throw new Error(`Frame rendering failed: No frame available at time ${seekToMs}ms (${targetSeekTimeSeconds}s). This may indicate seeking beyond video duration, corrupted video data, or an incompatible video format.`);
|
|
350
|
-
} catch (error) {
|
|
351
|
-
if (error instanceof Error && (error.message.includes("VideoAsset decoder closed") || error.message.includes("recreation in progress"))) throw error;
|
|
352
|
-
throw error;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
190
|
* Display a video frame on the canvas
|
|
357
191
|
*/
|
|
358
192
|
displayFrame(frame, seekToMs) {
|
|
@@ -383,7 +217,7 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
383
217
|
log("trace: displayFrame aborted - null frame format");
|
|
384
218
|
throw new Error(`Frame display failed: Video frame has null format at time ${seekToMs}ms. This indicates corrupted or incompatible video data.`);
|
|
385
219
|
}
|
|
386
|
-
log("trace: drawing frame to canvas");
|
|
220
|
+
log("trace: drawing frame to canvas", frame.timestamp / 1e3);
|
|
387
221
|
ctx.drawImage(frame, 0, 0, this.canvasElement.width, this.canvasElement.height);
|
|
388
222
|
log("trace: frame drawn to canvas", { seekToMs });
|
|
389
223
|
return seekToMs;
|
|
@@ -409,20 +243,79 @@ let EFVideo = class EFVideo$1 extends TWMixin(EFMedia) {
|
|
|
409
243
|
return currentTime >= renderStartTime;
|
|
410
244
|
}
|
|
411
245
|
/**
|
|
412
|
-
*
|
|
246
|
+
* Effective mode - always returns "asset" for EFVideo
|
|
247
|
+
*/
|
|
248
|
+
get effectiveMode() {
|
|
249
|
+
return "asset";
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Legacy getter for asset index loader (maps to mediaEngine task)
|
|
253
|
+
*/
|
|
254
|
+
get assetIndexLoader() {
|
|
255
|
+
return this.mediaEngineTask;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Legacy getter for fragment index task (maps to videoSegmentIdTask)
|
|
259
|
+
*/
|
|
260
|
+
get fragmentIndexTask() {
|
|
261
|
+
return this.videoSegmentIdTask;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Legacy getter for seek task (maps to videoSeekTask)
|
|
265
|
+
*/
|
|
266
|
+
get seekTask() {
|
|
267
|
+
return this.videoSeekTask;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Legacy getter for media segments task (maps to videoSegmentFetchTask)
|
|
271
|
+
*/
|
|
272
|
+
get mediaSegmentsTask() {
|
|
273
|
+
return this.videoSegmentFetchTask;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Legacy getter for asset segment keys task (maps to videoSegmentIdTask)
|
|
277
|
+
*/
|
|
278
|
+
get assetSegmentKeysTask() {
|
|
279
|
+
return this.videoSegmentIdTask;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Legacy getter for asset init segments task (maps to videoInitSegmentFetchTask)
|
|
283
|
+
*/
|
|
284
|
+
get assetInitSegmentsTask() {
|
|
285
|
+
return this.videoInitSegmentFetchTask;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Legacy getter for asset segment loader (maps to videoSegmentFetchTask)
|
|
289
|
+
*/
|
|
290
|
+
get assetSegmentLoader() {
|
|
291
|
+
return this.videoSegmentFetchTask;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Legacy getter for video asset task (maps to videoBufferTask)
|
|
413
295
|
*/
|
|
414
|
-
|
|
415
|
-
return this.
|
|
296
|
+
get videoAssetTask() {
|
|
297
|
+
return this.videoBufferTask;
|
|
416
298
|
}
|
|
417
299
|
/**
|
|
418
300
|
* Clean up resources when component is disconnected
|
|
419
301
|
*/
|
|
420
302
|
disconnectedCallback() {
|
|
421
303
|
super.disconnectedCallback();
|
|
422
|
-
this.scrubTrackManager?.cleanup();
|
|
423
304
|
this.delayedLoadingState.clearAllLoading();
|
|
424
305
|
}
|
|
425
306
|
};
|
|
307
|
+
_decorate([property({
|
|
308
|
+
type: Number,
|
|
309
|
+
attribute: "video-buffer-duration"
|
|
310
|
+
})], EFVideo.prototype, "videoBufferDurationMs", void 0);
|
|
311
|
+
_decorate([property({
|
|
312
|
+
type: Number,
|
|
313
|
+
attribute: "max-video-buffer-fetches"
|
|
314
|
+
})], EFVideo.prototype, "maxVideoBufferFetches", void 0);
|
|
315
|
+
_decorate([property({
|
|
316
|
+
type: Boolean,
|
|
317
|
+
attribute: "enable-video-buffering"
|
|
318
|
+
})], EFVideo.prototype, "enableVideoBuffering", void 0);
|
|
426
319
|
_decorate([state()], EFVideo.prototype, "loadingState", void 0);
|
|
427
320
|
EFVideo = _decorate([customElement("ef-video")], EFVideo);
|
|
428
321
|
export { EFVideo };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { EF_INTERACTIVE } from "../EF_INTERACTIVE.js";
|
|
2
|
+
import { EF_RENDERING } from "../EF_RENDERING.js";
|
|
2
3
|
import { EFTemporal } from "./EFTemporal.js";
|
|
3
4
|
import { TargetController } from "./TargetController.js";
|
|
4
5
|
import { TWMixin } from "../gui/TWMixin2.js";
|
|
5
6
|
import { CrossUpdateController } from "./CrossUpdateController.js";
|
|
6
|
-
import { EF_RENDERING } from "../EF_RENDERING.js";
|
|
7
7
|
import { Task } from "@lit/task";
|
|
8
8
|
import { LitElement, css, html } from "lit";
|
|
9
9
|
import { customElement, property, state } from "lit/decorators.js";
|
|
@@ -80,8 +80,8 @@ let EFWaveform = class EFWaveform$1 extends EFTemporal(TWMixin(LitElement)) {
|
|
|
80
80
|
static {
|
|
81
81
|
this.styles = css`
|
|
82
82
|
:host {
|
|
83
|
-
display: block;
|
|
84
83
|
all: inherit;
|
|
84
|
+
display: block;
|
|
85
85
|
position: relative;
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AudioSample, VideoSample } from 'mediabunny';
|
|
2
|
+
export type MediaSample = VideoSample | AudioSample;
|
|
3
|
+
export declare class SampleBuffer {
|
|
4
|
+
private buffer;
|
|
5
|
+
private bufferSize;
|
|
6
|
+
constructor(bufferSize?: number);
|
|
7
|
+
push(sample: MediaSample): void;
|
|
8
|
+
clear(): void;
|
|
9
|
+
peek(): MediaSample | undefined;
|
|
10
|
+
find(desiredSeekTimeMs: number): MediaSample | undefined;
|
|
11
|
+
get length(): number;
|
|
12
|
+
get firstTimestamp(): number;
|
|
13
|
+
getContents(): MediaSample[];
|
|
14
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { roundToMilliseconds } from "./EFMedia/shared/PrecisionUtils.js";
|
|
2
|
+
var SampleBuffer = class {
|
|
3
|
+
constructor(bufferSize = 10) {
|
|
4
|
+
this.buffer = [];
|
|
5
|
+
this.bufferSize = bufferSize;
|
|
6
|
+
}
|
|
7
|
+
push(sample) {
|
|
8
|
+
const currentBuffer = [...this.buffer];
|
|
9
|
+
currentBuffer.push(sample);
|
|
10
|
+
if (currentBuffer.length > this.bufferSize) {
|
|
11
|
+
const shifted = currentBuffer.shift();
|
|
12
|
+
if (shifted) try {
|
|
13
|
+
shifted.close();
|
|
14
|
+
} catch (_error) {}
|
|
15
|
+
}
|
|
16
|
+
this.buffer = currentBuffer;
|
|
17
|
+
}
|
|
18
|
+
clear() {
|
|
19
|
+
const toClose = this.buffer;
|
|
20
|
+
this.buffer = [];
|
|
21
|
+
for (const sample of toClose) try {
|
|
22
|
+
sample.close();
|
|
23
|
+
} catch (_error) {}
|
|
24
|
+
}
|
|
25
|
+
peek() {
|
|
26
|
+
const currentBuffer = this.buffer;
|
|
27
|
+
return currentBuffer[0];
|
|
28
|
+
}
|
|
29
|
+
find(desiredSeekTimeMs) {
|
|
30
|
+
const currentBuffer = [...this.buffer];
|
|
31
|
+
if (currentBuffer.length === 0) return void 0;
|
|
32
|
+
const targetTimeMs = roundToMilliseconds(desiredSeekTimeMs);
|
|
33
|
+
for (const sample of currentBuffer) {
|
|
34
|
+
const sampleStartMs = roundToMilliseconds((sample.timestamp || 0) * 1e3);
|
|
35
|
+
const sampleDurationMs = roundToMilliseconds((sample.duration || 0) * 1e3);
|
|
36
|
+
const sampleEndMs = roundToMilliseconds(sampleStartMs + sampleDurationMs);
|
|
37
|
+
if (targetTimeMs >= sampleStartMs && targetTimeMs <= sampleEndMs) return sample;
|
|
38
|
+
}
|
|
39
|
+
return void 0;
|
|
40
|
+
}
|
|
41
|
+
get length() {
|
|
42
|
+
return this.buffer.length;
|
|
43
|
+
}
|
|
44
|
+
get firstTimestamp() {
|
|
45
|
+
const currentBuffer = this.buffer;
|
|
46
|
+
return currentBuffer[0]?.timestamp || 0;
|
|
47
|
+
}
|
|
48
|
+
getContents() {
|
|
49
|
+
return [...this.buffer];
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
export { SampleBuffer };
|
package/dist/getRenderInfo.js
CHANGED
|
@@ -30,7 +30,8 @@ const getRenderInfo = async () => {
|
|
|
30
30
|
case "EF-VIDEO": {
|
|
31
31
|
const src = element.src;
|
|
32
32
|
console.error("Processing element", element.tagName, src);
|
|
33
|
-
|
|
33
|
+
const mediaEngine = element.mediaEngineTask.value;
|
|
34
|
+
if (mediaEngine && "data" in mediaEngine) assets.efMedia[src] = mediaEngine.data;
|
|
34
35
|
break;
|
|
35
36
|
}
|
|
36
37
|
case "EF-IMAGE": {
|
package/dist/gui/ContextMixin.js
CHANGED
|
@@ -108,7 +108,7 @@ function ContextMixin(superClass) {
|
|
|
108
108
|
}
|
|
109
109
|
#playbackAudioContext = null;
|
|
110
110
|
#playbackAnimationFrameRequest = null;
|
|
111
|
-
#AUDIO_PLAYBACK_SLICE_MS = 1e3;
|
|
111
|
+
#AUDIO_PLAYBACK_SLICE_MS = 47 * 1024 / 48e3 * 1e3;
|
|
112
112
|
#syncPlayheadToAudioContext(target, startMs) {
|
|
113
113
|
const rawTimeMs = startMs + (this.#playbackAudioContext?.currentTime ?? 0) * 1e3;
|
|
114
114
|
const nextTimeMs = Math.round(rawTimeMs / this.#MS_PER_FRAME) * this.#MS_PER_FRAME;
|
|
@@ -123,6 +123,7 @@ function ContextMixin(superClass) {
|
|
|
123
123
|
}
|
|
124
124
|
if (this.#playbackAnimationFrameRequest) cancelAnimationFrame(this.#playbackAnimationFrameRequest);
|
|
125
125
|
this.#playbackAudioContext = null;
|
|
126
|
+
this.#playbackAnimationFrameRequest = null;
|
|
126
127
|
}
|
|
127
128
|
async startPlayback() {
|
|
128
129
|
await this.stopPlayback();
|
|
@@ -148,7 +149,7 @@ function ContextMixin(superClass) {
|
|
|
148
149
|
}
|
|
149
150
|
await playbackContext.suspend();
|
|
150
151
|
const fillBuffer = async () => {
|
|
151
|
-
if (bufferCount >
|
|
152
|
+
if (bufferCount > 2) return;
|
|
152
153
|
const canFillBuffer = await queueBufferSource();
|
|
153
154
|
if (canFillBuffer) fillBuffer();
|
|
154
155
|
};
|
|
@@ -121,9 +121,9 @@ export declare class EFFilmstrip extends EFFilmstrip_base {
|
|
|
121
121
|
scrub(e: MouseEvent): void;
|
|
122
122
|
startScrub(e: MouseEvent): void;
|
|
123
123
|
scrollScrub(e: WheelEvent): void;
|
|
124
|
-
gutterRef: import('lit-html/directives/ref
|
|
125
|
-
hierarchyRef: import('lit-html/directives/ref
|
|
126
|
-
playheadRef: import('lit-html/directives/ref
|
|
124
|
+
gutterRef: import('lit-html/directives/ref').Ref<HTMLDivElement>;
|
|
125
|
+
hierarchyRef: import('lit-html/directives/ref').Ref<HTMLDivElement>;
|
|
126
|
+
playheadRef: import('lit-html/directives/ref').Ref<HTMLDivElement>;
|
|
127
127
|
get gutter(): HTMLDivElement | undefined;
|
|
128
128
|
render(): TemplateResult<1>;
|
|
129
129
|
updated(changes: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
package/dist/gui/EFFilmstrip.js
CHANGED
|
@@ -5,8 +5,8 @@ import { targetTimegroupContext } from "./ContextMixin.js";
|
|
|
5
5
|
import { TimegroupController } from "../elements/TimegroupController.js";
|
|
6
6
|
import { EFTimegroup } from "../elements/EFTimegroup.js";
|
|
7
7
|
import { EFImage } from "../elements/EFImage.js";
|
|
8
|
-
import { EFAudio } from "../elements/EFAudio.js";
|
|
9
8
|
import { TWMixin } from "./TWMixin2.js";
|
|
9
|
+
import { EFAudio } from "../elements/EFAudio.js";
|
|
10
10
|
import { EFVideo } from "../elements/EFVideo.js";
|
|
11
11
|
import { EFCaptions, EFCaptionsActiveWord } from "../elements/EFCaptions.js";
|
|
12
12
|
import { EFWaveform } from "../elements/EFWaveform.js";
|
package/dist/gui/EFFitScale.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
export declare class EFFitScale extends LitElement {
|
|
3
|
-
containerRef: import('lit-html/directives/ref
|
|
4
|
-
contentRef: import('lit-html/directives/ref
|
|
3
|
+
containerRef: import('lit-html/directives/ref').Ref<HTMLDivElement>;
|
|
4
|
+
contentRef: import('lit-html/directives/ref').Ref<HTMLSlotElement>;
|
|
5
5
|
createRenderRoot(): this;
|
|
6
6
|
uniqueId: string;
|
|
7
7
|
private scale;
|
package/dist/gui/TWMixin.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var TWMixin_default = "*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:\"\"}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.top-0{top:0}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.col-span-2{grid-column:span 2/span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-\\[1px\\]{margin-bottom:1px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-\\[1\\.1rem\\]{height:1.1rem}.h-\\[5px\\]{height:5px}.h-full{height:100%}.w-1{width:.25rem}.w-\\[2px\\]{width:2px}.w-full{width:100%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-crosshair{cursor:crosshair}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-center{align-items:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.text-nowrap{text-wrap:nowrap}.rounded{border-radius:.25rem}.border{border-width:1px}.border-r-2{border-right-width:2px}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-b-slate-600{--tw-border-opacity:1;border-bottom-color:rgb(71 85 105/var(--tw-border-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-opacity-20{--tw-bg-opacity:.2}.p-\\[1px\\]{padding:1px}.pb-0{padding-bottom:0}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pt-\\[8px\\]{padding-top:8px}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-5xl{font-size:3rem;line-height:1}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.line-through{text-decoration-line:line-through}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-slate-300{--tw-shadow-color:#cbd5e1;--tw-shadow:var(--tw-shadow-colored)}.shadow-slate-600{--tw-shadow-color:#475569;--tw-shadow:var(--tw-shadow-colored)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px);filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.filter{filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.hover\\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.peer:hover~.peer-hover\\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.peer:hover~.peer-hover\\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.data-\\[focused\\]\\:bg-slate-400[data-focused]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.peer[data-focused]~.peer-data-\\[focused\\]\\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.peer[data-focused]~.peer-data-\\[focused\\]\\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}";
|
|
1
|
+
var TWMixin_default = "*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:\"\"}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-0{left:0}.top-0{top:0}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.col-span-2{grid-column:span 2/span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-\\[1px\\]{margin-bottom:1px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-full{width:100%;height:100%}.h-\\[1\\.1rem\\]{height:1.1rem}.h-\\[270px\\]{height:270px}.h-\\[500px\\]{height:500px}.h-\\[5px\\]{height:5px}.h-full{height:100%}.w-1{width:.25rem}.w-\\[1000px\\]{width:1000px}.w-\\[2px\\]{width:2px}.w-\\[480px\\]{width:480px}.w-full{width:100%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-crosshair{cursor:crosshair}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-center{align-items:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.text-nowrap{text-wrap:nowrap}.rounded{border-radius:.25rem}.border{border-width:1px}.border-r-2{border-right-width:2px}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-b-slate-600{--tw-border-opacity:1;border-bottom-color:rgb(71 85 105/var(--tw-border-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-opacity-20{--tw-bg-opacity:.2}.p-\\[1px\\]{padding:1px}.pb-0{padding-bottom:0}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pt-\\[8px\\]{padding-top:8px}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-5xl{font-size:3rem;line-height:1}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.line-through{text-decoration-line:line-through}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-slate-300{--tw-shadow-color:#cbd5e1;--tw-shadow:var(--tw-shadow-colored)}.shadow-slate-600{--tw-shadow-color:#475569;--tw-shadow:var(--tw-shadow-colored)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px);filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.filter{filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.hover\\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.peer:hover~.peer-hover\\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.peer:hover~.peer-hover\\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.data-\\[focused\\]\\:bg-slate-400[data-focused]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.peer[data-focused]~.peer-data-\\[focused\\]\\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.peer[data-focused]~.peer-data-\\[focused\\]\\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}";
|
|
2
2
|
export { TWMixin_default as default };
|
package/dist/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.top-0{top:0}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.col-span-2{grid-column:span 2/span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-\[1px\]{margin-bottom:1px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-\[1\.1rem\]{height:1.1rem}.h-\[5px\]{height:5px}.h-full{height:100%}.w-1{width:.25rem}.w-\[2px\]{width:2px}.w-full{width:100%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-crosshair{cursor:crosshair}.
|
|
1
|
+
*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-0{left:0}.top-0{top:0}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.col-span-2{grid-column:span 2/span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-\[1px\]{margin-bottom:1px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-full{width:100%;height:100%}.h-\[1\.1rem\]{height:1.1rem}.h-\[270px\]{height:270px}.h-\[500px\]{height:500px}.h-\[5px\]{height:5px}.h-full{height:100%}.w-1{width:.25rem}.w-\[1000px\]{width:1000px}.w-\[2px\]{width:2px}.w-\[480px\]{width:480px}.w-full{width:100%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-crosshair{cursor:crosshair}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-center{align-items:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.text-nowrap{text-wrap:nowrap}.rounded{border-radius:.25rem}.border{border-width:1px}.border-r-2{border-right-width:2px}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity))}.border-b-slate-600{--tw-border-opacity:1;border-bottom-color:rgb(71 85 105/var(--tw-border-opacity))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-opacity-20{--tw-bg-opacity:.2}.p-\[1px\]{padding:1px}.pb-0{padding-bottom:0}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pt-\[8px\]{padding-top:8px}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-5xl{font-size:3rem;line-height:1}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.line-through{text-decoration-line:line-through}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-slate-300{--tw-shadow-color:#cbd5e1;--tw-shadow:var(--tw-shadow-colored)}.shadow-slate-600{--tw-shadow-color:#475569;--tw-shadow:var(--tw-shadow-colored)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px);filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.filter{filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.hover\:bg-slate-400:hover{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.peer:hover~.peer-hover\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.peer:hover~.peer-hover\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.data-\[focused\]\:bg-slate-400[data-focused]{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.peer[data-focused]~.peer-data-\[focused\]\:border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity))}.peer[data-focused]~.peer-data-\[focused\]\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}
|
|
2
2
|
/*$vite$:1*/
|