import { app } from "../../scripts/app.js"; const _NODE = "VideoResultNode"; const _WIDGET = "volume"; const _DEFAULT = 50; const nodes = new Set(); const getVolume = (node) => { const percent = node.widgets?.find((x) => x.name === _WIDGET)?.value; if (typeof percent !== "number") return null; return Math.min(Math.max(percent, 0), 100) / 100; }; // El reproductor cuelga del DOM widget (nodos de canvas) o del elemento del nodo (nodos Vue). const getRoot = (node) => node.videoContainer ?? document.querySelector(`[data-node-id="${node.id}"]`); const findNode = (video) => { const nodeId = video.closest("[data-node-id]")?.dataset?.nodeId; for (const node of nodes) { if (node.videoContainer?.contains(video)) return node; if (nodeId !== undefined && String(node.id) === nodeId) return node; } return null; }; const setVolume = (video, node) => { const volume = getVolume(node); if (volume !== null) video.volume = volume; }; app.registerExtension({ name: "AstroCorp.VideoResultWidget", setup() { // Cada generación monta un