remotion
Version:
Make videos programmatically
50 lines (49 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.portalNode = exports.setPortalNodeCurrentScale = exports.subscribeToPortalNodeCurrentScale = exports.getPortalNodeCurrentScale = void 0;
let _portalNode = null;
let portalNodeCurrentScale = 1;
let portalNodeCurrentScaleListeners = [];
const getPortalNodeCurrentScale = () => portalNodeCurrentScale;
exports.getPortalNodeCurrentScale = getPortalNodeCurrentScale;
const subscribeToPortalNodeCurrentScale = (listener) => {
portalNodeCurrentScaleListeners.push(listener);
return () => {
portalNodeCurrentScaleListeners = portalNodeCurrentScaleListeners.filter((currentListener) => currentListener !== listener);
};
};
exports.subscribeToPortalNodeCurrentScale = subscribeToPortalNodeCurrentScale;
const setPortalNodeCurrentScale = (scale) => {
if (portalNodeCurrentScale === scale) {
return;
}
portalNodeCurrentScale = scale;
for (const listener of portalNodeCurrentScaleListeners) {
listener();
}
};
exports.setPortalNodeCurrentScale = setPortalNodeCurrentScale;
const portalNode = () => {
if (!_portalNode) {
if (typeof document === 'undefined') {
throw new Error('Tried to call an API that only works in the browser from outside the browser');
}
_portalNode = document.createElement('div');
_portalNode.style.position = 'absolute';
_portalNode.style.top = '0px';
_portalNode.style.left = '0px';
_portalNode.style.right = '0px';
_portalNode.style.bottom = '0px';
_portalNode.style.width = '100%';
_portalNode.style.height = '100%';
_portalNode.style.display = 'flex';
_portalNode.style.flexDirection = 'column';
const containerNode = document.createElement('div');
containerNode.style.position = 'fixed';
containerNode.style.top = -999999 + 'px';
containerNode.appendChild(_portalNode);
document.body.appendChild(containerNode);
}
return _portalNode;
};
exports.portalNode = portalNode;