@remotion/web-renderer 4.0.390 → 4.0.392
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.
- package/dist/audio.js +5 -1
- package/dist/border-radius.d.ts +31 -0
- package/dist/border-radius.js +152 -0
- package/dist/calculate-transforms.d.ts +11 -0
- package/dist/calculate-transforms.js +91 -0
- package/dist/composable.d.ts +4 -0
- package/dist/composable.js +1 -0
- package/dist/compose-canvas.d.ts +1 -0
- package/dist/compose-canvas.js +36 -0
- package/dist/compose-svg.d.ts +1 -0
- package/dist/compose-svg.js +34 -0
- package/dist/create-scaffold.js +1 -0
- package/dist/drawing/calculate-transforms.js +27 -8
- package/dist/drawing/compose-canvas.d.ts +1 -0
- package/dist/drawing/compose-canvas.js +36 -0
- package/dist/drawing/compose-svg.d.ts +1 -0
- package/dist/drawing/compose-svg.js +34 -0
- package/dist/drawing/compose.d.ts +5 -0
- package/dist/drawing/compose.js +6 -0
- package/dist/drawing/draw-element-to-canvas.js +40 -47
- package/dist/drawing/draw-element.d.ts +8 -0
- package/dist/drawing/draw-element.js +50 -0
- package/dist/drawing/get-computed-style-cache.d.ts +0 -0
- package/dist/drawing/get-computed-style-cache.js +1 -0
- package/dist/drawing/text/draw-text.d.ts +1 -0
- package/dist/drawing/text/draw-text.js +57 -0
- package/dist/drawing/text/handle-text-node.js +0 -12
- package/dist/drawing/transform-in-3d.d.ts +8 -0
- package/dist/drawing/transform-in-3d.js +125 -0
- package/dist/esm/index.mjs +308 -105
- package/dist/find-canvas-elements.d.ts +1 -0
- package/dist/find-canvas-elements.js +13 -0
- package/dist/find-capturable-elements.d.ts +2 -0
- package/dist/find-capturable-elements.js +26 -0
- package/dist/opacity.d.ts +4 -0
- package/dist/opacity.js +7 -0
- package/dist/parse-transform-origin.d.ts +4 -0
- package/dist/parse-transform-origin.js +7 -0
- package/dist/transform.d.ts +4 -0
- package/dist/transform.js +6 -0
- package/package.json +5 -5
package/dist/esm/index.mjs
CHANGED
|
@@ -8345,10 +8345,14 @@ var handleArtifacts = () => {
|
|
|
8345
8345
|
var TARGET_NUMBER_OF_CHANNELS = 2;
|
|
8346
8346
|
var TARGET_SAMPLE_RATE = 48000;
|
|
8347
8347
|
function mixAudio(waves, length) {
|
|
8348
|
-
if (waves.length === 1) {
|
|
8348
|
+
if (waves.length === 1 && waves[0].length === length) {
|
|
8349
8349
|
return waves[0];
|
|
8350
8350
|
}
|
|
8351
8351
|
const mixed = new Int16Array(length);
|
|
8352
|
+
if (waves.length === 1) {
|
|
8353
|
+
mixed.set(waves[0].subarray(0, length));
|
|
8354
|
+
return mixed;
|
|
8355
|
+
}
|
|
8352
8356
|
for (let i = 0;i < length; i++) {
|
|
8353
8357
|
const sum = waves.reduce((acc, wave2) => {
|
|
8354
8358
|
return acc + (wave2[i] ?? 0);
|
|
@@ -8480,7 +8484,8 @@ async function createScaffold({
|
|
|
8480
8484
|
remotion_renderReady: true,
|
|
8481
8485
|
remotion_delayRenderTimeouts: {},
|
|
8482
8486
|
remotion_puppeteerTimeout: delayRenderTimeoutInMilliseconds,
|
|
8483
|
-
remotion_attempt: 0
|
|
8487
|
+
remotion_attempt: 0,
|
|
8488
|
+
remotion_delayRenderHandles: []
|
|
8484
8489
|
};
|
|
8485
8490
|
const timeUpdater = createRef();
|
|
8486
8491
|
const collectAssets = createRef();
|
|
@@ -8659,6 +8664,110 @@ var getQualityForWebRendererQuality = (quality) => {
|
|
|
8659
8664
|
}
|
|
8660
8665
|
};
|
|
8661
8666
|
|
|
8667
|
+
// src/drawing/parse-transform-origin.ts
|
|
8668
|
+
var parseTransformOrigin = (transformOrigin) => {
|
|
8669
|
+
if (transformOrigin.trim() === "") {
|
|
8670
|
+
return null;
|
|
8671
|
+
}
|
|
8672
|
+
const [x, y] = transformOrigin.split(" ");
|
|
8673
|
+
return { x: parseFloat(x), y: parseFloat(y) };
|
|
8674
|
+
};
|
|
8675
|
+
|
|
8676
|
+
// src/drawing/calculate-transforms.ts
|
|
8677
|
+
var getInternalTransformOrigin = (transform) => {
|
|
8678
|
+
const centerX = transform.boundingClientRect.width / 2;
|
|
8679
|
+
const centerY = transform.boundingClientRect.height / 2;
|
|
8680
|
+
const origin = parseTransformOrigin(transform.transformOrigin) ?? {
|
|
8681
|
+
x: centerX,
|
|
8682
|
+
y: centerY
|
|
8683
|
+
};
|
|
8684
|
+
return origin;
|
|
8685
|
+
};
|
|
8686
|
+
var getGlobalTransformOrigin = (transform) => {
|
|
8687
|
+
const { x: originX, y: originY } = getInternalTransformOrigin(transform);
|
|
8688
|
+
return {
|
|
8689
|
+
x: originX + transform.boundingClientRect.left,
|
|
8690
|
+
y: originY + transform.boundingClientRect.top
|
|
8691
|
+
};
|
|
8692
|
+
};
|
|
8693
|
+
var calculateTransforms = (element) => {
|
|
8694
|
+
let parent = element;
|
|
8695
|
+
const transforms = [];
|
|
8696
|
+
const toReset = [];
|
|
8697
|
+
let opacity = 1;
|
|
8698
|
+
let elementComputedStyle = null;
|
|
8699
|
+
while (parent) {
|
|
8700
|
+
const computedStyle = getComputedStyle(parent);
|
|
8701
|
+
const parentOpacity = computedStyle.opacity;
|
|
8702
|
+
if (parentOpacity && parentOpacity !== "") {
|
|
8703
|
+
opacity *= parseFloat(parentOpacity);
|
|
8704
|
+
}
|
|
8705
|
+
if (parent === element) {
|
|
8706
|
+
elementComputedStyle = computedStyle;
|
|
8707
|
+
}
|
|
8708
|
+
if (computedStyle.transform && computedStyle.transform !== "none" || parent === element) {
|
|
8709
|
+
const toParse = computedStyle.transform === "none" || computedStyle.transform === "" ? undefined : computedStyle.transform;
|
|
8710
|
+
const matrix = new DOMMatrix(toParse);
|
|
8711
|
+
const { transform, scale, rotate } = parent.style;
|
|
8712
|
+
const additionalMatrices = [];
|
|
8713
|
+
if (rotate !== "") {
|
|
8714
|
+
additionalMatrices.push(new DOMMatrix(`rotate(${rotate})`));
|
|
8715
|
+
}
|
|
8716
|
+
if (scale !== "") {
|
|
8717
|
+
additionalMatrices.push(new DOMMatrix(`scale(${scale})`));
|
|
8718
|
+
}
|
|
8719
|
+
additionalMatrices.push(matrix);
|
|
8720
|
+
parent.style.transform = "none";
|
|
8721
|
+
parent.style.scale = "none";
|
|
8722
|
+
parent.style.rotate = "none";
|
|
8723
|
+
transforms.push({
|
|
8724
|
+
rect: parent,
|
|
8725
|
+
transformOrigin: computedStyle.transformOrigin,
|
|
8726
|
+
boundingClientRect: null,
|
|
8727
|
+
matrices: additionalMatrices
|
|
8728
|
+
});
|
|
8729
|
+
const parentRef = parent;
|
|
8730
|
+
toReset.push(() => {
|
|
8731
|
+
parentRef.style.transform = transform;
|
|
8732
|
+
parentRef.style.scale = scale;
|
|
8733
|
+
parentRef.style.rotate = rotate;
|
|
8734
|
+
});
|
|
8735
|
+
}
|
|
8736
|
+
parent = parent.parentElement;
|
|
8737
|
+
}
|
|
8738
|
+
for (const transform of transforms) {
|
|
8739
|
+
transform.boundingClientRect = transform.rect.getBoundingClientRect();
|
|
8740
|
+
}
|
|
8741
|
+
const dimensions = transforms[0].boundingClientRect;
|
|
8742
|
+
const nativeTransformOrigin = getInternalTransformOrigin(transforms[0]);
|
|
8743
|
+
const totalMatrix = new DOMMatrix;
|
|
8744
|
+
for (const transform of transforms.slice().reverse()) {
|
|
8745
|
+
if (!transform.boundingClientRect) {
|
|
8746
|
+
throw new Error("Bounding client rect not found");
|
|
8747
|
+
}
|
|
8748
|
+
for (const matrix of transform.matrices) {
|
|
8749
|
+
const globalTransformOrigin = getGlobalTransformOrigin(transform);
|
|
8750
|
+
const transformMatrix = new DOMMatrix().translate(globalTransformOrigin.x, globalTransformOrigin.y).multiply(matrix).translate(-globalTransformOrigin.x, -globalTransformOrigin.y);
|
|
8751
|
+
totalMatrix.multiplySelf(transformMatrix);
|
|
8752
|
+
}
|
|
8753
|
+
}
|
|
8754
|
+
if (!elementComputedStyle) {
|
|
8755
|
+
throw new Error("Element computed style not found");
|
|
8756
|
+
}
|
|
8757
|
+
return {
|
|
8758
|
+
dimensions,
|
|
8759
|
+
totalMatrix,
|
|
8760
|
+
reset: () => {
|
|
8761
|
+
for (const reset of toReset) {
|
|
8762
|
+
reset();
|
|
8763
|
+
}
|
|
8764
|
+
},
|
|
8765
|
+
nativeTransformOrigin,
|
|
8766
|
+
opacity,
|
|
8767
|
+
computedStyle: elementComputedStyle
|
|
8768
|
+
};
|
|
8769
|
+
};
|
|
8770
|
+
|
|
8662
8771
|
// src/drawing/border-radius.ts
|
|
8663
8772
|
function parseValue({
|
|
8664
8773
|
value,
|
|
@@ -8795,96 +8904,6 @@ function setBorderRadius({
|
|
|
8795
8904
|
};
|
|
8796
8905
|
}
|
|
8797
8906
|
|
|
8798
|
-
// src/drawing/parse-transform-origin.ts
|
|
8799
|
-
var parseTransformOrigin = (transformOrigin) => {
|
|
8800
|
-
if (transformOrigin.trim() === "") {
|
|
8801
|
-
return null;
|
|
8802
|
-
}
|
|
8803
|
-
const [x, y] = transformOrigin.split(" ");
|
|
8804
|
-
return { x: parseFloat(x), y: parseFloat(y) };
|
|
8805
|
-
};
|
|
8806
|
-
|
|
8807
|
-
// src/drawing/calculate-transforms.ts
|
|
8808
|
-
var getInternalTransformOrigin = (transform) => {
|
|
8809
|
-
const centerX = transform.boundingClientRect.width / 2;
|
|
8810
|
-
const centerY = transform.boundingClientRect.height / 2;
|
|
8811
|
-
const origin = parseTransformOrigin(transform.transformOrigin) ?? {
|
|
8812
|
-
x: centerX,
|
|
8813
|
-
y: centerY
|
|
8814
|
-
};
|
|
8815
|
-
return origin;
|
|
8816
|
-
};
|
|
8817
|
-
var getGlobalTransformOrigin = (transform) => {
|
|
8818
|
-
const { x: originX, y: originY } = getInternalTransformOrigin(transform);
|
|
8819
|
-
return {
|
|
8820
|
-
x: originX + transform.boundingClientRect.left,
|
|
8821
|
-
y: originY + transform.boundingClientRect.top
|
|
8822
|
-
};
|
|
8823
|
-
};
|
|
8824
|
-
var calculateTransforms = (element) => {
|
|
8825
|
-
let parent = element;
|
|
8826
|
-
const transforms = [];
|
|
8827
|
-
const toReset = [];
|
|
8828
|
-
let opacity = 1;
|
|
8829
|
-
let elementComputedStyle = null;
|
|
8830
|
-
while (parent) {
|
|
8831
|
-
const computedStyle = getComputedStyle(parent);
|
|
8832
|
-
const parentOpacity = computedStyle.opacity;
|
|
8833
|
-
if (parentOpacity && parentOpacity !== "") {
|
|
8834
|
-
opacity *= parseFloat(parentOpacity);
|
|
8835
|
-
}
|
|
8836
|
-
if (parent === element) {
|
|
8837
|
-
elementComputedStyle = computedStyle;
|
|
8838
|
-
}
|
|
8839
|
-
if (computedStyle.transform && computedStyle.transform !== "none" || parent === element) {
|
|
8840
|
-
const toParse = computedStyle.transform === "none" || computedStyle.transform === "" ? undefined : computedStyle.transform;
|
|
8841
|
-
const matrix = new DOMMatrix(toParse);
|
|
8842
|
-
const { transform } = parent.style;
|
|
8843
|
-
parent.style.transform = "none";
|
|
8844
|
-
transforms.push({
|
|
8845
|
-
matrix,
|
|
8846
|
-
rect: parent,
|
|
8847
|
-
transformOrigin: computedStyle.transformOrigin,
|
|
8848
|
-
boundingClientRect: null
|
|
8849
|
-
});
|
|
8850
|
-
const parentRef = parent;
|
|
8851
|
-
toReset.push(() => {
|
|
8852
|
-
parentRef.style.transform = transform;
|
|
8853
|
-
});
|
|
8854
|
-
}
|
|
8855
|
-
parent = parent.parentElement;
|
|
8856
|
-
}
|
|
8857
|
-
for (const transform of transforms) {
|
|
8858
|
-
transform.boundingClientRect = transform.rect.getBoundingClientRect();
|
|
8859
|
-
}
|
|
8860
|
-
const dimensions = transforms[0].boundingClientRect;
|
|
8861
|
-
const nativeTransformOrigin = getInternalTransformOrigin(transforms[0]);
|
|
8862
|
-
const totalMatrix = new DOMMatrix;
|
|
8863
|
-
for (const transform of transforms.slice().reverse()) {
|
|
8864
|
-
if (!transform.boundingClientRect) {
|
|
8865
|
-
throw new Error("Bounding client rect not found");
|
|
8866
|
-
}
|
|
8867
|
-
const globalTransformOrigin = getGlobalTransformOrigin(transform);
|
|
8868
|
-
const transformMatrix = new DOMMatrix().translate(globalTransformOrigin.x, globalTransformOrigin.y).multiply(transform.matrix).translate(-globalTransformOrigin.x, -globalTransformOrigin.y);
|
|
8869
|
-
totalMatrix.multiplySelf(transformMatrix);
|
|
8870
|
-
}
|
|
8871
|
-
if (!elementComputedStyle) {
|
|
8872
|
-
throw new Error("Element computed style not found");
|
|
8873
|
-
}
|
|
8874
|
-
return {
|
|
8875
|
-
dimensions,
|
|
8876
|
-
totalMatrix,
|
|
8877
|
-
reset: () => {
|
|
8878
|
-
for (const reset of toReset) {
|
|
8879
|
-
reset();
|
|
8880
|
-
}
|
|
8881
|
-
},
|
|
8882
|
-
nativeTransformOrigin,
|
|
8883
|
-
opacity,
|
|
8884
|
-
computedStyle: elementComputedStyle
|
|
8885
|
-
};
|
|
8886
|
-
};
|
|
8887
|
-
|
|
8888
8907
|
// src/drawing/draw-border.ts
|
|
8889
8908
|
var drawBorder = ({
|
|
8890
8909
|
ctx,
|
|
@@ -8995,21 +9014,15 @@ var setTransform = ({
|
|
|
8995
9014
|
};
|
|
8996
9015
|
};
|
|
8997
9016
|
|
|
8998
|
-
// src/drawing/draw-element
|
|
8999
|
-
var
|
|
9000
|
-
|
|
9017
|
+
// src/drawing/draw-element.ts
|
|
9018
|
+
var drawElement = async ({
|
|
9019
|
+
dimensions,
|
|
9020
|
+
computedStyle,
|
|
9001
9021
|
context,
|
|
9002
|
-
draw
|
|
9022
|
+
draw,
|
|
9023
|
+
opacity,
|
|
9024
|
+
totalMatrix
|
|
9003
9025
|
}) => {
|
|
9004
|
-
const { totalMatrix, reset, dimensions, opacity, computedStyle } = calculateTransforms(element);
|
|
9005
|
-
if (opacity === 0) {
|
|
9006
|
-
reset();
|
|
9007
|
-
return;
|
|
9008
|
-
}
|
|
9009
|
-
if (dimensions.width <= 0 || dimensions.height <= 0) {
|
|
9010
|
-
reset();
|
|
9011
|
-
return;
|
|
9012
|
-
}
|
|
9013
9026
|
const background = computedStyle.backgroundColor;
|
|
9014
9027
|
const borderRadius = parseBorderRadius({
|
|
9015
9028
|
borderRadius: computedStyle.borderRadius,
|
|
@@ -9051,6 +9064,196 @@ var drawElementToCanvas = async ({
|
|
|
9051
9064
|
finishOpacity();
|
|
9052
9065
|
finishBorderRadius();
|
|
9053
9066
|
finishTransform();
|
|
9067
|
+
};
|
|
9068
|
+
|
|
9069
|
+
// src/drawing/transform-in-3d.ts
|
|
9070
|
+
function compileShader(shaderGl, source, type) {
|
|
9071
|
+
const shader = shaderGl.createShader(type);
|
|
9072
|
+
if (!shader) {
|
|
9073
|
+
throw new Error("Could not create shader");
|
|
9074
|
+
}
|
|
9075
|
+
shaderGl.shaderSource(shader, source);
|
|
9076
|
+
shaderGl.compileShader(shader);
|
|
9077
|
+
if (!shaderGl.getShaderParameter(shader, shaderGl.COMPILE_STATUS)) {
|
|
9078
|
+
const log = shaderGl.getShaderInfoLog(shader);
|
|
9079
|
+
shaderGl.deleteShader(shader);
|
|
9080
|
+
throw new Error("Shader compile error: " + log);
|
|
9081
|
+
}
|
|
9082
|
+
return shader;
|
|
9083
|
+
}
|
|
9084
|
+
var transformIn3d = ({
|
|
9085
|
+
canvasWidth,
|
|
9086
|
+
canvasHeight,
|
|
9087
|
+
matrix,
|
|
9088
|
+
sourceCanvas,
|
|
9089
|
+
offsetLeft,
|
|
9090
|
+
offsetTop
|
|
9091
|
+
}) => {
|
|
9092
|
+
const canvas = new OffscreenCanvas(canvasWidth, canvasHeight);
|
|
9093
|
+
const gl = canvas.getContext("webgl");
|
|
9094
|
+
if (!gl) {
|
|
9095
|
+
throw new Error("WebGL not supported");
|
|
9096
|
+
}
|
|
9097
|
+
const vsSource = `
|
|
9098
|
+
attribute vec2 aPosition;
|
|
9099
|
+
attribute vec2 aTexCoord;
|
|
9100
|
+
uniform mat4 uTransform;
|
|
9101
|
+
uniform mat4 uProjection;
|
|
9102
|
+
varying vec2 vTexCoord;
|
|
9103
|
+
|
|
9104
|
+
void main() {
|
|
9105
|
+
gl_Position = uProjection * uTransform * vec4(aPosition, 0.0, 1.0);
|
|
9106
|
+
vTexCoord = aTexCoord;
|
|
9107
|
+
}
|
|
9108
|
+
`;
|
|
9109
|
+
const fsSource = `
|
|
9110
|
+
precision mediump float;
|
|
9111
|
+
uniform sampler2D uTexture;
|
|
9112
|
+
varying vec2 vTexCoord;
|
|
9113
|
+
|
|
9114
|
+
void main() {
|
|
9115
|
+
gl_FragColor = texture2D(uTexture, vTexCoord);
|
|
9116
|
+
}
|
|
9117
|
+
`;
|
|
9118
|
+
const vertexShader = compileShader(gl, vsSource, gl.VERTEX_SHADER);
|
|
9119
|
+
const fragmentShader = compileShader(gl, fsSource, gl.FRAGMENT_SHADER);
|
|
9120
|
+
const program = gl.createProgram();
|
|
9121
|
+
gl.attachShader(program, vertexShader);
|
|
9122
|
+
gl.attachShader(program, fragmentShader);
|
|
9123
|
+
gl.linkProgram(program);
|
|
9124
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
9125
|
+
throw new Error("Program link error: " + gl.getProgramInfoLog(program));
|
|
9126
|
+
}
|
|
9127
|
+
gl.useProgram(program);
|
|
9128
|
+
const vertices = new Float32Array([
|
|
9129
|
+
offsetLeft,
|
|
9130
|
+
offsetTop,
|
|
9131
|
+
0,
|
|
9132
|
+
0,
|
|
9133
|
+
canvasWidth + offsetLeft,
|
|
9134
|
+
offsetTop,
|
|
9135
|
+
1,
|
|
9136
|
+
0,
|
|
9137
|
+
offsetLeft,
|
|
9138
|
+
canvasHeight + offsetTop,
|
|
9139
|
+
0,
|
|
9140
|
+
1,
|
|
9141
|
+
offsetLeft,
|
|
9142
|
+
canvasHeight + offsetTop,
|
|
9143
|
+
0,
|
|
9144
|
+
1,
|
|
9145
|
+
canvasWidth + offsetLeft,
|
|
9146
|
+
offsetTop,
|
|
9147
|
+
1,
|
|
9148
|
+
0,
|
|
9149
|
+
canvasWidth + offsetLeft,
|
|
9150
|
+
canvasHeight + offsetTop,
|
|
9151
|
+
1,
|
|
9152
|
+
1
|
|
9153
|
+
]);
|
|
9154
|
+
const vertexBuffer = gl.createBuffer();
|
|
9155
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
|
|
9156
|
+
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
|
|
9157
|
+
const aPosition = gl.getAttribLocation(program, "aPosition");
|
|
9158
|
+
const aTexCoord = gl.getAttribLocation(program, "aTexCoord");
|
|
9159
|
+
gl.enableVertexAttribArray(aPosition);
|
|
9160
|
+
gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 4 * 4, 0);
|
|
9161
|
+
gl.enableVertexAttribArray(aTexCoord);
|
|
9162
|
+
gl.vertexAttribPointer(aTexCoord, 2, gl.FLOAT, false, 4 * 4, 2 * 4);
|
|
9163
|
+
const texture = gl.createTexture();
|
|
9164
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
9165
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
9166
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
9167
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
9168
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
9169
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, sourceCanvas);
|
|
9170
|
+
const transformMatrix = matrix.toFloat32Array();
|
|
9171
|
+
const zScale = 1e9;
|
|
9172
|
+
const projectionMatrix = new Float32Array([
|
|
9173
|
+
2 / canvasWidth,
|
|
9174
|
+
0,
|
|
9175
|
+
0,
|
|
9176
|
+
0,
|
|
9177
|
+
0,
|
|
9178
|
+
-2 / canvasHeight,
|
|
9179
|
+
0,
|
|
9180
|
+
0,
|
|
9181
|
+
0,
|
|
9182
|
+
0,
|
|
9183
|
+
-2 / zScale,
|
|
9184
|
+
0,
|
|
9185
|
+
-1,
|
|
9186
|
+
1,
|
|
9187
|
+
0,
|
|
9188
|
+
1
|
|
9189
|
+
]);
|
|
9190
|
+
const uTransform = gl.getUniformLocation(program, "uTransform");
|
|
9191
|
+
const uProjection = gl.getUniformLocation(program, "uProjection");
|
|
9192
|
+
const uTexture = gl.getUniformLocation(program, "uTexture");
|
|
9193
|
+
gl.uniformMatrix4fv(uTransform, false, transformMatrix);
|
|
9194
|
+
gl.uniformMatrix4fv(uProjection, false, projectionMatrix);
|
|
9195
|
+
gl.uniform1i(uTexture, 0);
|
|
9196
|
+
gl.clearColor(0, 0, 0, 0);
|
|
9197
|
+
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
9198
|
+
gl.enable(gl.BLEND);
|
|
9199
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
9200
|
+
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
|
9201
|
+
return canvas;
|
|
9202
|
+
};
|
|
9203
|
+
|
|
9204
|
+
// src/drawing/draw-element-to-canvas.ts
|
|
9205
|
+
var drawElementToCanvas = async ({
|
|
9206
|
+
element,
|
|
9207
|
+
context,
|
|
9208
|
+
draw
|
|
9209
|
+
}) => {
|
|
9210
|
+
const { totalMatrix, reset, dimensions, opacity, computedStyle } = calculateTransforms(element);
|
|
9211
|
+
if (opacity === 0) {
|
|
9212
|
+
reset();
|
|
9213
|
+
return;
|
|
9214
|
+
}
|
|
9215
|
+
if (dimensions.width <= 0 || dimensions.height <= 0) {
|
|
9216
|
+
reset();
|
|
9217
|
+
return;
|
|
9218
|
+
}
|
|
9219
|
+
if (!totalMatrix.is2D) {
|
|
9220
|
+
const offsetLeft = Math.min(dimensions.left, 0);
|
|
9221
|
+
const offsetTop = Math.min(dimensions.top, 0);
|
|
9222
|
+
const tempCanvasWidth = Math.max(dimensions.width, dimensions.right);
|
|
9223
|
+
const tempCanvasHeight = Math.max(dimensions.height, dimensions.bottom);
|
|
9224
|
+
const tempCanvas = new OffscreenCanvas(tempCanvasWidth, tempCanvasHeight);
|
|
9225
|
+
const context2 = tempCanvas.getContext("2d");
|
|
9226
|
+
if (!context2) {
|
|
9227
|
+
throw new Error("Could not get context");
|
|
9228
|
+
}
|
|
9229
|
+
const adjustedDimensions = new DOMRect(dimensions.left - offsetLeft, dimensions.top - offsetTop, dimensions.width, dimensions.height);
|
|
9230
|
+
await drawElement({
|
|
9231
|
+
dimensions: adjustedDimensions,
|
|
9232
|
+
computedStyle,
|
|
9233
|
+
context: context2,
|
|
9234
|
+
draw,
|
|
9235
|
+
opacity,
|
|
9236
|
+
totalMatrix: new DOMMatrix
|
|
9237
|
+
});
|
|
9238
|
+
const transformed = transformIn3d({
|
|
9239
|
+
canvasWidth: tempCanvasWidth,
|
|
9240
|
+
canvasHeight: tempCanvasHeight,
|
|
9241
|
+
matrix: totalMatrix,
|
|
9242
|
+
sourceCanvas: tempCanvas,
|
|
9243
|
+
offsetLeft,
|
|
9244
|
+
offsetTop
|
|
9245
|
+
});
|
|
9246
|
+
context.drawImage(transformed, 0, 0);
|
|
9247
|
+
} else {
|
|
9248
|
+
await drawElement({
|
|
9249
|
+
dimensions,
|
|
9250
|
+
computedStyle,
|
|
9251
|
+
context,
|
|
9252
|
+
draw,
|
|
9253
|
+
opacity,
|
|
9254
|
+
totalMatrix
|
|
9255
|
+
});
|
|
9256
|
+
}
|
|
9054
9257
|
reset();
|
|
9055
9258
|
};
|
|
9056
9259
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const findCanvasElements: (element: HTMLDivElement) => HTMLCanvasElement[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findCanvasElements = void 0;
|
|
4
|
+
const findCanvasElements = (element) => {
|
|
5
|
+
const canvasElements = element.querySelectorAll('canvas');
|
|
6
|
+
const composables = [];
|
|
7
|
+
Array.from(canvasElements).forEach((canvasElement) => {
|
|
8
|
+
const canvas = canvasElement;
|
|
9
|
+
composables.push(canvas);
|
|
10
|
+
});
|
|
11
|
+
return composables;
|
|
12
|
+
};
|
|
13
|
+
exports.findCanvasElements = findCanvasElements;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { drawElementToCanvas } from './drawing/draw-element-to-canvas';
|
|
2
|
+
export const findCapturableElements = async (element, context) => {
|
|
3
|
+
const treeWalker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, (node) => {
|
|
4
|
+
if (node instanceof Element) {
|
|
5
|
+
const computedStyle = getComputedStyle(node);
|
|
6
|
+
return computedStyle.display === 'none'
|
|
7
|
+
? NodeFilter.FILTER_REJECT
|
|
8
|
+
: NodeFilter.FILTER_ACCEPT;
|
|
9
|
+
}
|
|
10
|
+
return NodeFilter.FILTER_ACCEPT;
|
|
11
|
+
});
|
|
12
|
+
const composables = [];
|
|
13
|
+
while (treeWalker.nextNode()) {
|
|
14
|
+
const node = treeWalker.currentNode;
|
|
15
|
+
if (node instanceof HTMLCanvasElement ||
|
|
16
|
+
node instanceof SVGSVGElement ||
|
|
17
|
+
node instanceof HTMLImageElement) {
|
|
18
|
+
await drawElementToCanvas(node, context);
|
|
19
|
+
composables.push({
|
|
20
|
+
type: 'element',
|
|
21
|
+
element: node,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return composables;
|
|
26
|
+
};
|
package/dist/opacity.js
ADDED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/web-renderer"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/web-renderer",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.392",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"scripts": {
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
"author": "Remotion <jonny@remotion.dev>",
|
|
17
17
|
"license": "UNLICENSED",
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"remotion": "4.0.
|
|
19
|
+
"remotion": "4.0.392",
|
|
20
20
|
"mediabunny": "1.25.8"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
24
|
-
"@remotion/player": "4.0.
|
|
25
|
-
"@remotion/media": "4.0.
|
|
23
|
+
"@remotion/eslint-config-internal": "4.0.392",
|
|
24
|
+
"@remotion/player": "4.0.392",
|
|
25
|
+
"@remotion/media": "4.0.392",
|
|
26
26
|
"@vitejs/plugin-react": "4.1.0",
|
|
27
27
|
"@vitest/browser-playwright": "4.0.9",
|
|
28
28
|
"playwright": "1.55.1",
|