@remotion/web-renderer 4.0.395 → 4.0.396
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/border-radius.d.ts +31 -0
- package/dist/border-radius.js +152 -0
- package/dist/calculate-transforms.d.ts +2 -0
- package/dist/calculate-transforms.js +17 -0
- package/dist/composable.d.ts +2 -8
- package/dist/compose-canvas.js +28 -4
- package/dist/compose.d.ts +4 -3
- package/dist/compose.js +39 -12
- package/dist/drawing/border-radius.d.ts +3 -5
- package/dist/drawing/border-radius.js +12 -11
- package/dist/drawing/calculate-transforms.d.ts +6 -2
- package/dist/drawing/calculate-transforms.js +19 -22
- package/dist/drawing/canvas-offset-from-rect.d.ts +8 -0
- package/dist/drawing/canvas-offset-from-rect.js +12 -0
- package/dist/drawing/clamp-rect-to-parent-bounds.d.ts +4 -0
- package/dist/drawing/clamp-rect-to-parent-bounds.js +7 -0
- 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-border.d.ts +2 -5
- package/dist/drawing/draw-border.js +37 -37
- package/dist/drawing/draw-element-to-canvas.d.ts +2 -1
- package/dist/drawing/draw-element-to-canvas.js +8 -36
- package/dist/drawing/draw-element.d.ts +5 -3
- package/dist/drawing/draw-element.js +29 -14
- package/dist/drawing/draw-outline.d.ts +9 -0
- package/dist/drawing/draw-outline.js +116 -0
- package/dist/drawing/get-bounding-box-including-shadow.d.ts +1 -0
- package/dist/drawing/get-bounding-box-including-shadow.js +6 -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/get-pretransform-rect.d.ts +1 -0
- package/dist/drawing/get-pretransform-rect.js +31 -0
- package/dist/drawing/handle-3d-transform.d.ts +10 -0
- package/dist/drawing/handle-3d-transform.js +39 -0
- package/dist/drawing/has-transform.d.ts +4 -0
- package/dist/drawing/has-transform.js +14 -0
- package/dist/drawing/overflow.d.ts +7 -0
- package/dist/drawing/overflow.js +12 -0
- package/dist/drawing/process-node.d.ts +17 -0
- package/dist/drawing/process-node.js +41 -0
- package/dist/drawing/text/handle-text-node.d.ts +6 -5
- package/dist/drawing/text/handle-text-node.js +5 -5
- package/dist/drawing/transform-in-3d.d.ts +7 -7
- package/dist/drawing/transform-in-3d.js +20 -12
- package/dist/drawing/transform-rect-with-matrix.d.ts +4 -0
- package/dist/drawing/transform-rect-with-matrix.js +19 -0
- package/dist/esm/index.mjs +501 -218
- package/dist/find-canvas-elements.d.ts +1 -0
- package/dist/find-canvas-elements.js +13 -0
- package/dist/find-capturable-elements.d.ts +1 -1
- package/dist/find-capturable-elements.js +20 -22
- package/dist/get-biggest-bounding-client-rect.js +14 -4
- package/dist/internal-state.d.ts +9 -0
- package/dist/internal-state.js +12 -0
- package/dist/opacity.d.ts +4 -0
- package/dist/opacity.js +7 -0
- package/dist/render-media-on-web.d.ts +2 -0
- package/dist/render-media-on-web.js +5 -0
- package/dist/render-still-on-web.d.ts +5 -1
- package/dist/render-still-on-web.js +4 -1
- package/dist/take-screenshot.d.ts +5 -2
- package/dist/take-screenshot.js +16 -4
- package/dist/transform.d.ts +4 -0
- package/dist/transform.js +6 -0
- package/package.json +6 -6
- package/dist/drawing/text/get-base-height.d.ts +0 -1
- package/dist/drawing/text/get-base-height.js +0 -13
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { LogLevel } from 'remotion';
|
|
2
|
+
import type { InternalState } from '../internal-state';
|
|
3
|
+
import type { DrawFn } from './drawn-fn';
|
|
4
|
+
export type ProcessNodeReturnValue = {
|
|
5
|
+
type: 'continue';
|
|
6
|
+
cleanupAfterChildren: () => void;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'skip-children';
|
|
9
|
+
};
|
|
10
|
+
export declare const processNode: ({ element, context, draw, logLevel, parentRect, internalState, }: {
|
|
11
|
+
element: HTMLElement | SVGElement;
|
|
12
|
+
context: OffscreenCanvasRenderingContext2D;
|
|
13
|
+
draw: DrawFn;
|
|
14
|
+
logLevel: LogLevel;
|
|
15
|
+
parentRect: DOMRect;
|
|
16
|
+
internalState: InternalState;
|
|
17
|
+
}) => Promise<ProcessNodeReturnValue>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { calculateTransforms } from './calculate-transforms';
|
|
2
|
+
import { drawElement } from './draw-element';
|
|
3
|
+
import { handle3dTransform } from './handle-3d-transform';
|
|
4
|
+
export const processNode = async ({ element, context, draw, logLevel, parentRect, internalState, }) => {
|
|
5
|
+
const transforms = calculateTransforms({
|
|
6
|
+
element,
|
|
7
|
+
offsetLeft: parentRect.x,
|
|
8
|
+
offsetTop: parentRect.y,
|
|
9
|
+
});
|
|
10
|
+
const { totalMatrix, reset, dimensions, opacity, computedStyle } = transforms;
|
|
11
|
+
if (opacity === 0) {
|
|
12
|
+
reset();
|
|
13
|
+
return { type: 'continue', cleanupAfterChildren: () => { } };
|
|
14
|
+
}
|
|
15
|
+
if (dimensions.width <= 0 || dimensions.height <= 0) {
|
|
16
|
+
reset();
|
|
17
|
+
return { type: 'continue', cleanupAfterChildren: () => { } };
|
|
18
|
+
}
|
|
19
|
+
if (!totalMatrix.is2D) {
|
|
20
|
+
await handle3dTransform({
|
|
21
|
+
element,
|
|
22
|
+
matrix: totalMatrix,
|
|
23
|
+
parentRect,
|
|
24
|
+
context,
|
|
25
|
+
logLevel,
|
|
26
|
+
internalState,
|
|
27
|
+
});
|
|
28
|
+
reset();
|
|
29
|
+
return { type: 'skip-children' };
|
|
30
|
+
}
|
|
31
|
+
const { cleanupAfterChildren } = await drawElement({
|
|
32
|
+
rect: new DOMRect(dimensions.left - parentRect.x, dimensions.top - parentRect.y, dimensions.width, dimensions.height),
|
|
33
|
+
computedStyle,
|
|
34
|
+
context,
|
|
35
|
+
draw,
|
|
36
|
+
opacity,
|
|
37
|
+
totalMatrix,
|
|
38
|
+
});
|
|
39
|
+
reset();
|
|
40
|
+
return { type: 'continue', cleanupAfterChildren };
|
|
41
|
+
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { LogLevel } from 'remotion';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { InternalState } from '../../internal-state';
|
|
3
|
+
import type { ProcessNodeReturnValue } from '../process-node';
|
|
4
|
+
export declare const handleTextNode: ({ node, context, logLevel, parentRect, internalState, }: {
|
|
4
5
|
node: Text;
|
|
5
6
|
context: OffscreenCanvasRenderingContext2D;
|
|
6
|
-
offsetLeft: number;
|
|
7
|
-
offsetTop: number;
|
|
8
7
|
logLevel: LogLevel;
|
|
9
|
-
|
|
8
|
+
parentRect: DOMRect;
|
|
9
|
+
internalState: InternalState;
|
|
10
|
+
}) => Promise<ProcessNodeReturnValue>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { processNode } from '../process-node';
|
|
2
2
|
import { drawText } from './draw-text';
|
|
3
|
-
export const handleTextNode = async ({ node, context,
|
|
3
|
+
export const handleTextNode = async ({ node, context, logLevel, parentRect, internalState, }) => {
|
|
4
4
|
const span = document.createElement('span');
|
|
5
5
|
const parent = node.parentNode;
|
|
6
6
|
if (!parent) {
|
|
@@ -8,13 +8,13 @@ export const handleTextNode = async ({ node, context, offsetLeft, offsetTop, log
|
|
|
8
8
|
}
|
|
9
9
|
parent.insertBefore(span, node);
|
|
10
10
|
span.appendChild(node);
|
|
11
|
-
const value = await
|
|
11
|
+
const value = await processNode({
|
|
12
12
|
context,
|
|
13
13
|
element: span,
|
|
14
14
|
draw: drawText(span),
|
|
15
|
-
offsetLeft,
|
|
16
|
-
offsetTop,
|
|
17
15
|
logLevel,
|
|
16
|
+
parentRect,
|
|
17
|
+
internalState,
|
|
18
18
|
});
|
|
19
19
|
// Undo the layout manipulation
|
|
20
20
|
parent.insertBefore(node, span);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export declare const transformIn3d: ({
|
|
2
|
-
|
|
3
|
-
canvasHeight: number;
|
|
4
|
-
offsetLeft: number;
|
|
5
|
-
offsetTop: number;
|
|
1
|
+
export declare const transformIn3d: ({ matrix, sourceCanvas, untransformedRect, }: {
|
|
2
|
+
untransformedRect: DOMRect;
|
|
6
3
|
matrix: DOMMatrix;
|
|
7
|
-
sourceCanvas:
|
|
8
|
-
}) =>
|
|
4
|
+
sourceCanvas: OffscreenCanvas;
|
|
5
|
+
}) => {
|
|
6
|
+
canvas: OffscreenCanvas;
|
|
7
|
+
rect: DOMRect;
|
|
8
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { transformDOMRect } from './transform-rect-with-matrix';
|
|
1
2
|
function compileShader(shaderGl, source, type) {
|
|
2
3
|
const shader = shaderGl.createShader(type);
|
|
3
4
|
if (!shader) {
|
|
@@ -76,8 +77,15 @@ const createHelperCanvas = ({ canvasWidth, canvasHeight, }) => {
|
|
|
76
77
|
helperCanvas = { canvas, gl, program, vertexShader, fragmentShader };
|
|
77
78
|
return helperCanvas;
|
|
78
79
|
};
|
|
79
|
-
export const transformIn3d = ({
|
|
80
|
-
const
|
|
80
|
+
export const transformIn3d = ({ matrix, sourceCanvas, untransformedRect, }) => {
|
|
81
|
+
const rectAfterTransforms = transformDOMRect({
|
|
82
|
+
rect: untransformedRect,
|
|
83
|
+
matrix,
|
|
84
|
+
});
|
|
85
|
+
const { canvas, gl, program } = createHelperCanvas({
|
|
86
|
+
canvasWidth: Math.ceil(rectAfterTransforms.width),
|
|
87
|
+
canvasHeight: Math.ceil(rectAfterTransforms.height),
|
|
88
|
+
});
|
|
81
89
|
const vertexBuffer = gl.createBuffer();
|
|
82
90
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
|
|
83
91
|
// Create a quad (two triangles) with texture coordinates
|
|
@@ -85,13 +93,13 @@ export const transformIn3d = ({ canvasWidth, canvasHeight, matrix, sourceCanvas,
|
|
|
85
93
|
const vertices = new Float32Array([
|
|
86
94
|
// Position (x, y) + TexCoord (u, v)
|
|
87
95
|
// First:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
untransformedRect.x, untransformedRect.y, 0, 0, // bottom-left
|
|
97
|
+
untransformedRect.x + untransformedRect.width, untransformedRect.y, 1, 0, // bottom-right
|
|
98
|
+
untransformedRect.x, untransformedRect.y + untransformedRect.height, 0, 1, // top-left
|
|
91
99
|
// Second:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
100
|
+
untransformedRect.x, untransformedRect.y + untransformedRect.height, 0, 1, // top-left
|
|
101
|
+
untransformedRect.x + untransformedRect.width, untransformedRect.y, 1, 0, // bottom-right
|
|
102
|
+
untransformedRect.x + untransformedRect.width, untransformedRect.y + untransformedRect.height, 1, 1, // top-right
|
|
95
103
|
]);
|
|
96
104
|
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
|
|
97
105
|
const aPosition = gl.getAttribLocation(program, 'aPosition');
|
|
@@ -115,7 +123,7 @@ export const transformIn3d = ({ canvasWidth, canvasHeight, matrix, sourceCanvas,
|
|
|
115
123
|
// The transform matrix
|
|
116
124
|
const transformMatrix = matrix.toFloat32Array();
|
|
117
125
|
const zScale = 1000000000; // By default infinite in chrome
|
|
118
|
-
// Create orthographic projection matrix for pixel coordinates
|
|
126
|
+
// Create orthographic projection matrix for pixel coordinates with offset
|
|
119
127
|
const projectionMatrix = new Float32Array([
|
|
120
128
|
2 / canvas.width,
|
|
121
129
|
0,
|
|
@@ -129,8 +137,8 @@ export const transformIn3d = ({ canvasWidth, canvasHeight, matrix, sourceCanvas,
|
|
|
129
137
|
0,
|
|
130
138
|
-2 / zScale,
|
|
131
139
|
0,
|
|
132
|
-
-1,
|
|
133
|
-
1,
|
|
140
|
+
-1 + (2 * -rectAfterTransforms.x) / canvas.width,
|
|
141
|
+
1 - (2 * -rectAfterTransforms.y) / canvas.height,
|
|
134
142
|
0,
|
|
135
143
|
1,
|
|
136
144
|
]);
|
|
@@ -144,5 +152,5 @@ export const transformIn3d = ({ canvasWidth, canvasHeight, matrix, sourceCanvas,
|
|
|
144
152
|
// Clean up resources to prevent leaks and ensure clean state for reuse
|
|
145
153
|
gl.deleteTexture(texture);
|
|
146
154
|
gl.deleteBuffer(vertexBuffer);
|
|
147
|
-
return canvas;
|
|
155
|
+
return { canvas, rect: rectAfterTransforms };
|
|
148
156
|
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function transformDOMRect({ rect, matrix, }) {
|
|
2
|
+
// Get all four corners of the rectangle
|
|
3
|
+
const topLeft = new DOMPointReadOnly(rect.left, rect.top);
|
|
4
|
+
const topRight = new DOMPointReadOnly(rect.right, rect.top);
|
|
5
|
+
const bottomLeft = new DOMPointReadOnly(rect.left, rect.bottom);
|
|
6
|
+
const bottomRight = new DOMPointReadOnly(rect.right, rect.bottom);
|
|
7
|
+
// Transform all corners
|
|
8
|
+
const transformedTopLeft = topLeft.matrixTransform(matrix);
|
|
9
|
+
const transformedTopRight = topRight.matrixTransform(matrix);
|
|
10
|
+
const transformedBottomLeft = bottomLeft.matrixTransform(matrix);
|
|
11
|
+
const transformedBottomRight = bottomRight.matrixTransform(matrix);
|
|
12
|
+
// Find the bounding box of the transformed points
|
|
13
|
+
const minX = Math.min(transformedTopLeft.x / transformedTopLeft.w, transformedTopRight.x / transformedTopRight.w, transformedBottomLeft.x / transformedBottomLeft.w, transformedBottomRight.x / transformedBottomRight.w);
|
|
14
|
+
const maxX = Math.max(transformedTopLeft.x / transformedTopLeft.w, transformedTopRight.x / transformedTopRight.w, transformedBottomLeft.x / transformedBottomLeft.w, transformedBottomRight.x / transformedBottomRight.w);
|
|
15
|
+
const minY = Math.min(transformedTopLeft.y / transformedTopLeft.w, transformedTopRight.y / transformedTopRight.w, transformedBottomLeft.y / transformedBottomLeft.w, transformedBottomRight.y / transformedBottomRight.w);
|
|
16
|
+
const maxY = Math.max(transformedTopLeft.y / transformedTopLeft.w, transformedTopRight.y / transformedTopRight.w, transformedBottomLeft.y / transformedBottomLeft.w, transformedBottomRight.y / transformedBottomRight.w);
|
|
17
|
+
// Create a new DOMRect from the bounding box
|
|
18
|
+
return new DOMRect(minX, minY, maxX - minX, maxY - minY);
|
|
19
|
+
}
|