@remotion/studio-shared 4.0.516 → 4.0.518

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.
@@ -309,6 +309,7 @@ export type CaptionPatch = {
309
309
  endMs: number;
310
310
  timestampMs: number | null;
311
311
  confidence: number | null;
312
+ pageBreakAfter: boolean | null;
312
313
  };
313
314
  changes: Partial<{
314
315
  text: string;
@@ -316,6 +317,7 @@ export type CaptionPatch = {
316
317
  endMs: number;
317
318
  timestampMs: number | null;
318
319
  confidence: number | null;
320
+ pageBreakAfter: boolean;
319
321
  }>;
320
322
  };
321
323
  export type SaveInlineCaptionPatchesRequest = {
@@ -1,4 +1,5 @@
1
1
  export declare const configMethodLifecycles: {
2
+ readonly addElementLibrary: "runtime";
2
3
  readonly overrideBundlerConfig: "restart";
3
4
  readonly overrideDuration: "runtime";
4
5
  readonly overrideFfmpegCommand: "runtime";
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.configMethodLifecycles = void 0;
4
4
  exports.configMethodLifecycles = {
5
+ addElementLibrary: 'runtime',
5
6
  overrideBundlerConfig: 'restart',
6
7
  overrideDuration: 'runtime',
7
8
  overrideFfmpegCommand: 'runtime',
@@ -1,15 +1,13 @@
1
- export declare const getDefinePluginDefinitions: ({ maxTimelineTracks, askAIEnabled, interactivityEnabled, keyboardShortcutsEnabled, bufferStateDelayInMilliseconds, experimentalClientSideRenderingEnabled, }: {
1
+ export declare const getDefinePluginDefinitions: ({ maxTimelineTracks, askAIEnabled, interactivityEnabled, keyboardShortcutsEnabled, bufferStateDelayInMilliseconds, }: {
2
2
  maxTimelineTracks: number | null;
3
3
  askAIEnabled: boolean;
4
4
  interactivityEnabled: boolean;
5
5
  keyboardShortcutsEnabled: boolean;
6
6
  bufferStateDelayInMilliseconds: number | null;
7
- experimentalClientSideRenderingEnabled: boolean;
8
7
  }) => {
9
8
  'process.env.MAX_TIMELINE_TRACKS': number | null;
10
9
  'process.env.ASK_AI_ENABLED': boolean;
11
10
  'process.env.INTERACTIVITY_ENABLED': boolean;
12
11
  'process.env.KEYBOARD_SHORTCUTS_ENABLED': boolean;
13
12
  'process.env.BUFFER_STATE_DELAY_IN_MILLISECONDS': number | null;
14
- 'process.env.EXPERIMENTAL_CLIENT_SIDE_RENDERING_ENABLED': boolean;
15
13
  };
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDefinePluginDefinitions = void 0;
4
- const getDefinePluginDefinitions = ({ maxTimelineTracks, askAIEnabled, interactivityEnabled, keyboardShortcutsEnabled, bufferStateDelayInMilliseconds, experimentalClientSideRenderingEnabled, }) => ({
4
+ const getDefinePluginDefinitions = ({ maxTimelineTracks, askAIEnabled, interactivityEnabled, keyboardShortcutsEnabled, bufferStateDelayInMilliseconds, }) => ({
5
5
  'process.env.MAX_TIMELINE_TRACKS': maxTimelineTracks,
6
6
  'process.env.ASK_AI_ENABLED': askAIEnabled,
7
7
  'process.env.INTERACTIVITY_ENABLED': interactivityEnabled,
8
8
  'process.env.KEYBOARD_SHORTCUTS_ENABLED': keyboardShortcutsEnabled,
9
9
  'process.env.BUFFER_STATE_DELAY_IN_MILLISECONDS': bufferStateDelayInMilliseconds,
10
- 'process.env.EXPERIMENTAL_CLIENT_SIDE_RENDERING_ENABLED': experimentalClientSideRenderingEnabled,
11
10
  });
12
11
  exports.getDefinePluginDefinitions = getDefinePluginDefinitions;
@@ -4,6 +4,7 @@ export type ElementDragData = {
4
4
  type: 'remotion-element';
5
5
  version: 1;
6
6
  element: {
7
+ dependencies: string[];
7
8
  slug: string;
8
9
  displayName: string;
9
10
  sourceCode: string;
@@ -13,7 +14,8 @@ export type ElementDragData = {
13
14
  export declare const isLowercaseElementFileName: (value: unknown) => value is string;
14
15
  export declare const makeElementFileNameFromSlug: (slug: string) => string | null;
15
16
  export declare const getElementComponentNameFromSourceCode: (sourceCode: string) => string | null;
16
- export declare const makeElementDragData: ({ dimensions, displayName, slug, sourceCode, }: {
17
+ export declare const makeElementDragData: ({ dependencies, dimensions, displayName, slug, sourceCode, }: {
18
+ dependencies: string[];
17
19
  slug: string;
18
20
  displayName: string;
19
21
  sourceCode: string;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseElementDragData = exports.makeElementDragData = exports.getElementComponentNameFromSourceCode = exports.makeElementFileNameFromSlug = exports.isLowercaseElementFileName = exports.ELEMENT_DRAG_MIME_TYPE = void 0;
4
4
  const component_drag_data_1 = require("./component-drag-data");
5
+ const package_name_1 = require("./package-name");
5
6
  const drag_mime_types_1 = require("./drag-mime-types");
6
7
  Object.defineProperty(exports, "ELEMENT_DRAG_MIME_TYPE", { enumerable: true, get: function () { return drag_mime_types_1.ELEMENT_DRAG_MIME_TYPE; } });
7
8
  const isRecord = (value) => {
@@ -48,6 +49,11 @@ const isSourceCode = (value) => {
48
49
  value.trim().length > 0 &&
49
50
  value.length < 200000);
50
51
  };
52
+ const isDependencies = (value) => {
53
+ return (Array.isArray(value) &&
54
+ value.length <= 100 &&
55
+ value.every((dependency) => typeof dependency === 'string' && (0, package_name_1.isValidPackageName)(dependency)));
56
+ };
51
57
  const isDimensions = (value) => {
52
58
  if (!isRecord(value)) {
53
59
  return false;
@@ -69,11 +75,12 @@ const getElementComponentNameFromSourceCode = (sourceCode) => {
69
75
  return (0, component_drag_data_1.isComponentIdentifier)(componentName) ? componentName : null;
70
76
  };
71
77
  exports.getElementComponentNameFromSourceCode = getElementComponentNameFromSourceCode;
72
- const makeElementDragData = ({ dimensions, displayName, slug, sourceCode, }) => {
78
+ const makeElementDragData = ({ dependencies, dimensions, displayName, slug, sourceCode, }) => {
73
79
  return {
74
80
  type: 'remotion-element',
75
81
  version: 1,
76
82
  element: {
83
+ dependencies: Array.from(new Set(dependencies)),
77
84
  slug,
78
85
  displayName,
79
86
  sourceCode,
@@ -94,18 +101,20 @@ const parseElementDragData = (value) => {
94
101
  if (!isRecord(parsed.element)) {
95
102
  return null;
96
103
  }
97
- const { dimensions, displayName, slug, sourceCode } = parsed.element;
104
+ const { dependencies, dimensions, displayName, slug, sourceCode } = parsed.element;
98
105
  if (!isSlug(slug) ||
99
106
  !isDisplayName(displayName) ||
100
107
  !isSourceCode(sourceCode) ||
101
108
  (0, exports.getElementComponentNameFromSourceCode)(sourceCode) === null ||
102
109
  (0, exports.makeElementFileNameFromSlug)(slug) === null ||
110
+ (dependencies !== undefined && !isDependencies(dependencies)) ||
103
111
  (dimensions !== undefined &&
104
112
  dimensions !== null &&
105
113
  !isDimensions(dimensions))) {
106
114
  return null;
107
115
  }
108
116
  return (0, exports.makeElementDragData)({
117
+ dependencies: dependencies !== null && dependencies !== void 0 ? dependencies : [],
109
118
  slug,
110
119
  displayName,
111
120
  sourceCode,
@@ -122,6 +122,7 @@ var getConfigFileChangeMessage = (changeType) => {
122
122
  };
123
123
  // src/config-method-lifecycles.ts
124
124
  var configMethodLifecycles = {
125
+ addElementLibrary: "runtime",
125
126
  overrideBundlerConfig: "restart",
126
127
  overrideDuration: "runtime",
127
128
  overrideFfmpegCommand: "runtime",
@@ -2243,6 +2244,7 @@ var allPackages = [
2243
2244
  "brand",
2244
2245
  "bundler",
2245
2246
  "browser-studio",
2247
+ "canvas",
2246
2248
  "claude-code-plugin",
2247
2249
  "cli",
2248
2250
  "cloudrun",
@@ -2270,6 +2272,7 @@ var allPackages = [
2270
2272
  "fonts",
2271
2273
  "gif",
2272
2274
  "google-fonts",
2275
+ "gsap",
2273
2276
  "install-whisper-cpp",
2274
2277
  "it-tests",
2275
2278
  "react18-tests",
@@ -2324,6 +2327,7 @@ var allPackages = [
2324
2327
  "compositor",
2325
2328
  "example-videos",
2326
2329
  "whisper-web",
2330
+ "whisper-webgpu",
2327
2331
  "media",
2328
2332
  "remotion-media",
2329
2333
  "web-renderer",
@@ -2387,11 +2391,14 @@ var descriptions = {
2387
2391
  lambda: "Render Remotion videos on AWS Lambda",
2388
2392
  bundler: "Bundle Remotion compositions using Webpack",
2389
2393
  "browser-studio": "Run Remotion Studio in the browser",
2394
+ canvas: "Headless primitives for Remotion authoring interfaces",
2390
2395
  "studio-codemods": "Shared codemods for Remotion Studio",
2391
2396
  "studio-server": "Run a Remotion Studio with a server backend",
2392
2397
  "install-whisper-cpp": "Helpers for installing and using Whisper.cpp",
2393
2398
  "whisper-web": "Helpers for using Whisper.cpp in browser using WASM",
2399
+ "whisper-webgpu": "Transcribe audio in the browser using Whisper and WebGPU",
2394
2400
  "google-fonts": "Use Google Fonts in Remotion",
2401
+ gsap: "Use GSAP timelines in Remotion",
2395
2402
  mcp: "Remotion's Model Context Protocol",
2396
2403
  "media-utils": "Utilities for working with media files",
2397
2404
  lottie: "Include Lottie animations in Remotion",
@@ -2489,6 +2496,7 @@ var installableMap = {
2489
2496
  brand: false,
2490
2497
  bundler: false,
2491
2498
  "browser-studio": false,
2499
+ canvas: false,
2492
2500
  cli: false,
2493
2501
  cloudrun: true,
2494
2502
  "claude-code-plugin": false,
@@ -2518,8 +2526,10 @@ var installableMap = {
2518
2526
  fonts: true,
2519
2527
  gif: true,
2520
2528
  "google-fonts": true,
2529
+ gsap: true,
2521
2530
  "install-whisper-cpp": true,
2522
2531
  "whisper-web": true,
2532
+ "whisper-webgpu": true,
2523
2533
  "it-tests": false,
2524
2534
  "react18-tests": false,
2525
2535
  "lambda-go-example": false,
@@ -2611,13 +2621,16 @@ var apiDocs = {
2611
2621
  lambda: "https://www.remotion.dev/docs/lambda",
2612
2622
  bundler: "https://www.remotion.dev/docs/bundler",
2613
2623
  "browser-studio": null,
2624
+ canvas: null,
2614
2625
  "studio-codemods": null,
2615
2626
  "lambda-client": null,
2616
2627
  "serverless-client": null,
2617
2628
  "studio-server": null,
2618
2629
  "install-whisper-cpp": "https://www.remotion.dev/docs/install-whisper-cpp",
2619
2630
  "whisper-web": "https://www.remotion.dev/docs/whisper-web",
2631
+ "whisper-webgpu": "https://www.remotion.dev/docs/whisper-webgpu",
2620
2632
  "google-fonts": "https://www.remotion.dev/docs/google-fonts",
2633
+ gsap: "https://www.remotion.dev/docs/gsap",
2621
2634
  "media-utils": "https://www.remotion.dev/docs/media-utils",
2622
2635
  lottie: "https://www.remotion.dev/docs/lottie",
2623
2636
  licensing: "https://www.remotion.dev/docs/licensing",
@@ -79,6 +79,11 @@ export type EventSourceEvent = {
79
79
  } | {
80
80
  type: 'license-key-install-request';
81
81
  licenseKey: string;
82
+ } | {
83
+ type: 'element-library-add-request';
84
+ url: string;
85
+ displayName: string | null;
86
+ origin: string;
82
87
  } | {
83
88
  type: 'visual-control-values-changed';
84
89
  values: Array<{
package/dist/index.d.ts CHANGED
@@ -45,7 +45,7 @@ export { ScriptLine, SomeStackFrame, StackFrame, SymbolicatedStackFrame, } from
45
45
  export { EnumPath, stringifyDefaultProps } from './stringify-default-props';
46
46
  export { getStudioEntryPoints, type StudioEntryPointPaths, } from './studio-entry-points';
47
47
  export { studioHtml, type StudioHtmlOptions } from './studio-html';
48
- export type { ConfigFileStudioSettings, StudioRuntimeConfig, } from './studio-runtime-config';
48
+ export type { ConfigFileStudioSettings, StudioElementLibrary, StudioRuntimeConfig, } from './studio-runtime-config';
49
49
  export { BORDER_RADIUS_LONGHAND_KEYS, BORDER_RADIUS_SHORTHAND_KEY, getStylePropertyLonghandKeys, } from './style-property-relations';
50
50
  export type { VisualControlChange } from './codemods';
51
51
  export { optimisticAddEffectKeyframe, optimisticAddSequenceKeyframe, } from './optimistic-add-keyframe';
@@ -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", "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", "studio-protocol", "light-leaks", "mac-cursors", "maptiler", "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", "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", "gsap", "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", "whisper-webgpu", "media", "remotion-media", "web-renderer", "design", "studio-protocol", "light-leaks", "mac-cursors", "maptiler", "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" | "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" | "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" | "mac-cursors" | "maptiler" | "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-protocol" | "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" | "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" | "effects" | "elevenlabs" | "enable-scss" | "eslint-config" | "eslint-config-flat" | "eslint-config-internal" | "eslint-plugin" | "example" | "example-videos" | "example-without-zod" | "fonts" | "gif" | "google-fonts" | "gsap" | "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" | "mac-cursors" | "maptiler" | "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-protocol" | "studio-server" | "studio-shared" | "svg-3d-engine" | "tailwind" | "tailwind-v4" | "test-utils" | "three" | "timeline-utils" | "transitions" | "vercel" | "web-renderer" | "webcodecs" | "whisper-web" | "whisper-webgpu" | "zod-types" | "zod-types-v3")[];
4
4
  export type ExtraPackage = {
5
5
  name: string;
6
6
  version: string;
@@ -13,6 +13,7 @@ const allPackages = [
13
13
  'brand',
14
14
  'bundler',
15
15
  'browser-studio',
16
+ 'canvas',
16
17
  'claude-code-plugin',
17
18
  'cli',
18
19
  'cloudrun',
@@ -40,6 +41,7 @@ const allPackages = [
40
41
  'fonts',
41
42
  'gif',
42
43
  'google-fonts',
44
+ 'gsap',
43
45
  'install-whisper-cpp',
44
46
  'it-tests',
45
47
  'react18-tests',
@@ -94,6 +96,7 @@ const allPackages = [
94
96
  'compositor',
95
97
  'example-videos',
96
98
  'whisper-web',
99
+ 'whisper-webgpu',
97
100
  'media',
98
101
  'remotion-media',
99
102
  'web-renderer',
@@ -157,11 +160,14 @@ exports.descriptions = {
157
160
  lambda: 'Render Remotion videos on AWS Lambda',
158
161
  bundler: 'Bundle Remotion compositions using Webpack',
159
162
  'browser-studio': 'Run Remotion Studio in the browser',
163
+ canvas: 'Headless primitives for Remotion authoring interfaces',
160
164
  'studio-codemods': 'Shared codemods for Remotion Studio',
161
165
  'studio-server': 'Run a Remotion Studio with a server backend',
162
166
  'install-whisper-cpp': 'Helpers for installing and using Whisper.cpp',
163
167
  'whisper-web': 'Helpers for using Whisper.cpp in browser using WASM',
168
+ 'whisper-webgpu': 'Transcribe audio in the browser using Whisper and WebGPU',
164
169
  'google-fonts': 'Use Google Fonts in Remotion',
170
+ gsap: 'Use GSAP timelines in Remotion',
165
171
  mcp: "Remotion's Model Context Protocol",
166
172
  'media-utils': 'Utilities for working with media files',
167
173
  lottie: 'Include Lottie animations in Remotion',
@@ -259,6 +265,7 @@ exports.installableMap = {
259
265
  brand: false,
260
266
  bundler: false,
261
267
  'browser-studio': false,
268
+ canvas: false,
262
269
  cli: false,
263
270
  cloudrun: true,
264
271
  'claude-code-plugin': false,
@@ -288,8 +295,10 @@ exports.installableMap = {
288
295
  fonts: true,
289
296
  gif: true,
290
297
  'google-fonts': true,
298
+ gsap: true,
291
299
  'install-whisper-cpp': true,
292
300
  'whisper-web': true,
301
+ 'whisper-webgpu': true,
293
302
  'it-tests': false,
294
303
  'react18-tests': false,
295
304
  'lambda-go-example': false,
@@ -381,13 +390,16 @@ exports.apiDocs = {
381
390
  lambda: 'https://www.remotion.dev/docs/lambda',
382
391
  bundler: 'https://www.remotion.dev/docs/bundler',
383
392
  'browser-studio': null,
393
+ canvas: null,
384
394
  'studio-codemods': null,
385
395
  'lambda-client': null,
386
396
  'serverless-client': null,
387
397
  'studio-server': null,
388
398
  'install-whisper-cpp': 'https://www.remotion.dev/docs/install-whisper-cpp',
389
399
  'whisper-web': 'https://www.remotion.dev/docs/whisper-web',
400
+ 'whisper-webgpu': 'https://www.remotion.dev/docs/whisper-webgpu',
390
401
  'google-fonts': 'https://www.remotion.dev/docs/google-fonts',
402
+ gsap: 'https://www.remotion.dev/docs/gsap',
391
403
  'media-utils': 'https://www.remotion.dev/docs/media-utils',
392
404
  lottie: 'https://www.remotion.dev/docs/lottie',
393
405
  licensing: 'https://www.remotion.dev/docs/licensing',
@@ -11,9 +11,14 @@ export type ConfigFileStudioSettings = {
11
11
  readonly numberOfSharedAudioTags: number | null;
12
12
  readonly rspack: boolean | null;
13
13
  };
14
+ export type StudioElementLibrary = {
15
+ readonly displayName: string | null;
16
+ readonly url: string;
17
+ };
14
18
  export type StudioRuntimeConfig = {
15
19
  readonly maxTimelineTracks: number | null;
16
20
  readonly askAIEnabled: boolean;
21
+ readonly elementLibraries?: readonly StudioElementLibrary[];
17
22
  readonly interactivityEnabled: boolean;
18
23
  readonly keyboardShortcutsEnabled: boolean;
19
24
  readonly bufferStateDelayInMilliseconds: number | null;
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.516",
6
+ "version": "4.0.518",
7
7
  "description": "Internal package for shared objects between the Studio backend and frontend",
8
8
  "main": "dist",
9
9
  "module": "dist/esm/index.mjs",
@@ -21,12 +21,12 @@
21
21
  "url": "https://github.com/remotion-dev/remotion/issues"
22
22
  },
23
23
  "dependencies": {
24
- "@remotion/studio-protocol": "4.0.516",
25
- "remotion": "4.0.516"
24
+ "@remotion/studio-protocol": "4.0.518",
25
+ "remotion": "4.0.518"
26
26
  },
27
27
  "devDependencies": {
28
- "@remotion/renderer": "4.0.516",
29
- "@remotion/eslint-config-internal": "4.0.516",
28
+ "@remotion/renderer": "4.0.518",
29
+ "@remotion/eslint-config-internal": "4.0.518",
30
30
  "eslint": "9.19.0",
31
31
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
32
32
  },
@@ -1,7 +0,0 @@
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;
@@ -1,30 +0,0 @@
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]: { status: 'static', 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;
@@ -1,8 +0,0 @@
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;
@@ -1,43 +0,0 @@
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]: { status: 'static', 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,22 +0,0 @@
1
- export declare const SHAPE_DRAG_MIME_TYPE = "application/vnd.remotion.shape+json";
2
- export declare const shapeNames: readonly ["Arrow", "Circle", "Ellipse", "Heart", "Pie", "Polygon", "Rect", "Star", "Triangle"];
3
- export type ShapeName = (typeof shapeNames)[number];
4
- export type ShapeAttribute = {
5
- name: string;
6
- value: string | number | boolean;
7
- };
8
- export type ShapeDragData = {
9
- type: 'remotion-shape';
10
- version: 1;
11
- shape: ShapeName;
12
- attributes: ShapeAttribute[];
13
- };
14
- export declare const isShapeName: (value: unknown) => value is "Arrow" | "Circle" | "Ellipse" | "Heart" | "Pie" | "Polygon" | "Rect" | "Star" | "Triangle";
15
- export declare const isShapeAttributeName: (value: unknown) => value is string;
16
- export declare const isShapeAttribute: (value: unknown) => value is ShapeAttribute;
17
- export declare const areShapeAttributes: (value: unknown) => value is ShapeAttribute[];
18
- export declare const makeShapeDragData: ({ attributes, shape, }: {
19
- attributes: ShapeAttribute[];
20
- shape: "Arrow" | "Circle" | "Ellipse" | "Heart" | "Pie" | "Polygon" | "Rect" | "Star" | "Triangle";
21
- }) => ShapeDragData;
22
- export declare const parseShapeDragData: (value: string) => ShapeDragData | null;
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseShapeDragData = exports.makeShapeDragData = exports.areShapeAttributes = exports.isShapeAttribute = exports.isShapeAttributeName = exports.isShapeName = exports.shapeNames = exports.SHAPE_DRAG_MIME_TYPE = void 0;
4
- exports.SHAPE_DRAG_MIME_TYPE = 'application/vnd.remotion.shape+json';
5
- exports.shapeNames = [
6
- 'Arrow',
7
- 'Circle',
8
- 'Ellipse',
9
- 'Heart',
10
- 'Pie',
11
- 'Polygon',
12
- 'Rect',
13
- 'Star',
14
- 'Triangle',
15
- ];
16
- const isRecord = (value) => {
17
- return typeof value === 'object' && value !== null && !Array.isArray(value);
18
- };
19
- const isShapeName = (value) => {
20
- return typeof value === 'string' && exports.shapeNames.includes(value);
21
- };
22
- exports.isShapeName = isShapeName;
23
- const isShapeAttributeName = (value) => {
24
- return (typeof value === 'string' &&
25
- value !== 'style' &&
26
- /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value));
27
- };
28
- exports.isShapeAttributeName = isShapeAttributeName;
29
- const isShapeAttribute = (value) => {
30
- if (!isRecord(value)) {
31
- return false;
32
- }
33
- if (!(0, exports.isShapeAttributeName)(value.name)) {
34
- return false;
35
- }
36
- return (typeof value.value === 'string' ||
37
- typeof value.value === 'boolean' ||
38
- (typeof value.value === 'number' && Number.isFinite(value.value)));
39
- };
40
- exports.isShapeAttribute = isShapeAttribute;
41
- const areShapeAttributes = (value) => {
42
- if (!Array.isArray(value)) {
43
- return false;
44
- }
45
- const seen = new Set();
46
- for (const attribute of value) {
47
- if (!(0, exports.isShapeAttribute)(attribute) || seen.has(attribute.name)) {
48
- return false;
49
- }
50
- seen.add(attribute.name);
51
- }
52
- return true;
53
- };
54
- exports.areShapeAttributes = areShapeAttributes;
55
- const makeShapeDragData = ({ attributes, shape, }) => {
56
- return {
57
- type: 'remotion-shape',
58
- version: 1,
59
- shape,
60
- attributes,
61
- };
62
- };
63
- exports.makeShapeDragData = makeShapeDragData;
64
- const parseShapeDragData = (value) => {
65
- try {
66
- const parsed = JSON.parse(value);
67
- if (!isRecord(parsed)) {
68
- return null;
69
- }
70
- if (parsed.type !== 'remotion-shape' || parsed.version !== 1) {
71
- return null;
72
- }
73
- if (!(0, exports.isShapeName)(parsed.shape)) {
74
- return null;
75
- }
76
- if (!(0, exports.areShapeAttributes)(parsed.attributes)) {
77
- return null;
78
- }
79
- return {
80
- type: 'remotion-shape',
81
- version: 1,
82
- shape: parsed.shape,
83
- attributes: parsed.attributes,
84
- };
85
- }
86
- catch (_a) {
87
- return null;
88
- }
89
- };
90
- exports.parseShapeDragData = parseShapeDragData;