@remotion/serverless-client 4.0.473 → 4.0.475

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 (2) hide show
  1. package/dist/esm/index.mjs +140 -1
  2. package/package.json +5 -5
@@ -40,6 +40,32 @@ var lengthUnits = new Set([
40
40
  "vw"
41
41
  ]);
42
42
  var cssNumberRegex = /^([+-]?(?:\d+\.?\d*|\.\d+))([a-zA-Z%]+)?$/;
43
+ var transformOriginKeywords = new Set([
44
+ "left",
45
+ "center",
46
+ "right",
47
+ "top",
48
+ "bottom"
49
+ ]);
50
+ var transformOriginKeywordOptions = (keyword) => {
51
+ if (keyword === "left") {
52
+ return [{ axis: "x", value: { value: 0, unit: "%" } }];
53
+ }
54
+ if (keyword === "right") {
55
+ return [{ axis: "x", value: { value: 100, unit: "%" } }];
56
+ }
57
+ if (keyword === "top") {
58
+ return [{ axis: "y", value: { value: 0, unit: "%" } }];
59
+ }
60
+ if (keyword === "bottom") {
61
+ return [{ axis: "y", value: { value: 100, unit: "%" } }];
62
+ }
63
+ return [
64
+ { axis: "x", value: { value: 50, unit: "%" } },
65
+ { axis: "y", value: { value: 50, unit: "%" } }
66
+ ];
67
+ };
68
+ var transformOriginCenter = { value: 50, unit: "%" };
43
69
  var stringifyNumber = (value) => {
44
70
  return String(normalizeNumber(value));
45
71
  };
@@ -64,6 +90,110 @@ var parseStringInterpolationComponent = (component, value) => {
64
90
  }
65
91
  throw new TypeError(`Cannot interpolate "${value}" because "${unit}" is not a supported translate or rotate unit`);
66
92
  };
93
+ var parseTransformOriginLengthPercentage = ({
94
+ component,
95
+ value,
96
+ allowPercentage
97
+ }) => {
98
+ const match = cssNumberRegex.exec(component);
99
+ if (match === null) {
100
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not a supported transform-origin ${allowPercentage ? "length-percentage" : "z length"}`);
101
+ }
102
+ const unit = match[2] ?? null;
103
+ const numberValue = Number(match[1]);
104
+ if (!Number.isFinite(numberValue)) {
105
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not finite`);
106
+ }
107
+ if (unit === null || !lengthUnits.has(unit) || !allowPercentage && unit === "%") {
108
+ throw new TypeError(`Cannot interpolate "${value}" because "${component}" is not a supported transform-origin ${allowPercentage ? "length-percentage" : "z length"}`);
109
+ }
110
+ return { value: numberValue, unit };
111
+ };
112
+ var parseTransformOriginToken = (component, value) => {
113
+ const lower = component.toLowerCase();
114
+ if (transformOriginKeywords.has(lower)) {
115
+ return { type: "keyword", keyword: lower };
116
+ }
117
+ return {
118
+ type: "length-percentage",
119
+ parsed: parseTransformOriginLengthPercentage({
120
+ component,
121
+ value,
122
+ allowPercentage: true
123
+ })
124
+ };
125
+ };
126
+ var parseTwoTransformOriginKeywords = (first, second, value) => {
127
+ const candidates = [];
128
+ for (const firstOption of transformOriginKeywordOptions(first)) {
129
+ for (const secondOption of transformOriginKeywordOptions(second)) {
130
+ if (firstOption.axis === secondOption.axis) {
131
+ continue;
132
+ }
133
+ candidates.push(firstOption.axis === "x" ? [firstOption.value, secondOption.value] : [secondOption.value, firstOption.value]);
134
+ }
135
+ }
136
+ if (candidates.length === 0) {
137
+ throw new TypeError(`Cannot interpolate "${value}" because "${first} ${second}" is not a valid transform-origin keyword pair`);
138
+ }
139
+ return candidates[0];
140
+ };
141
+ var parseTransformOriginXY = (parts, value) => {
142
+ if (parts.length === 1) {
143
+ const token = parseTransformOriginToken(parts[0], value);
144
+ if (token.type === "length-percentage") {
145
+ return [token.parsed, transformOriginCenter];
146
+ }
147
+ if (token.keyword === "top" || token.keyword === "bottom") {
148
+ return [
149
+ transformOriginCenter,
150
+ transformOriginKeywordOptions(token.keyword)[0].value
151
+ ];
152
+ }
153
+ return [
154
+ transformOriginKeywordOptions(token.keyword)[0].value,
155
+ transformOriginCenter
156
+ ];
157
+ }
158
+ const first = parseTransformOriginToken(parts[0], value);
159
+ const second = parseTransformOriginToken(parts[1], value);
160
+ if (first.type === "length-percentage" && second.type === "length-percentage") {
161
+ return [first.parsed, second.parsed];
162
+ }
163
+ if (first.type === "keyword" && second.type === "keyword") {
164
+ return parseTwoTransformOriginKeywords(first.keyword, second.keyword, value);
165
+ }
166
+ const keyword = first.type === "keyword" ? first : second.type === "keyword" ? second : null;
167
+ const length = first.type === "length-percentage" ? first.parsed : second.type === "length-percentage" ? second.parsed : null;
168
+ if (keyword === null || length === null) {
169
+ throw new Error("Expected a keyword and a length-percentage value");
170
+ }
171
+ const keywordIsFirst = first.type === "keyword";
172
+ if (keyword.keyword === "left" || keyword.keyword === "right") {
173
+ if (!keywordIsFirst) {
174
+ throw new TypeError(`Cannot interpolate "${value}" because horizontal transform-origin keywords must come before a length-percentage value`);
175
+ }
176
+ return [transformOriginKeywordOptions(keyword.keyword)[0].value, length];
177
+ }
178
+ if (keyword.keyword === "top" || keyword.keyword === "bottom") {
179
+ return [length, transformOriginKeywordOptions(keyword.keyword)[0].value];
180
+ }
181
+ return keywordIsFirst ? [transformOriginCenter, length] : [length, transformOriginCenter];
182
+ };
183
+ var parseTransformOriginValue = (output, parts) => {
184
+ const [x, y] = parseTransformOriginXY(parts.slice(0, 2), output);
185
+ const z = parts[2] === undefined ? { value: 0, unit: null } : parseTransformOriginLengthPercentage({
186
+ component: parts[2],
187
+ value: output,
188
+ allowPercentage: false
189
+ });
190
+ return {
191
+ kind: "translate",
192
+ values: [x.value, y.value, z.value],
193
+ units: [x.unit, y.unit, z.unit],
194
+ dimensions: parts[2] === undefined ? 2 : 3
195
+ };
196
+ };
67
197
  var parseStringInterpolationValue = (output) => {
68
198
  if (typeof output === "number") {
69
199
  if (!Number.isFinite(output)) {
@@ -80,6 +210,9 @@ var parseStringInterpolationValue = (output) => {
80
210
  if (parts.length < 1 || parts.length > 3 || parts[0] === "") {
81
211
  throw new TypeError(`String outputRange values must contain 1 to 3 components, but got "${output}"`);
82
212
  }
213
+ if (parts.some((part) => transformOriginKeywords.has(part.toLowerCase()))) {
214
+ return parseTransformOriginValue(output, parts);
215
+ }
83
216
  const parsed = parts.map((part) => parseStringInterpolationComponent(part, output));
84
217
  const [{ kind }] = parsed;
85
218
  for (const part of parsed) {
@@ -989,6 +1122,12 @@ var serializeScaleValue = ([x, y, z]) => {
989
1122
  return `${normalizedX} ${normalizedY} ${normalizedZ}`;
990
1123
  };
991
1124
  var sequenceVisualStyleSchema = {
1125
+ "style.transformOrigin": {
1126
+ type: "transform-origin",
1127
+ step: 1,
1128
+ default: "50% 50%",
1129
+ description: "Transform origin"
1130
+ },
992
1131
  "style.translate": {
993
1132
  type: "translate",
994
1133
  step: 1,
@@ -1444,7 +1583,7 @@ var validateFramesPerFunction = ({
1444
1583
  import * as tty from "tty";
1445
1584
 
1446
1585
  // ../core/dist/esm/version.mjs
1447
- var VERSION = "4.0.473";
1586
+ var VERSION = "4.0.475";
1448
1587
 
1449
1588
  // ../renderer/dist/esm/error-handling.mjs
1450
1589
  var isColorSupported = () => {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/serverless-client"
4
4
  },
5
5
  "name": "@remotion/serverless-client",
6
- "version": "4.0.473",
6
+ "version": "4.0.475",
7
7
  "main": "dist",
8
8
  "scripts": {
9
9
  "lint": "eslint src",
@@ -23,10 +23,10 @@
23
23
  },
24
24
  "dependencies": {},
25
25
  "devDependencies": {
26
- "remotion": "4.0.473",
27
- "@remotion/streaming": "4.0.473",
28
- "@remotion/renderer": "4.0.473",
29
- "@remotion/eslint-config-internal": "4.0.473",
26
+ "remotion": "4.0.475",
27
+ "@remotion/streaming": "4.0.475",
28
+ "@remotion/renderer": "4.0.475",
29
+ "@remotion/eslint-config-internal": "4.0.475",
30
30
  "eslint": "9.19.0",
31
31
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
32
32
  },