@remotion/studio-shared 4.0.500 → 4.0.501

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.
@@ -259,8 +259,32 @@ export type SaveSequencePropEdit = {
259
259
  schema: InteractivitySchema;
260
260
  sourceEdit: SaveSequencePropSourceEdit | null;
261
261
  };
262
+ export type CaptionPatch = {
263
+ index: number;
264
+ before: {
265
+ text: string;
266
+ startMs: number;
267
+ endMs: number;
268
+ timestampMs: number | null;
269
+ confidence: number | null;
270
+ };
271
+ changes: Partial<{
272
+ text: string;
273
+ startMs: number;
274
+ endMs: number;
275
+ timestampMs: number | null;
276
+ confidence: number | null;
277
+ }>;
278
+ };
279
+ export type SaveInlineCaptionPatchesRequest = {
280
+ fileName: string;
281
+ nodePath: SequencePropsSubscriptionKey;
282
+ schema: InteractivitySchema;
283
+ patches: CaptionPatch[];
284
+ };
262
285
  export type SaveSequencePropsRequest = {
263
286
  edits: SaveSequencePropEdit[];
287
+ captionPatches?: SaveInlineCaptionPatchesRequest[];
264
288
  addedKeyframes: AddSequenceKeyframe[] | null;
265
289
  movedKeyframes: {
266
290
  sequenceKeyframes: MoveSequenceKeyframe[];
@@ -636,11 +660,22 @@ export type InsertElementRequest = {
636
660
  element: ElementDragData['element'];
637
661
  from: number | null;
638
662
  position: InsertableCompositionElementPosition | null;
663
+ overwriteExisting: boolean;
664
+ };
665
+ export type InsertElementFileConflict = {
666
+ filePath: string;
667
+ existingSource: string;
668
+ incomingSource: string;
639
669
  };
640
670
  export type InsertElementResponse = {
641
671
  success: true;
642
672
  } | {
643
673
  success: false;
674
+ type: 'file-conflict';
675
+ conflict: InsertElementFileConflict;
676
+ } | {
677
+ success: false;
678
+ type: 'error';
644
679
  reason: string;
645
680
  stack: string;
646
681
  };
@@ -0,0 +1,28 @@
1
+ import type { CompositionComponentInfoRequest, CompositionComponentInfoResponse, DeleteStaticFileRequest, DeleteStaticFileResponse, FindInFileRequest, FindInFileResponse, InsertJsxElementRequest, InsertJsxElementResponse, RedoResponse, RenameStaticFileRequest, RenameStaticFileResponse, UndoResponse } from './api-requests';
2
+ import type { EventSourceEvent } from './event-source-event';
3
+ export type WriteStaticFileRequest = {
4
+ contents: string | ArrayBuffer;
5
+ filePath: string;
6
+ };
7
+ export type BrowserStudioOperations = {
8
+ deleteStaticFile: (request: DeleteStaticFileRequest) => Promise<DeleteStaticFileResponse>;
9
+ downloadProject: () => Promise<{
10
+ data: Uint8Array;
11
+ fileName: string;
12
+ }>;
13
+ findInFile: (request: FindInFileRequest) => Promise<FindInFileResponse>;
14
+ getFileSource: (fileName: string) => Promise<string | null>;
15
+ getCompositionFile: (compositionId: string) => string | null;
16
+ getCompositionComponentInfo: (request: CompositionComponentInfoRequest) => Promise<CompositionComponentInfoResponse>;
17
+ insertSolid: (request: InsertJsxElementRequest) => Promise<InsertJsxElementResponse>;
18
+ redo: () => Promise<RedoResponse>;
19
+ renameStaticFile: (request: RenameStaticFileRequest) => Promise<RenameStaticFileResponse>;
20
+ subscribeToEvent: (listener: (event: EventSourceEvent) => void) => () => void;
21
+ undo: () => Promise<UndoResponse>;
22
+ writeStaticFile: (request: WriteStaticFileRequest) => Promise<void>;
23
+ };
24
+ declare global {
25
+ interface Window {
26
+ remotion_browserStudio?: BrowserStudioOperations;
27
+ }
28
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { splitAnsi, stripAnsi } from './ansi';
2
- export { AddEffectKeyframeRequest, AddEffectKeyframeResponse, AddEffectRequest, AddEffectResponse, AddKeyframesRequest, AddKeyframesResponse, AddRenderRequest, AddSequenceKeyframeRequest, AddSequenceKeyframeResponse, ApiRoutes, ApplyCodemodRequest, ApplyCodemodResponse, ApplyVisualControlRequest, ApplyVisualControlResponse, BatchUpdateEffectKeyframeSettings, BatchUpdateKeyframeSettingsRequest, BatchUpdateKeyframeSettingsResponse, BatchUpdateSequenceKeyframeSettings, CanUpdateDefaultPropsResponse, CanUpdateSequencePropsRequest, CancelRenderRequest, CancelRenderResponse, CompositionComponentInfoRequest, CompositionComponentInfoResponse, ConvertFigmaClipboardToSvgRequest, ConvertFigmaClipboardToSvgResponse, CopyStillToClipboardRequest, DeleteEffectKeyframe, DeleteEffectRequest, DeleteEffectRequestItem, DeleteEffectResponse, DeleteJsxNodeRequest, DeleteJsxNodeRequestItem, DeleteJsxNodeResponse, DeleteKeyframesRequest, DeleteKeyframesResponse, DeleteSequenceKeyframe, DeleteStaticFileRequest, DeleteStaticFileResponse, DownloadRemoteAssetRequest, DownloadRemoteAssetResponse, DuplicateEffectRequest, DuplicateEffectRequestItem, DuplicateEffectResponse, DuplicateJsxNodeRequest, DuplicateJsxNodeResponse, ElementInstallRequest, FindInFileRequest, FindInFileResponse, GoogleFontSourceEdit, InsertElementRequest, InsertElementResponse, InsertJsxElementRequest, InsertJsxElementResponse, InsertableCompositionElement, InsertableCompositionElementPosition, InstallPackageRequest, InstallPackageResponse, LogStudioErrorRequest, LogStudioErrorResponse, MoveEffectKeyframe, MoveKeyframesRequest, MoveKeyframesResponse, MoveSequenceKeyframe, OpenInEditorRequest, OpenInEditorResponse, OpenInFileExplorerRequest, PasteEffectsRequest, PasteEffectsResponse, ProjectInfoRequest, ProjectInfoResponse, RedoRequest, RedoResponse, RemoveRenderRequest, RenameStaticFileRequest, RenameStaticFileResponse, ReorderEffectRequest, ReorderEffectResponse, ReorderSequencePosition, ReorderSequenceRequest, ReorderSequenceResponse, RestartStudioRequest, RestartStudioResponse, SaveEffectPropsRequest, SaveEffectPropsResponse, SaveMultipleEffectPropsEdit, SaveMultipleEffectPropsRequest, SaveMultipleEffectPropsResponse, SaveMultipleEffectPropsResult, SaveSequencePropEdit, SaveSequencePropSourceEdit, SaveSequencePropsRequest, SaveSequencePropsResponse, SaveSequencePropsResult, SimpleDiff, SplitJsxSequenceRequest, SplitJsxSequenceResponse, SubscribeToDefaultPropsRequest, SubscribeToDefaultPropsResponse, SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse, SubscribeToSequencePropsRequest, SubscribeToSequencePropsResponse, UndoRequest, UndoResponse, UnsubscribeFromDefaultPropsRequest, UnsubscribeFromFileExistenceRequest, UnsubscribeFromSequencePropsRequest, UpdateAvailableRequest, UpdateAvailableResponse, UpdateDefaultPropsRequest, UpdateDefaultPropsResponse, UpdateEffectKeyframeSettingsRequest, UpdateEffectKeyframeSettingsResponse, UpdateElementInstallTargetRequest, UpdateElementInstallTargetResponse, UpdatePublicLicenseRequest, UpdatePublicLicenseResponse, UpdateSequenceKeyframeSettingsRequest, UpdateSequenceKeyframeSettingsResponse, type AddEffectKeyframe, type AddSequenceKeyframe, type KeyframeSettings, } from './api-requests';
2
+ export type { BrowserStudioOperations } from './browser-studio-operations';
3
+ export { AddEffectKeyframeRequest, AddEffectKeyframeResponse, AddEffectRequest, AddEffectResponse, AddKeyframesRequest, AddKeyframesResponse, AddRenderRequest, AddSequenceKeyframeRequest, AddSequenceKeyframeResponse, ApiRoutes, ApplyCodemodRequest, ApplyCodemodResponse, ApplyVisualControlRequest, ApplyVisualControlResponse, BatchUpdateEffectKeyframeSettings, BatchUpdateKeyframeSettingsRequest, BatchUpdateKeyframeSettingsResponse, BatchUpdateSequenceKeyframeSettings, CanUpdateDefaultPropsResponse, CanUpdateSequencePropsRequest, CaptionPatch, CancelRenderRequest, CancelRenderResponse, CompositionComponentInfoRequest, CompositionComponentInfoResponse, ConvertFigmaClipboardToSvgRequest, ConvertFigmaClipboardToSvgResponse, CopyStillToClipboardRequest, DeleteEffectKeyframe, DeleteEffectRequest, DeleteEffectRequestItem, DeleteEffectResponse, DeleteJsxNodeRequest, DeleteJsxNodeRequestItem, DeleteJsxNodeResponse, DeleteKeyframesRequest, DeleteKeyframesResponse, DeleteSequenceKeyframe, DeleteStaticFileRequest, DeleteStaticFileResponse, DownloadRemoteAssetRequest, DownloadRemoteAssetResponse, DuplicateEffectRequest, DuplicateEffectRequestItem, DuplicateEffectResponse, DuplicateJsxNodeRequest, DuplicateJsxNodeResponse, ElementInstallRequest, FindInFileRequest, FindInFileResponse, GoogleFontSourceEdit, InsertElementFileConflict, InsertElementRequest, InsertElementResponse, InsertJsxElementRequest, InsertJsxElementResponse, InsertableCompositionElement, InsertableCompositionElementPosition, InstallPackageRequest, InstallPackageResponse, LogStudioErrorRequest, LogStudioErrorResponse, MoveEffectKeyframe, MoveKeyframesRequest, MoveKeyframesResponse, MoveSequenceKeyframe, OpenInEditorRequest, OpenInEditorResponse, OpenInFileExplorerRequest, PasteEffectsRequest, PasteEffectsResponse, ProjectInfoRequest, ProjectInfoResponse, RedoRequest, RedoResponse, RemoveRenderRequest, RenameStaticFileRequest, RenameStaticFileResponse, ReorderEffectRequest, ReorderEffectResponse, ReorderSequencePosition, ReorderSequenceRequest, ReorderSequenceResponse, RestartStudioRequest, RestartStudioResponse, SaveEffectPropsRequest, SaveEffectPropsResponse, SaveMultipleEffectPropsEdit, SaveMultipleEffectPropsRequest, SaveMultipleEffectPropsResponse, SaveMultipleEffectPropsResult, SaveInlineCaptionPatchesRequest, SaveSequencePropEdit, SaveSequencePropSourceEdit, SaveSequencePropsRequest, SaveSequencePropsResponse, SaveSequencePropsResult, SimpleDiff, SplitJsxSequenceRequest, SplitJsxSequenceResponse, SubscribeToDefaultPropsRequest, SubscribeToDefaultPropsResponse, SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse, SubscribeToSequencePropsRequest, SubscribeToSequencePropsResponse, UndoRequest, UndoResponse, UnsubscribeFromDefaultPropsRequest, UnsubscribeFromFileExistenceRequest, UnsubscribeFromSequencePropsRequest, UpdateAvailableRequest, UpdateAvailableResponse, UpdateDefaultPropsRequest, UpdateDefaultPropsResponse, UpdateEffectKeyframeSettingsRequest, UpdateEffectKeyframeSettingsResponse, UpdateElementInstallTargetRequest, UpdateElementInstallTargetResponse, UpdatePublicLicenseRequest, UpdatePublicLicenseResponse, UpdateSequenceKeyframeSettingsRequest, UpdateSequenceKeyframeSettingsResponse, type AddEffectKeyframe, type AddSequenceKeyframe, type KeyframeSettings, } from './api-requests';
3
4
  export type { ApplyVisualControlCodemod, RecastCodemod } from './codemods';
4
5
  export { compositionDragDataToSymbolicatedStack } from './composition-drag-data';
5
6
  export { DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS } from './default-buffer-state-delay-in-milliseconds';
@@ -30,6 +31,7 @@ export { getRequiredPackageForEffectImportPath, getRequiredPackageForInsertableE
30
31
  export { SCHEMA_FIELD_GROUPS, SCHEMA_FIELD_ROW_HEIGHT, getEffectFieldsToShow, getFieldsToShow, getSchemaFieldGroup, } from './schema-field-info';
31
32
  export type { AnySchemaFieldInfo, DragOverrides, EffectSchemaFieldInfo, InteractivitySchemaFieldInfo, PropStatuses, SchemaFieldGroup, SchemaFieldGroupInfo, SchemaFieldInfo, SequenceControls, } from './schema-field-info';
32
33
  export { ScriptLine, SomeStackFrame, StackFrame, SymbolicatedStackFrame, } from './stack-types';
34
+ export { BORDER_RADIUS_LONGHAND_KEYS, BORDER_RADIUS_SHORTHAND_KEY, getStylePropertyLonghandKeys, } from './style-property-relations';
33
35
  export { EnumPath, stringifyDefaultProps } from './stringify-default-props';
34
36
  export { getStudioEntryPoints, type StudioEntryPointPaths, } from './studio-entry-points';
35
37
  export { studioHtml, type StudioHtmlOptions } from './studio-html';
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.DEFAULT_SPRING_EASING = exports.packages = exports.installableMap = exports.extraPackages = exports.descriptions = exports.apiDocs = exports.DEFAULT_TIMELINE_TRACKS = exports.parseKeyframeClipboardDataResult = exports.parseKeyframeClipboardData = exports.isKeyframeClipboardFieldType = exports.keyframeInterpolationFunctions = exports.isSchemaFieldKeyframable = exports.isKeyframeInterpolationFunction = exports.isInteractivitySchemaFieldKeyframable = exports.getKeyframeInterpolationFunctionForSchemaField = exports.getKeyframeInterpolationFunction = exports.canEditEasingForInterpolationFunction = exports.getPolyKeyframeEasing = exports.getOutKeyframeEasing = exports.getBackKeyframeEasing = exports.QUAD_KEYFRAME_EASING = exports.LINEAR_KEYFRAME_EASING = exports.KEYFRAME_EASING_PRESETS = exports.EASE_KEYFRAME_EASING = exports.CUBIC_KEYFRAME_EASING = exports.hotMiddlewareOptions = exports.getProjectName = exports.getLocationFromBuildError = exports.getDefaultOutLocation = exports.getAssetSchemaKeys = exports.getAllSchemaKeys = exports.formatBytes = exports.parseEffectPropClipboardDataResult = exports.parseEffectPropClipboardData = exports.parseEffectClipboardDataResult = exports.parseEffectClipboardData = exports.getEffectPreviewSource = exports.getEffectPreviewAlt = exports.getEffectDocumentationPath = exports.getEffectDocumentationLink = exports.getEffectCatalogCategories = exports.EFFECT_CATALOG = exports.parseEasingClipboardDataResult = exports.parseEasingClipboardData = exports.isImageFileType = exports.detectFileType = exports.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = exports.compositionDragDataToSymbolicatedStack = exports.stripAnsi = exports.splitAnsi = void 0;
18
- exports.isUrl = exports.stringifySequenceSubscriptionKey = exports.stringifySequenceExpandedRowKey = exports.optimisticUpdateSequenceKeyframeSettings = exports.optimisticUpdateEffectKeyframeSettings = exports.optimisticUpdateForPropStatuses = exports.optimisticUpdateForEffectPropStatuses = exports.optimisticMoveSequenceKeyframes = exports.optimisticMoveEffectKeyframes = exports.moveKeyframesInPropStatus = exports.canMoveKeyframesWithoutCollisions = exports.optimisticDeleteSequenceKeyframes = exports.optimisticDeleteSequenceKeyframe = exports.optimisticDeleteEffectKeyframes = exports.optimisticDeleteEffectKeyframe = exports.optimisticAddSequenceKeyframe = exports.optimisticAddEffectKeyframe = exports.studioHtml = exports.getStudioEntryPoints = exports.stringifyDefaultProps = exports.getSchemaFieldGroup = exports.getFieldsToShow = exports.getEffectFieldsToShow = exports.SCHEMA_FIELD_ROW_HEIGHT = exports.SCHEMA_FIELD_GROUPS = exports.isValidPackageName = exports.getRequiredPackageForInsertableElement = exports.getRequiredPackageForEffectImportPath = exports.parseSpringEasingConfig = void 0;
18
+ exports.isUrl = exports.stringifySequenceSubscriptionKey = exports.stringifySequenceExpandedRowKey = exports.optimisticUpdateSequenceKeyframeSettings = exports.optimisticUpdateEffectKeyframeSettings = exports.optimisticUpdateForPropStatuses = exports.optimisticUpdateForEffectPropStatuses = exports.optimisticMoveSequenceKeyframes = exports.optimisticMoveEffectKeyframes = exports.moveKeyframesInPropStatus = exports.canMoveKeyframesWithoutCollisions = exports.optimisticDeleteSequenceKeyframes = exports.optimisticDeleteSequenceKeyframe = exports.optimisticDeleteEffectKeyframes = exports.optimisticDeleteEffectKeyframe = exports.optimisticAddSequenceKeyframe = exports.optimisticAddEffectKeyframe = exports.studioHtml = exports.getStudioEntryPoints = exports.stringifyDefaultProps = exports.getStylePropertyLonghandKeys = exports.BORDER_RADIUS_SHORTHAND_KEY = exports.BORDER_RADIUS_LONGHAND_KEYS = exports.getSchemaFieldGroup = exports.getFieldsToShow = exports.getEffectFieldsToShow = exports.SCHEMA_FIELD_ROW_HEIGHT = exports.SCHEMA_FIELD_GROUPS = exports.isValidPackageName = exports.getRequiredPackageForInsertableElement = exports.getRequiredPackageForEffectImportPath = exports.parseSpringEasingConfig = void 0;
19
19
  const ansi_1 = require("./ansi");
20
20
  Object.defineProperty(exports, "splitAnsi", { enumerable: true, get: function () { return ansi_1.splitAnsi; } });
21
21
  Object.defineProperty(exports, "stripAnsi", { enumerable: true, get: function () { return ansi_1.stripAnsi; } });
@@ -97,6 +97,10 @@ Object.defineProperty(exports, "SCHEMA_FIELD_ROW_HEIGHT", { enumerable: true, ge
97
97
  Object.defineProperty(exports, "getEffectFieldsToShow", { enumerable: true, get: function () { return schema_field_info_1.getEffectFieldsToShow; } });
98
98
  Object.defineProperty(exports, "getFieldsToShow", { enumerable: true, get: function () { return schema_field_info_1.getFieldsToShow; } });
99
99
  Object.defineProperty(exports, "getSchemaFieldGroup", { enumerable: true, get: function () { return schema_field_info_1.getSchemaFieldGroup; } });
100
+ const style_property_relations_1 = require("./style-property-relations");
101
+ Object.defineProperty(exports, "BORDER_RADIUS_LONGHAND_KEYS", { enumerable: true, get: function () { return style_property_relations_1.BORDER_RADIUS_LONGHAND_KEYS; } });
102
+ Object.defineProperty(exports, "BORDER_RADIUS_SHORTHAND_KEY", { enumerable: true, get: function () { return style_property_relations_1.BORDER_RADIUS_SHORTHAND_KEY; } });
103
+ Object.defineProperty(exports, "getStylePropertyLonghandKeys", { enumerable: true, get: function () { return style_property_relations_1.getStylePropertyLonghandKeys; } });
100
104
  const stringify_default_props_1 = require("./stringify-default-props");
101
105
  Object.defineProperty(exports, "stringifyDefaultProps", { enumerable: true, get: function () { return stringify_default_props_1.stringifyDefaultProps; } });
102
106
  const studio_entry_points_1 = require("./studio-entry-points");
@@ -3,6 +3,7 @@ declare const KEYFRAME_CLIPBOARD_FIELD_TYPE_SUPPORT: {
3
3
  readonly array: false;
4
4
  readonly asset: false;
5
5
  readonly boolean: false;
6
+ readonly 'remotion-captions': false;
6
7
  readonly color: true;
7
8
  readonly enum: false;
8
9
  readonly 'font-family': false;
@@ -8,6 +8,7 @@ const KEYFRAME_CLIPBOARD_FIELD_TYPE_SUPPORT = {
8
8
  array: false,
9
9
  asset: false,
10
10
  boolean: false,
11
+ 'remotion-captions': false,
11
12
  color: true,
12
13
  enum: false,
13
14
  'font-family': false,
@@ -11,6 +11,7 @@ const KEYFRAME_FIELD_TYPE_SUPPORT = {
11
11
  array: false,
12
12
  asset: false,
13
13
  boolean: false,
14
+ 'remotion-captions': false,
14
15
  color: true,
15
16
  enum: false,
16
17
  'font-family': false,
@@ -28,6 +29,7 @@ const KEYFRAME_FIELD_TYPE_INTERPOLATION = {
28
29
  array: 'unsupported',
29
30
  asset: 'unsupported',
30
31
  boolean: 'unsupported',
32
+ 'remotion-captions': 'unsupported',
31
33
  color: 'interpolateColors',
32
34
  enum: 'unsupported',
33
35
  'font-family': 'unsupported',
@@ -1,6 +1,6 @@
1
- declare const allPackages: readonly ["svg-3d-engine", "animation-utils", "animated-emoji", "astro-example", "babel-loader", "bugs", "brand", "bundler", "browser-studio", "canvas-capture", "claude-code-plugin", "cli", "cloudrun", "codex-plugin", "kimi-code-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", "remotion-media", "web-renderer", "design", "drag-and-drop", "light-leaks", "rough-notation", "starburst", "vercel", "sfx", "effects"];
1
+ declare const allPackages: readonly ["svg-3d-engine", "animation-utils", "animated-emoji", "astro-example", "babel-loader", "bugs", "brand", "bundler", "browser-studio", "canvas-capture", "claude-code-plugin", "cli", "cloudrun", "codex-plugin", "kimi-code-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-codemods", "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", "remotion-media", "web-renderer", "design", "drag-and-drop", "light-leaks", "rough-notation", "starburst", "vercel", "sfx", "effects"];
2
2
  export type Pkgs = (typeof allPackages)[number];
3
- export declare const packages: ("animated-emoji" | "animation-utils" | "astro-example" | "babel-loader" | "brand" | "browser-studio" | "bugs" | "bundler" | "canvas-capture" | "captions" | "claude-code-plugin" | "cli" | "cloudrun" | "codex-plugin" | "compositor" | "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" | "convert" | "core" | "create-video" | "design" | "discord-poster" | "docs" | "docusaurus-plugin" | "drag-and-drop" | "effects" | "elevenlabs" | "enable-scss" | "eslint-config" | "eslint-config-flat" | "eslint-config-internal" | "eslint-plugin" | "example" | "example-videos" | "example-without-zod" | "fonts" | "gif" | "google-fonts" | "install-whisper-cpp" | "it-tests" | "kimi-code-plugin" | "lambda" | "lambda-client" | "lambda-go" | "lambda-go-example" | "lambda-php" | "lambda-python" | "lambda-ruby" | "layout-utils" | "licensing" | "light-leaks" | "lottie" | "mcp" | "media" | "media-parser" | "media-utils" | "motion-blur" | "noise" | "openai-whisper" | "paths" | "player" | "player-a11y" | "player-example" | "preload" | "promo-pages" | "react18-tests" | "remotion-media" | "renderer" | "rive" | "rough-notation" | "rounded-text-box" | "serverless" | "serverless-client" | "sfx" | "shapes" | "skia" | "skills" | "skills-evals" | "starburst" | "streaming" | "studio" | "studio-server" | "studio-shared" | "svg-3d-engine" | "tailwind" | "tailwind-v4" | "test-utils" | "three" | "timeline-utils" | "transitions" | "vercel" | "web-renderer" | "webcodecs" | "whisper-web" | "zod-types" | "zod-types-v3")[];
3
+ export declare const packages: ("animated-emoji" | "animation-utils" | "astro-example" | "babel-loader" | "brand" | "browser-studio" | "bugs" | "bundler" | "canvas-capture" | "captions" | "claude-code-plugin" | "cli" | "cloudrun" | "codex-plugin" | "compositor" | "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" | "convert" | "core" | "create-video" | "design" | "discord-poster" | "docs" | "docusaurus-plugin" | "drag-and-drop" | "effects" | "elevenlabs" | "enable-scss" | "eslint-config" | "eslint-config-flat" | "eslint-config-internal" | "eslint-plugin" | "example" | "example-videos" | "example-without-zod" | "fonts" | "gif" | "google-fonts" | "install-whisper-cpp" | "it-tests" | "kimi-code-plugin" | "lambda" | "lambda-client" | "lambda-go" | "lambda-go-example" | "lambda-php" | "lambda-python" | "lambda-ruby" | "layout-utils" | "licensing" | "light-leaks" | "lottie" | "mcp" | "media" | "media-parser" | "media-utils" | "motion-blur" | "noise" | "openai-whisper" | "paths" | "player" | "player-a11y" | "player-example" | "preload" | "promo-pages" | "react18-tests" | "remotion-media" | "renderer" | "rive" | "rough-notation" | "rounded-text-box" | "serverless" | "serverless-client" | "sfx" | "shapes" | "skia" | "skills" | "skills-evals" | "starburst" | "streaming" | "studio" | "studio-codemods" | "studio-server" | "studio-shared" | "svg-3d-engine" | "tailwind" | "tailwind-v4" | "test-utils" | "three" | "timeline-utils" | "transitions" | "vercel" | "web-renderer" | "webcodecs" | "whisper-web" | "zod-types" | "zod-types-v3")[];
4
4
  export type ExtraPackage = {
5
5
  name: string;
6
6
  version: string;
@@ -74,6 +74,7 @@ const allPackages = [
74
74
  'serverless-client',
75
75
  'skills',
76
76
  'skills-evals',
77
+ 'studio-codemods',
77
78
  'studio-server',
78
79
  'studio-shared',
79
80
  'studio',
@@ -150,6 +151,7 @@ exports.descriptions = {
150
151
  bundler: 'Bundle Remotion compositions using Webpack',
151
152
  'browser-studio': 'Run Remotion Studio in the browser',
152
153
  'canvas-capture': 'Capture HTML-in-canvas content as a video',
154
+ 'studio-codemods': 'Shared codemods for Remotion Studio',
153
155
  'studio-server': 'Run a Remotion Studio with a server backend',
154
156
  'install-whisper-cpp': 'Helpers for installing and using Whisper.cpp',
155
157
  'whisper-web': 'Helpers for using Whisper.cpp in browser using WASM',
@@ -311,6 +313,7 @@ exports.installableMap = {
311
313
  'promo-pages': false,
312
314
  streaming: false,
313
315
  serverless: false,
316
+ 'studio-codemods': false,
314
317
  'studio-server': false,
315
318
  'studio-shared': false,
316
319
  studio: true,
@@ -367,6 +370,7 @@ exports.apiDocs = {
367
370
  bundler: 'https://www.remotion.dev/docs/bundler',
368
371
  'browser-studio': null,
369
372
  'canvas-capture': null,
373
+ 'studio-codemods': null,
370
374
  'lambda-client': null,
371
375
  'serverless-client': null,
372
376
  'studio-server': null,
@@ -18,7 +18,7 @@ export type EffectSchemaFieldInfo = SchemaFieldInfo & {
18
18
  };
19
19
  export type AnySchemaFieldInfo = InteractivitySchemaFieldInfo | EffectSchemaFieldInfo;
20
20
  export declare const SCHEMA_FIELD_ROW_HEIGHT = 22;
21
- export type SchemaFieldGroup = 'source' | 'controls' | 'transforms' | 'background' | 'border' | 'crop' | 'text' | 'layout';
21
+ export type SchemaFieldGroup = 'source' | 'controls' | 'transforms' | 'background' | 'border' | 'border-radius' | 'crop' | 'text' | 'layout';
22
22
  export type SchemaFieldGroupInfo = {
23
23
  readonly id: SchemaFieldGroup;
24
24
  readonly label: string;
@@ -41,6 +41,9 @@ export declare const SCHEMA_FIELD_GROUPS: readonly [{
41
41
  }, {
42
42
  readonly id: "border";
43
43
  readonly label: "Border";
44
+ }, {
45
+ readonly id: "border-radius";
46
+ readonly label: "Border radius";
44
47
  }, {
45
48
  readonly id: "crop";
46
49
  readonly label: "Crop";
@@ -53,6 +56,7 @@ declare const TIMELINE_SCHEMA_FIELD_TYPE_SUPPORT: {
53
56
  readonly array: true;
54
57
  readonly asset: true;
55
58
  readonly boolean: true;
59
+ readonly 'remotion-captions': false;
56
60
  readonly color: true;
57
61
  readonly enum: true;
58
62
  readonly 'font-family': true;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getEffectFieldsToShow = exports.getFieldsToShow = exports.getSchemaFieldGroup = exports.SCHEMA_FIELD_GROUPS = exports.SCHEMA_FIELD_ROW_HEIGHT = void 0;
4
4
  const remotion_1 = require("remotion");
5
5
  const no_react_1 = require("remotion/no-react");
6
+ const style_property_relations_1 = require("./style-property-relations");
6
7
  exports.SCHEMA_FIELD_ROW_HEIGHT = 22;
7
8
  exports.SCHEMA_FIELD_GROUPS = [
8
9
  { id: 'source', label: 'Source' },
@@ -11,6 +12,7 @@ exports.SCHEMA_FIELD_GROUPS = [
11
12
  { id: 'text', label: 'Text' },
12
13
  { id: 'background', label: 'Background' },
13
14
  { id: 'border', label: 'Border' },
15
+ { id: 'border-radius', label: 'Border radius' },
14
16
  { id: 'crop', label: 'Crop' },
15
17
  { id: 'layout', label: 'Layout' },
16
18
  ];
@@ -31,6 +33,38 @@ const CROP_FIELD_KEYS = new Set([
31
33
  'cropTop',
32
34
  'cropBottom',
33
35
  ]);
36
+ const BORDER_RADIUS_FIELD_KEYS = new Set([
37
+ 'style.borderRadius',
38
+ 'style.borderTopLeftRadius',
39
+ 'style.borderTopRightRadius',
40
+ 'style.borderBottomRightRadius',
41
+ 'style.borderBottomLeftRadius',
42
+ ]);
43
+ const getBorderRadiusFieldKeysToShow = ({ activeSchema, propStatuses, nodePath, }) => {
44
+ if (!(style_property_relations_1.BORDER_RADIUS_SHORTHAND_KEY in activeSchema)) {
45
+ return null;
46
+ }
47
+ const statuses = remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath);
48
+ const shorthand = statuses === null || statuses === void 0 ? void 0 : statuses[style_property_relations_1.BORDER_RADIUS_SHORTHAND_KEY];
49
+ const longhands = style_property_relations_1.BORDER_RADIUS_LONGHAND_KEYS.map((key) => statuses === null || statuses === void 0 ? void 0 : statuses[key]);
50
+ // A supported shorthand is canonical even though the server also reports its
51
+ // expanded longhand values. This keeps one Inspector row and one keyframe track.
52
+ if ((shorthand === null || shorthand === void 0 ? void 0 : shorthand.status) === 'keyframed') {
53
+ return new Set([style_property_relations_1.BORDER_RADIUS_SHORTHAND_KEY]);
54
+ }
55
+ if ((shorthand === null || shorthand === void 0 ? void 0 : shorthand.status) === 'static' && shorthand.codeValue !== undefined) {
56
+ return new Set([style_property_relations_1.BORDER_RADIUS_SHORTHAND_KEY]);
57
+ }
58
+ const hasEditableLonghand = longhands.some((status) => (status === null || status === void 0 ? void 0 : status.status) === 'keyframed' ||
59
+ ((status === null || status === void 0 ? void 0 : status.status) === 'static' && status.codeValue !== undefined));
60
+ if (hasEditableLonghand) {
61
+ return new Set(style_property_relations_1.BORDER_RADIUS_LONGHAND_KEYS);
62
+ }
63
+ // No radius has been authored, an unsupported dynamic shorthand was authored,
64
+ // or shorthand and longhands were mixed. In all three cases, only show the
65
+ // shorthand row so duplicate representations never reach the Inspector/timeline.
66
+ return new Set([style_property_relations_1.BORDER_RADIUS_SHORTHAND_KEY]);
67
+ };
34
68
  const BORDER_FIELD_KEYS = new Set([
35
69
  'style.borderWidth',
36
70
  'style.borderStyle',
@@ -59,6 +93,9 @@ const getSchemaFieldGroup = (key) => {
59
93
  if (CROP_FIELD_KEYS.has(key)) {
60
94
  return 'crop';
61
95
  }
96
+ if (BORDER_RADIUS_FIELD_KEYS.has(key)) {
97
+ return 'border-radius';
98
+ }
62
99
  if (BORDER_FIELD_KEYS.has(key)) {
63
100
  return 'border';
64
101
  }
@@ -90,6 +127,7 @@ const TIMELINE_SCHEMA_FIELD_TYPE_SUPPORT = {
90
127
  array: true,
91
128
  asset: true,
92
129
  boolean: true,
130
+ 'remotion-captions': false,
93
131
  color: true,
94
132
  enum: true,
95
133
  'font-family': true,
@@ -146,8 +184,18 @@ const getFieldsToShow = ({ getDragOverrides, propStatuses, nodePath, schema, cur
146
184
  frame: null,
147
185
  });
148
186
  const activeSchema = remotion_1.Internals.flattenActiveSchema(schema, (key) => valuesDotNotation[key]);
187
+ const borderRadiusFieldKeysToShow = getBorderRadiusFieldKeysToShow({
188
+ activeSchema,
189
+ propStatuses,
190
+ nodePath,
191
+ });
149
192
  const fields = Object.entries(activeSchema)
150
193
  .map(([key, fieldSchema]) => {
194
+ if (BORDER_RADIUS_FIELD_KEYS.has(key) &&
195
+ borderRadiusFieldKeysToShow !== null &&
196
+ !borderRadiusFieldKeysToShow.has(key)) {
197
+ return null;
198
+ }
151
199
  if (!isTimelineSchemaFieldSupported(fieldSchema)) {
152
200
  return null;
153
201
  }
@@ -0,0 +1,3 @@
1
+ export declare const BORDER_RADIUS_SHORTHAND_KEY = "style.borderRadius";
2
+ export declare const BORDER_RADIUS_LONGHAND_KEYS: readonly ["style.borderTopLeftRadius", "style.borderTopRightRadius", "style.borderBottomRightRadius", "style.borderBottomLeftRadius"];
3
+ export declare const getStylePropertyLonghandKeys: (fieldKey: string) => readonly string[];
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStylePropertyLonghandKeys = exports.BORDER_RADIUS_LONGHAND_KEYS = exports.BORDER_RADIUS_SHORTHAND_KEY = void 0;
4
+ exports.BORDER_RADIUS_SHORTHAND_KEY = 'style.borderRadius';
5
+ exports.BORDER_RADIUS_LONGHAND_KEYS = [
6
+ 'style.borderTopLeftRadius',
7
+ 'style.borderTopRightRadius',
8
+ 'style.borderBottomRightRadius',
9
+ 'style.borderBottomLeftRadius',
10
+ ];
11
+ const STYLE_PROPERTY_LONGHANDS = new Map([
12
+ [exports.BORDER_RADIUS_SHORTHAND_KEY, exports.BORDER_RADIUS_LONGHAND_KEYS],
13
+ ]);
14
+ const getStylePropertyLonghandKeys = (fieldKey) => {
15
+ var _a;
16
+ return (_a = STYLE_PROPERTY_LONGHANDS.get(fieldKey)) !== null && _a !== void 0 ? _a : [];
17
+ };
18
+ exports.getStylePropertyLonghandKeys = getStylePropertyLonghandKeys;
package/package.json CHANGED
@@ -3,7 +3,7 @@
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.500",
6
+ "version": "4.0.501",
7
7
  "description": "Internal package for shared objects between the Studio backend and frontend",
8
8
  "main": "dist",
9
9
  "scripts": {
@@ -20,12 +20,12 @@
20
20
  "url": "https://github.com/remotion-dev/remotion/issues"
21
21
  },
22
22
  "dependencies": {
23
- "@remotion/drag-and-drop": "4.0.500",
24
- "remotion": "4.0.500"
23
+ "@remotion/drag-and-drop": "4.0.501",
24
+ "remotion": "4.0.501"
25
25
  },
26
26
  "devDependencies": {
27
- "@remotion/renderer": "4.0.500",
28
- "@remotion/eslint-config-internal": "4.0.500",
27
+ "@remotion/renderer": "4.0.501",
28
+ "@remotion/eslint-config-internal": "4.0.501",
29
29
  "eslint": "9.19.0",
30
30
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
31
31
  },