@editframe/elements 0.38.0 → 0.39.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.
Files changed (114) hide show
  1. package/dist/canvas/EFCanvas.d.ts +4 -4
  2. package/dist/canvas/EFCanvasItem.d.ts +4 -4
  3. package/dist/canvas/overlays/SelectionOverlay.d.ts +2 -2
  4. package/dist/canvas/overlays/SelectionOverlay.js.map +1 -1
  5. package/dist/elements/EFCaptions.js +1 -1
  6. package/dist/elements/EFCaptions.js.map +1 -1
  7. package/dist/elements/EFImage.js +3 -4
  8. package/dist/elements/EFImage.js.map +1 -1
  9. package/dist/elements/EFMedia/BufferedSeekingInput.js +1 -1
  10. package/dist/elements/EFMedia/CachedFetcher.js +99 -0
  11. package/dist/elements/EFMedia/CachedFetcher.js.map +1 -0
  12. package/dist/elements/EFMedia/MediaEngine.d.ts +19 -0
  13. package/dist/elements/EFMedia/MediaEngine.js +129 -0
  14. package/dist/elements/EFMedia/MediaEngine.js.map +1 -0
  15. package/dist/elements/EFMedia/SegmentIndex.d.ts +32 -0
  16. package/dist/elements/EFMedia/SegmentIndex.js +185 -0
  17. package/dist/elements/EFMedia/SegmentIndex.js.map +1 -0
  18. package/dist/elements/EFMedia/SegmentTransport.d.ts +12 -0
  19. package/dist/elements/EFMedia/SegmentTransport.js +69 -0
  20. package/dist/elements/EFMedia/SegmentTransport.js.map +1 -0
  21. package/dist/elements/EFMedia/TimingModel.d.ts +10 -0
  22. package/dist/elements/EFMedia/TimingModel.js +28 -0
  23. package/dist/elements/EFMedia/TimingModel.js.map +1 -0
  24. package/dist/elements/EFMedia/shared/AudioSpanUtils.js +7 -6
  25. package/dist/elements/EFMedia/shared/AudioSpanUtils.js.map +1 -1
  26. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +13 -34
  27. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js.map +1 -1
  28. package/dist/elements/EFMedia.d.ts +2 -1
  29. package/dist/elements/EFMedia.js +14 -31
  30. package/dist/elements/EFMedia.js.map +1 -1
  31. package/dist/elements/EFPanZoom.d.ts +4 -4
  32. package/dist/elements/EFSourceMixin.js +1 -1
  33. package/dist/elements/EFSourceMixin.js.map +1 -1
  34. package/dist/elements/EFSurface.d.ts +4 -4
  35. package/dist/elements/EFTemporal.js +2 -1
  36. package/dist/elements/EFTemporal.js.map +1 -1
  37. package/dist/elements/EFTimegroup.js +2 -1
  38. package/dist/elements/EFTimegroup.js.map +1 -1
  39. package/dist/elements/EFVideo.js +204 -187
  40. package/dist/elements/EFVideo.js.map +1 -1
  41. package/dist/gui/EFActiveRootTemporal.d.ts +4 -4
  42. package/dist/gui/EFConfiguration.d.ts +0 -7
  43. package/dist/gui/EFConfiguration.js +0 -5
  44. package/dist/gui/EFConfiguration.js.map +1 -1
  45. package/dist/gui/EFControls.d.ts +2 -2
  46. package/dist/gui/EFDial.d.ts +4 -4
  47. package/dist/gui/EFFocusOverlay.d.ts +4 -4
  48. package/dist/gui/EFOverlayItem.d.ts +4 -4
  49. package/dist/gui/EFOverlayLayer.d.ts +4 -4
  50. package/dist/gui/EFPause.d.ts +4 -4
  51. package/dist/gui/EFPlay.d.ts +4 -4
  52. package/dist/gui/EFResizableBox.d.ts +4 -4
  53. package/dist/gui/EFScrubber.d.ts +4 -4
  54. package/dist/gui/EFTimeDisplay.d.ts +4 -4
  55. package/dist/gui/EFTimelineRuler.d.ts +4 -4
  56. package/dist/gui/EFToggleLoop.d.ts +4 -4
  57. package/dist/gui/EFTogglePlay.d.ts +4 -4
  58. package/dist/gui/EFTransformHandles.d.ts +4 -4
  59. package/dist/gui/EFWorkbench.d.ts +2 -0
  60. package/dist/gui/EFWorkbench.js +68 -1
  61. package/dist/gui/EFWorkbench.js.map +1 -1
  62. package/dist/gui/PlaybackController.d.ts +2 -0
  63. package/dist/gui/PlaybackController.js +11 -1
  64. package/dist/gui/PlaybackController.js.map +1 -1
  65. package/dist/gui/ef-theme.css +11 -0
  66. package/dist/gui/timeline/EFTimeline.js.map +1 -1
  67. package/dist/gui/timeline/EFTimelineRow.d.ts +2 -2
  68. package/dist/gui/timeline/tracks/AudioTrack.js +28 -30
  69. package/dist/gui/timeline/tracks/AudioTrack.js.map +1 -1
  70. package/dist/gui/timeline/tracks/EFThumbnailStrip.d.ts +1 -0
  71. package/dist/gui/timeline/tracks/EFThumbnailStrip.js +41 -8
  72. package/dist/gui/timeline/tracks/EFThumbnailStrip.js.map +1 -1
  73. package/dist/gui/timeline/tracks/VideoTrack.js +2 -2
  74. package/dist/gui/timeline/tracks/VideoTrack.js.map +1 -1
  75. package/dist/gui/timeline/tracks/waveformUtils.js +19 -19
  76. package/dist/gui/timeline/tracks/waveformUtils.js.map +1 -1
  77. package/dist/gui/tree/EFTree.d.ts +4 -4
  78. package/dist/gui/tree/EFTreeItem.d.ts +4 -4
  79. package/dist/preview/QualityUpgradeScheduler.d.ts +8 -0
  80. package/dist/preview/QualityUpgradeScheduler.js +13 -1
  81. package/dist/preview/QualityUpgradeScheduler.js.map +1 -1
  82. package/dist/preview/renderTimegroupToCanvas.d.ts +144 -0
  83. package/dist/preview/renderTimegroupToCanvas.js +56 -3
  84. package/dist/preview/renderTimegroupToCanvas.js.map +1 -1
  85. package/dist/preview/renderTimegroupToCanvas.types.d.ts +22 -1
  86. package/dist/preview/renderTimegroupToVideo.d.ts +27 -0
  87. package/dist/preview/renderTimegroupToVideo.js +13 -5
  88. package/dist/preview/renderTimegroupToVideo.js.map +1 -1
  89. package/dist/preview/renderVideoToVideo.js +5 -6
  90. package/dist/preview/renderVideoToVideo.js.map +1 -1
  91. package/dist/preview/renderers.d.ts +56 -0
  92. package/dist/preview/renderers.js +13 -1
  93. package/dist/preview/renderers.js.map +1 -1
  94. package/dist/preview/rendering/inlineImages.d.ts +13 -0
  95. package/dist/preview/rendering/inlineImages.js +7 -1
  96. package/dist/preview/rendering/inlineImages.js.map +1 -1
  97. package/dist/preview/rendering/loadImage.d.ts +8 -0
  98. package/dist/render/EFRenderAPI.js.map +1 -1
  99. package/dist/transcoding/types/index.d.ts +6 -94
  100. package/dist/transcoding/utils/UrlGenerator.d.ts +3 -12
  101. package/dist/transcoding/utils/UrlGenerator.js +3 -29
  102. package/dist/transcoding/utils/UrlGenerator.js.map +1 -1
  103. package/package.json +26 -2
  104. package/test/setup.ts +1 -1
  105. package/test/useAssetMSW.ts +0 -100
  106. package/tsdown.config.ts +6 -1
  107. package/dist/elements/EFMedia/AssetMediaEngine.js +0 -284
  108. package/dist/elements/EFMedia/AssetMediaEngine.js.map +0 -1
  109. package/dist/elements/EFMedia/BaseMediaEngine.js +0 -200
  110. package/dist/elements/EFMedia/BaseMediaEngine.js.map +0 -1
  111. package/dist/elements/EFMedia/FileMediaEngine.js +0 -122
  112. package/dist/elements/EFMedia/FileMediaEngine.js.map +0 -1
  113. package/dist/elements/EFMedia/JitMediaEngine.js +0 -157
  114. package/dist/elements/EFMedia/JitMediaEngine.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit21 from "lit";
2
+ import * as lit20 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html20 from "lit-html";
4
+ import * as lit_html19 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFTimeDisplay.d.ts
7
7
  declare const EFTimeDisplay_base: (new (...args: any[]) => {
@@ -10,7 +10,7 @@ declare const EFTimeDisplay_base: (new (...args: any[]) => {
10
10
  effectiveContext: ControllableInterface | null;
11
11
  }) & typeof LitElement;
12
12
  declare class EFTimeDisplay extends EFTimeDisplay_base {
13
- static styles: lit21.CSSResult;
13
+ static styles: lit20.CSSResult;
14
14
  currentTimeMs: number;
15
15
  durationMs: number;
16
16
  contextCurrentTimeMs: number;
@@ -18,7 +18,7 @@ declare class EFTimeDisplay extends EFTimeDisplay_base {
18
18
  get effectiveCurrentTimeMs(): number;
19
19
  get effectiveDurationMs(): number;
20
20
  private formatTime;
21
- render(): lit_html20.TemplateResult<1>;
21
+ render(): lit_html19.TemplateResult<1>;
22
22
  }
23
23
  declare global {
24
24
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { TimelineState } from "./timeline/timelineStateContext.js";
2
- import * as lit32 from "lit";
2
+ import * as lit33 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html30 from "lit-html";
4
+ import * as lit_html31 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFTimelineRuler.d.ts
7
7
  /**
@@ -25,7 +25,7 @@ declare function calculatePixelsPerFrame(frameIntervalMs: number, pixelsPerMs: n
25
25
  */
26
26
  declare function shouldShowFrameMarkers(pixelsPerFrame: number, minSpacing?: number): boolean;
27
27
  declare class EFTimelineRuler extends LitElement {
28
- static styles: lit32.CSSResult[];
28
+ static styles: lit33.CSSResult[];
29
29
  durationMs: number;
30
30
  contextDurationMs: number;
31
31
  timelineState?: TimelineState;
@@ -59,7 +59,7 @@ declare class EFTimelineRuler extends LitElement {
59
59
  private calculateLabelInterval;
60
60
  private getVisibleLabels;
61
61
  private renderCanvas;
62
- render(): lit_html30.TemplateResult<1>;
62
+ render(): lit_html31.TemplateResult<1>;
63
63
  }
64
64
  declare global {
65
65
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit19 from "lit";
2
+ import * as lit18 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html18 from "lit-html";
4
+ import * as lit_html17 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFToggleLoop.d.ts
7
7
  declare const EFToggleLoop_base: (new (...args: any[]) => {
@@ -10,9 +10,9 @@ declare const EFToggleLoop_base: (new (...args: any[]) => {
10
10
  effectiveContext: ControllableInterface | null;
11
11
  }) & typeof LitElement;
12
12
  declare class EFToggleLoop extends EFToggleLoop_base {
13
- static styles: lit19.CSSResult[];
13
+ static styles: lit18.CSSResult[];
14
14
  get context(): ControllableInterface | null;
15
- render(): lit_html18.TemplateResult<1>;
15
+ render(): lit_html17.TemplateResult<1>;
16
16
  }
17
17
  declare global {
18
18
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit16 from "lit";
2
+ import * as lit15 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html15 from "lit-html";
4
+ import * as lit_html14 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFTogglePlay.d.ts
7
7
  declare const EFTogglePlay_base: (new (...args: any[]) => {
@@ -10,12 +10,12 @@ declare const EFTogglePlay_base: (new (...args: any[]) => {
10
10
  effectiveContext: ControllableInterface | null;
11
11
  }) & typeof LitElement;
12
12
  declare class EFTogglePlay extends EFTogglePlay_base {
13
- static styles: lit16.CSSResult[];
13
+ static styles: lit15.CSSResult[];
14
14
  playing: boolean;
15
15
  get efContext(): ControllableInterface | null;
16
16
  connectedCallback(): void;
17
17
  disconnectedCallback(): void;
18
- render(): lit_html15.TemplateResult<1>;
18
+ render(): lit_html14.TemplateResult<1>;
19
19
  togglePlay: () => void;
20
20
  private getPlaybackController;
21
21
  }
@@ -1,7 +1,7 @@
1
1
  import { PanZoomTransform } from "../elements/EFPanZoom.js";
2
- import * as lit13 from "lit";
2
+ import * as lit25 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html12 from "lit-html";
4
+ import * as lit_html23 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFTransformHandles.d.ts
7
7
  interface TransformBounds {
@@ -49,7 +49,7 @@ declare class EFTransformHandles extends LitElement {
49
49
  * Note: Not a @state() property to avoid re-renders during interaction.
50
50
  */
51
51
  private initialBounds;
52
- static styles: lit13.CSSResult;
52
+ static styles: lit25.CSSResult;
53
53
  private resizeObserver?;
54
54
  /**
55
55
  * Single source of truth for zoom scale.
@@ -79,7 +79,7 @@ declare class EFTransformHandles extends LitElement {
79
79
  private handleMouseMove;
80
80
  private handleMouseUp;
81
81
  private cleanup;
82
- render(): lit_html12.TemplateResult<1>;
82
+ render(): lit_html23.TemplateResult<1>;
83
83
  }
84
84
  declare global {
85
85
  interface HTMLElementTagNameMap {
@@ -9,6 +9,7 @@ import * as lit_html_directives_ref_js2 from "lit-html/directives/ref.js";
9
9
  //#region src/gui/EFWorkbench.d.ts
10
10
  declare const EFWorkbench_base: (new (...args: any[]) => ContextMixinInterface) & typeof LitElement;
11
11
  declare class EFWorkbench extends EFWorkbench_base {
12
+ #private;
12
13
  static styles: lit8.CSSResult[];
13
14
  rendering: boolean;
14
15
  private panZoomTransform;
@@ -21,6 +22,7 @@ declare class EFWorkbench extends EFWorkbench_base {
21
22
  private previewResolutionScale;
22
23
  private exportOptions;
23
24
  private exportAbortController;
25
+ private previewIsLoading;
24
26
  private isPlaying;
25
27
  private isScrubbing;
26
28
  private isAtRest;
@@ -49,6 +49,7 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
49
49
  outMs: 0
50
50
  };
51
51
  this.exportAbortController = null;
52
+ this.previewIsLoading = false;
52
53
  this.isPlaying = false;
53
54
  this.isScrubbing = false;
54
55
  this.isAtRest = true;
@@ -273,6 +274,32 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
273
274
  pointer-events: none;
274
275
  z-index: 1;
275
276
  }
277
+
278
+ .preview-loading-overlay {
279
+ position: absolute;
280
+ top: 0;
281
+ left: 0;
282
+ right: 0;
283
+ height: 2px;
284
+ overflow: hidden;
285
+ z-index: 8;
286
+ pointer-events: none;
287
+ background: var(--ef-color-loading-spinner-track, rgba(255, 255, 255, 0.1));
288
+ }
289
+
290
+ .preview-loading-bar {
291
+ position: absolute;
292
+ top: 0;
293
+ height: 100%;
294
+ width: 40%;
295
+ background: var(--ef-color-loading-spinner-fill, rgba(255, 255, 255, 0.8));
296
+ animation: preview-sweep 1.4s ease-in-out infinite;
297
+ }
298
+
299
+ @keyframes preview-sweep {
300
+ 0% { left: -40%; }
301
+ 100% { left: 140%; }
302
+ }
276
303
 
277
304
  .clone-content {
278
305
  position: absolute;
@@ -529,6 +556,8 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
529
556
  }
530
557
  `];
531
558
  }
559
+ #trackedTimegroup = null;
560
+ #readyStateHandler = null;
532
561
  handleStageWheel(event) {
533
562
  event.preventDefault();
534
563
  }
@@ -579,6 +608,11 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
579
608
  this.savePanZoomDebounceTimer = null;
580
609
  }
581
610
  this.savePreviewPanZoom();
611
+ if (this.#trackedTimegroup && this.#readyStateHandler) {
612
+ this.#trackedTimegroup.removeEventListener("readystatechange", this.#readyStateHandler);
613
+ this.#trackedTimegroup = null;
614
+ this.#readyStateHandler = null;
615
+ }
582
616
  }
583
617
  firstUpdated() {
584
618
  requestAnimationFrame(() => {
@@ -588,6 +622,11 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
588
622
  if (this.presentationMode === "dom") this.initDomMode();
589
623
  else if (this.presentationMode === "canvas") this.initCanvasMode();
590
624
  });
625
+ this.#syncTimegroupListener();
626
+ const canvasSlot = this.shadowRoot?.querySelector("slot[name=\"canvas\"]");
627
+ if (canvasSlot) canvasSlot.addEventListener("slotchange", () => {
628
+ this.#syncTimegroupListener();
629
+ });
591
630
  }
592
631
  handleTransformChanged(e) {
593
632
  this.panZoomTransform = e.detail;
@@ -615,8 +654,25 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
615
654
  getTimegroup() {
616
655
  const canvas = this.querySelector("[slot='canvas']");
617
656
  if (!canvas) return null;
657
+ if (canvas instanceof EFTimegroup) return canvas;
618
658
  return canvas.querySelector("ef-timegroup");
619
659
  }
660
+ #syncTimegroupListener() {
661
+ const timegroup = this.getTimegroup();
662
+ if (timegroup === this.#trackedTimegroup) return;
663
+ if (this.#trackedTimegroup && this.#readyStateHandler) this.#trackedTimegroup.removeEventListener("readystatechange", this.#readyStateHandler);
664
+ this.#trackedTimegroup = timegroup;
665
+ if (!timegroup) {
666
+ this.previewIsLoading = false;
667
+ this.#readyStateHandler = null;
668
+ return;
669
+ }
670
+ this.#readyStateHandler = () => {
671
+ this.previewIsLoading = timegroup.contentReadyState === "loading";
672
+ };
673
+ timegroup.addEventListener("readystatechange", this.#readyStateHandler);
674
+ this.previewIsLoading = timegroup.contentReadyState === "loading";
675
+ }
620
676
  /**
621
677
  * Get the root timegroup ID for localStorage key generation.
622
678
  * Returns null if no root timegroup is found or it has no ID.
@@ -1744,7 +1800,10 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
1744
1800
  @wheel=${this.handleStageWheel}
1745
1801
  >
1746
1802
  <!-- Original timegroup (hidden in clone/canvas mode, visible in dom mode) -->
1747
- <slot name="canvas"></slot>
1803
+ <slot
1804
+ name="canvas"
1805
+ @slotchange=${() => this.#syncTimegroupListener()}
1806
+ ></slot>
1748
1807
 
1749
1808
  <!-- Canvas preview (visible in canvas mode only) -->
1750
1809
  <div
@@ -1752,6 +1811,13 @@ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement))
1752
1811
  ${ref(this.canvasPreviewRef)}
1753
1812
  style="display: ${this.presentationMode === "canvas" ? "block" : "none"}"
1754
1813
  ></div>
1814
+
1815
+ <!-- Preview loading overlay (shown when timegroup content is loading) -->
1816
+ ${this.previewIsLoading ? html`
1817
+ <div class="preview-loading-overlay">
1818
+ <div class="preview-loading-bar"></div>
1819
+ </div>
1820
+ ` : ""}
1755
1821
 
1756
1822
  <!-- Playback stats overlay (visible in canvas mode only) -->
1757
1823
  ${this.renderPlaybackStats()}
@@ -1777,6 +1843,7 @@ __decorate([state()], EFWorkbench.prototype, "renderMode", void 0);
1777
1843
  __decorate([state()], EFWorkbench.prototype, "presentationMode", void 0);
1778
1844
  __decorate([state()], EFWorkbench.prototype, "previewResolutionScale", void 0);
1779
1845
  __decorate([state()], EFWorkbench.prototype, "exportOptions", void 0);
1846
+ __decorate([state()], EFWorkbench.prototype, "previewIsLoading", void 0);
1780
1847
  __decorate([state()], EFWorkbench.prototype, "isPlaying", void 0);
1781
1848
  __decorate([state()], EFWorkbench.prototype, "isScrubbing", void 0);
1782
1849
  __decorate([state()], EFWorkbench.prototype, "isAtRest", void 0);