@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.
Files changed (41) hide show
  1. package/dist/audio.js +5 -1
  2. package/dist/border-radius.d.ts +31 -0
  3. package/dist/border-radius.js +152 -0
  4. package/dist/calculate-transforms.d.ts +11 -0
  5. package/dist/calculate-transforms.js +91 -0
  6. package/dist/composable.d.ts +4 -0
  7. package/dist/composable.js +1 -0
  8. package/dist/compose-canvas.d.ts +1 -0
  9. package/dist/compose-canvas.js +36 -0
  10. package/dist/compose-svg.d.ts +1 -0
  11. package/dist/compose-svg.js +34 -0
  12. package/dist/create-scaffold.js +1 -0
  13. package/dist/drawing/calculate-transforms.js +27 -8
  14. package/dist/drawing/compose-canvas.d.ts +1 -0
  15. package/dist/drawing/compose-canvas.js +36 -0
  16. package/dist/drawing/compose-svg.d.ts +1 -0
  17. package/dist/drawing/compose-svg.js +34 -0
  18. package/dist/drawing/compose.d.ts +5 -0
  19. package/dist/drawing/compose.js +6 -0
  20. package/dist/drawing/draw-element-to-canvas.js +40 -47
  21. package/dist/drawing/draw-element.d.ts +8 -0
  22. package/dist/drawing/draw-element.js +50 -0
  23. package/dist/drawing/get-computed-style-cache.d.ts +0 -0
  24. package/dist/drawing/get-computed-style-cache.js +1 -0
  25. package/dist/drawing/text/draw-text.d.ts +1 -0
  26. package/dist/drawing/text/draw-text.js +57 -0
  27. package/dist/drawing/text/handle-text-node.js +0 -12
  28. package/dist/drawing/transform-in-3d.d.ts +8 -0
  29. package/dist/drawing/transform-in-3d.js +125 -0
  30. package/dist/esm/index.mjs +308 -105
  31. package/dist/find-canvas-elements.d.ts +1 -0
  32. package/dist/find-canvas-elements.js +13 -0
  33. package/dist/find-capturable-elements.d.ts +2 -0
  34. package/dist/find-capturable-elements.js +26 -0
  35. package/dist/opacity.d.ts +4 -0
  36. package/dist/opacity.js +7 -0
  37. package/dist/parse-transform-origin.d.ts +4 -0
  38. package/dist/parse-transform-origin.js +7 -0
  39. package/dist/transform.d.ts +4 -0
  40. package/dist/transform.js +6 -0
  41. package/package.json +5 -5
@@ -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-to-canvas.ts
8999
- var drawElementToCanvas = async ({
9000
- element,
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,2 @@
1
+ import type { Composable } from './composable';
2
+ export declare const findCapturableElements: (element: HTMLDivElement, context: OffscreenCanvasRenderingContext2D) => Promise<Composable[]>;
@@ -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
+ };
@@ -0,0 +1,4 @@
1
+ export declare const setOpacity: ({ ctx, opacity, }: {
2
+ ctx: OffscreenCanvasRenderingContext2D;
3
+ opacity: number;
4
+ }) => () => void;
@@ -0,0 +1,7 @@
1
+ export const setOpacity = ({ ctx, opacity, }) => {
2
+ const previousAlpha = ctx.globalAlpha;
3
+ ctx.globalAlpha = opacity;
4
+ return () => {
5
+ ctx.globalAlpha = previousAlpha;
6
+ };
7
+ };
@@ -0,0 +1,4 @@
1
+ export declare const parseTransformOrigin: (transformOrigin: string) => {
2
+ x: number;
3
+ y: number;
4
+ } | null;
@@ -0,0 +1,7 @@
1
+ export const parseTransformOrigin = (transformOrigin) => {
2
+ if (transformOrigin.trim() === '') {
3
+ return null;
4
+ }
5
+ const [x, y] = transformOrigin.split(' ');
6
+ return { x: parseFloat(x), y: parseFloat(y) };
7
+ };
@@ -0,0 +1,4 @@
1
+ export declare const setTransform: ({ ctx, transform, }: {
2
+ ctx: OffscreenCanvasRenderingContext2D;
3
+ transform: DOMMatrix;
4
+ }) => () => void;
@@ -0,0 +1,6 @@
1
+ export const setTransform = ({ ctx, transform, }) => {
2
+ ctx.setTransform(transform);
3
+ return () => {
4
+ ctx.setTransform(new DOMMatrix());
5
+ };
6
+ };
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.390",
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.390",
19
+ "remotion": "4.0.392",
20
20
  "mediabunny": "1.25.8"
21
21
  },
22
22
  "devDependencies": {
23
- "@remotion/eslint-config-internal": "4.0.390",
24
- "@remotion/player": "4.0.390",
25
- "@remotion/media": "4.0.390",
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",