@remotion/studio-shared 4.0.460 → 4.0.462

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.
@@ -1,8 +1,7 @@
1
1
  import type { AudioCodec, ChromeMode, Codec, ColorSpace, LogLevel, PixelFormat, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
- import type { _InternalTypes, SequenceSchema } from 'remotion';
4
- import type { CanUpdateSequencePropsResponse } from 'remotion';
5
- import type { SequenceNodePath } from 'remotion';
3
+ import type { CannotUpdateSequenceReason } from 'remotion';
4
+ import type { _InternalTypes, CanUpdateEffectPropsResponse, CanUpdateSequencePropsResponseFalse, CanUpdateSequencePropsResponseTrue, CanUpdateSequencePropStatus, SequenceSchema, SequenceNodePath, SequencePropsSubscriptionKey } from 'remotion';
6
5
  import type { RecastCodemod, VisualControlChange } from './codemods';
7
6
  import type { PackageManager } from './package-manager';
8
7
  import type { ProjectInfo } from './project-info';
@@ -162,38 +161,57 @@ export type UnsubscribeFromDefaultPropsRequest = {
162
161
  };
163
162
  export type CanUpdateSequencePropsRequest = {
164
163
  fileName: string;
165
- nodePath: SequenceNodePath;
164
+ nodePath: SequencePropsSubscriptionKey;
166
165
  keys: string[];
167
166
  };
168
167
  export type SubscribeToSequencePropsRequest = {
169
168
  fileName: string;
170
169
  line: number;
171
170
  column: number;
172
- schema: SequenceSchema;
171
+ keys: string[];
172
+ effects: string[][];
173
173
  clientId: string;
174
174
  };
175
- export type SubscribeToSequencePropsResponse = CanUpdateSequencePropsResponse;
175
+ export type SubscribeToSequencePropsResponse = {
176
+ success: true;
177
+ status: CanUpdateSequencePropsResponseTrue;
178
+ nodePath: SequencePropsSubscriptionKey;
179
+ } | {
180
+ success: false;
181
+ status: CanUpdateSequencePropsResponseFalse;
182
+ };
176
183
  export type UnsubscribeFromSequencePropsRequest = {
177
184
  fileName: string;
178
- nodePath: SequenceNodePath;
185
+ nodePath: SequencePropsSubscriptionKey;
179
186
  clientId: string;
187
+ sequenceKeys: string[];
188
+ effectKeys: string[][];
180
189
  };
181
190
  export type SaveSequencePropsRequest = {
182
191
  fileName: string;
183
- nodePath: SequenceNodePath;
192
+ nodePath: SequencePropsSubscriptionKey;
184
193
  key: string;
185
194
  value: string;
186
195
  defaultValue: string | null;
187
196
  schema: SequenceSchema;
188
197
  };
189
198
  export type SaveSequencePropsResponse = {
190
- success: true;
191
- newStatus: CanUpdateSequencePropsResponse;
199
+ canUpdate: true;
200
+ props: Record<string, CanUpdateSequencePropStatus>;
192
201
  } | {
193
- success: false;
194
- reason: string;
195
- stack: string;
202
+ canUpdate: false;
203
+ reason: CannotUpdateSequenceReason;
204
+ };
205
+ export type SaveEffectPropsRequest = {
206
+ fileName: string;
207
+ sequenceNodePath: SequencePropsSubscriptionKey;
208
+ effectIndex: number;
209
+ key: string;
210
+ value: string;
211
+ defaultValue: string | null;
212
+ schema: SequenceSchema;
196
213
  };
214
+ export type SaveEffectPropsResponse = CanUpdateEffectPropsResponse;
197
215
  export type DeleteJsxNodeRequest = {
198
216
  fileName: string;
199
217
  nodePath: SequenceNodePath;
@@ -262,6 +280,7 @@ export type ApiRoutes = {
262
280
  '/api/subscribe-to-sequence-props': ReqAndRes<SubscribeToSequencePropsRequest, SubscribeToSequencePropsResponse>;
263
281
  '/api/unsubscribe-from-sequence-props': ReqAndRes<UnsubscribeFromSequencePropsRequest, undefined>;
264
282
  '/api/save-sequence-props': ReqAndRes<SaveSequencePropsRequest, SaveSequencePropsResponse>;
283
+ '/api/save-effect-props': ReqAndRes<SaveEffectPropsRequest, SaveEffectPropsResponse>;
265
284
  '/api/delete-jsx-node': ReqAndRes<DeleteJsxNodeRequest, DeleteJsxNodeResponse>;
266
285
  '/api/duplicate-jsx-node': ReqAndRes<DuplicateJsxNodeRequest, DuplicateJsxNodeResponse>;
267
286
  '/api/update-available': ReqAndRes<UpdateAvailableRequest, UpdateAvailableResponse>;
@@ -1,5 +1,5 @@
1
1
  import type { StaticFile } from 'remotion';
2
- import type { SequenceNodePath, CanUpdateSequencePropsResponse } from 'remotion';
2
+ import type { CanUpdateSequencePropsResponse, SequencePropsSubscriptionKey } from 'remotion';
3
3
  import type { CanUpdateDefaultPropsResponse } from './api-requests';
4
4
  import type { HotMiddlewareMessage } from './hot-middleware';
5
5
  import type { CompletedClientRender, RenderJob } from './render-job';
@@ -39,7 +39,7 @@ export type EventSourceEvent = {
39
39
  } | {
40
40
  type: 'sequence-props-updated';
41
41
  fileName: string;
42
- nodePath: SequenceNodePath;
42
+ nodePath: SequencePropsSubscriptionKey;
43
43
  result: CanUpdateSequencePropsResponse;
44
44
  } | {
45
45
  type: 'default-props-updatable-changed';
@@ -0,0 +1,6 @@
1
+ import type { SequenceSchema } from 'remotion';
2
+ export declare const findPropsToDelete: ({ schema, key, value, }: {
3
+ schema: SequenceSchema;
4
+ key: string;
5
+ value: unknown;
6
+ }) => string[];
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findPropsToDelete = void 0;
4
+ const findPropsToDelete = ({ schema, key, value, }) => {
5
+ const fieldSchema = schema[key];
6
+ if (!fieldSchema) {
7
+ // could be a non-top-level key, we don't support it for now
8
+ return [];
9
+ }
10
+ if (typeof value !== 'string') {
11
+ throw new Error('Value must be a string, but is ' + JSON.stringify(value));
12
+ }
13
+ if (fieldSchema.type !== 'enum') {
14
+ throw new Error('Key ' + JSON.stringify(key) + ' is not an enum');
15
+ }
16
+ const currentVariant = fieldSchema.variants[value];
17
+ if (!currentVariant) {
18
+ throw new Error('Value for ' +
19
+ JSON.stringify(key) +
20
+ ' must be one of ' +
21
+ Object.keys(fieldSchema.variants)
22
+ .map((v) => JSON.stringify(v))
23
+ .join(', ') +
24
+ ', got ' +
25
+ JSON.stringify(value));
26
+ }
27
+ const otherVariants = Object.keys(fieldSchema.variants).filter((v) => v !== value);
28
+ const otherKeys = new Set();
29
+ for (const variant of otherVariants) {
30
+ const otherVariant = fieldSchema.variants[variant];
31
+ const keys = Object.keys(otherVariant);
32
+ for (const k of keys) {
33
+ otherKeys.add(k);
34
+ }
35
+ }
36
+ return [...otherKeys];
37
+ };
38
+ exports.findPropsToDelete = findPropsToDelete;
@@ -0,0 +1,2 @@
1
+ import type { SequenceSchema } from 'remotion';
2
+ export declare const getAllSchemaKeys: (schema: SequenceSchema) => string[];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAllSchemaKeys = void 0;
4
+ const remotion_1 = require("remotion");
5
+ const getAllSchemaKeys = (schema) => {
6
+ return Object.keys(remotion_1.Internals.getFlatSchemaWithAllKeys(schema));
7
+ };
8
+ exports.getAllSchemaKeys = getAllSchemaKeys;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export { splitAnsi, stripAnsi } from './ansi';
2
- export { AddRenderRequest, ApiRoutes, ApplyCodemodRequest, ApplyCodemodResponse, ApplyVisualControlRequest, ApplyVisualControlResponse, CanUpdateDefaultPropsResponse, CanUpdateSequencePropsRequest, CancelRenderRequest, SubscribeToSequencePropsRequest, SubscribeToSequencePropsResponse, UnsubscribeFromSequencePropsRequest, CancelRenderResponse, CopyStillToClipboardRequest, DeleteJsxNodeRequest, DeleteJsxNodeResponse, DuplicateJsxNodeRequest, DuplicateJsxNodeResponse, DeleteStaticFileRequest, DeleteStaticFileResponse, InstallPackageRequest, InstallPackageResponse, OpenInFileExplorerRequest, ProjectInfoRequest, ProjectInfoResponse, RedoRequest, RedoResponse, RemoveRenderRequest, RestartStudioRequest, RestartStudioResponse, SaveSequencePropsRequest, SaveSequencePropsResponse, SimpleDiff, SubscribeToDefaultPropsRequest, SubscribeToDefaultPropsResponse, SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse, UndoRequest, UndoResponse, UnsubscribeFromDefaultPropsRequest, UnsubscribeFromFileExistenceRequest, UpdateAvailableRequest, UpdateAvailableResponse, UpdateDefaultPropsRequest, UpdateDefaultPropsResponse, } from './api-requests';
2
+ export { AddRenderRequest, ApiRoutes, ApplyCodemodRequest, ApplyCodemodResponse, ApplyVisualControlRequest, ApplyVisualControlResponse, CanUpdateDefaultPropsResponse, CanUpdateSequencePropsRequest, CancelRenderRequest, SubscribeToSequencePropsRequest, SubscribeToSequencePropsResponse, UnsubscribeFromSequencePropsRequest, CancelRenderResponse, CopyStillToClipboardRequest, DeleteJsxNodeRequest, DeleteJsxNodeResponse, DuplicateJsxNodeRequest, DuplicateJsxNodeResponse, DeleteStaticFileRequest, DeleteStaticFileResponse, InstallPackageRequest, InstallPackageResponse, OpenInFileExplorerRequest, ProjectInfoRequest, ProjectInfoResponse, RedoRequest, RedoResponse, RemoveRenderRequest, RestartStudioRequest, RestartStudioResponse, SaveEffectPropsRequest, SaveEffectPropsResponse, SaveSequencePropsRequest, SaveSequencePropsResponse, SimpleDiff, SubscribeToDefaultPropsRequest, SubscribeToDefaultPropsResponse, SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse, UndoRequest, UndoResponse, UnsubscribeFromDefaultPropsRequest, UnsubscribeFromFileExistenceRequest, UpdateAvailableRequest, UpdateAvailableResponse, UpdateDefaultPropsRequest, UpdateDefaultPropsResponse, } from './api-requests';
3
3
  export type { ApplyVisualControlCodemod, RecastCodemod } from './codemods';
4
4
  export { DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS } from './default-buffer-state-delay-in-milliseconds';
5
5
  export { EventSourceEvent } from './event-source-event';
6
6
  export { formatBytes } from './format-bytes';
7
7
  export { getDefaultOutLocation } from './get-default-out-name';
8
+ export { getAllSchemaKeys } from './get-all-keys';
8
9
  export { ErrorLocation, getLocationFromBuildError, } from './get-location-from-build-error';
9
10
  export { getProjectName } from './get-project-name';
10
11
  export type { GitSource } from './git-source';
@@ -16,9 +17,12 @@ export { ProjectInfo } from './project-info';
16
17
  export type { RenderDefaults } from './render-defaults';
17
18
  export { AggregateRenderProgress, ArtifactProgress, BrowserDownloadState, BrowserProgressLog, BundlingState, CopyingState, DownloadProgress, JobProgressCallback, RenderJob, RenderJobWithCleanup, RenderingProgressInput, RequiredChromiumOptions, StitchingProgressInput, UiOpenGlOptions, } from './render-job';
18
19
  export type { CompletedClientRender } from './render-job';
19
- export { SCHEMA_FIELD_ROW_HEIGHT, UNSUPPORTED_FIELD_ROW_HEIGHT, getFieldsToShow, } from './schema-field-info';
20
- export type { CodeValues, DragOverrides, SchemaFieldInfo, SequenceControls, } from './schema-field-info';
21
- export { SOURCE_MAP_ENDPOINT } from './source-map-endpoint';
20
+ export { SCHEMA_FIELD_ROW_HEIGHT, getEffectFieldsToShow, getFieldsToShow, } from './schema-field-info';
21
+ export type { AnySchemaFieldInfo, CodeValues, DragOverrides, EffectSchemaFieldInfo, SchemaFieldInfo, SequenceControls, SequenceSchemaFieldInfo, } from './schema-field-info';
22
22
  export { ScriptLine, SomeStackFrame, StackFrame, SymbolicatedStackFrame, } from './stack-types';
23
23
  export { EnumPath, stringifyDefaultProps } from './stringify-default-props';
24
24
  export type { VisualControlChange } from './codemods';
25
+ export { optimisticUpdateForCodeValues } from './optimistic-update-for-code-values';
26
+ export { optimisticUpdateForEffectCodeValues } from './optimistic-update-for-effect-code-values';
27
+ export { stringifySequenceSubscriptionKey } from './stringify-sequence-subscription-key';
28
+ export { stringifySequenceExpandedRowKey } from './stringify-sequence-subscription-key';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stringifyDefaultProps = exports.SOURCE_MAP_ENDPOINT = exports.getFieldsToShow = exports.UNSUPPORTED_FIELD_ROW_HEIGHT = exports.SCHEMA_FIELD_ROW_HEIGHT = exports.packages = exports.installableMap = exports.extraPackages = exports.descriptions = exports.apiDocs = exports.DEFAULT_TIMELINE_TRACKS = exports.hotMiddlewareOptions = exports.getProjectName = exports.getLocationFromBuildError = exports.getDefaultOutLocation = exports.formatBytes = exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = exports.stripAnsi = exports.splitAnsi = void 0;
3
+ exports.stringifySequenceExpandedRowKey = exports.stringifySequenceSubscriptionKey = exports.optimisticUpdateForEffectCodeValues = exports.optimisticUpdateForCodeValues = exports.stringifyDefaultProps = exports.getFieldsToShow = exports.getEffectFieldsToShow = exports.SCHEMA_FIELD_ROW_HEIGHT = exports.packages = exports.installableMap = exports.extraPackages = exports.descriptions = exports.apiDocs = exports.DEFAULT_TIMELINE_TRACKS = exports.hotMiddlewareOptions = exports.getProjectName = exports.getLocationFromBuildError = exports.getAllSchemaKeys = exports.getDefaultOutLocation = exports.formatBytes = exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = exports.stripAnsi = exports.splitAnsi = void 0;
4
4
  const ansi_1 = require("./ansi");
5
5
  Object.defineProperty(exports, "splitAnsi", { enumerable: true, get: function () { return ansi_1.splitAnsi; } });
6
6
  Object.defineProperty(exports, "stripAnsi", { enumerable: true, get: function () { return ansi_1.stripAnsi; } });
@@ -10,6 +10,8 @@ const format_bytes_1 = require("./format-bytes");
10
10
  Object.defineProperty(exports, "formatBytes", { enumerable: true, get: function () { return format_bytes_1.formatBytes; } });
11
11
  const get_default_out_name_1 = require("./get-default-out-name");
12
12
  Object.defineProperty(exports, "getDefaultOutLocation", { enumerable: true, get: function () { return get_default_out_name_1.getDefaultOutLocation; } });
13
+ const get_all_keys_1 = require("./get-all-keys");
14
+ Object.defineProperty(exports, "getAllSchemaKeys", { enumerable: true, get: function () { return get_all_keys_1.getAllSchemaKeys; } });
13
15
  const get_location_from_build_error_1 = require("./get-location-from-build-error");
14
16
  Object.defineProperty(exports, "getLocationFromBuildError", { enumerable: true, get: function () { return get_location_from_build_error_1.getLocationFromBuildError; } });
15
17
  const get_project_name_1 = require("./get-project-name");
@@ -26,9 +28,15 @@ Object.defineProperty(exports, "installableMap", { enumerable: true, get: functi
26
28
  Object.defineProperty(exports, "packages", { enumerable: true, get: function () { return package_info_1.packages; } });
27
29
  const schema_field_info_1 = require("./schema-field-info");
28
30
  Object.defineProperty(exports, "SCHEMA_FIELD_ROW_HEIGHT", { enumerable: true, get: function () { return schema_field_info_1.SCHEMA_FIELD_ROW_HEIGHT; } });
29
- Object.defineProperty(exports, "UNSUPPORTED_FIELD_ROW_HEIGHT", { enumerable: true, get: function () { return schema_field_info_1.UNSUPPORTED_FIELD_ROW_HEIGHT; } });
31
+ Object.defineProperty(exports, "getEffectFieldsToShow", { enumerable: true, get: function () { return schema_field_info_1.getEffectFieldsToShow; } });
30
32
  Object.defineProperty(exports, "getFieldsToShow", { enumerable: true, get: function () { return schema_field_info_1.getFieldsToShow; } });
31
- const source_map_endpoint_1 = require("./source-map-endpoint");
32
- Object.defineProperty(exports, "SOURCE_MAP_ENDPOINT", { enumerable: true, get: function () { return source_map_endpoint_1.SOURCE_MAP_ENDPOINT; } });
33
33
  const stringify_default_props_1 = require("./stringify-default-props");
34
34
  Object.defineProperty(exports, "stringifyDefaultProps", { enumerable: true, get: function () { return stringify_default_props_1.stringifyDefaultProps; } });
35
+ const optimistic_update_for_code_values_1 = require("./optimistic-update-for-code-values");
36
+ Object.defineProperty(exports, "optimisticUpdateForCodeValues", { enumerable: true, get: function () { return optimistic_update_for_code_values_1.optimisticUpdateForCodeValues; } });
37
+ const optimistic_update_for_effect_code_values_1 = require("./optimistic-update-for-effect-code-values");
38
+ Object.defineProperty(exports, "optimisticUpdateForEffectCodeValues", { enumerable: true, get: function () { return optimistic_update_for_effect_code_values_1.optimisticUpdateForEffectCodeValues; } });
39
+ const stringify_sequence_subscription_key_1 = require("./stringify-sequence-subscription-key");
40
+ Object.defineProperty(exports, "stringifySequenceSubscriptionKey", { enumerable: true, get: function () { return stringify_sequence_subscription_key_1.stringifySequenceSubscriptionKey; } });
41
+ const stringify_sequence_subscription_key_2 = require("./stringify-sequence-subscription-key");
42
+ Object.defineProperty(exports, "stringifySequenceExpandedRowKey", { enumerable: true, get: function () { return stringify_sequence_subscription_key_2.stringifySequenceExpandedRowKey; } });
@@ -0,0 +1,7 @@
1
+ import { type CanUpdateSequencePropsResponse, type SequenceSchema } from 'remotion';
2
+ export declare const optimisticUpdateForCodeValues: ({ previous, fieldKey, value, schema, }: {
3
+ previous: CanUpdateSequencePropsResponse;
4
+ fieldKey: string;
5
+ value: unknown;
6
+ schema: SequenceSchema;
7
+ }) => CanUpdateSequencePropsResponse;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optimisticUpdateForCodeValues = void 0;
4
+ const no_react_1 = require("remotion/no-react");
5
+ const optimisticUpdateForCodeValues = ({ previous, fieldKey, value, schema, }) => {
6
+ var _a;
7
+ if (!previous.canUpdate) {
8
+ return previous;
9
+ }
10
+ const props = {
11
+ ...previous.props,
12
+ [fieldKey]: { canUpdate: true, codeValue: value },
13
+ };
14
+ if (((_a = schema[fieldKey]) === null || _a === void 0 ? void 0 : _a.type) === 'enum') {
15
+ const propsToDelete = no_react_1.NoReactInternals.findPropsToDelete({
16
+ schema,
17
+ key: fieldKey,
18
+ value,
19
+ });
20
+ for (const propToDelete of propsToDelete) {
21
+ delete props[propToDelete];
22
+ }
23
+ }
24
+ return {
25
+ canUpdate: true,
26
+ props,
27
+ effects: previous.effects,
28
+ };
29
+ };
30
+ exports.optimisticUpdateForCodeValues = optimisticUpdateForCodeValues;
@@ -0,0 +1,8 @@
1
+ import { type CanUpdateSequencePropsResponse, type SequenceSchema } from 'remotion';
2
+ export declare const optimisticUpdateForEffectCodeValues: ({ previous, effectIndex, fieldKey, value, schema, }: {
3
+ previous: CanUpdateSequencePropsResponse;
4
+ effectIndex: number;
5
+ fieldKey: string;
6
+ value: unknown;
7
+ schema: SequenceSchema;
8
+ }) => CanUpdateSequencePropsResponse;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.optimisticUpdateForEffectCodeValues = void 0;
4
+ const no_react_1 = require("remotion/no-react");
5
+ const optimisticUpdateForEffectCodeValues = ({ previous, effectIndex, fieldKey, value, schema, }) => {
6
+ var _a;
7
+ if (!previous.canUpdate) {
8
+ return previous;
9
+ }
10
+ const targetIndex = previous.effects.findIndex((e) => e.effectIndex === effectIndex);
11
+ if (targetIndex === -1) {
12
+ return previous;
13
+ }
14
+ const target = previous.effects[targetIndex];
15
+ if (!target.canUpdate) {
16
+ return previous;
17
+ }
18
+ const props = {
19
+ ...target.props,
20
+ [fieldKey]: { canUpdate: true, codeValue: value },
21
+ };
22
+ if (((_a = schema[fieldKey]) === null || _a === void 0 ? void 0 : _a.type) === 'enum') {
23
+ const propsToDelete = no_react_1.NoReactInternals.findPropsToDelete({
24
+ schema,
25
+ key: fieldKey,
26
+ value,
27
+ });
28
+ for (const propToDelete of propsToDelete) {
29
+ delete props[propToDelete];
30
+ }
31
+ }
32
+ const updatedEffect = {
33
+ ...target,
34
+ props,
35
+ };
36
+ const effects = [...previous.effects];
37
+ effects[targetIndex] = updatedEffect;
38
+ return {
39
+ ...previous,
40
+ effects,
41
+ };
42
+ };
43
+ exports.optimisticUpdateForEffectCodeValues = optimisticUpdateForEffectCodeValues;
@@ -1,4 +1,4 @@
1
- export declare const packages: readonly ["svg-3d-engine", "animation-utils", "animated-emoji", "astro-example", "babel-loader", "bugs", "brand", "bundler", "cli", "cloudrun", "codex-plugin", "compositor-darwin-arm64", "compositor-darwin-x64", "compositor-linux-arm64-gnu", "compositor-linux-arm64-musl", "compositor-linux-x64-gnu", "compositor-linux-x64-musl", "compositor-win32-x64-msvc", "core", "create-video", "discord-poster", "docusaurus-plugin", "docs", "enable-scss", "eslint-config", "eslint-config-flat", "eslint-config-internal", "eslint-plugin", "example-without-zod", "example", "fonts", "gif", "google-fonts", "install-whisper-cpp", "it-tests", "react18-tests", "lambda-go-example", "lambda-go", "lambda-php", "lambda-ruby", "lambda-python", "lambda", "lambda-client", "layout-utils", "rounded-text-box", "licensing", "lottie", "mcp", "media-utils", "motion-blur", "noise", "paths", "player-a11y", "player-example", "player", "preload", "renderer", "rive", "shapes", "skia", "promo-pages", "streaming", "serverless", "serverless-client", "skills", "studio-server", "studio-shared", "studio", "tailwind", "tailwind-v4", "timeline-utils", "test-utils", "three", "transitions", "media-parser", "zod-types", "zod-types-v3", "webcodecs", "convert", "captions", "openai-whisper", "elevenlabs", "compositor", "example-videos", "whisper-web", "media", "web-renderer", "design", "light-leaks", "starburst", "vercel", "sfx", "effects"];
1
+ export declare const packages: readonly ["svg-3d-engine", "animation-utils", "animated-emoji", "astro-example", "babel-loader", "bugs", "brand", "bundler", "cli", "cloudrun", "codex-plugin", "compositor-darwin-arm64", "compositor-darwin-x64", "compositor-linux-arm64-gnu", "compositor-linux-arm64-musl", "compositor-linux-x64-gnu", "compositor-linux-x64-musl", "compositor-win32-x64-msvc", "core", "create-video", "discord-poster", "docusaurus-plugin", "docs", "enable-scss", "eslint-config", "eslint-config-flat", "eslint-config-internal", "eslint-plugin", "example-without-zod", "example", "fonts", "gif", "google-fonts", "install-whisper-cpp", "it-tests", "react18-tests", "lambda-go-example", "lambda-go", "lambda-php", "lambda-ruby", "lambda-python", "lambda", "lambda-client", "layout-utils", "rounded-text-box", "licensing", "lottie", "mcp", "media-utils", "motion-blur", "noise", "paths", "player-a11y", "player-example", "player", "preload", "renderer", "rive", "shapes", "skia", "promo-pages", "streaming", "serverless", "serverless-client", "skills", "skills-evals", "studio-server", "studio-shared", "studio", "tailwind", "tailwind-v4", "timeline-utils", "test-utils", "three", "transitions", "media-parser", "zod-types", "zod-types-v3", "webcodecs", "convert", "captions", "openai-whisper", "elevenlabs", "compositor", "example-videos", "whisper-web", "media", "web-renderer", "design", "light-leaks", "starburst", "vercel", "sfx", "effects"];
2
2
  export type Pkgs = (typeof packages)[number];
3
3
  export type ExtraPackage = {
4
4
  name: string;
@@ -67,6 +67,7 @@ exports.packages = [
67
67
  'serverless',
68
68
  'serverless-client',
69
69
  'skills',
70
+ 'skills-evals',
70
71
  'studio-server',
71
72
  'studio-shared',
72
73
  'studio',
@@ -99,13 +100,13 @@ exports.packages = [
99
100
  exports.extraPackages = [
100
101
  {
101
102
  name: 'mediabunny',
102
- version: '1.42.0',
103
+ version: '1.45.0',
103
104
  description: 'Multimedia library used by Remotion',
104
105
  docsUrl: 'https://www.remotion.dev/docs/mediabunny/version',
105
106
  },
106
107
  {
107
108
  name: '@mediabunny/ac3',
108
- version: '1.42.0',
109
+ version: '1.45.0',
109
110
  description: 'AC-3 and E-AC-3 audio codec support for Mediabunny',
110
111
  docsUrl: 'https://www.remotion.dev/docs/mediabunny/formats#ac-3-and-e-ac-3',
111
112
  },
@@ -187,6 +188,7 @@ exports.descriptions = {
187
188
  'lambda-ruby': null,
188
189
  'player-example': null,
189
190
  skills: null,
191
+ 'skills-evals': null,
190
192
  'discord-poster': null,
191
193
  'docusaurus-plugin': null,
192
194
  'animated-emoji': 'Google Fonts Animated Emojis as Remotion components',
@@ -275,6 +277,7 @@ exports.installableMap = {
275
277
  shapes: true,
276
278
  skia: true,
277
279
  skills: false,
280
+ 'skills-evals': false,
278
281
  'promo-pages': false,
279
282
  streaming: false,
280
283
  serverless: false,
@@ -378,6 +381,7 @@ exports.apiDocs = {
378
381
  streaming: null,
379
382
  serverless: null,
380
383
  skills: null,
384
+ 'skills-evals': null,
381
385
  studio: 'https://www.remotion.dev/docs/studio/api',
382
386
  'timeline-utils': null,
383
387
  transitions: 'https://www.remotion.dev/transitions',
@@ -1,20 +1,29 @@
1
- import type { CodeValues, DragOverrides, SequenceControls, SequenceFieldSchema, SequenceSchema, GetDragOverrides, GetCodeValues, SequenceNodePath } from 'remotion';
1
+ import type { CodeValues, DragOverrides, SequenceControls, VisibleFieldSchema, SequenceSchema, GetDragOverrides, SequencePropsSubscriptionKey, EffectDefinition } from 'remotion';
2
2
  export type { CodeValues, DragOverrides, SequenceControls };
3
3
  export type SchemaFieldInfo = {
4
4
  key: string;
5
5
  description: string | undefined;
6
- typeName: string;
7
- supported: boolean;
6
+ typeName: SupportedSchemaType;
8
7
  rowHeight: number;
9
- currentRuntimeValue: unknown;
10
- fieldSchema: SequenceFieldSchema;
8
+ fieldSchema: VisibleFieldSchema;
11
9
  };
10
+ export type SequenceSchemaFieldInfo = SchemaFieldInfo & {
11
+ readonly kind: 'sequence-field';
12
+ };
13
+ export type EffectSchemaFieldInfo = SchemaFieldInfo & {
14
+ readonly kind: 'effect-field';
15
+ readonly effectIndex: number;
16
+ readonly effectSchema: SequenceSchema;
17
+ };
18
+ export type AnySchemaFieldInfo = SequenceSchemaFieldInfo | EffectSchemaFieldInfo;
12
19
  export declare const SCHEMA_FIELD_ROW_HEIGHT = 22;
13
- export declare const UNSUPPORTED_FIELD_ROW_HEIGHT = 22;
14
- export declare const getFieldsToShow: ({ getDragOverrides, getCodeValues, nodePath, schema, currentRuntimeValueDotNotation, }: {
20
+ declare const SUPPORTED_SCHEMA_TYPES: readonly ["number", "boolean", "rotation", "translate", "color", "enum", "hidden"];
21
+ type SupportedSchemaType = (typeof SUPPORTED_SCHEMA_TYPES)[number];
22
+ export declare const getFieldsToShow: ({ getDragOverrides, codeValues, nodePath, schema, currentRuntimeValueDotNotation, }: {
15
23
  schema: SequenceSchema;
16
24
  currentRuntimeValueDotNotation: Record<string, unknown>;
17
25
  getDragOverrides: GetDragOverrides;
18
- getCodeValues: GetCodeValues;
19
- nodePath: SequenceNodePath;
20
- }) => SchemaFieldInfo[] | null;
26
+ codeValues: CodeValues;
27
+ nodePath: SequencePropsSubscriptionKey;
28
+ }) => SequenceSchemaFieldInfo[] | null;
29
+ export declare const getEffectFieldsToShow: (effect: EffectDefinition<unknown>, effectIndex: number) => EffectSchemaFieldInfo[];
@@ -1,38 +1,72 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFieldsToShow = exports.UNSUPPORTED_FIELD_ROW_HEIGHT = exports.SCHEMA_FIELD_ROW_HEIGHT = void 0;
3
+ exports.getEffectFieldsToShow = exports.getFieldsToShow = exports.SCHEMA_FIELD_ROW_HEIGHT = void 0;
4
4
  const remotion_1 = require("remotion");
5
+ const no_react_1 = require("remotion/no-react");
5
6
  exports.SCHEMA_FIELD_ROW_HEIGHT = 22;
6
- exports.UNSUPPORTED_FIELD_ROW_HEIGHT = 22;
7
- const SUPPORTED_SCHEMA_TYPES = new Set([
7
+ const SUPPORTED_SCHEMA_TYPES = [
8
8
  'number',
9
9
  'boolean',
10
10
  'rotation',
11
11
  'translate',
12
+ 'color',
12
13
  'enum',
13
- ]);
14
- const getFieldsToShow = ({ getDragOverrides, getCodeValues, nodePath, schema, currentRuntimeValueDotNotation, }) => {
15
- const valuesDotNotation = remotion_1.Internals.computeEffectiveSchemaValuesDotNotation({
14
+ 'hidden',
15
+ ];
16
+ const getFieldsToShow = ({ getDragOverrides, codeValues, nodePath, schema, currentRuntimeValueDotNotation, }) => {
17
+ const { merged: valuesDotNotation } = remotion_1.Internals.computeEffectiveSchemaValuesDotNotation({
16
18
  schema,
17
19
  currentValue: currentRuntimeValueDotNotation,
18
20
  overrideValues: getDragOverrides(nodePath),
19
- propStatus: getCodeValues(nodePath),
21
+ propStatus: remotion_1.Internals.getCodeValuesCtx(codeValues, nodePath),
20
22
  });
21
23
  const activeSchema = remotion_1.Internals.flattenActiveSchema(schema, (key) => valuesDotNotation[key]);
22
- return Object.entries(activeSchema).map(([key, fieldSchema]) => {
24
+ return Object.entries(activeSchema)
25
+ .map(([key, fieldSchema]) => {
23
26
  const typeName = fieldSchema.type;
24
- const supported = SUPPORTED_SCHEMA_TYPES.has(typeName);
27
+ if (SUPPORTED_SCHEMA_TYPES.indexOf(typeName) === -1) {
28
+ throw new Error(`Unsupported field type: ${typeName}`);
29
+ }
30
+ if (typeName === 'hidden') {
31
+ return null;
32
+ }
25
33
  return {
34
+ kind: 'sequence-field',
26
35
  key,
27
36
  description: fieldSchema.description,
28
37
  typeName,
29
- supported,
30
- rowHeight: supported
31
- ? exports.SCHEMA_FIELD_ROW_HEIGHT
32
- : exports.UNSUPPORTED_FIELD_ROW_HEIGHT,
33
- currentRuntimeValue: currentRuntimeValueDotNotation[key],
38
+ rowHeight: exports.SCHEMA_FIELD_ROW_HEIGHT,
34
39
  fieldSchema,
35
40
  };
36
- });
41
+ })
42
+ .filter(no_react_1.NoReactInternals.truthy);
37
43
  };
38
44
  exports.getFieldsToShow = getFieldsToShow;
45
+ const getEffectFieldsToShow = (effect, effectIndex) => {
46
+ const effectSchema = effect.schema;
47
+ if (!effectSchema) {
48
+ return [];
49
+ }
50
+ return Object.entries(effectSchema)
51
+ .map(([key, fieldSchema]) => {
52
+ const typeName = fieldSchema.type;
53
+ if (typeName === 'hidden') {
54
+ return null;
55
+ }
56
+ if (SUPPORTED_SCHEMA_TYPES.indexOf(typeName) === -1) {
57
+ throw new Error(`Unsupported field type: ${typeName}`);
58
+ }
59
+ return {
60
+ kind: 'effect-field',
61
+ key,
62
+ description: fieldSchema.description,
63
+ typeName,
64
+ rowHeight: exports.SCHEMA_FIELD_ROW_HEIGHT,
65
+ fieldSchema,
66
+ effectSchema,
67
+ effectIndex,
68
+ };
69
+ })
70
+ .filter(no_react_1.NoReactInternals.truthy);
71
+ };
72
+ exports.getEffectFieldsToShow = getEffectFieldsToShow;
@@ -0,0 +1,3 @@
1
+ import type { SequencePropsSubscriptionKey } from 'remotion';
2
+ export declare const stringifySequenceSubscriptionKey: (key: SequencePropsSubscriptionKey) => string;
3
+ export declare const stringifySequenceExpandedRowKey: (key: SequencePropsSubscriptionKey) => string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stringifySequenceExpandedRowKey = exports.stringifySequenceSubscriptionKey = void 0;
4
+ const stringifySequenceSubscriptionKey = (key) => {
5
+ return `${key.absolutePath}:${JSON.stringify(key.nodePath)}:${key.sequenceKeys.join('\0')}:${key.effectKeys.map((keys) => keys.join('\0')).join('\0\0')}`;
6
+ };
7
+ exports.stringifySequenceSubscriptionKey = stringifySequenceSubscriptionKey;
8
+ // deliberately not including effect keys, keeping expanded if changing effects
9
+ const stringifySequenceExpandedRowKey = (key) => {
10
+ return `${key.absolutePath}:${JSON.stringify(key.nodePath)}:${key.sequenceKeys.join('\0')}`;
11
+ };
12
+ exports.stringifySequenceExpandedRowKey = stringifySequenceExpandedRowKey;
package/package.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio-shared"
4
4
  },
5
5
  "name": "@remotion/studio-shared",
6
- "version": "4.0.460",
6
+ "version": "4.0.462",
7
7
  "description": "Internal package for shared objects between the Studio backend and frontend",
8
8
  "main": "dist",
9
- "sideEffects": false,
10
9
  "scripts": {
11
10
  "lint": "eslint src",
11
+ "test": "bun test src",
12
12
  "formatting": "oxfmt src --check",
13
13
  "format": "oxfmt src",
14
14
  "make": "tsgo -d"
@@ -20,11 +20,11 @@
20
20
  "url": "https://github.com/remotion-dev/remotion/issues"
21
21
  },
22
22
  "dependencies": {
23
- "remotion": "4.0.460"
23
+ "remotion": "4.0.462"
24
24
  },
25
25
  "devDependencies": {
26
- "@remotion/renderer": "4.0.460",
27
- "@remotion/eslint-config-internal": "4.0.460",
26
+ "@remotion/renderer": "4.0.462",
27
+ "@remotion/eslint-config-internal": "4.0.462",
28
28
  "eslint": "9.19.0",
29
29
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
30
30
  },