@remotion/studio-shared 4.0.506 → 4.0.507

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.
@@ -22,6 +22,13 @@ export type OpenInEditorRequest = {
22
22
  export type OpenInEditorResponse = {
23
23
  success: boolean;
24
24
  };
25
+ export type OpenInCodingAgentRequest = {
26
+ codingAgentId: DefaultCodingAgent;
27
+ prompt: string | null;
28
+ };
29
+ export type OpenInCodingAgentResponse = {
30
+ success: boolean;
31
+ };
25
32
  export type FindInFileRequest = {
26
33
  fileName: string;
27
34
  lineNumber: number;
@@ -60,6 +67,7 @@ type AddRenderRequestDynamicFields = {
60
67
  scale: number;
61
68
  logLevel: LogLevel;
62
69
  chromeMode: ChromeMode;
70
+ licenseKey: string | null;
63
71
  } | {
64
72
  type: 'sequence';
65
73
  imageFormat: VideoImageFormat;
@@ -104,6 +112,7 @@ type AddRenderRequestDynamicFields = {
104
112
  hardwareAcceleration: HardwareAccelerationOption;
105
113
  chromeMode: ChromeMode;
106
114
  sampleRate: number;
115
+ licenseKey: string | null;
107
116
  };
108
117
  export type CancelRenderRequest = {
109
118
  jobId: string;
@@ -186,6 +195,13 @@ export type RenameStaticFileRequest = {
186
195
  export type RenameStaticFileResponse = {
187
196
  success: boolean;
188
197
  };
198
+ export type CopyRenderOutputToAssetRequest = {
199
+ outputPath: string;
200
+ assetPath: string;
201
+ };
202
+ export type CopyRenderOutputToAssetResponse = {
203
+ created: boolean;
204
+ };
189
205
  export type CanUpdateDefaultPropsResponse = {
190
206
  canUpdate: true;
191
207
  currentDefaultProps: Record<string, unknown>;
@@ -756,10 +772,22 @@ export type ProjectInfoResponse = {
756
772
  };
757
773
  export type RestartStudioRequest = {};
758
774
  export type RestartStudioResponse = {};
759
- export type UpdatePublicLicenseRequest = {
760
- publicLicenseKey: string;
775
+ export type ConfigValue = string | number | boolean | null | ConfigValue[] | {
776
+ [key: string]: ConfigValue;
761
777
  };
762
- export type UpdatePublicLicenseResponse = {
778
+ export type ConfigUpdate = {
779
+ setter: string;
780
+ type: 'delete';
781
+ } | {
782
+ setter: string;
783
+ type: 'set';
784
+ value: ConfigValue;
785
+ };
786
+ export type UpdateConfigRequest = {
787
+ clientId: string;
788
+ updates: ConfigUpdate[];
789
+ };
790
+ export type UpdateConfigResponse = {
763
791
  success: true;
764
792
  } | {
765
793
  success: false;
@@ -772,34 +800,19 @@ export type GetDefaultEditorInfoResponse = {
772
800
  installedEditors: {
773
801
  id: EditorPickerId;
774
802
  name: string;
803
+ nameWithType: string;
775
804
  }[];
776
805
  };
777
- export type UpdateDefaultEditorRequest = {
778
- defaultEditor: EditorPickerId | null;
779
- };
780
- export type UpdateDefaultEditorResponse = {
781
- success: true;
782
- } | {
783
- success: false;
784
- reason: string;
785
- };
786
806
  export type GetDefaultCodingAgentInfoRequest = {};
787
807
  export type GetDefaultCodingAgentInfoResponse = {
788
808
  defaultCodingAgent: DefaultCodingAgent | null;
789
809
  installedCodingAgents: {
790
810
  id: DefaultCodingAgent;
791
811
  name: string;
812
+ nameWithType: string;
813
+ iconDataUrl: string | null;
792
814
  }[];
793
815
  };
794
- export type UpdateDefaultCodingAgentRequest = {
795
- defaultCodingAgent: DefaultCodingAgent | null;
796
- };
797
- export type UpdateDefaultCodingAgentResponse = {
798
- success: true;
799
- } | {
800
- success: false;
801
- reason: string;
802
- };
803
816
  export type PackageInstallSpec = {
804
817
  readonly name: string;
805
818
  readonly version: string | null;
@@ -837,8 +850,8 @@ export type ApiRoutes = {
837
850
  '/api/subscribe-to-file-existence': ReqAndRes<SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse>;
838
851
  '/api/remove-render': ReqAndRes<RemoveRenderRequest, undefined>;
839
852
  '/api/open-in-editor': ReqAndRes<OpenInEditorRequest, OpenInEditorResponse>;
853
+ '/api/open-in-coding-agent': ReqAndRes<OpenInCodingAgentRequest, OpenInCodingAgentResponse>;
840
854
  '/api/default-coding-agent-info': ReqAndRes<GetDefaultCodingAgentInfoRequest, GetDefaultCodingAgentInfoResponse>;
841
- '/api/update-default-coding-agent': ReqAndRes<UpdateDefaultCodingAgentRequest, UpdateDefaultCodingAgentResponse>;
842
855
  '/api/find-in-file': ReqAndRes<FindInFileRequest, FindInFileResponse>;
843
856
  '/api/open-in-file-explorer': ReqAndRes<OpenInFileExplorerRequest, void>;
844
857
  '/api/register-client-render': ReqAndRes<CompletedClientRender, void>;
@@ -882,10 +895,10 @@ export type ApiRoutes = {
882
895
  '/api/project-info': ReqAndRes<ProjectInfoRequest, ProjectInfoResponse>;
883
896
  '/api/delete-static-file': ReqAndRes<DeleteStaticFileRequest, DeleteStaticFileResponse>;
884
897
  '/api/rename-static-file': ReqAndRes<RenameStaticFileRequest, RenameStaticFileResponse>;
898
+ '/api/copy-render-output-to-asset': ReqAndRes<CopyRenderOutputToAssetRequest, CopyRenderOutputToAssetResponse>;
885
899
  '/api/restart-studio': ReqAndRes<RestartStudioRequest, RestartStudioResponse>;
886
- '/api/update-public-license': ReqAndRes<UpdatePublicLicenseRequest, UpdatePublicLicenseResponse>;
900
+ '/api/update-config': ReqAndRes<UpdateConfigRequest, UpdateConfigResponse>;
887
901
  '/api/default-editor-info': ReqAndRes<GetDefaultEditorInfoRequest, GetDefaultEditorInfoResponse>;
888
- '/api/update-default-editor': ReqAndRes<UpdateDefaultEditorRequest, UpdateDefaultEditorResponse>;
889
902
  '/api/install-package': ReqAndRes<InstallPackageRequest, InstallPackageResponse>;
890
903
  '/api/undo': ReqAndRes<UndoRequest, UndoResponse>;
891
904
  '/api/redo': ReqAndRes<RedoRequest, RedoResponse>;
@@ -0,0 +1,94 @@
1
+ export declare const configMethodLifecycles: {
2
+ readonly overrideBundlerConfig: "restart";
3
+ readonly overrideDuration: "runtime";
4
+ readonly overrideFfmpegCommand: "runtime";
5
+ readonly overrideFps: "runtime";
6
+ readonly overrideHeight: "runtime";
7
+ readonly overrideRspackConfig: "restart";
8
+ readonly overrideWebpackConfig: "restart";
9
+ readonly overrideWidth: "runtime";
10
+ readonly setAllowHtmlInCanvasEnabled: "runtime";
11
+ readonly setAskAIEnabled: "runtime";
12
+ readonly setAudioBitrate: "runtime";
13
+ readonly setAudioCodec: "runtime";
14
+ readonly setAudioLatencyHint: "reload";
15
+ readonly setBeepOnFinish: "runtime";
16
+ readonly setBenchmarkConcurrencies: "runtime";
17
+ readonly setBenchmarkRuns: "runtime";
18
+ readonly setBinariesDirectory: "restart";
19
+ readonly setBrowserExecutable: "runtime";
20
+ readonly setBufferStateDelayInMilliseconds: "runtime";
21
+ readonly setBundleOutDir: "runtime";
22
+ readonly setCachingEnabled: "runtime";
23
+ readonly setChromeMode: "runtime";
24
+ readonly setChromiumDarkMode: "runtime";
25
+ readonly setChromiumDisableWebSecurity: "runtime";
26
+ readonly setChromiumHeadlessMode: "runtime";
27
+ readonly setChromiumIgnoreCertificateErrors: "runtime";
28
+ readonly setChromiumMultiProcessOnLinux: "runtime";
29
+ readonly setChromiumOpenGlRenderer: "runtime";
30
+ readonly setChromiumUserAgent: "runtime";
31
+ readonly setCodec: "runtime";
32
+ readonly setColorSpace: "runtime";
33
+ readonly setConcurrency: "runtime";
34
+ readonly setCrf: "runtime";
35
+ readonly setDefaultCodingAgent: "runtime";
36
+ readonly setDefaultEditor: "runtime";
37
+ readonly setDelayRenderTimeoutInMilliseconds: "runtime";
38
+ readonly setDeleteAfter: "runtime";
39
+ readonly setDisallowParallelEncoding: "runtime";
40
+ readonly setDotEnvLocation: "restart";
41
+ readonly setEnableCrossSiteIsolation: "restart";
42
+ readonly setEnableFolderExpiry: "runtime";
43
+ readonly setEncodingBufferSize: "runtime";
44
+ readonly setEncodingMaxRate: "runtime";
45
+ readonly setEnforceAudioTrack: "runtime";
46
+ readonly setEntryPoint: "restart";
47
+ readonly setEveryNthFrame: "runtime";
48
+ readonly setExperimentalRspackEnabled: "restart";
49
+ readonly setForSeamlessAacConcatenation: "runtime";
50
+ readonly setForceNewStudioEnabled: "restart";
51
+ readonly setFrameRange: "runtime";
52
+ readonly setGopSize: "runtime";
53
+ readonly setHardwareAcceleration: "runtime";
54
+ readonly setIPv4: "restart";
55
+ readonly setImageFormat: "runtime";
56
+ readonly setImageSequence: "runtime";
57
+ readonly setImageSequencePattern: "runtime";
58
+ readonly setInteractivityEnabled: "runtime";
59
+ readonly setJpegQuality: "runtime";
60
+ readonly setKeyboardShortcutsEnabled: "runtime";
61
+ readonly setLambdaInsights: "runtime";
62
+ readonly setLevel: "restart";
63
+ readonly setLogLevel: "restart";
64
+ readonly setMaxTimelineTracks: "runtime";
65
+ readonly setMetadata: "runtime";
66
+ readonly setMuted: "runtime";
67
+ readonly setNumberOfGifLoops: "runtime";
68
+ readonly setNumberOfSharedAudioTags: "reload";
69
+ readonly setOffthreadVideoCacheSizeInBytes: "runtime";
70
+ readonly setOutputLocation: "runtime";
71
+ readonly setOverwriteOutput: "runtime";
72
+ readonly setPixelFormat: "runtime";
73
+ readonly setPort: "restart";
74
+ readonly setPreferLosslessAudio: "runtime";
75
+ readonly setPreviewSampleRate: "reload";
76
+ readonly setProResProfile: "runtime";
77
+ readonly setPublicDir: "restart";
78
+ readonly setPublicLicenseKey: "runtime";
79
+ readonly setPublicPath: "runtime";
80
+ readonly setQuality: "runtime";
81
+ readonly setRendererPort: "restart";
82
+ readonly setRepro: "runtime";
83
+ readonly setRspack: "restart";
84
+ readonly setSampleRate: "runtime";
85
+ readonly setScale: "runtime";
86
+ readonly setShouldOpenBrowser: "restart";
87
+ readonly setStillImageFormat: "runtime";
88
+ readonly setStudioPort: "restart";
89
+ readonly setTimeoutInMilliseconds: "runtime";
90
+ readonly setVideoBitrate: "runtime";
91
+ readonly setVideoImageFormat: "runtime";
92
+ readonly setWebpackPollingInMilliseconds: "restart";
93
+ readonly setX264Preset: "runtime";
94
+ };
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configMethodLifecycles = void 0;
4
+ exports.configMethodLifecycles = {
5
+ overrideBundlerConfig: 'restart',
6
+ overrideDuration: 'runtime',
7
+ overrideFfmpegCommand: 'runtime',
8
+ overrideFps: 'runtime',
9
+ overrideHeight: 'runtime',
10
+ overrideRspackConfig: 'restart',
11
+ overrideWebpackConfig: 'restart',
12
+ overrideWidth: 'runtime',
13
+ setAllowHtmlInCanvasEnabled: 'runtime',
14
+ setAskAIEnabled: 'runtime',
15
+ setAudioBitrate: 'runtime',
16
+ setAudioCodec: 'runtime',
17
+ setAudioLatencyHint: 'reload',
18
+ setBeepOnFinish: 'runtime',
19
+ setBenchmarkConcurrencies: 'runtime',
20
+ setBenchmarkRuns: 'runtime',
21
+ setBinariesDirectory: 'restart',
22
+ setBrowserExecutable: 'runtime',
23
+ setBufferStateDelayInMilliseconds: 'runtime',
24
+ setBundleOutDir: 'runtime',
25
+ setCachingEnabled: 'runtime',
26
+ setChromeMode: 'runtime',
27
+ setChromiumDarkMode: 'runtime',
28
+ setChromiumDisableWebSecurity: 'runtime',
29
+ setChromiumHeadlessMode: 'runtime',
30
+ setChromiumIgnoreCertificateErrors: 'runtime',
31
+ setChromiumMultiProcessOnLinux: 'runtime',
32
+ setChromiumOpenGlRenderer: 'runtime',
33
+ setChromiumUserAgent: 'runtime',
34
+ setCodec: 'runtime',
35
+ setColorSpace: 'runtime',
36
+ setConcurrency: 'runtime',
37
+ setCrf: 'runtime',
38
+ setDefaultCodingAgent: 'runtime',
39
+ setDefaultEditor: 'runtime',
40
+ setDelayRenderTimeoutInMilliseconds: 'runtime',
41
+ setDeleteAfter: 'runtime',
42
+ setDisallowParallelEncoding: 'runtime',
43
+ setDotEnvLocation: 'restart',
44
+ setEnableCrossSiteIsolation: 'restart',
45
+ setEnableFolderExpiry: 'runtime',
46
+ setEncodingBufferSize: 'runtime',
47
+ setEncodingMaxRate: 'runtime',
48
+ setEnforceAudioTrack: 'runtime',
49
+ setEntryPoint: 'restart',
50
+ setEveryNthFrame: 'runtime',
51
+ setExperimentalRspackEnabled: 'restart',
52
+ setForSeamlessAacConcatenation: 'runtime',
53
+ setForceNewStudioEnabled: 'restart',
54
+ setFrameRange: 'runtime',
55
+ setGopSize: 'runtime',
56
+ setHardwareAcceleration: 'runtime',
57
+ setIPv4: 'restart',
58
+ setImageFormat: 'runtime',
59
+ setImageSequence: 'runtime',
60
+ setImageSequencePattern: 'runtime',
61
+ setInteractivityEnabled: 'runtime',
62
+ setJpegQuality: 'runtime',
63
+ setKeyboardShortcutsEnabled: 'runtime',
64
+ setLambdaInsights: 'runtime',
65
+ setLevel: 'restart',
66
+ setLogLevel: 'restart',
67
+ setMaxTimelineTracks: 'runtime',
68
+ setMetadata: 'runtime',
69
+ setMuted: 'runtime',
70
+ setNumberOfGifLoops: 'runtime',
71
+ setNumberOfSharedAudioTags: 'reload',
72
+ setOffthreadVideoCacheSizeInBytes: 'runtime',
73
+ setOutputLocation: 'runtime',
74
+ setOverwriteOutput: 'runtime',
75
+ setPixelFormat: 'runtime',
76
+ setPort: 'restart',
77
+ setPreferLosslessAudio: 'runtime',
78
+ setPreviewSampleRate: 'reload',
79
+ setProResProfile: 'runtime',
80
+ setPublicDir: 'restart',
81
+ setPublicLicenseKey: 'runtime',
82
+ setPublicPath: 'runtime',
83
+ setQuality: 'runtime',
84
+ setRendererPort: 'restart',
85
+ setRepro: 'runtime',
86
+ setRspack: 'restart',
87
+ setSampleRate: 'runtime',
88
+ setScale: 'runtime',
89
+ setShouldOpenBrowser: 'restart',
90
+ setStillImageFormat: 'runtime',
91
+ setStudioPort: 'restart',
92
+ setTimeoutInMilliseconds: 'runtime',
93
+ setVideoBitrate: 'runtime',
94
+ setVideoImageFormat: 'runtime',
95
+ setWebpackPollingInMilliseconds: 'restart',
96
+ setX264Preset: 'runtime',
97
+ };
@@ -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;
@@ -10,6 +10,7 @@ const isFiniteNumber = (value) => {
10
10
  const isKeyframeEasing = (value) => {
11
11
  return (isRecord(value) &&
12
12
  (value.type === 'linear' ||
13
+ value.type === 'step1' ||
13
14
  (value.type === 'bezier' &&
14
15
  isFiniteNumber(value.x1) &&
15
16
  isFiniteNumber(value.y1) &&
@@ -214,6 +214,20 @@ exports.EFFECT_CATALOG = [
214
214
  config: {},
215
215
  },
216
216
  },
217
+ {
218
+ id: 'effects-region-blur',
219
+ category: 'Blur & Shadow',
220
+ label: 'regionBlur()',
221
+ description: 'Blur a rectangular or rounded region',
222
+ effect: {
223
+ name: 'regionBlur',
224
+ importPath: '@remotion/effects/region-blur',
225
+ config: {
226
+ topLeft: [0.28, 0.18],
227
+ bottomRight: [0.72, 0.82],
228
+ },
229
+ },
230
+ },
217
231
  {
218
232
  id: 'effects-zoom-blur',
219
233
  category: 'Blur & Shadow',
@@ -13,6 +13,7 @@ const isFiniteNumber = (value) => {
13
13
  const isEasing = (value) => {
14
14
  return (isRecord(value) &&
15
15
  (value.type === 'linear' ||
16
+ value.type === 'step1' ||
16
17
  (value.type === 'bezier' &&
17
18
  isFiniteNumber(value.x1) &&
18
19
  isFiniteNumber(value.y1) &&
@@ -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,
@@ -60,6 +60,101 @@ var getConfigFileChangeMessage = (changeType) => {
60
60
  }
61
61
  return "Config file changed";
62
62
  };
63
+ // src/config-method-lifecycles.ts
64
+ var configMethodLifecycles = {
65
+ overrideBundlerConfig: "restart",
66
+ overrideDuration: "runtime",
67
+ overrideFfmpegCommand: "runtime",
68
+ overrideFps: "runtime",
69
+ overrideHeight: "runtime",
70
+ overrideRspackConfig: "restart",
71
+ overrideWebpackConfig: "restart",
72
+ overrideWidth: "runtime",
73
+ setAllowHtmlInCanvasEnabled: "runtime",
74
+ setAskAIEnabled: "runtime",
75
+ setAudioBitrate: "runtime",
76
+ setAudioCodec: "runtime",
77
+ setAudioLatencyHint: "reload",
78
+ setBeepOnFinish: "runtime",
79
+ setBenchmarkConcurrencies: "runtime",
80
+ setBenchmarkRuns: "runtime",
81
+ setBinariesDirectory: "restart",
82
+ setBrowserExecutable: "runtime",
83
+ setBufferStateDelayInMilliseconds: "runtime",
84
+ setBundleOutDir: "runtime",
85
+ setCachingEnabled: "runtime",
86
+ setChromeMode: "runtime",
87
+ setChromiumDarkMode: "runtime",
88
+ setChromiumDisableWebSecurity: "runtime",
89
+ setChromiumHeadlessMode: "runtime",
90
+ setChromiumIgnoreCertificateErrors: "runtime",
91
+ setChromiumMultiProcessOnLinux: "runtime",
92
+ setChromiumOpenGlRenderer: "runtime",
93
+ setChromiumUserAgent: "runtime",
94
+ setCodec: "runtime",
95
+ setColorSpace: "runtime",
96
+ setConcurrency: "runtime",
97
+ setCrf: "runtime",
98
+ setDefaultCodingAgent: "runtime",
99
+ setDefaultEditor: "runtime",
100
+ setDelayRenderTimeoutInMilliseconds: "runtime",
101
+ setDeleteAfter: "runtime",
102
+ setDisallowParallelEncoding: "runtime",
103
+ setDotEnvLocation: "restart",
104
+ setEnableCrossSiteIsolation: "restart",
105
+ setEnableFolderExpiry: "runtime",
106
+ setEncodingBufferSize: "runtime",
107
+ setEncodingMaxRate: "runtime",
108
+ setEnforceAudioTrack: "runtime",
109
+ setEntryPoint: "restart",
110
+ setEveryNthFrame: "runtime",
111
+ setExperimentalRspackEnabled: "restart",
112
+ setForSeamlessAacConcatenation: "runtime",
113
+ setForceNewStudioEnabled: "restart",
114
+ setFrameRange: "runtime",
115
+ setGopSize: "runtime",
116
+ setHardwareAcceleration: "runtime",
117
+ setIPv4: "restart",
118
+ setImageFormat: "runtime",
119
+ setImageSequence: "runtime",
120
+ setImageSequencePattern: "runtime",
121
+ setInteractivityEnabled: "runtime",
122
+ setJpegQuality: "runtime",
123
+ setKeyboardShortcutsEnabled: "runtime",
124
+ setLambdaInsights: "runtime",
125
+ setLevel: "restart",
126
+ setLogLevel: "restart",
127
+ setMaxTimelineTracks: "runtime",
128
+ setMetadata: "runtime",
129
+ setMuted: "runtime",
130
+ setNumberOfGifLoops: "runtime",
131
+ setNumberOfSharedAudioTags: "reload",
132
+ setOffthreadVideoCacheSizeInBytes: "runtime",
133
+ setOutputLocation: "runtime",
134
+ setOverwriteOutput: "runtime",
135
+ setPixelFormat: "runtime",
136
+ setPort: "restart",
137
+ setPreferLosslessAudio: "runtime",
138
+ setPreviewSampleRate: "reload",
139
+ setProResProfile: "runtime",
140
+ setPublicDir: "restart",
141
+ setPublicLicenseKey: "runtime",
142
+ setPublicPath: "runtime",
143
+ setQuality: "runtime",
144
+ setRendererPort: "restart",
145
+ setRepro: "runtime",
146
+ setRspack: "restart",
147
+ setSampleRate: "runtime",
148
+ setScale: "runtime",
149
+ setShouldOpenBrowser: "restart",
150
+ setStillImageFormat: "runtime",
151
+ setStudioPort: "restart",
152
+ setTimeoutInMilliseconds: "runtime",
153
+ setVideoBitrate: "runtime",
154
+ setVideoImageFormat: "runtime",
155
+ setWebpackPollingInMilliseconds: "restart",
156
+ setX264Preset: "runtime"
157
+ };
63
158
  // src/default-buffer-state-delay-in-milliseconds.ts
64
159
  var DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = 300;
65
160
  // src/detect-file-type.ts
@@ -375,7 +470,7 @@ var isFiniteNumber = (value) => {
375
470
  return typeof value === "number" && Number.isFinite(value);
376
471
  };
377
472
  var isKeyframeEasing = (value) => {
378
- return isRecord(value) && (value.type === "linear" || value.type === "bezier" && isFiniteNumber(value.x1) && isFiniteNumber(value.y1) && isFiniteNumber(value.x2) && isFiniteNumber(value.y2) || value.type === "spring" && isFiniteNumber(value.damping) && isFiniteNumber(value.mass) && isFiniteNumber(value.stiffness) && (value.allowTail === undefined || value.allowTail === null || typeof value.allowTail === "boolean") && (value.durationRestThreshold === undefined || value.durationRestThreshold === null || isFiniteNumber(value.durationRestThreshold)) && typeof value.overshootClamping === "boolean");
473
+ return isRecord(value) && (value.type === "linear" || value.type === "step1" || value.type === "bezier" && isFiniteNumber(value.x1) && isFiniteNumber(value.y1) && isFiniteNumber(value.x2) && isFiniteNumber(value.y2) || value.type === "spring" && isFiniteNumber(value.damping) && isFiniteNumber(value.mass) && isFiniteNumber(value.stiffness) && (value.allowTail === undefined || value.allowTail === null || typeof value.allowTail === "boolean") && (value.durationRestThreshold === undefined || value.durationRestThreshold === null || isFiniteNumber(value.durationRestThreshold)) && typeof value.overshootClamping === "boolean");
379
474
  };
380
475
  var normalizeKeyframeEasing = (easing) => {
381
476
  if (easing.type !== "spring") {
@@ -629,6 +724,20 @@ var EFFECT_CATALOG = [
629
724
  config: {}
630
725
  }
631
726
  },
727
+ {
728
+ id: "effects-region-blur",
729
+ category: "Blur & Shadow",
730
+ label: "regionBlur()",
731
+ description: "Blur a rectangular or rounded region",
732
+ effect: {
733
+ name: "regionBlur",
734
+ importPath: "@remotion/effects/region-blur",
735
+ config: {
736
+ topLeft: [0.28, 0.18],
737
+ bottomRight: [0.72, 0.82]
738
+ }
739
+ }
740
+ },
632
741
  {
633
742
  id: "effects-zoom-blur",
634
743
  category: "Blur & Shadow",
@@ -1305,7 +1414,7 @@ var isFiniteNumber2 = (value) => {
1305
1414
  return typeof value === "number" && Number.isFinite(value);
1306
1415
  };
1307
1416
  var isEasing = (value) => {
1308
- return isRecord2(value) && (value.type === "linear" || value.type === "bezier" && isFiniteNumber2(value.x1) && isFiniteNumber2(value.y1) && isFiniteNumber2(value.x2) && isFiniteNumber2(value.y2) || value.type === "spring" && isFiniteNumber2(value.damping) && isFiniteNumber2(value.mass) && isFiniteNumber2(value.stiffness) && (value.allowTail === undefined || value.allowTail === null || typeof value.allowTail === "boolean") && (value.durationRestThreshold === undefined || value.durationRestThreshold === null || isFiniteNumber2(value.durationRestThreshold)) && typeof value.overshootClamping === "boolean");
1417
+ return isRecord2(value) && (value.type === "linear" || value.type === "step1" || value.type === "bezier" && isFiniteNumber2(value.x1) && isFiniteNumber2(value.y1) && isFiniteNumber2(value.x2) && isFiniteNumber2(value.y2) || value.type === "spring" && isFiniteNumber2(value.damping) && isFiniteNumber2(value.mass) && isFiniteNumber2(value.stiffness) && (value.allowTail === undefined || value.allowTail === null || typeof value.allowTail === "boolean") && (value.durationRestThreshold === undefined || value.durationRestThreshold === null || isFiniteNumber2(value.durationRestThreshold)) && typeof value.overshootClamping === "boolean");
1309
1418
  };
1310
1419
  var normalizeEasing = (easing) => {
1311
1420
  if (easing.type !== "spring") {
@@ -1733,6 +1842,7 @@ var parseKeyframeClipboardData = (value) => {
1733
1842
  };
1734
1843
  // src/keyframe-easing-presets.ts
1735
1844
  var LINEAR_KEYFRAME_EASING = { type: "linear" };
1845
+ var HOLD_KEYFRAME_EASING = { type: "step1" };
1736
1846
  var EASE_KEYFRAME_EASING = {
1737
1847
  type: "bezier",
1738
1848
  x1: 0.42,
@@ -1804,6 +1914,11 @@ var KEYFRAME_EASING_PRESETS = [
1804
1914
  label: "Ease in-out",
1805
1915
  easing: { type: "bezier", x1: 0.42, y1: 0, x2: 0.58, y2: 1 }
1806
1916
  },
1917
+ {
1918
+ id: "hold",
1919
+ label: "Hold",
1920
+ easing: HOLD_KEYFRAME_EASING
1921
+ },
1807
1922
  {
1808
1923
  id: "tail-spring",
1809
1924
  label: "Tail spring",
@@ -3687,6 +3802,7 @@ export {
3687
3802
  extraPackages,
3688
3803
  detectFileType,
3689
3804
  descriptions,
3805
+ configMethodLifecycles,
3690
3806
  compositionDragDataToSymbolicatedStack,
3691
3807
  canMoveKeyframesWithoutCollisions,
3692
3808
  canEditEasingForInterpolationFunction,
@@ -3696,6 +3812,7 @@ export {
3696
3812
  QUAD_KEYFRAME_EASING,
3697
3813
  LINEAR_KEYFRAME_EASING,
3698
3814
  KEYFRAME_EASING_PRESETS,
3815
+ HOLD_KEYFRAME_EASING,
3699
3816
  EFFECT_CATALOG,
3700
3817
  EASE_KEYFRAME_EASING,
3701
3818
  DEFAULT_TIMELINE_TRACKS,
@@ -1,5 +1,6 @@
1
1
  // src/keyframe-easing-presets.ts
2
2
  var LINEAR_KEYFRAME_EASING = { type: "linear" };
3
+ var HOLD_KEYFRAME_EASING = { type: "step1" };
3
4
  var EASE_KEYFRAME_EASING = {
4
5
  type: "bezier",
5
6
  x1: 0.42,
@@ -71,6 +72,11 @@ var KEYFRAME_EASING_PRESETS = [
71
72
  label: "Ease in-out",
72
73
  easing: { type: "bezier", x1: 0.42, y1: 0, x2: 0.58, y2: 1 }
73
74
  },
75
+ {
76
+ id: "hold",
77
+ label: "Hold",
78
+ easing: HOLD_KEYFRAME_EASING
79
+ },
74
80
  {
75
81
  id: "tail-spring",
76
82
  label: "Tail spring",
@@ -118,6 +124,7 @@ export {
118
124
  QUAD_KEYFRAME_EASING,
119
125
  LINEAR_KEYFRAME_EASING,
120
126
  KEYFRAME_EASING_PRESETS,
127
+ HOLD_KEYFRAME_EASING,
121
128
  EASE_KEYFRAME_EASING,
122
129
  CUBIC_KEYFRAME_EASING
123
130
  };
@@ -19,6 +19,7 @@ export type EventSourceEvent = {
19
19
  } | {
20
20
  type: 'config-file-changed';
21
21
  changeType: ConfigFileChangeType;
22
+ originatorClientId: string | null;
22
23
  renderDefaults: RenderDefaults;
23
24
  studioRuntimeConfig: StudioRuntimeConfig;
24
25
  editorName: string | null;
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
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, CaptionPatch, CompositionComponentInfoRequest, CompositionComponentInfoResponse, ConvertFigmaClipboardToSvgRequest, ConvertFigmaClipboardToSvgResponse, CopyStillToClipboardRequest, DeleteEffectKeyframe, DeleteEffectRequest, DeleteEffectRequestItem, DeleteEffectResponse, DeleteJsxNodeRequest, DeleteJsxNodeRequestItem, DeleteJsxNodeResponse, DeleteKeyframesRequest, DeleteKeyframesResponse, DeleteSequenceKeyframe, DeleteStaticFileRequest, DeleteStaticFileResponse, DownloadRemoteAssetRequest, DownloadRemoteAssetResponse, DuplicateEffectRequest, DuplicateEffectRequestItem, DuplicateEffectResponse, DuplicateJsxNodeRequest, DuplicateJsxNodeResponse, EditorPickerId, ElementInstallExpectedFileState, ElementInstallRequest, ElementInstallSource, FindInFileRequest, FindInFileResponse, GetDefaultCodingAgentInfoRequest, GetDefaultCodingAgentInfoResponse, GetDefaultEditorInfoRequest, GetDefaultEditorInfoResponse, GoogleFontSourceEdit, InsertElementFileConflict, InsertElementRequest, InsertElementResponse, InsertJsxElementRequest, InsertJsxElementResponse, InsertableCompositionElement, InsertableCompositionElementPosition, InstallPackageRequest, InstallPackageResponse, LogStudioErrorRequest, LogStudioErrorResponse, MoveEffectKeyframe, MoveKeyframesRequest, MoveKeyframesResponse, MoveSequenceKeyframe, OpenInEditorRequest, OpenInEditorResponse, OpenInFileExplorerRequest, PackageInstallSpec, PasteEffectsRequest, PasteEffectsResponse, PrepareElementInstallRequest, PrepareElementInstallResponse, ProjectInfoRequest, ProjectInfoResponse, RedoRequest, RedoResponse, RemoveRenderRequest, RenameStaticFileRequest, RenameStaticFileResponse, ReorderEffectRequest, ReorderEffectResponse, ReorderSequencePosition, ReorderSequenceRequest, ReorderSequenceResponse, RestartStudioRequest, RestartStudioResponse, SaveEffectPropsRequest, SaveEffectPropsResponse, SaveInlineCaptionPatchesRequest, 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, UpdateDefaultCodingAgentRequest, UpdateDefaultCodingAgentResponse, UpdateDefaultEditorRequest, UpdateDefaultEditorResponse, UpdateDefaultPropsRequest, UpdateDefaultPropsResponse, UpdateEffectKeyframeSettingsRequest, UpdateEffectKeyframeSettingsResponse, UpdateElementInstallTargetRequest, UpdateElementInstallTargetResponse, UpdatePublicLicenseRequest, UpdatePublicLicenseResponse, UpdateSequenceKeyframeSettingsRequest, UpdateSequenceKeyframeSettingsResponse, type AddEffectKeyframe, type AddSequenceKeyframe, type KeyframeSettings, } from './api-requests';
2
+ export { AddEffectKeyframeRequest, AddEffectKeyframeResponse, AddEffectRequest, AddEffectResponse, AddKeyframesRequest, AddKeyframesResponse, AddRenderRequest, AddSequenceKeyframeRequest, AddSequenceKeyframeResponse, ApiRoutes, ApplyCodemodRequest, ApplyCodemodResponse, ApplyVisualControlRequest, ApplyVisualControlResponse, BatchUpdateEffectKeyframeSettings, BatchUpdateKeyframeSettingsRequest, BatchUpdateKeyframeSettingsResponse, BatchUpdateSequenceKeyframeSettings, CanUpdateDefaultPropsResponse, CanUpdateSequencePropsRequest, CancelRenderRequest, CancelRenderResponse, CaptionPatch, CompositionComponentInfoRequest, CompositionComponentInfoResponse, ConvertFigmaClipboardToSvgRequest, ConvertFigmaClipboardToSvgResponse, CopyRenderOutputToAssetRequest, CopyRenderOutputToAssetResponse, CopyStillToClipboardRequest, DeleteEffectKeyframe, DeleteEffectRequest, DeleteEffectRequestItem, DeleteEffectResponse, DeleteJsxNodeRequest, DeleteJsxNodeRequestItem, DeleteJsxNodeResponse, DeleteKeyframesRequest, DeleteKeyframesResponse, DeleteSequenceKeyframe, DeleteStaticFileRequest, DeleteStaticFileResponse, DownloadRemoteAssetRequest, DownloadRemoteAssetResponse, DuplicateEffectRequest, DuplicateEffectRequestItem, DuplicateEffectResponse, DuplicateJsxNodeRequest, DuplicateJsxNodeResponse, EditorPickerId, ElementInstallExpectedFileState, ElementInstallRequest, ElementInstallSource, FindInFileRequest, FindInFileResponse, GetDefaultCodingAgentInfoRequest, GetDefaultCodingAgentInfoResponse, GetDefaultEditorInfoRequest, GetDefaultEditorInfoResponse, GoogleFontSourceEdit, InsertElementFileConflict, InsertElementRequest, InsertElementResponse, InsertJsxElementRequest, InsertJsxElementResponse, InsertableCompositionElement, InsertableCompositionElementPosition, InstallPackageRequest, InstallPackageResponse, LogStudioErrorRequest, LogStudioErrorResponse, MoveEffectKeyframe, MoveKeyframesRequest, MoveKeyframesResponse, MoveSequenceKeyframe, OpenInCodingAgentRequest, OpenInCodingAgentResponse, OpenInEditorRequest, OpenInEditorResponse, OpenInFileExplorerRequest, PackageInstallSpec, PasteEffectsRequest, PasteEffectsResponse, PrepareElementInstallRequest, PrepareElementInstallResponse, ProjectInfoRequest, ProjectInfoResponse, RedoRequest, RedoResponse, RemoveRenderRequest, RenameStaticFileRequest, RenameStaticFileResponse, ReorderEffectRequest, ReorderEffectResponse, ReorderSequencePosition, ReorderSequenceRequest, ReorderSequenceResponse, RestartStudioRequest, RestartStudioResponse, SaveEffectPropsRequest, SaveEffectPropsResponse, SaveInlineCaptionPatchesRequest, 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, UpdateConfigRequest, UpdateConfigResponse, UpdateDefaultPropsRequest, UpdateDefaultPropsResponse, UpdateEffectKeyframeSettingsRequest, UpdateEffectKeyframeSettingsResponse, UpdateElementInstallTargetRequest, UpdateElementInstallTargetResponse, UpdateSequenceKeyframeSettingsRequest, UpdateSequenceKeyframeSettingsResponse, type AddEffectKeyframe, type AddSequenceKeyframe, type ConfigUpdate, type ConfigValue, type KeyframeSettings, } from './api-requests';
3
3
  export type { BrowserStudioOperations } from './browser-studio-operations';
4
4
  export type { ApplyVisualControlCodemod, RecastCodemod } from './codemods';
5
5
  export { compositionDragDataToSymbolicatedStack } from './composition-drag-data';
6
6
  export { getConfigFileChangeMessage, type ConfigFileChangeType, } from './config-file-change';
7
+ export { configMethodLifecycles } from './config-method-lifecycles';
7
8
  export { DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS } from './default-buffer-state-delay-in-milliseconds';
8
9
  export { detectFileType, isImageFileType, type FileDimensions, type FileType, type ImageFileType, } from './detect-file-type';
9
10
  export { parseEasingClipboardData, parseEasingClipboardDataResult, type EasingClipboardData, type EasingClipboardDataParseResult, } from './easing-clipboard-data';
@@ -18,7 +19,7 @@ export { getProjectName } from './get-project-name';
18
19
  export type { GitSource } from './git-source';
19
20
  export { HotMiddlewareMessage, HotMiddlewareOptions, ModuleMap, hotMiddlewareOptions, } from './hot-middleware';
20
21
  export { isKeyframeClipboardFieldType, parseKeyframeClipboardData, parseKeyframeClipboardDataResult, type KeyframeClipboardData, type KeyframeClipboardDataParseResult, type KeyframeClipboardFieldType, } from './keyframe-clipboard-data';
21
- export { CUBIC_KEYFRAME_EASING, EASE_KEYFRAME_EASING, KEYFRAME_EASING_PRESETS, LINEAR_KEYFRAME_EASING, QUAD_KEYFRAME_EASING, getBackKeyframeEasing, getOutKeyframeEasing, getPolyKeyframeEasing, type KeyframeEasing, type KeyframeEasingPreset, } from './keyframe-easing-presets';
22
+ export { CUBIC_KEYFRAME_EASING, EASE_KEYFRAME_EASING, HOLD_KEYFRAME_EASING, KEYFRAME_EASING_PRESETS, LINEAR_KEYFRAME_EASING, QUAD_KEYFRAME_EASING, getBackKeyframeEasing, getOutKeyframeEasing, getPolyKeyframeEasing, type KeyframeEasing, type KeyframeEasingPreset, } from './keyframe-easing-presets';
22
23
  export { canEditEasingForInterpolationFunction, getKeyframeInterpolationFunction, getKeyframeInterpolationFunctionForSchemaField, isInteractivitySchemaFieldKeyframable, isKeyframeInterpolationFunction, isSchemaFieldKeyframable, keyframeInterpolationFunctions, type KeyframeInterpolationFunction, } from './keyframe-interpolation-function';
23
24
  export { DEFAULT_TIMELINE_TRACKS } from './max-timeline-tracks';
24
25
  export { Pkgs, apiDocs, descriptions, extraPackages, installableMap, packages, type ExtraPackage, } from './package-info';
package/dist/index.js CHANGED
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.packages = exports.installableMap = exports.extraPackages = exports.descriptions = exports.apiDocs = exports.DEFAULT_TIMELINE_TRACKS = 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.parseKeyframeClipboardDataResult = exports.parseKeyframeClipboardData = exports.isKeyframeClipboardFieldType = 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.getConfigFileChangeMessage = 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.getStylePropertyLonghandKeys = exports.BORDER_RADIUS_SHORTHAND_KEY = exports.BORDER_RADIUS_LONGHAND_KEYS = 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 = exports.DEFAULT_SPRING_EASING = void 0;
17
+ exports.extraPackages = exports.descriptions = exports.apiDocs = exports.DEFAULT_TIMELINE_TRACKS = 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.HOLD_KEYFRAME_EASING = exports.EASE_KEYFRAME_EASING = exports.CUBIC_KEYFRAME_EASING = exports.parseKeyframeClipboardDataResult = exports.parseKeyframeClipboardData = exports.isKeyframeClipboardFieldType = 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.configMethodLifecycles = exports.getConfigFileChangeMessage = 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.getStylePropertyLonghandKeys = exports.BORDER_RADIUS_SHORTHAND_KEY = exports.BORDER_RADIUS_LONGHAND_KEYS = 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 = exports.DEFAULT_SPRING_EASING = exports.packages = exports.installableMap = 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; } });
@@ -24,6 +24,8 @@ const composition_drag_data_1 = require("./composition-drag-data");
24
24
  Object.defineProperty(exports, "compositionDragDataToSymbolicatedStack", { enumerable: true, get: function () { return composition_drag_data_1.compositionDragDataToSymbolicatedStack; } });
25
25
  const config_file_change_1 = require("./config-file-change");
26
26
  Object.defineProperty(exports, "getConfigFileChangeMessage", { enumerable: true, get: function () { return config_file_change_1.getConfigFileChangeMessage; } });
27
+ const config_method_lifecycles_1 = require("./config-method-lifecycles");
28
+ Object.defineProperty(exports, "configMethodLifecycles", { enumerable: true, get: function () { return config_method_lifecycles_1.configMethodLifecycles; } });
27
29
  const default_buffer_state_delay_in_milliseconds_1 = require("./default-buffer-state-delay-in-milliseconds");
28
30
  Object.defineProperty(exports, "DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS", { enumerable: true, get: function () { return default_buffer_state_delay_in_milliseconds_1.DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS; } });
29
31
  const detect_file_type_1 = require("./detect-file-type");
@@ -64,6 +66,7 @@ Object.defineProperty(exports, "parseKeyframeClipboardDataResult", { enumerable:
64
66
  const keyframe_easing_presets_1 = require("./keyframe-easing-presets");
65
67
  Object.defineProperty(exports, "CUBIC_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.CUBIC_KEYFRAME_EASING; } });
66
68
  Object.defineProperty(exports, "EASE_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.EASE_KEYFRAME_EASING; } });
69
+ Object.defineProperty(exports, "HOLD_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.HOLD_KEYFRAME_EASING; } });
67
70
  Object.defineProperty(exports, "KEYFRAME_EASING_PRESETS", { enumerable: true, get: function () { return keyframe_easing_presets_1.KEYFRAME_EASING_PRESETS; } });
68
71
  Object.defineProperty(exports, "LINEAR_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.LINEAR_KEYFRAME_EASING; } });
69
72
  Object.defineProperty(exports, "QUAD_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.QUAD_KEYFRAME_EASING; } });
@@ -1,11 +1,12 @@
1
1
  import type { CanUpdateSequencePropStatusEasing } from 'remotion';
2
2
  export type KeyframeEasing = CanUpdateSequencePropStatusEasing;
3
3
  export type KeyframeEasingPreset = {
4
- readonly id: 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'bouncy-spring' | 'tail-spring';
4
+ readonly id: 'ease-in' | 'ease-out' | 'ease-in-out' | 'hold' | 'spring' | 'bouncy-spring' | 'tail-spring';
5
5
  readonly label: string;
6
6
  readonly easing: KeyframeEasing;
7
7
  };
8
8
  export declare const LINEAR_KEYFRAME_EASING: KeyframeEasing;
9
+ export declare const HOLD_KEYFRAME_EASING: KeyframeEasing;
9
10
  export declare const EASE_KEYFRAME_EASING: KeyframeEasing;
10
11
  export declare const QUAD_KEYFRAME_EASING: KeyframeEasing;
11
12
  export declare const CUBIC_KEYFRAME_EASING: KeyframeEasing;
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KEYFRAME_EASING_PRESETS = exports.getOutKeyframeEasing = exports.getPolyKeyframeEasing = exports.getBackKeyframeEasing = exports.CUBIC_KEYFRAME_EASING = exports.QUAD_KEYFRAME_EASING = exports.EASE_KEYFRAME_EASING = exports.LINEAR_KEYFRAME_EASING = void 0;
3
+ exports.KEYFRAME_EASING_PRESETS = exports.getOutKeyframeEasing = exports.getPolyKeyframeEasing = exports.getBackKeyframeEasing = exports.CUBIC_KEYFRAME_EASING = exports.QUAD_KEYFRAME_EASING = exports.EASE_KEYFRAME_EASING = exports.HOLD_KEYFRAME_EASING = exports.LINEAR_KEYFRAME_EASING = void 0;
4
4
  exports.LINEAR_KEYFRAME_EASING = { type: 'linear' };
5
+ exports.HOLD_KEYFRAME_EASING = { type: 'step1' };
5
6
  exports.EASE_KEYFRAME_EASING = {
6
7
  type: 'bezier',
7
8
  x1: 0.42,
@@ -76,6 +77,11 @@ exports.KEYFRAME_EASING_PRESETS = [
76
77
  label: 'Ease in-out',
77
78
  easing: { type: 'bezier', x1: 0.42, y1: 0, x2: 0.58, y2: 1 },
78
79
  },
80
+ {
81
+ id: 'hold',
82
+ label: 'Hold',
83
+ easing: exports.HOLD_KEYFRAME_EASING,
84
+ },
79
85
  {
80
86
  id: 'tail-spring',
81
87
  label: 'Tail spring',
@@ -86,6 +86,7 @@ type RenderJobDynamicFields = ({
86
86
  offthreadVideoCacheSizeInBytes: number | null;
87
87
  mediaCacheSizeInBytes: number | null;
88
88
  offthreadVideoThreads: number | null;
89
+ licenseKey: string | null;
89
90
  } & RenderJobDynamicStatus) | ({
90
91
  type: 'sequence';
91
92
  imageFormat: VideoImageFormat;
@@ -129,6 +130,7 @@ type RenderJobDynamicFields = ({
129
130
  separateAudioTo: string | null;
130
131
  hardwareAcceleration: HardwareAccelerationOption;
131
132
  sampleRate: number;
133
+ licenseKey: string | null;
132
134
  } & RenderJobDynamicStatus);
133
135
  import type { ChromiumOptions, OpenGlRenderer } from '@remotion/renderer';
134
136
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
@@ -1,7 +1,11 @@
1
+ import type { BuiltInEditor, DefaultCodingAgent } from '@remotion/renderer';
1
2
  export type StudioRuntimeConfig = {
2
3
  readonly maxTimelineTracks: number | null;
3
4
  readonly askAIEnabled: boolean;
4
5
  readonly interactivityEnabled: boolean;
5
6
  readonly keyboardShortcutsEnabled: boolean;
6
7
  readonly bufferStateDelayInMilliseconds: number | null;
8
+ readonly defaultCodingAgent: DefaultCodingAgent | null;
9
+ readonly defaultEditor: BuiltInEditor | 'custom' | null;
10
+ readonly publicLicenseKey: string | null;
7
11
  };
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.506",
6
+ "version": "4.0.507",
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.506",
25
- "remotion": "4.0.506"
24
+ "@remotion/studio-protocol": "4.0.507",
25
+ "remotion": "4.0.507"
26
26
  },
27
27
  "devDependencies": {
28
- "@remotion/renderer": "4.0.506",
29
- "@remotion/eslint-config-internal": "4.0.506",
28
+ "@remotion/renderer": "4.0.507",
29
+ "@remotion/eslint-config-internal": "4.0.507",
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;