@framv/core
Advanced tools
| /** Lazily fetch + decode the audio file referenced by `el.src` into an AudioBuffer. */ | ||
| export declare function decodeAudio(el: HTMLMediaElement): Promise<AudioBuffer | null>; | ||
| /** | ||
| * Extract interleaved stereo f32 PCM starting at `el.currentTime` | ||
| * for `duration` seconds. Returns silence if no audio is available. | ||
| */ | ||
| export declare function extractAudioPCM(el: HTMLMediaElement, duration: number, sampleRate: number): Promise<Float32Array>; | ||
| /** | ||
| * Mix PCM from every media element in `els` and yield AudioSample-sized | ||
| * chunks (≤ MAX_FLOATS floats each) for a single video frame. | ||
| */ | ||
| export declare function mixAudioFrame(els: HTMLMediaElement[], frameTime: number, duration: number, sampleRate: number): AsyncGenerator<{ | ||
| data: Float32Array; | ||
| timestamp: number; | ||
| frames: number; | ||
| }>; | ||
| /** Returns true if a video element has an audio track. */ | ||
| export declare function hasAudio(video: HTMLVideoElement): boolean; | ||
| //# sourceMappingURL=audio.d.ts.map |
| {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAOA,uFAAuF;AACvF,wBAAsB,WAAW,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAqBnF;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA2BvH;AAED;;;GAGG;AACH,wBAAuB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBhM;AAED,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAGzD"} |
| /** Stereo channels. */ | ||
| const N_CH = 2; | ||
| /** Max float32 samples per AudioSample chunk (≈1 MB). */ | ||
| const MAX_FLOATS = 1024 * 1024; | ||
| /** Lazily fetch + decode the audio file referenced by `el.src` into an AudioBuffer. */ | ||
| export async function decodeAudio(el) { | ||
| const cached = el._audioBuffer; | ||
| if (cached !== undefined) | ||
| return cached; | ||
| if (!el.src) { | ||
| el._audioBuffer = null; | ||
| return null; | ||
| } | ||
| try { | ||
| const resp = await fetch(el.src); | ||
| const ab = await resp.arrayBuffer(); | ||
| const ctx = new AudioContext(); | ||
| const buf = await ctx.decodeAudioData(ab); | ||
| await ctx.close(); | ||
| el._audioBuffer = buf; | ||
| return buf; | ||
| } | ||
| catch { | ||
| el._audioBuffer = null; | ||
| return null; | ||
| } | ||
| } | ||
| /** | ||
| * Extract interleaved stereo f32 PCM starting at `el.currentTime` | ||
| * for `duration` seconds. Returns silence if no audio is available. | ||
| */ | ||
| export async function extractAudioPCM(el, duration, sampleRate) { | ||
| const frameSamples = Math.floor(sampleRate * duration); | ||
| const out = new Float32Array(N_CH * frameSamples); | ||
| const buf = await decodeAudio(el); | ||
| if (!buf) | ||
| return out; | ||
| const t = el.currentTime; | ||
| if (t < 0 || t >= el.duration) | ||
| return out; | ||
| const startSample = Math.round(t * sampleRate); | ||
| const frames = Math.min(frameSamples, buf.length - startSample); | ||
| if (frames <= 0) | ||
| return out; | ||
| const tmp = new Float32Array(frames); | ||
| const srcCh = Math.min(N_CH, buf.numberOfChannels); | ||
| for (let ch = 0; ch < srcCh; ch++) { | ||
| buf.copyFromChannel(tmp, ch, startSample); | ||
| for (let j = 0; j < frames; j++) | ||
| out[j * N_CH + ch] = tmp[j] * el.volume; | ||
| } | ||
| // Mono → stereo | ||
| if (buf.numberOfChannels === 1) { | ||
| for (let j = 0; j < frames; j++) | ||
| out[j * N_CH + 1] = out[j * N_CH]; | ||
| } | ||
| return out; | ||
| } | ||
| /** | ||
| * Mix PCM from every media element in `els` and yield AudioSample-sized | ||
| * chunks (≤ MAX_FLOATS floats each) for a single video frame. | ||
| */ | ||
| export async function* mixAudioFrame(els, frameTime, duration, sampleRate) { | ||
| const frameSamples = Math.floor(sampleRate * duration); | ||
| const combined = new Float32Array(N_CH * frameSamples); | ||
| for (const el of els) { | ||
| const pcm = await extractAudioPCM(el, duration, sampleRate); | ||
| for (let i = 0; i < pcm.length; i++) | ||
| combined[i] += pcm[i]; | ||
| } | ||
| const maxPerChunk = Math.floor(MAX_FLOATS / N_CH); | ||
| let offset = 0; | ||
| let remaining = frameSamples; | ||
| while (remaining > 0) { | ||
| const n = Math.min(maxPerChunk, remaining); | ||
| yield { | ||
| data: new Float32Array(combined.subarray(offset * N_CH, (offset + n) * N_CH)), | ||
| timestamp: frameTime + offset / sampleRate, | ||
| frames: n, | ||
| }; | ||
| offset += n; | ||
| remaining -= n; | ||
| } | ||
| } | ||
| /** Returns true if a video element has an audio track. */ | ||
| export function hasAudio(video) { | ||
| const v = video; | ||
| return v.mozHasAudio === true || Boolean(v.webkitAudioDecodedByteCount) || Boolean(v.audioTracks); | ||
| } | ||
| //# sourceMappingURL=audio.js.map |
| {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| import * as all from "./index.js"; | ||
| export declare const decodeAudio: typeof all.decodeAudio, extractAudioPCM: typeof all.extractAudioPCM, hasAudio: typeof all.hasAudio, mixAudioFrame: typeof all.mixAudioFrame, ElementExporter: typeof all.ElementExporter, registerExporter: typeof all.registerExporter, exportElement: typeof all.exportElement, settings: typeof all.settings, ElementFreezer: typeof all.ElementFreezer, seekElement: typeof all.seekElement, seekMedia: typeof all.seekMedia, waitMedia: typeof all.waitMedia, ElementRenderer: typeof all.ElementRenderer, ElementStreamer: typeof all.ElementStreamer; | ||
| export type { ExportSettings, FreezeOptions } from "./types.js"; | ||
| export type { ExportOptions } from "./factory.js"; | ||
| //# sourceMappingURL=cdn.d.ts.map |
| {"version":3,"file":"cdn.d.ts","sourceRoot":"","sources":["../src/cdn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAElC,eAAO,MAAQ,WAAW,0BAAE,eAAe,8BAAE,QAAQ,uBAAE,aAAa,4BAAE,eAAe,8BAAE,gBAAgB,+BAAE,aAAa,4BAAE,QAAQ,uBAAE,cAAc,6BAAE,WAAW,0BAAE,SAAS,wBAAE,SAAS,wBAAE,eAAe,8BAAE,eAAe,4BAAQ,CAAC;AAE9N,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"} |
| import * as all from "./index.js"; | ||
| export const { decodeAudio, extractAudioPCM, hasAudio, mixAudioFrame, ElementExporter, registerExporter, exportElement, settings, ElementFreezer, seekElement, seekMedia, waitMedia, ElementRenderer, ElementStreamer } = all; | ||
| if (typeof window !== "undefined") { | ||
| window.Framv = all; | ||
| } | ||
| //# sourceMappingURL=cdn.js.map |
| {"version":3,"file":"cdn.js","sourceRoot":"","sources":["../src/cdn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC;AAK9N,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAA6C,CAAC,KAAK,GAAG,GAAG,CAAC;AAC7D,CAAC"} |
| /** Wait for a media element to have enough data to seek. */ | ||
| export declare function waitMedia(el: HTMLMediaElement): Promise<void>; | ||
| /** Seek a media element to `time`, clamped to [0, duration]. */ | ||
| export declare function seekMedia(el: HTMLMediaElement, time: number): Promise<void>; | ||
| /** Seek an SVG or HTML element to `time` in seconds (SMIL + Web Animations). */ | ||
| export declare function seekElement(element: HTMLElement | SVGSVGElement, time: number): void; | ||
| //# sourceMappingURL=media.d.ts.map |
| {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,wBAAsB,SAAS,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnE;AAED,gEAAgE;AAChE,wBAAsB,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjF;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGpF"} |
| /** Wait for a media element to have enough data to seek. */ | ||
| export async function waitMedia(el) { | ||
| el.load(); | ||
| if (el.readyState < 2) { | ||
| await new Promise((r) => el.addEventListener("loadedmetadata", () => r(), { once: true })); | ||
| } | ||
| if (el.readyState < 4) { | ||
| await new Promise((r) => el.addEventListener("loadeddata", () => r(), { once: true })); | ||
| } | ||
| } | ||
| /** Seek a media element to `time`, clamped to [0, duration]. */ | ||
| export async function seekMedia(el, time) { | ||
| const clamped = Math.max(0, Math.min(el.duration || 0, time)); | ||
| if (Math.abs(el.currentTime - clamped) < 0.001) | ||
| return; | ||
| el.currentTime = clamped; | ||
| if (el.readyState < 2) { | ||
| await new Promise((r) => el.addEventListener("seeked", () => r(), { once: true })); | ||
| } | ||
| } | ||
| /** Seek an SVG or HTML element to `time` in seconds (SMIL + Web Animations). */ | ||
| export function seekElement(element, time) { | ||
| if ("setCurrentTime" in element) | ||
| element.setCurrentTime(time); | ||
| for (const a of element.getAnimations({ subtree: true })) | ||
| a.currentTime = time * 1000; | ||
| } | ||
| //# sourceMappingURL=media.js.map |
| {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAoB;IAClD,EAAE,CAAC,IAAI,EAAE,CAAC;IACV,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAoB,EAAE,IAAY;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,KAAK;QAAE,OAAO;IACvD,EAAE,CAAC,WAAW,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,OAAoC,EAAE,IAAY;IAC5E,IAAI,gBAAgB,IAAI,OAAO;QAAG,OAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAAE,CAAC,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AACxF,CAAC"} |
| /** | ||
| * Renders an SVG/HTML element at a specific point in time to an OffscreenCanvas. | ||
| * Used as the inner streaming primitive by the exporter and the player. | ||
| */ | ||
| export declare class ElementStreamer { | ||
| private freezer; | ||
| private renderer; | ||
| /** Seek to `time` seconds, freeze, and render to an OffscreenCanvas. */ | ||
| renderFrame(element: HTMLElement | SVGSVGElement, time: number, width?: number, height?: number): Promise<OffscreenCanvas>; | ||
| } | ||
| //# sourceMappingURL=streamer.d.ts.map |
| {"version":3,"file":"streamer.d.ts","sourceRoot":"","sources":["../src/streamer.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAyB;IAEzC,wEAAwE;IAClE,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAKjI"} |
| import { ElementFreezer } from "./freezer.js"; | ||
| import { seekElement } from "./media.js"; | ||
| import { ElementRenderer } from "./renderer.js"; | ||
| /** | ||
| * Renders an SVG/HTML element at a specific point in time to an OffscreenCanvas. | ||
| * Used as the inner streaming primitive by the exporter and the player. | ||
| */ | ||
| export class ElementStreamer { | ||
| freezer = new ElementFreezer(); | ||
| renderer = new ElementRenderer(); | ||
| /** Seek to `time` seconds, freeze, and render to an OffscreenCanvas. */ | ||
| async renderFrame(element, time, width, height) { | ||
| seekElement(element, time); | ||
| const frozen = await this.freezer.freezeAll(element); | ||
| return this.renderer.renderToCanvas(frozen, width, height); | ||
| } | ||
| } | ||
| //# sourceMappingURL=streamer.js.map |
| {"version":3,"file":"streamer.js","sourceRoot":"","sources":["../src/streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAC/B,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,wEAAwE;IACxE,KAAK,CAAC,WAAW,CAAC,OAAoC,EAAE,IAAY,EAAE,KAAc,EAAE,MAAe;QACnG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;CACF"} |
+21
| MIT License | ||
| Copyright (c) 2025 Mens Reversa | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. |
| # CORE\n\nPart of the Framv framework.\n |
+10
-3
@@ -1,2 +0,10 @@ | ||
| import { ExportSettings } from './types'; | ||
| import { ElementFreezer } from "./freezer.js"; | ||
| import { ElementRenderer } from "./renderer.js"; | ||
| import { ExportSettings } from "./types.js"; | ||
| export type TypedExporter = (element: HTMLElement | SVGSVGElement, settings: ExportSettings, core: { | ||
| freezer: ElementFreezer; | ||
| renderer: ElementRenderer; | ||
| }) => Promise<Blob>; | ||
| export declare const exporters: Map<string, TypedExporter>; | ||
| export declare function registerExporter(format: string, exporter: TypedExporter): void; | ||
| export declare class ElementExporter { | ||
@@ -8,5 +16,4 @@ private freezer; | ||
| private exportImage; | ||
| private exportVideo; | ||
| private exportAudio; | ||
| private exportMedia; | ||
| } | ||
| //# sourceMappingURL=exporter.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../src/exporter.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAyB;IAEnC,MAAM,CACV,OAAO,EAAE,WAAW,GAAG,aAAa,EACpC,QAAQ,EAAE,cAAc,EACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC;IAgChB,OAAO,CAAC,SAAS;YAMH,WAAW;YAoBX,WAAW;YAuGX,WAAW;CAa1B"} | ||
| {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../src/exporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAS5C,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAI5K,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAA2G,CAAC;AAM7J,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,QAEvE;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAyB;IAEnC,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB1J,OAAO,CAAC,SAAS;YAKH,WAAW;YAOX,WAAW;CAiF1B"} |
+96
-85
@@ -1,64 +0,69 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.ElementExporter = void 0; | ||
| const mediabunny_1 = require("mediabunny"); | ||
| const freezer_1 = require("./freezer"); | ||
| const renderer_1 = require("./renderer"); | ||
| class ElementExporter { | ||
| constructor() { | ||
| this.freezer = new freezer_1.ElementFreezer(); | ||
| this.renderer = new renderer_1.ElementRenderer(); | ||
| } | ||
| import { AudioSample, AudioSampleSource, getFirstEncodableAudioCodec, Mp4OutputFormat, Output, QUALITY_HIGH, QUALITY_LOW, QUALITY_MEDIUM, QUALITY_VERY_HIGH, StreamTarget, VideoSample, VideoSampleSource, WebMOutputFormat } from "mediabunny"; | ||
| import { hasAudio, mixAudioFrame } from "./audio.js"; | ||
| import { ElementFreezer } from "./freezer.js"; | ||
| import { seekElement, seekMedia, waitMedia } from "./media.js"; | ||
| import { ElementRenderer } from "./renderer.js"; | ||
| const MIME = { | ||
| mp4: "video/mp4", | ||
| webm: "video/webm", | ||
| m4a: "audio/mp4", | ||
| ogg: "audio/ogg", | ||
| }; | ||
| // Support sharing the registry across module boundaries or multiple evaluations. | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| export const exporters = (typeof window !== "undefined" && window.__framvExporters) || new Map(); | ||
| if (typeof window !== "undefined") { | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| window.__framvExporters = exporters; | ||
| } | ||
| export function registerExporter(format, exporter) { | ||
| exporters.set(format, exporter); | ||
| } | ||
| export class ElementExporter { | ||
| freezer = new ElementFreezer(); | ||
| renderer = new ElementRenderer(); | ||
| async export(element, settings, onProgress) { | ||
| const { format, quality = 1, fps = 30, time, start = 0, end = 5, width, height } = settings; | ||
| const { format, quality = 1, fps = 30, start = 0, end = 5, width, height } = settings; | ||
| switch (format) { | ||
| case 'svg': | ||
| case "svg": | ||
| return this.exportSvg(element); | ||
| case 'png': | ||
| case 'jpg': | ||
| case 'webp': | ||
| return this.exportImage(element, format, time || 0, quality, width, height); | ||
| case 'webm': | ||
| case 'mp4': | ||
| return this.exportVideo(element, format, quality, fps, start, end, true, onProgress, width, height); | ||
| case 'm4a': | ||
| case 'ogg': | ||
| return this.exportAudio(element, format, quality, fps, start, end, onProgress); | ||
| default: | ||
| case "png": | ||
| case "jpg": | ||
| case "webp": | ||
| return this.exportImage(element, format, quality, width, height); | ||
| case "webm": | ||
| case "mp4": | ||
| return this.exportMedia(element, format, quality, fps, start, end, true, onProgress, width, height); | ||
| case "m4a": | ||
| case "ogg": | ||
| return this.exportMedia(element, format, quality, fps, start, end, false, onProgress); | ||
| default: { | ||
| const custom = exporters.get(format); | ||
| if (custom) | ||
| return custom(element, settings, { freezer: this.freezer, renderer: this.renderer }); | ||
| throw new Error(`Unsupported format: ${format}`); | ||
| } | ||
| } | ||
| } | ||
| exportSvg(element) { | ||
| const serializer = new XMLSerializer(); | ||
| const svgString = serializer.serializeToString(element); | ||
| return Promise.resolve(new Blob([svgString], { type: 'image/svg+xml' })); | ||
| const svgString = new XMLSerializer().serializeToString(element); | ||
| return Promise.resolve(new Blob([svgString], { type: "image/svg+xml" })); | ||
| } | ||
| async exportImage(element, format, time, quality, width, height) { | ||
| async exportImage(element, format, quality, width, height) { | ||
| const frozen = await this.freezer.freezeAll(element); | ||
| const canvas = await this.renderer.renderToCanvas(frozen, width, height); | ||
| const mimeTypes = { | ||
| png: 'image/png', | ||
| jpg: 'image/jpeg', | ||
| webp: 'image/webp', | ||
| }; | ||
| return canvas.convertToBlob({ type: mimeTypes[format], quality }); | ||
| const mime = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }; | ||
| return canvas.convertToBlob({ type: mime[format], quality }); | ||
| } | ||
| async exportVideo(element, format, quality, fps, start, end, includeVideo, onProgress, width, height) { | ||
| const isWebM = format === 'webm'; | ||
| const isMP4 = format === 'mp4'; | ||
| const totalDuration = end - start; | ||
| const totalFrames = Math.ceil(totalDuration * fps); | ||
| const mediabunnyQuality = quality >= 0.95 | ||
| ? mediabunny_1.QUALITY_VERY_HIGH | ||
| : quality >= 0.8 | ||
| ? mediabunny_1.QUALITY_HIGH | ||
| : quality >= 0.5 | ||
| ? mediabunny_1.QUALITY_MEDIUM | ||
| : mediabunny_1.QUALITY_LOW; | ||
| async exportMedia(element, format, quality, fps, start, end, includeVideo, onProgress, width, height) { | ||
| const isMP4 = format === "mp4" || format === "m4a"; | ||
| const totalFrames = Math.ceil((end - start) * fps); | ||
| const frameDuration = 1 / fps; | ||
| const mbQuality = quality >= 0.95 ? QUALITY_VERY_HIGH : quality >= 0.8 ? QUALITY_HIGH : quality >= 0.5 ? QUALITY_MEDIUM : QUALITY_LOW; | ||
| const chunks = []; | ||
| const output = new mediabunny_1.Output({ | ||
| format: isMP4 ? new mediabunny_1.Mp4OutputFormat({ fastStart: 'fragmented' }) : new mediabunny_1.WebMOutputFormat(), | ||
| target: new mediabunny_1.StreamTarget(new WritableStream({ | ||
| write: (chunk) => { | ||
| chunks.push(chunk.data); | ||
| const output = new Output({ | ||
| format: isMP4 ? new Mp4OutputFormat({ fastStart: "fragmented" }) : new WebMOutputFormat(), | ||
| target: new StreamTarget(new WritableStream({ | ||
| write: (c) => { | ||
| chunks.push(c.data); | ||
| }, | ||
@@ -68,17 +73,14 @@ })), | ||
| let videoSource; | ||
| let audioSource; | ||
| if (includeVideo) { | ||
| videoSource = new mediabunny_1.VideoSampleSource({ | ||
| codec: isWebM ? 'vp9' : 'avc', | ||
| bitrate: mediabunnyQuality, | ||
| keyFrameInterval: 2.0, | ||
| latencyMode: 'realtime', | ||
| }); | ||
| videoSource = new VideoSampleSource({ codec: isMP4 ? "avc" : "vp9", bitrate: mbQuality, keyFrameInterval: 2.0, latencyMode: "realtime" }); | ||
| output.addVideoTrack(videoSource, { frameRate: fps }); | ||
| } | ||
| const hasAudio = element.querySelectorAll('audio, video').length > 0; | ||
| if (hasAudio) { | ||
| audioSource = new mediabunny_1.AudioSampleSource({ | ||
| codec: isWebM ? 'opus' : (await (0, mediabunny_1.getFirstEncodableAudioCodec)(['aac', 'opus', 'pcm-s16'])), | ||
| bitrate: mediabunnyQuality, | ||
| const mediaEls = Array.from(element.querySelectorAll("audio, video")).filter((m) => m.src && (m.tagName === "AUDIO" || hasAudio(m))); | ||
| let audioSource; | ||
| let audioCtx; | ||
| if (mediaEls.length > 0) { | ||
| audioCtx = new AudioContext(); | ||
| audioSource = new AudioSampleSource({ | ||
| codec: isMP4 ? ((await getFirstEncodableAudioCodec(["aac", "opus", "pcm-s16"])) ?? "aac") : "opus", | ||
| bitrate: mbQuality, | ||
| }); | ||
@@ -88,36 +90,45 @@ output.addAudioTrack(audioSource); | ||
| await output.start(); | ||
| for (const m of mediaEls) | ||
| await waitMedia(m); | ||
| for (const m of mediaEls) | ||
| await seekMedia(m, m.duration); | ||
| for (const m of mediaEls) | ||
| await seekMedia(m, 0); | ||
| for (let i = 0; i < totalFrames; i++) { | ||
| if (onProgress) { | ||
| const shouldContinue = await onProgress((i + 1) / totalFrames); | ||
| if (!shouldContinue) | ||
| throw new Error('Export cancelled'); | ||
| const ok = await onProgress((i + 1) / totalFrames); | ||
| if (!ok) | ||
| throw new Error("Export cancelled"); | ||
| } | ||
| const frameTime = start + i * frameDuration; | ||
| seekElement(element, frameTime); | ||
| for (const m of mediaEls) | ||
| await seekMedia(m, frameTime - (parseFloat(m.dataset.mediaStart ?? "0") || 0)); | ||
| if (includeVideo && videoSource) { | ||
| const frozen = await this.freezer.freezeAll(element); | ||
| const canvas = await this.renderer.renderToCanvas(frozen, width, height); | ||
| const ctx = canvas.getContext('2d'); | ||
| if (!ctx) | ||
| continue; | ||
| const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); | ||
| const videoFrame = new VideoFrame(imageData.data.buffer, { | ||
| format: 'RGBA', | ||
| codedWidth: canvas.width, | ||
| codedHeight: canvas.height, | ||
| timestamp: (i / fps) * 1000000, | ||
| }); | ||
| await videoSource.add(new mediabunny_1.VideoSample(videoFrame)); | ||
| videoFrame.close(); | ||
| const ctx = canvas.getContext("2d"); | ||
| if (ctx) { | ||
| const vf = new VideoFrame(ctx.getImageData(0, 0, canvas.width, canvas.height).data.buffer, { | ||
| format: "RGBA", | ||
| codedWidth: canvas.width, | ||
| codedHeight: canvas.height, | ||
| timestamp: Math.round((i / fps) * 1_000_000), | ||
| }); | ||
| await videoSource.add(new VideoSample(vf)); | ||
| vf.close(); | ||
| } | ||
| } | ||
| if (hasAudio && audioSource) { | ||
| if (audioSource && audioCtx) { | ||
| for await (const chunk of mixAudioFrame(mediaEls, frameTime, frameDuration, audioCtx.sampleRate)) { | ||
| await audioSource.add(new AudioSample({ format: "f32", sampleRate: audioCtx.sampleRate, numberOfChannels: 2, ...chunk })); | ||
| } | ||
| } | ||
| } | ||
| await output.finalize(); | ||
| const mimeType = isMP4 ? 'video/mp4' : 'video/webm'; | ||
| return new Blob(chunks, { type: mimeType }); | ||
| if (audioCtx) | ||
| await audioCtx.close(); | ||
| return new Blob(chunks, { type: MIME[format] }); | ||
| } | ||
| async exportAudio(_element, _format, _quality, _fps, _start, _end, _onProgress) { | ||
| throw new Error('Audio export not yet implemented'); | ||
| } | ||
| } | ||
| exports.ElementExporter = ElementExporter; | ||
| //# sourceMappingURL=exporter.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../src/exporter.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../src/exporter.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,2 @@ | ||
| import { ExportSettings } from './types'; | ||
| import { ExportSettings } from "./types.js"; | ||
| export interface ExportOptions { | ||
@@ -8,3 +8,3 @@ element: HTMLElement | SVGSVGElement; | ||
| export declare function exportElement(options: ExportOptions): Promise<Blob>; | ||
| export declare function settings(format: ExportSettings['format'], config: Omit<ExportSettings, 'format'>): ExportSettings; | ||
| export declare function settings(format: ExportSettings["format"], config: Omit<ExportSettings, "format">): ExportSettings; | ||
| //# sourceMappingURL=factory.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GACrC,cAAc,CAKhB"} | ||
| {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,cAAc,CAKjH"} |
+4
-8
@@ -1,12 +0,8 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.exportElement = exportElement; | ||
| exports.settings = settings; | ||
| const exporter_1 = require("./exporter"); | ||
| async function exportElement(options) { | ||
| import { ElementExporter } from "./exporter.js"; | ||
| export async function exportElement(options) { | ||
| const { element, settings, onProgress } = options; | ||
| const exporter = new exporter_1.ElementExporter(); | ||
| const exporter = new ElementExporter(); | ||
| return exporter.export(element, settings, onProgress); | ||
| } | ||
| function settings(format, config) { | ||
| export function settings(format, config) { | ||
| return { | ||
@@ -13,0 +9,0 @@ format, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":";;AASA,sCAIC;AAED,4BAQC;AAvBD,yCAA6C;AAStC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,0BAAe,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,QAAQ,CACtB,MAAgC,EAChC,MAAsC;IAEtC,OAAO;QACL,MAAM;QACN,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAShD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAgC,EAAE,MAAsC;IAC/F,OAAO;QACL,MAAM;QACN,GAAG,MAAM;KACV,CAAC;AACJ,CAAC"} |
@@ -1,4 +0,7 @@ | ||
| import { FreezeOptions } from './types'; | ||
| import { FreezeOptions } from "./types.js"; | ||
| export declare class ElementFreezer { | ||
| freezeAll(element: HTMLElement | SVGSVGElement, options?: FreezeOptions): Promise<HTMLElement | SVGSVGElement>; | ||
| /** Commit all Web/CSS animation styles to inline style attributes on the source elements. | ||
| * Returns a cleanup function that restores the original styles. */ | ||
| private _commitWebAnimations; | ||
| private freezeWebAnimation; | ||
@@ -5,0 +8,0 @@ private freezeSmilAnimation; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"freezer.d.ts","sourceRoot":"","sources":["../src/freezer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,cAAc;IACnB,SAAS,CACb,OAAO,EAAE,WAAW,GAAG,aAAa,EACpC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC;IAoFvC,OAAO,CAAC,kBAAkB;YAiBZ,mBAAmB;YA2BnB,YAAY;YA0BZ,WAAW;YA4BX,WAAW;IAiCzB,OAAO,CAAC,SAAS;CAelB"} | ||
| {"version":3,"file":"freezer.d.ts","sourceRoot":"","sources":["../src/freezer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,qBAAa,cAAc;IACnB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC;IA6DxH;wEACoE;IACpE,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,kBAAkB;YAiBZ,mBAAmB;YAyFnB,YAAY;YAoBZ,WAAW;YA4BX,WAAW;IA8BzB,OAAO,CAAC,SAAS;CAelB"} |
+178
-71
@@ -1,34 +0,41 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.ElementFreezer = void 0; | ||
| class ElementFreezer { | ||
| export class ElementFreezer { | ||
| async freezeAll(element, options = {}) { | ||
| const { freezeAnimations = true, freezeCanvas = true, freezeVideo = true, freezeImages = true, removeScripts = true, removeAudio = true, } = options; | ||
| const { freezeAnimations = true, freezeCanvas = true, freezeVideo = true, freezeImages = true, removeScripts = true, removeAudio = true } = options; | ||
| // For CSS/Web Animations: commit styles to source BEFORE cloning. | ||
| // This writes the current animated state into inline styles so the clone inherits them. | ||
| let restoreStyles; | ||
| if (freezeAnimations) { | ||
| restoreStyles = this._commitWebAnimations(element); | ||
| } | ||
| const frozenElement = element.cloneNode(true); | ||
| // Restore source styles immediately after clone (don't pollute subsequent frames) | ||
| if (restoreStyles) | ||
| restoreStyles(); | ||
| const promises = []; | ||
| if (freezeAnimations) { | ||
| const sourceAnimated = element | ||
| .getAnimations({ subtree: true }) | ||
| .map((a) => a.effect.target); | ||
| const destAnimated = frozenElement | ||
| .getAnimations({ subtree: true }) | ||
| .map((a) => a.effect.target); | ||
| promises.push(...sourceAnimated.map((src, i) => Promise.resolve(this.freezeWebAnimation(src, destAnimated[i])))); | ||
| const sourceSmil = element.querySelectorAll('animate, animateTransform, animateMotion, set'); | ||
| const destSmil = frozenElement.querySelectorAll('animate, animateTransform, animateMotion, set'); | ||
| // Remove animation from the clone (committed styles are already in inline style) | ||
| frozenElement.querySelectorAll("*").forEach((el) => { | ||
| if (el.style?.animation) | ||
| el.style.animation = "none"; | ||
| }); | ||
| if (frozenElement.style?.animation) | ||
| frozenElement.style.animation = "none"; | ||
| // SMIL animations: freeze animVal from source into clone static attributes | ||
| const sourceSmil = element.querySelectorAll("animate, animateTransform, animateMotion, set"); | ||
| const destSmil = frozenElement.querySelectorAll("animate, animateTransform, animateMotion, set"); | ||
| promises.push(...Array.from(sourceSmil).map((src, i) => this.freezeSmilAnimation(src, destSmil[i]))); | ||
| } | ||
| if (freezeCanvas) { | ||
| const sourceCanvases = element.querySelectorAll('canvas'); | ||
| const destCanvases = frozenElement.querySelectorAll('canvas'); | ||
| const sourceCanvases = element.querySelectorAll("canvas"); | ||
| const destCanvases = frozenElement.querySelectorAll("canvas"); | ||
| promises.push(...Array.from(sourceCanvases).map((src, i) => this.freezeCanvas(src, destCanvases[i]))); | ||
| } | ||
| if (freezeVideo) { | ||
| const sourceVideos = element.querySelectorAll('video'); | ||
| const destVideos = frozenElement.querySelectorAll('video'); | ||
| const sourceVideos = element.querySelectorAll("video"); | ||
| const destVideos = frozenElement.querySelectorAll("video"); | ||
| promises.push(...Array.from(sourceVideos).map((src, i) => this.freezeVideo(src, destVideos[i]))); | ||
| } | ||
| if (freezeImages) { | ||
| const sourceImages = element.querySelectorAll('image, img'); | ||
| const destImages = frozenElement.querySelectorAll('image, img'); | ||
| const sourceImages = element.querySelectorAll("image, img"); | ||
| const destImages = frozenElement.querySelectorAll("image, img"); | ||
| promises.push(...Array.from(sourceImages).map((src, i) => this.freezeImage(src, destImages[i]))); | ||
@@ -38,44 +45,146 @@ } | ||
| if (removeScripts) { | ||
| frozenElement.querySelectorAll('script').forEach((script) => script.remove()); | ||
| frozenElement.querySelectorAll("script").forEach((script) => script.remove()); | ||
| } | ||
| if (removeAudio) { | ||
| frozenElement.querySelectorAll('audio').forEach((audio) => audio.remove()); | ||
| frozenElement.querySelectorAll("audio").forEach((audio) => audio.remove()); | ||
| } | ||
| return frozenElement; | ||
| } | ||
| /** Commit all Web/CSS animation styles to inline style attributes on the source elements. | ||
| * Returns a cleanup function that restores the original styles. */ | ||
| _commitWebAnimations(element) { | ||
| const animations = element.getAnimations({ subtree: true }); | ||
| const targets = new Map(); | ||
| for (const a of animations) { | ||
| const target = a.effect?.target; | ||
| if (target && !targets.has(target)) { | ||
| targets.set(target, target.getAttribute("style")); | ||
| } | ||
| } | ||
| for (const [target] of targets) { | ||
| const targetAnims = target.getAnimations(); | ||
| for (const anim of targetAnims) { | ||
| try { | ||
| anim.commitStyles(); | ||
| } | ||
| catch { | ||
| /* ignore */ | ||
| } | ||
| } | ||
| } | ||
| return () => { | ||
| for (const [target, original] of targets) { | ||
| if (original !== null) { | ||
| target.setAttribute("style", original); | ||
| } | ||
| else { | ||
| target.removeAttribute("style"); | ||
| } | ||
| } | ||
| }; | ||
| } | ||
| freezeWebAnimation(source, dest) { | ||
| const animations = source.getAnimations(); | ||
| for (const animation of animations) { | ||
| const originalStyle = source.getAttribute('style'); | ||
| const originalStyle = source.getAttribute("style"); | ||
| animation.commitStyles(); | ||
| dest.setAttribute('style', source.getAttribute('style') || ''); | ||
| dest.setAttribute("style", source.getAttribute("style") || ""); | ||
| if (originalStyle) { | ||
| source.setAttribute('style', originalStyle); | ||
| source.setAttribute("style", originalStyle); | ||
| } | ||
| else { | ||
| source.removeAttribute('style'); | ||
| source.removeAttribute("style"); | ||
| } | ||
| } | ||
| if (animations.length > 0) { | ||
| dest.style.animation = 'none'; | ||
| dest.style.animation = "none"; | ||
| } | ||
| } | ||
| async freezeSmilAnimation(source, dest) { | ||
| const sourceTarget = source.parentElement; | ||
| const destTarget = dest.parentElement; | ||
| if (!destTarget || !sourceTarget) | ||
| // Support href/xlink:href target references | ||
| const sourceHref = source.getAttribute("href") || source.getAttribute("xlink:href"); | ||
| const sourceTarget = sourceHref ? (source.ownerSVGElement?.querySelector(sourceHref) ?? source.parentElement) : source.parentElement; | ||
| const destHref = dest.getAttribute("href") || dest.getAttribute("xlink:href"); | ||
| const destTarget = destHref ? (dest.ownerSVGElement?.querySelector(destHref) ?? dest.parentElement) : dest.parentElement; | ||
| if (!destTarget || !sourceTarget) { | ||
| dest.remove(); | ||
| return; | ||
| const attrName = source.getAttribute('attributeName'); | ||
| if (attrName === 'transform' && sourceTarget instanceof SVGGraphicsElement) { | ||
| const matrix = sourceTarget.getCTM(); | ||
| if (matrix) { | ||
| destTarget.setAttribute('transform', `matrix(${matrix.a},${matrix.b},${matrix.c},${matrix.d},${matrix.e},${matrix.f})`); | ||
| } | ||
| const attrName = source.getAttribute("attributeName"); | ||
| // Handle animateMotion and animateTransform via CTM | ||
| if (source.tagName === "animateMotion" || source.tagName === "animateTransform" || attrName === "transform") { | ||
| if (sourceTarget instanceof SVGGraphicsElement) { | ||
| const matrix = sourceTarget.getCTM(); | ||
| if (matrix) { | ||
| destTarget.setAttribute("transform", `matrix(${matrix.a},${matrix.b},${matrix.c},${matrix.d},${matrix.e},${matrix.f})`); | ||
| } | ||
| } | ||
| dest.remove(); | ||
| return; | ||
| } | ||
| else if (attrName) { | ||
| const animated = sourceTarget[attrName]; | ||
| if (animated?.animVal !== undefined) { | ||
| destTarget.setAttribute(attrName, String(animated.animVal)); | ||
| if (!attrName) { | ||
| dest.remove(); | ||
| return; | ||
| } | ||
| // Try to resolve the animated value | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| const animatedProperty = sourceTarget[attrName]; | ||
| if (animatedProperty && animatedProperty.animVal !== undefined) { | ||
| const animVal = animatedProperty.animVal; | ||
| if (typeof animVal === "boolean" || typeof animVal === "number" || typeof animVal === "string") { | ||
| // Primitive SVGAnimated types: SVGAnimatedNumber, SVGAnimatedString, SVGAnimatedBoolean, SVGAnimatedEnumeration | ||
| destTarget.setAttribute(attrName, String(animVal)); | ||
| } | ||
| else if (typeof animVal === "object" && animVal !== null) { | ||
| if (animVal.value !== undefined) { | ||
| // SVGAnimatedLength, SVGAnimatedAngle, SVGAnimatedNumber (legacy) | ||
| destTarget.setAttribute(attrName, String(animVal.value)); | ||
| } | ||
| else if (animVal.x !== undefined && animVal.y !== undefined) { | ||
| // SVGAnimatedRect, SVGAnimatedPoint | ||
| if (animVal.width !== undefined && animVal.height !== undefined) { | ||
| destTarget.setAttribute(attrName, `${animVal.x} ${animVal.y} ${animVal.width} ${animVal.height}`); | ||
| } | ||
| else { | ||
| destTarget.setAttribute(attrName, `${animVal.x} ${animVal.y}`); | ||
| } | ||
| } | ||
| else if (animVal.numberOfItems !== undefined) { | ||
| // SVGAnimatedTransformList, SVGAnimatedLengthList, SVGAnimatedNumberList, SVGAnimatedPointList | ||
| const items = []; | ||
| for (let i = 0; i < animVal.numberOfItems; i++) { | ||
| const item = animVal.getItem(i); | ||
| if (item.matrix) { | ||
| const m = item.matrix; | ||
| items.push(`matrix(${m.a},${m.b},${m.c},${m.d},${m.e},${m.f})`); | ||
| } | ||
| else if (item.value !== undefined) { | ||
| items.push(String(item.value)); | ||
| } | ||
| } | ||
| if (items.length > 0) | ||
| destTarget.setAttribute(attrName, items.join(" ")); | ||
| } | ||
| else if (animVal.align !== undefined) { | ||
| // SVGAnimatedPreserveAspectRatio | ||
| destTarget.setAttribute(attrName, `${animVal.align} ${animVal.meetOrSlice}`); | ||
| } | ||
| } | ||
| } | ||
| else { | ||
| // CSS presentation attributes or custom attributes: | ||
| // Use computed style to get the current animated value | ||
| try { | ||
| const computedValue = window.getComputedStyle(sourceTarget).getPropertyValue(attrName); | ||
| if (computedValue) { | ||
| destTarget.style.setProperty(attrName, computedValue); | ||
| } | ||
| } | ||
| catch { | ||
| // If computed style fails, try reading the attribute directly | ||
| const attrVal = sourceTarget.getAttribute(attrName); | ||
| if (attrVal !== null) | ||
| destTarget.setAttribute(attrName, attrVal); | ||
| } | ||
| } | ||
| dest.remove(); | ||
@@ -85,3 +194,3 @@ } | ||
| if (!this.isVisible(dest)) { | ||
| const div = document.createElement('div'); | ||
| const div = document.createElement("div"); | ||
| Array.from(dest.attributes).forEach((attr) => div.setAttribute(attr.name, attr.value)); | ||
@@ -91,19 +200,18 @@ dest.parentNode?.replaceChild(div, dest); | ||
| } | ||
| const img = document.createElement('img'); | ||
| img.crossOrigin = 'anonymous'; | ||
| source.toBlob((blob) => { | ||
| if (blob) { | ||
| const url = URL.createObjectURL(blob); | ||
| img.src = url; | ||
| Array.from(dest.attributes).forEach((attr) => img.setAttribute(attr.name, attr.value)); | ||
| dest.parentNode?.replaceChild(img, dest); | ||
| URL.revokeObjectURL(url); | ||
| } | ||
| }, 'image/webp', 1); | ||
| const img = document.createElement("img"); | ||
| img.crossOrigin = "anonymous"; | ||
| const blob = await new Promise((res) => source.toBlob(res, "image/webp", 1)); | ||
| if (!blob) | ||
| return; | ||
| const url = URL.createObjectURL(blob); | ||
| img.src = url; | ||
| Array.from(dest.attributes).forEach((attr) => img.setAttribute(attr.name, attr.value)); | ||
| dest.parentNode?.replaceChild(img, dest); | ||
| URL.revokeObjectURL(url); | ||
| } | ||
| async freezeVideo(source, dest) { | ||
| if (!this.isVisible(dest)) { | ||
| const div = document.createElement('div'); | ||
| const div = document.createElement("div"); | ||
| Array.from(dest.attributes).forEach((attr) => { | ||
| if (attr.name !== 'src') | ||
| if (attr.name !== "src") | ||
| div.setAttribute(attr.name, attr.value); | ||
@@ -115,13 +223,13 @@ }); | ||
| const canvas = new OffscreenCanvas(source.videoWidth || 640, source.videoHeight || 480); | ||
| const ctx = canvas.getContext('2d'); | ||
| const ctx = canvas.getContext("2d"); | ||
| if (!ctx) | ||
| return; | ||
| ctx.drawImage(source, 0, 0); | ||
| const blob = await canvas.convertToBlob({ type: 'image/webp', quality: 1 }); | ||
| const blob = await canvas.convertToBlob({ type: "image/webp", quality: 1 }); | ||
| const url = URL.createObjectURL(blob); | ||
| const img = document.createElement('img'); | ||
| img.crossOrigin = 'anonymous'; | ||
| const img = document.createElement("img"); | ||
| img.crossOrigin = "anonymous"; | ||
| img.src = url; | ||
| Array.from(dest.attributes).forEach((attr) => { | ||
| if (attr.name !== 'src') | ||
| if (attr.name !== "src") | ||
| img.setAttribute(attr.name, attr.value); | ||
@@ -135,8 +243,8 @@ }); | ||
| if (dest instanceof SVGImageElement) { | ||
| dest.setAttribute('href', ''); | ||
| dest.setAttribute("href", ""); | ||
| } | ||
| else { | ||
| const div = document.createElement('div'); | ||
| const div = document.createElement("div"); | ||
| Array.from(dest.attributes).forEach((attr) => { | ||
| if (attr.name !== 'src') | ||
| if (attr.name !== "src") | ||
| div.setAttribute(attr.name, attr.value); | ||
@@ -148,16 +256,16 @@ }); | ||
| } | ||
| const src = source.getAttribute('src') || source.getAttribute('href'); | ||
| const src = source.getAttribute("src") || source.getAttribute("href"); | ||
| if (!src) | ||
| return; | ||
| const img = new Image(); | ||
| img.crossOrigin = 'anonymous'; | ||
| img.crossOrigin = "anonymous"; | ||
| img.src = src; | ||
| await img.decode(); | ||
| if (dest instanceof SVGImageElement) { | ||
| dest.setAttribute('href', src); | ||
| dest.setAttribute("href", src); | ||
| } | ||
| else { | ||
| dest.setAttribute('src', src); | ||
| dest.setAttribute("src", src); | ||
| } | ||
| dest.crossOrigin = 'anonymous'; | ||
| dest.crossOrigin = "anonymous"; | ||
| } | ||
@@ -168,6 +276,6 @@ isVisible(element) { | ||
| if (current instanceof SVGElement) { | ||
| const display = current.getAttribute('display'); | ||
| const visibility = current.getAttribute('visibility'); | ||
| const opacity = current.getAttribute('opacity'); | ||
| if (display === 'none' || visibility === 'hidden' || opacity === '0') { | ||
| const display = current.getAttribute("display"); | ||
| const visibility = current.getAttribute("visibility"); | ||
| const opacity = current.getAttribute("opacity"); | ||
| if (display === "none" || visibility === "hidden" || opacity === "0") { | ||
| return false; | ||
@@ -181,3 +289,2 @@ } | ||
| } | ||
| exports.ElementFreezer = ElementFreezer; | ||
| //# sourceMappingURL=freezer.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"freezer.js","sourceRoot":"","sources":["../src/freezer.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"freezer.js","sourceRoot":"","sources":["../src/freezer.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,SAAS,CAAC,OAAoC,EAAE,UAAyB,EAAE;QAC/E,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAEpJ,kEAAkE;QAClE,wFAAwF;QACxF,IAAI,aAAuC,CAAC;QAC5C,IAAI,gBAAgB,EAAE,CAAC;YACrB,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAgC,CAAC;QAE7E,kFAAkF;QAClF,IAAI,aAAa;YAAE,aAAa,EAAE,CAAC;QAEnC,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,IAAI,gBAAgB,EAAE,CAAC;YACrB,iFAAiF;YACjF,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACjD,IAAK,EAAkB,CAAC,KAAK,EAAE,SAAS;oBAAG,EAAkB,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;YACzF,CAAC,CAAC,CAAC;YACH,IAAK,aAA6B,CAAC,KAAK,EAAE,SAAS;gBAAG,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;YAE7G,2EAA2E;YAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,+CAA+C,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,+CAA+C,CAAC,CAAC;YACjG,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAA0B,EAAE,QAAQ,CAAC,CAAC,CAAwB,CAAC,CAAC,CAAC,CAAC;QACrJ,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC9D,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAwB,EAAE,YAAY,CAAC,CAAC,CAAsB,CAAC,CAAC,CAAC,CAAC;QAClJ,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAuB,EAAE,UAAU,CAAC,CAAC,CAAqB,CAAC,CAAC,CAAC,CAAC;QAC3I,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAyC,EAAE,UAAU,CAAC,CAAC,CAAuC,CAAC,CAAC,CAAC,CAAC;QAC/K,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;wEACoE;IAC5D,oBAAoB,CAAC,OAAoC;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QAElD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAI,CAAC,CAAC,MAAgC,EAAE,MAAM,CAAC;YAC3D,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YAC3C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;gBACzC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,MAAe,EAAE,IAAa;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnD,SAAS,CAAC,YAAY,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAoB,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAA2B,EAAE,IAAyB;QACtF,4CAA4C;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAErI,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QAEzH,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAEtD,oDAAoD;QACpD,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,IAAI,MAAM,CAAC,OAAO,KAAK,kBAAkB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC5G,IAAI,YAAY,YAAY,kBAAkB,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;gBACrC,IAAI,MAAM,EAAE,CAAC;oBACX,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1H,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,8DAA8D;QAC9D,MAAM,gBAAgB,GAAI,YAAoB,CAAC,QAAQ,CAAC,CAAC;QAEzD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;YAEzC,IAAI,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC/F,gHAAgH;gBAChH,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC3D,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAChC,kEAAkE;oBAClE,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3D,CAAC;qBAAM,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC9D,oCAAoC;oBACpC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAChE,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;oBACpG,CAAC;yBAAM,CAAC;wBACN,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBAC/C,+FAA+F;oBAC/F,MAAM,KAAK,GAAa,EAAE,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;4BAChB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;4BACtB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAClE,CAAC;6BAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;4BACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;wBACjC,CAAC;oBACH,CAAC;oBACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;wBAAE,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,CAAC;qBAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACvC,iCAAiC;oBACjC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,uDAAuD;YACvD,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACvF,IAAI,aAAa,EAAE,CAAC;oBACjB,UAA0B,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;gBAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACpD,IAAI,OAAO,KAAK,IAAI;oBAAE,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAyB,EAAE,IAAuB;QAC3E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAE9B,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAc,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAwB,EAAE,IAAsB;QACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;oBAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;QACxF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;gBAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAA0C,EAAE,IAAwC;QAC5G,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;wBAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAEnB,IAAI,IAAI,YAAY,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEO,SAAS,CAAC,OAAgB;QAChC,IAAI,OAAO,GAAmB,OAAO,CAAC;QACtC,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAChD,IAAI,OAAO,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;oBACrE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} |
+8
-5
@@ -1,6 +0,9 @@ | ||
| export { ElementExporter } from './exporter'; | ||
| export { ExportOptions, exportElement, settings } from './factory'; | ||
| export { ElementFreezer } from './freezer'; | ||
| export { ElementRenderer } from './renderer'; | ||
| export { ExportProgress, ExportSettings, FreezeOptions } from './types'; | ||
| export { decodeAudio, extractAudioPCM, hasAudio, mixAudioFrame } from "./audio.js"; | ||
| export { ElementExporter, registerExporter } from "./exporter.js"; | ||
| export { ExportOptions, exportElement, settings } from "./factory.js"; | ||
| export { ElementFreezer } from "./freezer.js"; | ||
| export { seekElement, seekMedia, waitMedia } from "./media.js"; | ||
| export { ElementRenderer } from "./renderer.js"; | ||
| export { ElementStreamer } from "./streamer.js"; | ||
| export { ExportSettings, FreezeOptions } from "./types.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"} |
+7
-12
@@ -1,13 +0,8 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.ElementRenderer = exports.ElementFreezer = exports.settings = exports.exportElement = exports.ElementExporter = void 0; | ||
| var exporter_1 = require("./exporter"); | ||
| Object.defineProperty(exports, "ElementExporter", { enumerable: true, get: function () { return exporter_1.ElementExporter; } }); | ||
| var factory_1 = require("./factory"); | ||
| Object.defineProperty(exports, "exportElement", { enumerable: true, get: function () { return factory_1.exportElement; } }); | ||
| Object.defineProperty(exports, "settings", { enumerable: true, get: function () { return factory_1.settings; } }); | ||
| var freezer_1 = require("./freezer"); | ||
| Object.defineProperty(exports, "ElementFreezer", { enumerable: true, get: function () { return freezer_1.ElementFreezer; } }); | ||
| var renderer_1 = require("./renderer"); | ||
| Object.defineProperty(exports, "ElementRenderer", { enumerable: true, get: function () { return renderer_1.ElementRenderer; } }); | ||
| export { decodeAudio, extractAudioPCM, hasAudio, mixAudioFrame } from "./audio.js"; | ||
| export { ElementExporter, registerExporter } from "./exporter.js"; | ||
| export { exportElement, settings } from "./factory.js"; | ||
| export { ElementFreezer } from "./freezer.js"; | ||
| export { seekElement, seekMedia, waitMedia } from "./media.js"; | ||
| export { ElementRenderer } from "./renderer.js"; | ||
| export { ElementStreamer } from "./streamer.js"; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AACxB,qCAAmE;AAA3C,wGAAA,aAAa,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAC/C,qCAA2C;AAAlC,yGAAA,cAAc,OAAA;AACvB,uCAA6C;AAApC,2GAAA,eAAe,OAAA"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAiB,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"} |
| export declare class ElementRenderer { | ||
| renderToImage(element: HTMLElement | SVGSVGElement): Promise<HTMLImageElement>; | ||
| /** | ||
| * Render any HTML or SVG element to an OffscreenCanvas. | ||
| * HTML elements use html2canvas for native HTML→Canvas rendering. | ||
| * SVG elements use XMLSerializer → dataURL → Image. | ||
| */ | ||
| renderToCanvas(element: HTMLElement | SVGSVGElement, width?: number, height?: number): Promise<OffscreenCanvas>; | ||
| private renderSvgToImage; | ||
| private renderHtmlToImage; | ||
| private renderHtmlToCanvas; | ||
| private renderHtmlViaForeignObject; | ||
| } | ||
| //# sourceMappingURL=renderer.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IACpB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAO9E,cAAc,CAClB,OAAO,EAAE,WAAW,GAAG,aAAa,EACpC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;YAkBb,gBAAgB;YAoBhB,iBAAiB;CAkBhC"} | ||
| {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAkCvG,gBAAgB;YAoBhB,kBAAkB;YA0BlB,0BAA0B;CAmBzC"} |
+77
-35
@@ -1,28 +0,43 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.ElementRenderer = void 0; | ||
| class ElementRenderer { | ||
| async renderToImage(element) { | ||
| export class ElementRenderer { | ||
| /** | ||
| * Render any HTML or SVG element to an OffscreenCanvas. | ||
| * HTML elements use html2canvas for native HTML→Canvas rendering. | ||
| * SVG elements use XMLSerializer → dataURL → Image. | ||
| */ | ||
| async renderToCanvas(element, width, height) { | ||
| let w; | ||
| let h; | ||
| if (width && height) { | ||
| w = width; | ||
| h = height; | ||
| } | ||
| else if (element instanceof SVGSVGElement) { | ||
| const img = await this.renderSvgToImage(element); | ||
| w = width ?? (element.width.baseVal.value || img.width); | ||
| h = height ?? (element.height.baseVal.value || img.height); | ||
| } | ||
| else { | ||
| const rect = element.getBoundingClientRect(); | ||
| w = width ?? (rect.width > 0 ? rect.width : element.scrollWidth || 800); | ||
| h = height ?? (rect.height > 0 ? rect.height : element.scrollHeight || 600); | ||
| } | ||
| w = Math.max(1, Math.round(w)); | ||
| h = Math.max(1, Math.round(h)); | ||
| if (element instanceof SVGSVGElement) { | ||
| return this.renderSvgToImage(element); | ||
| // SVG: serialize to string, load as image, draw to canvas | ||
| const img = await this.renderSvgToImage(element); | ||
| const canvas = new OffscreenCanvas(w, h); | ||
| const ctx = canvas.getContext("2d"); | ||
| if (!ctx) | ||
| throw new Error("Failed to get canvas context"); | ||
| ctx.drawImage(img, 0, 0, canvas.width, canvas.height); | ||
| return canvas; | ||
| } | ||
| return this.renderHtmlToImage(element); | ||
| // HTML: use html2canvas for native rendering | ||
| return this.renderHtmlToCanvas(element, w, h); | ||
| } | ||
| async renderToCanvas(element, width, height) { | ||
| const img = await this.renderToImage(element); | ||
| const w = width || | ||
| (element instanceof SVGSVGElement ? element.width.baseVal.value : element.clientWidth); | ||
| const h = height || | ||
| (element instanceof SVGSVGElement ? element.height.baseVal.value : element.clientHeight); | ||
| const canvas = new OffscreenCanvas(Math.round(w), Math.round(h)); | ||
| const ctx = canvas.getContext('2d'); | ||
| if (!ctx) | ||
| throw new Error('Failed to get canvas context'); | ||
| ctx.drawImage(img, 0, 0, canvas.width, canvas.height); | ||
| return canvas; | ||
| } | ||
| async renderSvgToImage(element) { | ||
| const serializer = new XMLSerializer(); | ||
| const svgString = serializer.serializeToString(element); | ||
| const blob = new Blob([svgString], { type: 'image/svg+xml' }); | ||
| const blob = new Blob([svgString], { type: "image/svg+xml" }); | ||
| const dataURL = await new Promise((resolve, reject) => { | ||
@@ -35,3 +50,3 @@ const reader = new FileReader(); | ||
| const img = new Image(); | ||
| img.crossOrigin = 'anonymous'; | ||
| img.crossOrigin = "anonymous"; | ||
| img.src = dataURL; | ||
@@ -41,19 +56,46 @@ await img.decode(); | ||
| } | ||
| async renderHtmlToImage(element) { | ||
| const canvas = new OffscreenCanvas(element.clientWidth, element.clientHeight); | ||
| const ctx = canvas.getContext('2d'); | ||
| if (!ctx) | ||
| throw new Error('Failed to get canvas context'); | ||
| const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); | ||
| svg.setAttribute('width', String(element.clientWidth)); | ||
| svg.setAttribute('height', String(element.clientHeight)); | ||
| const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'); | ||
| foreignObject.setAttribute('width', '100%'); | ||
| foreignObject.setAttribute('height', '100%'); | ||
| async renderHtmlToCanvas(element, width, height) { | ||
| // Use html2canvas for accurate HTML rendering | ||
| try { | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| const html2canvas = (await import("html2canvas")).default; | ||
| const canvas = await html2canvas(element, { | ||
| width, | ||
| height, | ||
| scale: 1, | ||
| useCORS: true, | ||
| allowTaint: true, | ||
| backgroundColor: null, | ||
| logging: false, | ||
| }); | ||
| const offscreen = new OffscreenCanvas(width, height); | ||
| const ctx = offscreen.getContext("2d"); | ||
| if (!ctx) | ||
| throw new Error("Failed to get canvas context"); | ||
| ctx.drawImage(canvas, 0, 0, width, height, 0, 0, width, height); | ||
| return offscreen; | ||
| } | ||
| catch { | ||
| // Fallback: SVG foreignObject approach | ||
| return this.renderHtmlViaForeignObject(element, width, height); | ||
| } | ||
| } | ||
| async renderHtmlViaForeignObject(element, width, height) { | ||
| const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); | ||
| svg.setAttribute("width", String(width)); | ||
| svg.setAttribute("height", String(height)); | ||
| const foreignObject = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject"); | ||
| foreignObject.setAttribute("width", "100%"); | ||
| foreignObject.setAttribute("height", "100%"); | ||
| foreignObject.appendChild(element.cloneNode(true)); | ||
| svg.appendChild(foreignObject); | ||
| return this.renderSvgToImage(svg); | ||
| const img = await this.renderSvgToImage(svg); | ||
| const canvas = new OffscreenCanvas(width, height); | ||
| const ctx = canvas.getContext("2d"); | ||
| if (!ctx) | ||
| throw new Error("Failed to get canvas context"); | ||
| ctx.drawImage(img, 0, 0); | ||
| return canvas; | ||
| } | ||
| } | ||
| exports.ElementRenderer = ElementRenderer; | ||
| //# sourceMappingURL=renderer.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"} |
+1
-6
| export interface ExportSettings { | ||
| format: 'svg' | 'png' | 'jpg' | 'webp' | 'webm' | 'mp4' | 'm4a' | 'ogg'; | ||
| format: "svg" | "png" | "jpg" | "webp" | "webm" | "mp4" | "m4a" | "ogg" | "pdf"; | ||
| quality?: number; | ||
@@ -11,7 +11,2 @@ fps?: number; | ||
| } | ||
| export interface ExportProgress { | ||
| progress: number; | ||
| status: 'pending' | 'exporting' | 'completed' | 'failed' | 'cancelled'; | ||
| blob?: Blob; | ||
| } | ||
| export interface FreezeOptions { | ||
@@ -18,0 +13,0 @@ freezeAnimations?: boolean; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACvE,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"} |
+1
-2
@@ -1,3 +0,2 @@ | ||
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| export {}; | ||
| //# sourceMappingURL=types.js.map |
+46
-34
| { | ||
| "name": "@framv/core", | ||
| "version": "0.0.1", | ||
| "description": "Core library for freezing HTML elements into video frames", | ||
| "version": "0.1.0", | ||
| "private": false, | ||
| "type": "module", | ||
| "main": "dist/index.js", | ||
| "types": "dist/index.d.ts", | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "lint": "eslint src/**/*.ts", | ||
| "format": "prettier --write \"src/**/*.{ts,js,json}\"", | ||
| "format:check": "prettier --check \"src/**/*.{ts,js,json}\"", | ||
| "test": "jest", | ||
| "test:watch": "jest --watch", | ||
| "test:coverage": "jest --coverage" | ||
| "exports": { | ||
| ".": { | ||
| "types": "./dist/index.d.ts", | ||
| "import": "./dist/index.js", | ||
| "default": "./dist/index.js" | ||
| } | ||
| }, | ||
| "files": [ | ||
| "dist" | ||
| ], | ||
| "description": "Core rendering primitives for framv — freeze HTML/SVG elements into canvas frames, images, and video", | ||
| "keywords": [ | ||
@@ -21,33 +24,42 @@ "video", | ||
| "mediabunny", | ||
| "animation" | ||
| "animation", | ||
| "html", | ||
| "svg", | ||
| "canvas" | ||
| ], | ||
| "license": "MIT", | ||
| "scripts": { | ||
| "build": "tsc -b && npm run bundle", | ||
| "prepublishOnly": "npm run build", | ||
| "bundle": "esbuild src/index.ts --bundle --format=esm --outfile=dist/bundle.esm.js && esbuild src/cdn.ts --bundle --format=iife --global-name=Framv --outfile=dist/bundle.iife.js", | ||
| "format": "prettier --write \"src/**/*.ts\"", | ||
| "lint": "eslint \"src/**/*.ts\" --fix", | ||
| "test": "vitest run", | ||
| "test:watch": "vitest", | ||
| "test:ui": "vitest --ui" | ||
| }, | ||
| "dependencies": { | ||
| "mediabunny": "^1.24.5" | ||
| "file-saver": "^2.0.5", | ||
| "html2canvas": "^1.4.1", | ||
| "mediabunny": "^1.35.1" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/jest": "^30.0.0", | ||
| "@types/node": "^24.10.0", | ||
| "jest": "^30.2.0", | ||
| "jest-environment-jsdom": "^30.2.0", | ||
| "ts-jest": "^29.4.5", | ||
| "typescript": "^5.9.3" | ||
| "@vitest/ui": "^4.0.18", | ||
| "eslint": "^10.0.2", | ||
| "eslint-config-prettier": "^10.1.8", | ||
| "eslint-plugin-prettier": "^5.5.5", | ||
| "jsdom": "^28.1.0", | ||
| "prettier": "^3.8.1", | ||
| "typescript": "^5.9.3", | ||
| "vitest": "^4.0.18" | ||
| }, | ||
| "jest": { | ||
| "preset": "ts-jest", | ||
| "testEnvironment": "jsdom", | ||
| "setupFilesAfterEnv": [ | ||
| "<rootDir>/jest.setup.js" | ||
| ], | ||
| "roots": [ | ||
| "<rootDir>/test" | ||
| ], | ||
| "testMatch": [ | ||
| "**/*.test.ts" | ||
| ], | ||
| "collectCoverageFrom": [ | ||
| "src/**/*.ts", | ||
| "!src/**/*.d.ts" | ||
| ] | ||
| "author": "Mens Reversa", | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "https://github.com/mensreversa/framv.git", | ||
| "directory": "packages/core" | ||
| }, | ||
| "bugs": { | ||
| "url": "https://github.com/mensreversa/framv/issues" | ||
| } | ||
| } |
| // Polyfill for TextDecoder/TextEncoder in Jest environment | ||
| if (typeof globalThis.TextDecoder === 'undefined') { | ||
| const { TextDecoder, TextEncoder } = require('util'); | ||
| globalThis.TextDecoder = TextDecoder; | ||
| globalThis.TextEncoder = TextEncoder; | ||
| } |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
1688573
4159.66%45
73.08%38366
8463.84%1
-50%0
-100%2
Infinity%Yes
NaN3
200%8
33.33%7
250%6
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
Updated