@remotion/serverless-client 4.0.474 → 4.0.476

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 +158 -5
  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,
@@ -1050,6 +1189,18 @@ var hiddenField = {
1050
1189
  default: false,
1051
1190
  description: "Hidden"
1052
1191
  };
1192
+ var showInTimelineField = {
1193
+ type: "hidden"
1194
+ };
1195
+ var sequenceNameField = {
1196
+ type: "hidden"
1197
+ };
1198
+ var extendSchemaWithSequenceName = (schema) => {
1199
+ return {
1200
+ name: sequenceNameField,
1201
+ ...schema
1202
+ };
1203
+ };
1053
1204
  var durationInFramesField = {
1054
1205
  type: "number",
1055
1206
  default: undefined,
@@ -1063,8 +1214,9 @@ var fromField = {
1063
1214
  step: 1,
1064
1215
  hiddenFromList: true
1065
1216
  };
1066
- var sequenceSchema = {
1217
+ var sequenceSchema = extendSchemaWithSequenceName({
1067
1218
  hidden: hiddenField,
1219
+ showInTimeline: showInTimelineField,
1068
1220
  from: fromField,
1069
1221
  durationInFrames: durationInFramesField,
1070
1222
  layout: {
@@ -1076,12 +1228,13 @@ var sequenceSchema = {
1076
1228
  none: {}
1077
1229
  }
1078
1230
  }
1079
- };
1080
- var sequenceSchemaWithoutFrom = {
1231
+ });
1232
+ var sequenceSchemaWithoutFrom = extendSchemaWithSequenceName({
1081
1233
  hidden: hiddenField,
1234
+ showInTimeline: showInTimelineField,
1082
1235
  durationInFrames: durationInFramesField,
1083
1236
  layout: sequenceSchema.layout
1084
- };
1237
+ });
1085
1238
  var sequenceSchemaDefaultLayoutNone = {
1086
1239
  ...sequenceSchema,
1087
1240
  layout: {
@@ -1444,7 +1597,7 @@ var validateFramesPerFunction = ({
1444
1597
  import * as tty from "tty";
1445
1598
 
1446
1599
  // ../core/dist/esm/version.mjs
1447
- var VERSION = "4.0.474";
1600
+ var VERSION = "4.0.476";
1448
1601
 
1449
1602
  // ../renderer/dist/esm/error-handling.mjs
1450
1603
  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.474",
6
+ "version": "4.0.476",
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.474",
27
- "@remotion/streaming": "4.0.474",
28
- "@remotion/renderer": "4.0.474",
29
- "@remotion/eslint-config-internal": "4.0.474",
26
+ "remotion": "4.0.476",
27
+ "@remotion/streaming": "4.0.476",
28
+ "@remotion/renderer": "4.0.476",
29
+ "@remotion/eslint-config-internal": "4.0.476",
30
30
  "eslint": "9.19.0",
31
31
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
32
32
  },