@editframe/elements 0.34.7-beta → 0.34.8-beta

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.
@@ -5,9 +5,9 @@ import { PanZoomTransform } from "../elements/EFPanZoom.js";
5
5
  import "./overlays/SelectionOverlay.js";
6
6
  import "../gui/EFOverlayLayer.js";
7
7
  import "../gui/EFTransformHandles.js";
8
- import * as lit4 from "lit";
8
+ import * as lit29 from "lit";
9
9
  import { LitElement } from "lit";
10
- import * as lit_html3 from "lit-html";
10
+ import * as lit_html28 from "lit-html";
11
11
 
12
12
  //#region src/canvas/EFCanvas.d.ts
13
13
  declare const EFCanvas_base: typeof LitElement;
@@ -87,7 +87,7 @@ declare const EFCanvas_base: typeof LitElement;
87
87
  * Manages existing elements (EF* elements, divs, etc.) and provides selection functionality.
88
88
  */
89
89
  declare class EFCanvas extends EFCanvas_base {
90
- static styles: lit4.CSSResult[];
90
+ static styles: lit29.CSSResult[];
91
91
  panZoomTransform?: PanZoomTransform;
92
92
  elementIdAttribute: string;
93
93
  enableTransformHandles: boolean;
@@ -302,7 +302,7 @@ declare class EFCanvas extends EFCanvas_base {
302
302
  * Cleanup transform handles.
303
303
  */
304
304
  private cleanupTransformHandles;
305
- render(): lit_html3.TemplateResult<1>;
305
+ render(): lit_html28.TemplateResult<1>;
306
306
  }
307
307
  declare global {
308
308
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { FrameRenderable, FrameState, FrameTask } from "../preview/FrameController.js";
2
2
  import { EFMedia } from "./EFMedia.js";
3
- import * as lit_html7 from "lit-html";
4
- import * as lit_html_directives_ref_js2 from "lit-html/directives/ref.js";
3
+ import * as lit_html2 from "lit-html";
4
+ import * as lit_html_directives_ref_js1 from "lit-html/directives/ref.js";
5
5
 
6
6
  //#region src/elements/EFAudio.d.ts
7
7
  declare const EFAudio_base: typeof EFMedia;
@@ -17,9 +17,9 @@ declare class EFAudio extends EFAudio_base implements FrameRenderable {
17
17
  * @domAttribute "volume"
18
18
  */
19
19
  volume: number;
20
- audioElementRef: lit_html_directives_ref_js2.Ref<HTMLAudioElement>;
20
+ audioElementRef: lit_html_directives_ref_js1.Ref<HTMLAudioElement>;
21
21
  protected updated(changedProperties: Map<PropertyKey, unknown>): void;
22
- render(): lit_html7.TemplateResult<1>;
22
+ render(): lit_html2.TemplateResult<1>;
23
23
  /**
24
24
  * @deprecated Use FrameRenderable methods (prepareFrame, renderFrame) via FrameController instead.
25
25
  * This is a compatibility wrapper that delegates to the new system.
@@ -23,6 +23,12 @@ var JitMediaEngine = class JitMediaEngine extends BaseMediaEngine {
23
23
  }
24
24
  #cachedVideoRendition = null;
25
25
  #cachedAudioRendition = null;
26
+ getVideoRenditionInternal() {
27
+ return this.videoRendition;
28
+ }
29
+ getAudioRenditionInternal() {
30
+ return this.audioRendition;
31
+ }
26
32
  get audioRendition() {
27
33
  if (this.#cachedAudioRendition !== null) return this.#cachedAudioRendition;
28
34
  if (!this.data.audioRenditions || this.data.audioRenditions.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"JitMediaEngine.js","names":["#cachedAudioRendition","#cachedVideoRendition","rendition: VideoRendition"],"sources":["../../../src/elements/EFMedia/JitMediaEngine.ts"],"sourcesContent":["import type {\n AudioRendition,\n MediaEngine,\n RenditionId,\n ThumbnailResult,\n VideoRendition,\n} from \"../../transcoding/types\";\nimport type { ManifestResponse } from \"../../transcoding/types/index.js\";\nimport type { UrlGenerator } from \"../../transcoding/utils/UrlGenerator\";\nimport type { EFMedia } from \"../EFMedia.js\";\nimport { BaseMediaEngine } from \"./BaseMediaEngine\";\nimport { ThumbnailExtractor } from \"./shared/ThumbnailExtractor.js\";\n\nexport class JitMediaEngine extends BaseMediaEngine implements MediaEngine {\n private urlGenerator: UrlGenerator;\n private data: ManifestResponse = {} as ManifestResponse;\n private thumbnailExtractor: ThumbnailExtractor;\n\n static async fetch(host: EFMedia, urlGenerator: UrlGenerator, url: string, signal?: AbortSignal) {\n const engine = new JitMediaEngine(host, urlGenerator);\n const data = await engine.fetchManifest(url, signal);\n \n // Check for abort after potentially slow network operation\n signal?.throwIfAborted();\n \n engine.data = data;\n // Set MediaEngine interface properties\n engine.durationMs = data.durationMs;\n engine.src = data.sourceUrl;\n engine.templates = data.endpoints;\n return engine;\n }\n\n // MediaEngine interface properties\n durationMs = 0;\n src = \"\";\n templates!: { initSegment: string; mediaSegment: string };\n\n constructor(host: EFMedia, urlGenerator: UrlGenerator) {\n super(host);\n this.urlGenerator = urlGenerator;\n this.thumbnailExtractor = new ThumbnailExtractor(this);\n }\n\n // Cache renditions to avoid recomputing on every access\n #cachedVideoRendition: VideoRendition | undefined | null = null;\n #cachedAudioRendition: AudioRendition | undefined | null = null;\n\n get audioRendition(): AudioRendition | undefined {\n if (this.#cachedAudioRendition !== null) {\n return this.#cachedAudioRendition;\n }\n if (!this.data.audioRenditions || this.data.audioRenditions.length === 0) {\n this.#cachedAudioRendition = undefined;\n return undefined;\n }\n\n const rendition = this.data.audioRenditions[0];\n if (!rendition) {\n this.#cachedAudioRendition = undefined;\n return undefined;\n }\n\n this.#cachedAudioRendition = {\n id: rendition.id as RenditionId,\n trackId: undefined,\n src: this.data.sourceUrl,\n segmentDurationMs: rendition.segmentDurationMs,\n segmentDurationsMs: rendition.segmentDurationsMs,\n startTimeOffsetMs: rendition.startTimeOffsetMs,\n };\n return this.#cachedAudioRendition;\n }\n\n get videoRendition(): VideoRendition | undefined {\n if (this.#cachedVideoRendition !== null) {\n return this.#cachedVideoRendition;\n }\n if (!this.data.videoRenditions || this.data.videoRenditions.length === 0) {\n this.#cachedVideoRendition = undefined;\n return undefined;\n }\n\n const rendition = this.data.videoRenditions[0];\n if (!rendition) {\n this.#cachedVideoRendition = undefined;\n return undefined;\n }\n\n this.#cachedVideoRendition = {\n id: rendition.id as RenditionId,\n trackId: undefined,\n src: this.data.sourceUrl,\n segmentDurationMs: rendition.segmentDurationMs,\n segmentDurationsMs: rendition.segmentDurationsMs,\n startTimeOffsetMs: rendition.startTimeOffsetMs,\n };\n return this.#cachedVideoRendition;\n }\n\n\n\n async fetchInitSegment(\n rendition: { id?: RenditionId; trackId: number | undefined; src: string },\n signal?: AbortSignal,\n ) {\n if (!rendition.id) {\n throw new Error(\"Rendition ID is required for JIT metadata\");\n }\n const url = this.urlGenerator.generateSegmentUrl(\n \"init\",\n rendition.id,\n this,\n );\n\n // Use unified fetch method\n return this.fetchMedia(url, signal);\n }\n\n async fetchMediaSegment(\n segmentId: number,\n rendition: { id?: RenditionId; trackId: number | undefined; src: string },\n signal?: AbortSignal,\n ) {\n if (!rendition.id) {\n throw new Error(\"Rendition ID is required for JIT metadata\");\n }\n const url = this.urlGenerator.generateSegmentUrl(\n segmentId,\n rendition.id,\n this,\n );\n return this.fetchMedia(url, signal);\n }\n\n computeSegmentId(\n desiredSeekTimeMs: number,\n rendition: VideoRendition | AudioRendition,\n ) {\n // Don't request segments beyond the actual file duration\n // Note: seeking to exactly durationMs should be allowed (it's the last moment of the file)\n if (desiredSeekTimeMs > this.durationMs) {\n return undefined;\n }\n\n // Use actual segment durations if available (more accurate)\n if (\n rendition.segmentDurationsMs &&\n rendition.segmentDurationsMs.length > 0\n ) {\n let cumulativeTime = 0;\n\n for (let i = 0; i < rendition.segmentDurationsMs.length; i++) {\n const segmentDuration = rendition.segmentDurationsMs[i];\n if (segmentDuration === undefined) {\n throw new Error(\"Segment duration is required for JIT metadata\");\n }\n const segmentStartMs = cumulativeTime;\n const segmentEndMs = cumulativeTime + segmentDuration;\n\n // Check if the desired seek time falls within this segment\n // Special case: for the last segment, include the exact end time\n const isLastSegment = i === rendition.segmentDurationsMs.length - 1;\n const includesEndTime =\n isLastSegment && desiredSeekTimeMs === this.durationMs;\n\n if (\n desiredSeekTimeMs >= segmentStartMs &&\n (desiredSeekTimeMs < segmentEndMs || includesEndTime)\n ) {\n return i + 1; // Convert 0-based to 1-based segment ID\n }\n\n cumulativeTime += segmentDuration;\n\n // If we've reached or exceeded file duration, stop\n if (cumulativeTime >= this.durationMs) {\n break;\n }\n }\n\n // If we didn't find a segment, return undefined\n return undefined;\n }\n\n // Fall back to fixed duration calculation for backward compatibility\n if (!rendition.segmentDurationMs) {\n throw new Error(\"Segment duration is required for JIT metadata\");\n }\n\n const segmentIndex = Math.floor(\n desiredSeekTimeMs / rendition.segmentDurationMs,\n );\n\n // Calculate the actual segment start time\n const segmentStartMs = segmentIndex * rendition.segmentDurationMs;\n\n // If this segment would start at or beyond file duration, it doesn't exist\n if (segmentStartMs >= this.durationMs) {\n return undefined;\n }\n\n return segmentIndex + 1; // Convert 0-based to 1-based\n }\n\n getScrubVideoRendition(): VideoRendition | undefined {\n if (!this.data.videoRenditions) return undefined;\n\n const scrubManifestRendition = this.data.videoRenditions.find(\n (r) => r.id === \"scrub\",\n );\n\n if (!scrubManifestRendition) return this.getVideoRenditionInternal(); // Fallback to main\n\n return {\n id: scrubManifestRendition.id as any,\n trackId: undefined,\n src: this.src,\n segmentDurationMs: scrubManifestRendition.segmentDurationMs,\n segmentDurationsMs: scrubManifestRendition.segmentDurationsMs,\n };\n }\n\n /**\n * Get preferred buffer configuration for JIT transcoding\n * Uses higher buffering since transcoding introduces latency\n */\n getBufferConfig() {\n return {\n // Buffer more aggressively for JIT transcoding to smooth over latency\n videoBufferDurationMs: 8000,\n audioBufferDurationMs: 8000,\n maxVideoBufferFetches: 3,\n maxAudioBufferFetches: 3,\n bufferThresholdMs: 30000, // Timeline-aware buffering threshold\n };\n }\n\n /**\n * Extract thumbnail canvases using same rendition priority as video playback for frame alignment\n */\n async extractThumbnails(\n timestamps: number[],\n signal?: AbortSignal,\n ): Promise<(ThumbnailResult | null)[]> {\n // Use same rendition priority as video: try main rendition first for frame alignment\n let rendition: VideoRendition;\n try {\n const mainRendition = this.getVideoRenditionInternal();\n if (mainRendition) {\n rendition = mainRendition;\n } else {\n const scrubRendition = this.getScrubVideoRendition();\n if (scrubRendition) {\n rendition = scrubRendition;\n } else {\n throw new Error(\"No video rendition available\");\n }\n }\n } catch (error) {\n console.warn(\n \"JitMediaEngine: No video rendition available for thumbnails\",\n error,\n );\n return timestamps.map(() => null);\n }\n\n // Use shared thumbnail extraction logic\n return this.thumbnailExtractor.extractThumbnails(\n timestamps,\n rendition,\n this.durationMs,\n signal,\n );\n }\n\n convertToSegmentRelativeTimestamps(\n globalTimestamps: number[],\n _segmentId: number,\n _rendition: VideoRendition,\n ): number[] {\n return globalTimestamps.map((timestamp) => timestamp / 1000);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"JitMediaEngine.js","names":["#cachedAudioRendition","#cachedVideoRendition","rendition: VideoRendition"],"sources":["../../../src/elements/EFMedia/JitMediaEngine.ts"],"sourcesContent":["import type {\n AudioRendition,\n MediaEngine,\n RenditionId,\n ThumbnailResult,\n VideoRendition,\n} from \"../../transcoding/types\";\nimport type { ManifestResponse } from \"../../transcoding/types/index.js\";\nimport type { UrlGenerator } from \"../../transcoding/utils/UrlGenerator\";\nimport type { EFMedia } from \"../EFMedia.js\";\nimport { BaseMediaEngine } from \"./BaseMediaEngine\";\nimport { ThumbnailExtractor } from \"./shared/ThumbnailExtractor.js\";\n\nexport class JitMediaEngine extends BaseMediaEngine implements MediaEngine {\n private urlGenerator: UrlGenerator;\n private data: ManifestResponse = {} as ManifestResponse;\n private thumbnailExtractor: ThumbnailExtractor;\n\n static async fetch(host: EFMedia, urlGenerator: UrlGenerator, url: string, signal?: AbortSignal) {\n const engine = new JitMediaEngine(host, urlGenerator);\n const data = await engine.fetchManifest(url, signal);\n \n // Check for abort after potentially slow network operation\n signal?.throwIfAborted();\n \n engine.data = data;\n // Set MediaEngine interface properties\n engine.durationMs = data.durationMs;\n engine.src = data.sourceUrl;\n engine.templates = data.endpoints;\n return engine;\n }\n\n // MediaEngine interface properties\n durationMs = 0;\n src = \"\";\n templates!: { initSegment: string; mediaSegment: string };\n\n constructor(host: EFMedia, urlGenerator: UrlGenerator) {\n super(host);\n this.urlGenerator = urlGenerator;\n this.thumbnailExtractor = new ThumbnailExtractor(this);\n }\n\n // Cache renditions to avoid recomputing on every access\n #cachedVideoRendition: VideoRendition | undefined | null = null;\n #cachedAudioRendition: AudioRendition | undefined | null = null;\n\n // Implement abstract methods required by BaseMediaEngine\n protected getVideoRenditionInternal(): VideoRendition | undefined {\n return this.videoRendition;\n }\n\n protected getAudioRenditionInternal(): AudioRendition | undefined {\n return this.audioRendition;\n }\n\n get audioRendition(): AudioRendition | undefined {\n if (this.#cachedAudioRendition !== null) {\n return this.#cachedAudioRendition;\n }\n if (!this.data.audioRenditions || this.data.audioRenditions.length === 0) {\n this.#cachedAudioRendition = undefined;\n return undefined;\n }\n\n const rendition = this.data.audioRenditions[0];\n if (!rendition) {\n this.#cachedAudioRendition = undefined;\n return undefined;\n }\n\n this.#cachedAudioRendition = {\n id: rendition.id as RenditionId,\n trackId: undefined,\n src: this.data.sourceUrl,\n segmentDurationMs: rendition.segmentDurationMs,\n segmentDurationsMs: rendition.segmentDurationsMs,\n startTimeOffsetMs: rendition.startTimeOffsetMs,\n };\n return this.#cachedAudioRendition;\n }\n\n get videoRendition(): VideoRendition | undefined {\n if (this.#cachedVideoRendition !== null) {\n return this.#cachedVideoRendition;\n }\n if (!this.data.videoRenditions || this.data.videoRenditions.length === 0) {\n this.#cachedVideoRendition = undefined;\n return undefined;\n }\n\n const rendition = this.data.videoRenditions[0];\n if (!rendition) {\n this.#cachedVideoRendition = undefined;\n return undefined;\n }\n\n this.#cachedVideoRendition = {\n id: rendition.id as RenditionId,\n trackId: undefined,\n src: this.data.sourceUrl,\n segmentDurationMs: rendition.segmentDurationMs,\n segmentDurationsMs: rendition.segmentDurationsMs,\n startTimeOffsetMs: rendition.startTimeOffsetMs,\n };\n return this.#cachedVideoRendition;\n }\n\n\n\n async fetchInitSegment(\n rendition: { id?: RenditionId; trackId: number | undefined; src: string },\n signal?: AbortSignal,\n ) {\n if (!rendition.id) {\n throw new Error(\"Rendition ID is required for JIT metadata\");\n }\n const url = this.urlGenerator.generateSegmentUrl(\n \"init\",\n rendition.id,\n this,\n );\n\n // Use unified fetch method\n return this.fetchMedia(url, signal);\n }\n\n async fetchMediaSegment(\n segmentId: number,\n rendition: { id?: RenditionId; trackId: number | undefined; src: string },\n signal?: AbortSignal,\n ) {\n if (!rendition.id) {\n throw new Error(\"Rendition ID is required for JIT metadata\");\n }\n const url = this.urlGenerator.generateSegmentUrl(\n segmentId,\n rendition.id,\n this,\n );\n return this.fetchMedia(url, signal);\n }\n\n computeSegmentId(\n desiredSeekTimeMs: number,\n rendition: VideoRendition | AudioRendition,\n ) {\n // Don't request segments beyond the actual file duration\n // Note: seeking to exactly durationMs should be allowed (it's the last moment of the file)\n if (desiredSeekTimeMs > this.durationMs) {\n return undefined;\n }\n\n // Use actual segment durations if available (more accurate)\n if (\n rendition.segmentDurationsMs &&\n rendition.segmentDurationsMs.length > 0\n ) {\n let cumulativeTime = 0;\n\n for (let i = 0; i < rendition.segmentDurationsMs.length; i++) {\n const segmentDuration = rendition.segmentDurationsMs[i];\n if (segmentDuration === undefined) {\n throw new Error(\"Segment duration is required for JIT metadata\");\n }\n const segmentStartMs = cumulativeTime;\n const segmentEndMs = cumulativeTime + segmentDuration;\n\n // Check if the desired seek time falls within this segment\n // Special case: for the last segment, include the exact end time\n const isLastSegment = i === rendition.segmentDurationsMs.length - 1;\n const includesEndTime =\n isLastSegment && desiredSeekTimeMs === this.durationMs;\n\n if (\n desiredSeekTimeMs >= segmentStartMs &&\n (desiredSeekTimeMs < segmentEndMs || includesEndTime)\n ) {\n return i + 1; // Convert 0-based to 1-based segment ID\n }\n\n cumulativeTime += segmentDuration;\n\n // If we've reached or exceeded file duration, stop\n if (cumulativeTime >= this.durationMs) {\n break;\n }\n }\n\n // If we didn't find a segment, return undefined\n return undefined;\n }\n\n // Fall back to fixed duration calculation for backward compatibility\n if (!rendition.segmentDurationMs) {\n throw new Error(\"Segment duration is required for JIT metadata\");\n }\n\n const segmentIndex = Math.floor(\n desiredSeekTimeMs / rendition.segmentDurationMs,\n );\n\n // Calculate the actual segment start time\n const segmentStartMs = segmentIndex * rendition.segmentDurationMs;\n\n // If this segment would start at or beyond file duration, it doesn't exist\n if (segmentStartMs >= this.durationMs) {\n return undefined;\n }\n\n return segmentIndex + 1; // Convert 0-based to 1-based\n }\n\n getScrubVideoRendition(): VideoRendition | undefined {\n if (!this.data.videoRenditions) return undefined;\n\n const scrubManifestRendition = this.data.videoRenditions.find(\n (r) => r.id === \"scrub\",\n );\n\n if (!scrubManifestRendition) return this.getVideoRenditionInternal(); // Fallback to main\n\n return {\n id: scrubManifestRendition.id as any,\n trackId: undefined,\n src: this.src,\n segmentDurationMs: scrubManifestRendition.segmentDurationMs,\n segmentDurationsMs: scrubManifestRendition.segmentDurationsMs,\n };\n }\n\n /**\n * Get preferred buffer configuration for JIT transcoding\n * Uses higher buffering since transcoding introduces latency\n */\n getBufferConfig() {\n return {\n // Buffer more aggressively for JIT transcoding to smooth over latency\n videoBufferDurationMs: 8000,\n audioBufferDurationMs: 8000,\n maxVideoBufferFetches: 3,\n maxAudioBufferFetches: 3,\n bufferThresholdMs: 30000, // Timeline-aware buffering threshold\n };\n }\n\n /**\n * Extract thumbnail canvases using same rendition priority as video playback for frame alignment\n */\n async extractThumbnails(\n timestamps: number[],\n signal?: AbortSignal,\n ): Promise<(ThumbnailResult | null)[]> {\n // Use same rendition priority as video: try main rendition first for frame alignment\n let rendition: VideoRendition;\n try {\n const mainRendition = this.getVideoRenditionInternal();\n if (mainRendition) {\n rendition = mainRendition;\n } else {\n const scrubRendition = this.getScrubVideoRendition();\n if (scrubRendition) {\n rendition = scrubRendition;\n } else {\n throw new Error(\"No video rendition available\");\n }\n }\n } catch (error) {\n console.warn(\n \"JitMediaEngine: No video rendition available for thumbnails\",\n error,\n );\n return timestamps.map(() => null);\n }\n\n // Use shared thumbnail extraction logic\n return this.thumbnailExtractor.extractThumbnails(\n timestamps,\n rendition,\n this.durationMs,\n signal,\n );\n }\n\n convertToSegmentRelativeTimestamps(\n globalTimestamps: number[],\n _segmentId: number,\n _rendition: VideoRendition,\n ): number[] {\n return globalTimestamps.map((timestamp) => timestamp / 1000);\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import * as lit3 from "lit";
1
+ import * as lit28 from "lit";
2
2
  import { LitElement } from "lit";
3
- import * as lit_html2 from "lit-html";
3
+ import * as lit_html27 from "lit-html";
4
4
 
5
5
  //#region src/elements/EFPanZoom.d.ts
6
6
  interface PanZoomTransform {
@@ -9,7 +9,7 @@ interface PanZoomTransform {
9
9
  scale: number;
10
10
  }
11
11
  declare class EFPanZoom extends LitElement {
12
- static styles: lit3.CSSResult[];
12
+ static styles: lit28.CSSResult[];
13
13
  x: number;
14
14
  y: number;
15
15
  scale: number;
@@ -89,7 +89,7 @@ declare class EFPanZoom extends LitElement {
89
89
  * @param padding - Padding factor (0-1), e.g., 0.1 = 10% padding on each side. Default: 0.05
90
90
  */
91
91
  fitToContent(padding?: number): void;
92
- render(): lit_html2.TemplateResult<1>;
92
+ render(): lit_html27.TemplateResult<1>;
93
93
  }
94
94
  //#endregion
95
95
  export { EFPanZoom, PanZoomTransform };
@@ -1,18 +1,18 @@
1
1
  import { FrameRenderable, FrameState } from "../preview/FrameController.js";
2
2
  import { ContextMixinInterface } from "../gui/ContextMixin.js";
3
- import * as lit28 from "lit";
3
+ import * as lit26 from "lit";
4
4
  import { LitElement } from "lit";
5
- import * as lit_html27 from "lit-html";
5
+ import * as lit_html25 from "lit-html";
6
6
  import * as lit_html_directives_ref3 from "lit-html/directives/ref";
7
7
 
8
8
  //#region src/elements/EFSurface.d.ts
9
9
  declare class EFSurface extends LitElement implements FrameRenderable {
10
10
  #private;
11
- static styles: lit28.CSSResult[];
11
+ static styles: lit26.CSSResult[];
12
12
  canvasRef: lit_html_directives_ref3.Ref<HTMLCanvasElement>;
13
13
  targetElement: ContextMixinInterface | null;
14
14
  target: string;
15
- render(): lit_html27.TemplateResult<1>;
15
+ render(): lit_html25.TemplateResult<1>;
16
16
  get rootTimegroup(): any;
17
17
  get currentTimeMs(): number;
18
18
  get durationMs(): number;
@@ -1,15 +1,15 @@
1
1
  import { TemporalMixinInterface } from "./EFTemporal.js";
2
2
  import { EFTextSegment } from "./EFTextSegment.js";
3
- import * as lit8 from "lit";
3
+ import * as lit4 from "lit";
4
4
  import { LitElement, PropertyValueMap } from "lit";
5
- import * as lit_html9 from "lit-html";
5
+ import * as lit_html4 from "lit-html";
6
6
 
7
7
  //#region src/elements/EFText.d.ts
8
8
  type SplitMode = "line" | "word" | "char";
9
9
  declare const EFText_base: (new (...args: any[]) => TemporalMixinInterface) & typeof LitElement;
10
10
  declare class EFText extends EFText_base {
11
11
  #private;
12
- static styles: lit8.CSSResult[];
12
+ static styles: lit4.CSSResult[];
13
13
  split: SplitMode;
14
14
  private validateSplit;
15
15
  staggerMs?: number;
@@ -20,7 +20,7 @@ declare class EFText extends EFText_base {
20
20
  private _textContent;
21
21
  private _templateElement;
22
22
  private _segmentsReadyResolvers;
23
- render(): lit_html9.TemplateResult<1>;
23
+ render(): lit_html4.TemplateResult<1>;
24
24
  set textContent(value: string | null);
25
25
  get textContent(): string;
26
26
  /**
@@ -1,12 +1,12 @@
1
1
  import { TemporalMixinInterface } from "./EFTemporal.js";
2
- import * as lit9 from "lit";
2
+ import * as lit5 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html10 from "lit-html";
4
+ import * as lit_html5 from "lit-html";
5
5
 
6
6
  //#region src/elements/EFTextSegment.d.ts
7
7
  declare const EFTextSegment_base: (new (...args: any[]) => TemporalMixinInterface) & typeof LitElement;
8
8
  declare class EFTextSegment extends EFTextSegment_base {
9
- static styles: lit9.CSSResult[];
9
+ static styles: lit5.CSSResult[];
10
10
  /**
11
11
  * Registers animation styles that should be shared across all text segments.
12
12
  * This is the correct way to inject animation styles for segments - not via innerHTML.
@@ -32,7 +32,7 @@ declare class EFTextSegment extends EFTextSegment_base {
32
32
  * @param id The identifier of the stylesheet to remove
33
33
  */
34
34
  static unregisterAnimations(id: string): void;
35
- render(): lit_html10.TemplateResult<1>;
35
+ render(): lit_html5.TemplateResult<1>;
36
36
  private setCSSVariables;
37
37
  protected firstUpdated(): void;
38
38
  protected updated(): void;
@@ -1,13 +1,13 @@
1
1
  import { EFVideo } from "./EFVideo.js";
2
2
  import { EFTimegroup } from "./EFTimegroup.js";
3
- import * as lit29 from "lit";
3
+ import * as lit27 from "lit";
4
4
  import { LitElement } from "lit";
5
- import * as lit_html28 from "lit-html";
5
+ import * as lit_html26 from "lit-html";
6
6
  import * as lit_html_directives_ref4 from "lit-html/directives/ref";
7
7
 
8
8
  //#region src/elements/EFThumbnailStrip.d.ts
9
9
  declare class EFThumbnailStrip extends LitElement {
10
- static styles: lit29.CSSResult[];
10
+ static styles: lit27.CSSResult[];
11
11
  canvasRef: lit_html_directives_ref4.Ref<HTMLCanvasElement>;
12
12
  target: string;
13
13
  thumbnailWidth: number;
@@ -155,7 +155,7 @@ declare class EFThumbnailStrip extends LitElement {
155
155
  * Invalidate all cached thumbnails for this element.
156
156
  */
157
157
  invalidateAll(): void;
158
- render(): lit_html28.TemplateResult<1>;
158
+ render(): lit_html26.TemplateResult<1>;
159
159
  }
160
160
  declare global {
161
161
  interface HTMLElementTagNameMap {
@@ -1,10 +1,10 @@
1
1
  import { FrameRenderable, FrameState, FrameTask } from "../preview/FrameController.js";
2
2
  import { EFFramegen } from "../EF_FRAMEGEN.js";
3
3
  import { EFMedia } from "./EFMedia.js";
4
- import * as lit7 from "lit";
4
+ import * as lit3 from "lit";
5
5
  import { PropertyValueMap } from "lit";
6
- import * as lit_html8 from "lit-html";
7
- import * as lit_html_directives_ref2 from "lit-html/directives/ref";
6
+ import * as lit_html3 from "lit-html";
7
+ import * as lit_html_directives_ref0 from "lit-html/directives/ref";
8
8
 
9
9
  //#region src/elements/EFVideo.d.ts
10
10
  declare global {
@@ -23,8 +23,8 @@ interface LoadingState {
23
23
  declare const EFVideo_base: typeof EFMedia;
24
24
  declare class EFVideo extends EFVideo_base implements FrameRenderable {
25
25
  #private;
26
- static styles: lit7.CSSResult[];
27
- canvasRef: lit_html_directives_ref2.Ref<HTMLCanvasElement>;
26
+ static styles: lit3.CSSResult[];
27
+ canvasRef: lit_html_directives_ref0.Ref<HTMLCanvasElement>;
28
28
  /**
29
29
  * Duration in milliseconds for video buffering ahead of current time
30
30
  * @domAttribute "video-buffer-duration"
@@ -76,7 +76,7 @@ declare class EFVideo extends EFVideo_base implements FrameRenderable {
76
76
  };
77
77
  constructor();
78
78
  protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
79
- render(): lit_html8.TemplateResult<1>;
79
+ render(): lit_html3.TemplateResult<1>;
80
80
  get canvasElement(): HTMLCanvasElement | undefined;
81
81
  /**
82
82
  * @deprecated Use FrameRenderable methods (prepareFrame, renderFrame) via FrameController instead.
@@ -3,16 +3,16 @@ import { TemporalMixinInterface } from "./EFTemporal.js";
3
3
  import { EFVideo } from "./EFVideo.js";
4
4
  import { EFAudio } from "./EFAudio.js";
5
5
  import { TargetController } from "./TargetController.js";
6
- import * as lit10 from "lit";
6
+ import * as lit6 from "lit";
7
7
  import { LitElement, PropertyValueMap } from "lit";
8
8
  import { Ref } from "lit/directives/ref.js";
9
- import * as lit_html11 from "lit-html";
9
+ import * as lit_html6 from "lit-html";
10
10
 
11
11
  //#region src/elements/EFWaveform.d.ts
12
12
  declare const EFWaveform_base: (new (...args: any[]) => TemporalMixinInterface) & typeof LitElement;
13
13
  declare class EFWaveform extends EFWaveform_base implements FrameRenderable {
14
14
  #private;
15
- static styles: lit10.CSSResult;
15
+ static styles: lit6.CSSResult;
16
16
  canvasRef: Ref<HTMLCanvasElement>;
17
17
  private ctx;
18
18
  private styleObserver;
@@ -24,7 +24,7 @@ declare class EFWaveform extends EFWaveform_base implements FrameRenderable {
24
24
  * @public
25
25
  */
26
26
  get renderVersion(): number;
27
- render(): lit_html11.TemplateResult<1>;
27
+ render(): lit_html6.TemplateResult<1>;
28
28
  mode: "roundBars" | "bars" | "bricks" | "line" | "curve" | "pixel" | "wave" | "spikes";
29
29
  color: string;
30
30
  target: string;
@@ -1,6 +1,6 @@
1
- import * as lit22 from "lit";
1
+ import * as lit20 from "lit";
2
2
  import { LitElement } from "lit";
3
- import * as lit_html22 from "lit-html";
3
+ import * as lit_html20 from "lit-html";
4
4
 
5
5
  //#region src/gui/EFActiveRootTemporal.d.ts
6
6
 
@@ -14,7 +14,7 @@ import * as lit_html22 from "lit-html";
14
14
  * ```
15
15
  */
16
16
  declare class EFActiveRootTemporal extends LitElement {
17
- static styles: lit22.CSSResult;
17
+ static styles: lit20.CSSResult;
18
18
  /**
19
19
  * Canvas element ID or selector to bind to.
20
20
  * If not specified, will search for the nearest ef-canvas ancestor.
@@ -38,7 +38,7 @@ declare class EFActiveRootTemporal extends LitElement {
38
38
  * Remove event listener.
39
39
  */
40
40
  private removeListener;
41
- render(): lit_html22.TemplateResult<1>;
41
+ render(): lit_html20.TemplateResult<1>;
42
42
  }
43
43
  declare global {
44
44
  interface HTMLElementTagNameMap {
@@ -1,10 +1,10 @@
1
- import * as lit11 from "lit";
1
+ import * as lit7 from "lit";
2
2
  import { LitElement } from "lit";
3
- import * as lit_html12 from "lit-html";
3
+ import * as lit_html7 from "lit-html";
4
4
 
5
5
  //#region src/gui/EFConfiguration.d.ts
6
6
  declare class EFConfiguration extends LitElement {
7
- static styles: lit11.CSSResult[];
7
+ static styles: lit7.CSSResult[];
8
8
  efConfiguration: this;
9
9
  apiHost?: string;
10
10
  signingURL: string;
@@ -15,7 +15,7 @@ declare class EFConfiguration extends LitElement {
15
15
  * - "jit": Force JitMediaEngine for all sources (uses /api/v1/transcode/* URLs)
16
16
  */
17
17
  mediaEngine?: "cloud" | "local" | "jit";
18
- render(): lit_html12.TemplateResult<1>;
18
+ render(): lit_html7.TemplateResult<1>;
19
19
  }
20
20
  declare global {
21
21
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { TemporalMixinInterface } from "../elements/EFTemporal.js";
2
2
  import { ControllableInterface } from "./Controllable.js";
3
3
  import { FocusContext } from "./focusContext.js";
4
- import * as lit24 from "lit";
4
+ import * as lit22 from "lit";
5
5
  import { LitElement, PropertyValueMap } from "lit";
6
6
 
7
7
  //#region src/gui/EFControls.d.ts
@@ -26,7 +26,7 @@ import { LitElement, PropertyValueMap } from "lit";
26
26
  */
27
27
  declare class EFControls extends LitElement {
28
28
  #private;
29
- static styles: lit24.CSSResult;
29
+ static styles: lit22.CSSResult;
30
30
  createRenderRoot(): this;
31
31
  /**
32
32
  * The ID of the ef-preview element to control
@@ -1,6 +1,6 @@
1
- import * as lit23 from "lit";
1
+ import * as lit21 from "lit";
2
2
  import { LitElement } from "lit";
3
- import * as lit_html23 from "lit-html";
3
+ import * as lit_html21 from "lit-html";
4
4
 
5
5
  //#region src/gui/EFDial.d.ts
6
6
  interface DialChangeDetail {
@@ -13,12 +13,12 @@ declare class EFDial extends LitElement {
13
13
  private isDragging;
14
14
  private dragStartAngle;
15
15
  private dragStartValue;
16
- static styles: lit23.CSSResult;
16
+ static styles: lit21.CSSResult;
17
17
  private getAngleFromPoint;
18
18
  private handlePointerDown;
19
19
  private handlePointerMove;
20
20
  private handlePointerUp;
21
- render(): lit_html23.TemplateResult<1>;
21
+ render(): lit_html21.TemplateResult<1>;
22
22
  }
23
23
  //#endregion
24
24
  export { DialChangeDetail, EFDial };
@@ -1,7 +1,7 @@
1
1
  import { TemporalMixinInterface } from "../elements/EFTemporal.js";
2
2
  import "./timeline/EFTimeline.js";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html5 from "lit-html";
4
+ import * as lit_html10 from "lit-html";
5
5
  import * as lit_html_directives_ref0 from "lit-html/directives/ref";
6
6
 
7
7
  //#region src/gui/EFFilmstrip.d.ts
@@ -22,7 +22,7 @@ declare class EFFilmstrip extends EFFilmstrip_base {
22
22
  timelineRef: lit_html_directives_ref0.Ref<HTMLElement>;
23
23
  connectedCallback(): void;
24
24
  protected willUpdate(changedProperties: Map<string | number | symbol, unknown>): void;
25
- render(): lit_html5.TemplateResult<1>;
25
+ render(): lit_html10.TemplateResult<1>;
26
26
  }
27
27
  declare global {
28
28
  interface HTMLElementTagNameMap {
@@ -1,10 +1,10 @@
1
1
  import { LitElement } from "lit";
2
- import * as lit_html_directives_ref0 from "lit-html/directives/ref";
2
+ import * as lit_html_directives_ref1 from "lit-html/directives/ref";
3
3
 
4
4
  //#region src/gui/EFFitScale.d.ts
5
5
  declare class EFFitScale extends LitElement {
6
- containerRef: lit_html_directives_ref0.Ref<HTMLDivElement>;
7
- contentRef: lit_html_directives_ref0.Ref<HTMLSlotElement>;
6
+ containerRef: lit_html_directives_ref1.Ref<HTMLDivElement>;
7
+ contentRef: lit_html_directives_ref1.Ref<HTMLSlotElement>;
8
8
  createRenderRoot(): this;
9
9
  uniqueId: string;
10
10
  private scale;
@@ -1,16 +1,16 @@
1
- import * as lit25 from "lit";
1
+ import * as lit23 from "lit";
2
2
  import { LitElement } from "lit";
3
- import * as lit_html24 from "lit-html";
3
+ import * as lit_html22 from "lit-html";
4
4
  import * as lit_html_directives_ref_js3 from "lit-html/directives/ref.js";
5
5
 
6
6
  //#region src/gui/EFFocusOverlay.d.ts
7
7
  declare class EFFocusOverlay extends LitElement {
8
- static styles: lit25.CSSResult;
8
+ static styles: lit23.CSSResult;
9
9
  focusedElement?: HTMLElement | null;
10
10
  overlay: lit_html_directives_ref_js3.Ref<HTMLDivElement>;
11
11
  private animationFrame?;
12
12
  drawOverlay: () => void;
13
- render(): lit_html24.TemplateResult<1>;
13
+ render(): lit_html22.TemplateResult<1>;
14
14
  connectedCallback(): void;
15
15
  disconnectedCallback(): void;
16
16
  protected updated(): void;
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit18 from "lit";
2
+ import * as lit16 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html18 from "lit-html";
4
+ import * as lit_html16 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFPause.d.ts
7
7
  declare const EFPause_base: (new (...args: any[]) => {
@@ -10,13 +10,13 @@ declare const EFPause_base: (new (...args: any[]) => {
10
10
  effectiveContext: ControllableInterface | null;
11
11
  }) & typeof LitElement;
12
12
  declare class EFPause extends EFPause_base {
13
- static styles: lit18.CSSResult[];
13
+ static styles: lit16.CSSResult[];
14
14
  playing: boolean;
15
15
  get efContext(): ControllableInterface | null;
16
16
  connectedCallback(): void;
17
17
  disconnectedCallback(): void;
18
18
  updated(changedProperties: Map<string | number | symbol, unknown>): void;
19
- render(): lit_html18.TemplateResult<1>;
19
+ render(): lit_html16.TemplateResult<1>;
20
20
  handleClick: () => void;
21
21
  }
22
22
  declare global {
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit17 from "lit";
2
+ import * as lit15 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html17 from "lit-html";
4
+ import * as lit_html15 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFPlay.d.ts
7
7
  declare const EFPlay_base: (new (...args: any[]) => {
@@ -10,13 +10,13 @@ declare const EFPlay_base: (new (...args: any[]) => {
10
10
  effectiveContext: ControllableInterface | null;
11
11
  }) & typeof LitElement;
12
12
  declare class EFPlay extends EFPlay_base {
13
- static styles: lit17.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
18
  updated(changedProperties: Map<string | number | symbol, unknown>): void;
19
- render(): lit_html17.TemplateResult<1>;
19
+ render(): lit_html15.TemplateResult<1>;
20
20
  handleClick: () => void;
21
21
  }
22
22
  declare global {
@@ -1,19 +1,19 @@
1
1
  import { ContextMixinInterface } from "./ContextMixin.js";
2
- import * as lit12 from "lit";
2
+ import * as lit9 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html13 from "lit-html";
4
+ import * as lit_html9 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFPreview.d.ts
7
7
  declare const EFPreview_base: (new (...args: any[]) => ContextMixinInterface) & typeof LitElement;
8
8
  declare class EFPreview extends EFPreview_base {
9
- static styles: lit12.CSSResult[];
9
+ static styles: lit9.CSSResult[];
10
10
  focusedElement?: HTMLElement;
11
11
  /**
12
12
  * Find the closest temporal element (timegroup, video, audio, etc.)
13
13
  */
14
14
  private findClosestTemporal;
15
15
  constructor();
16
- render(): lit_html13.TemplateResult<1>;
16
+ render(): lit_html9.TemplateResult<1>;
17
17
  }
18
18
  declare global {
19
19
  interface HTMLElementTagNameMap {
@@ -1,6 +1,6 @@
1
- import * as lit27 from "lit";
1
+ import * as lit25 from "lit";
2
2
  import { LitElement } from "lit";
3
- import * as lit_html26 from "lit-html";
3
+ import * as lit_html24 from "lit-html";
4
4
 
5
5
  //#region src/gui/EFResizableBox.d.ts
6
6
  interface BoxBounds {
@@ -21,7 +21,7 @@ declare class EFResizableBox extends LitElement {
21
21
  private resizeStartCorner;
22
22
  private resizeStartSize;
23
23
  private resizeStartPosition;
24
- static styles: lit27.CSSResult;
24
+ static styles: lit25.CSSResult;
25
25
  private resizeObserver?;
26
26
  connectedCallback(): void;
27
27
  disconnectedCallback(): void;
@@ -30,7 +30,7 @@ declare class EFResizableBox extends LitElement {
30
30
  private handlePointerUp;
31
31
  private cleanup;
32
32
  private dispatchBoundsChange;
33
- render(): lit_html26.TemplateResult<1>;
33
+ render(): lit_html24.TemplateResult<1>;
34
34
  }
35
35
  //#endregion
36
36
  export { BoxBounds, EFResizableBox };
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit20 from "lit";
2
+ import * as lit18 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html20 from "lit-html";
4
+ import * as lit_html18 from "lit-html";
5
5
 
6
6
  //#region src/gui/EFScrubber.d.ts
7
7
  declare const EFScrubber_base: (new (...args: any[]) => {
@@ -10,7 +10,7 @@ declare const EFScrubber_base: (new (...args: any[]) => {
10
10
  effectiveContext: ControllableInterface | null;
11
11
  }) & typeof LitElement;
12
12
  declare class EFScrubber extends EFScrubber_base {
13
- static styles: lit20.CSSResult[];
13
+ static styles: lit18.CSSResult[];
14
14
  playing: boolean;
15
15
  contextCurrentTimeMs: number;
16
16
  contextDurationMs: number;
@@ -50,7 +50,7 @@ declare class EFScrubber extends EFScrubber_base {
50
50
  private boundHandlePointerUp;
51
51
  private boundHandlePointerCancel;
52
52
  private boundHandleContextMenu;
53
- render(): lit_html20.TemplateResult<1>;
53
+ render(): lit_html18.TemplateResult<1>;
54
54
  connectedCallback(): void;
55
55
  disconnectedCallback(): void;
56
56
  }
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit21 from "lit";
2
+ import * as lit19 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html21 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,11 +10,11 @@ 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: lit19.CSSResult;
14
14
  currentTimeMs: number;
15
15
  durationMs: number;
16
16
  private formatTime;
17
- render(): lit_html21.TemplateResult<1>;
17
+ render(): lit_html19.TemplateResult<1>;
18
18
  }
19
19
  declare global {
20
20
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { ControllableInterface } from "./Controllable.js";
2
- import * as lit19 from "lit";
2
+ import * as lit17 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html19 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: lit17.CSSResult[];
14
14
  get context(): ControllableInterface | null;
15
- render(): lit_html19.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 lit14 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html16 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: lit14.CSSResult[];
14
14
  playing: boolean;
15
15
  get efContext(): ControllableInterface | null;
16
16
  connectedCallback(): void;
17
17
  disconnectedCallback(): void;
18
- render(): lit_html16.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 lit26 from "lit";
2
+ import * as lit24 from "lit";
3
3
  import { LitElement } from "lit";
4
- import * as lit_html25 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: lit26.CSSResult;
52
+ static styles: lit24.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_html25.TemplateResult<1>;
82
+ render(): lit_html23.TemplateResult<1>;
83
83
  }
84
84
  declare global {
85
85
  interface HTMLElementTagNameMap {
@@ -1,15 +1,15 @@
1
1
  import { ContextMixinInterface } from "./ContextMixin.js";
2
2
  import { RenderToVideoOptions } from "../preview/renderTimegroupToVideo.js";
3
3
  import "./EFFitScale.js";
4
- import * as lit6 from "lit";
4
+ import * as lit8 from "lit";
5
5
  import { LitElement, PropertyValueMap } from "lit";
6
- import * as lit_html6 from "lit-html";
7
- import * as lit_html_directives_ref_js1 from "lit-html/directives/ref.js";
6
+ import * as lit_html8 from "lit-html";
7
+ import * as lit_html_directives_ref_js2 from "lit-html/directives/ref.js";
8
8
 
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
- static styles: lit6.CSSResult[];
12
+ static styles: lit8.CSSResult[];
13
13
  rendering: boolean;
14
14
  private panZoomTransform;
15
15
  private isExporting;
@@ -61,7 +61,7 @@ declare class EFWorkbench extends EFWorkbench_base {
61
61
  private canvasPreviewResult;
62
62
  private canvasAnimationFrame;
63
63
  private boundHandleTransformChanged;
64
- focusOverlay: lit_html_directives_ref_js1.Ref<HTMLDivElement>;
64
+ focusOverlay: lit_html_directives_ref_js2.Ref<HTMLDivElement>;
65
65
  handleStageWheel(event: WheelEvent): void;
66
66
  connectedCallback(): void;
67
67
  disconnectedCallback(): void;
@@ -194,7 +194,7 @@ declare class EFWorkbench extends EFWorkbench_base {
194
194
  updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
195
195
  drawOverlays: () => void;
196
196
  private renderPlaybackStats;
197
- render(): lit_html6.TemplateResult<1>;
197
+ render(): lit_html8.TemplateResult<1>;
198
198
  }
199
199
  declare global {
200
200
  interface HTMLElementTagNameMap {
@@ -1,12 +1,12 @@
1
1
  import { SelectionContext } from "../../canvas/selection/selectionContext.js";
2
- import * as lit5 from "lit";
2
+ import * as lit10 from "lit";
3
3
  import { LitElement, PropertyValues } from "lit";
4
- import * as lit_html4 from "lit-html";
4
+ import * as lit_html11 from "lit-html";
5
5
 
6
6
  //#region src/gui/hierarchy/EFHierarchy.d.ts
7
7
  declare const EFHierarchy_base: typeof LitElement;
8
8
  declare class EFHierarchy extends EFHierarchy_base {
9
- static styles: lit5.CSSResult[];
9
+ static styles: lit10.CSSResult[];
10
10
  target: string;
11
11
  header: string;
12
12
  showHeader: boolean;
@@ -53,7 +53,7 @@ declare class EFHierarchy extends EFHierarchy_base {
53
53
  private autoSelectFirstRootTimegroup;
54
54
  private setupSelectionListener;
55
55
  private removeSelectionListener;
56
- render(): lit_html4.TemplateResult<1>;
56
+ render(): lit_html11.TemplateResult<1>;
57
57
  }
58
58
  declare global {
59
59
  interface HTMLElementTagNameMap {
@@ -4,13 +4,13 @@ import { EFAudio } from "../../elements/EFAudio.js";
4
4
  import { EFTimegroup } from "../../elements/EFTimegroup.js";
5
5
  import { EFImage } from "../../elements/EFImage.js";
6
6
  import { HierarchyContext } from "./hierarchyContext.js";
7
- import * as lit13 from "lit";
7
+ import * as lit11 from "lit";
8
8
  import { LitElement, PropertyValues, TemplateResult, nothing } from "lit";
9
9
 
10
10
  //#region src/gui/hierarchy/EFHierarchyItem.d.ts
11
11
  declare const EFHierarchyItem_base: typeof LitElement;
12
12
  declare class EFHierarchyItem<ElementType extends HTMLElement = HTMLElement> extends EFHierarchyItem_base {
13
- static styles: lit13.CSSResult[];
13
+ static styles: lit11.CSSResult[];
14
14
  hierarchyContext?: HierarchyContext;
15
15
  canvasSelectionContext?: SelectionContext;
16
16
  element: ElementType;
@@ -1,8 +1,8 @@
1
1
  import { TreeItem } from "./treeContext.js";
2
2
  import "./EFTreeItem.js";
3
- import * as lit14 from "lit";
3
+ import * as lit12 from "lit";
4
4
  import { LitElement, PropertyValues } from "lit";
5
- import * as lit_html14 from "lit-html";
5
+ import * as lit_html12 from "lit-html";
6
6
 
7
7
  //#region src/gui/tree/EFTree.d.ts
8
8
 
@@ -29,7 +29,7 @@ import * as lit_html14 from "lit-html";
29
29
  * ```
30
30
  */
31
31
  declare class EFTree extends LitElement {
32
- static styles: lit14.CSSResult;
32
+ static styles: lit12.CSSResult;
33
33
  /** Tree items to display */
34
34
  items: TreeItem[];
35
35
  /** Optional header text */
@@ -48,7 +48,7 @@ declare class EFTree extends LitElement {
48
48
  protected willUpdate(changedProperties: PropertyValues): void;
49
49
  protected updated(changedProperties: PropertyValues): void;
50
50
  connectedCallback(): void;
51
- render(): lit_html14.TemplateResult<1>;
51
+ render(): lit_html12.TemplateResult<1>;
52
52
  }
53
53
  declare global {
54
54
  interface HTMLElementTagNameMap {
@@ -1,7 +1,7 @@
1
1
  import { TreeContext, TreeItem } from "./treeContext.js";
2
- import * as lit15 from "lit";
2
+ import * as lit13 from "lit";
3
3
  import { LitElement, nothing } from "lit";
4
- import * as lit_html15 from "lit-html";
4
+ import * as lit_html13 from "lit-html";
5
5
 
6
6
  //#region src/gui/tree/EFTreeItem.d.ts
7
7
 
@@ -17,7 +17,7 @@ import * as lit_html15 from "lit-html";
17
17
  * @fires tree-item-click - When item is clicked (for selection)
18
18
  */
19
19
  declare class EFTreeItem extends LitElement {
20
- static styles: lit15.CSSResult;
20
+ static styles: lit13.CSSResult;
21
21
  treeContext?: TreeContext;
22
22
  item: TreeItem;
23
23
  private localExpanded;
@@ -26,7 +26,7 @@ declare class EFTreeItem extends LitElement {
26
26
  get hasChildren(): boolean;
27
27
  private handleClick;
28
28
  private handleExpandClick;
29
- render(): lit_html15.TemplateResult<1> | typeof nothing;
29
+ render(): lit_html13.TemplateResult<1> | typeof nothing;
30
30
  }
31
31
  declare global {
32
32
  interface HTMLElementTagNameMap {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@editframe/elements",
3
- "version": "0.34.7-beta",
3
+ "version": "0.34.8-beta",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -13,7 +13,7 @@
13
13
  "license": "UNLICENSED",
14
14
  "dependencies": {
15
15
  "@bramus/style-observer": "^1.3.0",
16
- "@editframe/assets": "0.34.7-beta",
16
+ "@editframe/assets": "0.34.8-beta",
17
17
  "@lit/context": "^1.1.6",
18
18
  "@opentelemetry/api": "^1.9.0",
19
19
  "@opentelemetry/context-zone": "^1.26.0",