@remotion/studio-shared 4.0.505 → 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.
@@ -1,6 +1,6 @@
1
- import type { AudioCodec, BuiltInEditor, ChromeMode, Codec, ColorSpace, LogLevel, PixelFormat, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
1
+ import type { AudioCodec, BuiltInEditor, ChromeMode, Codec, ColorSpace, DefaultCodingAgent, LogLevel, PixelFormat, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
- import type { ComponentProp, ElementDependency, ElementDragData } from '@remotion/studio-protocol';
3
+ import type { ComponentProp, ElementDragData } from '@remotion/studio-protocol';
4
4
  import type { _InternalTypes, CannotUpdateSequenceReason, CanUpdateEffectPropsResponse, CanUpdateSequencePropsResponseFalse, CanUpdateSequencePropsResponseTrue, CanUpdateSequencePropStatus, ExtrapolateType, InteractivitySchema, InterpolateOutputOption, JsxComponentIdentity, SequenceNodePath, SequencePropsSubscriptionKey, VideoConfigValues } from 'remotion';
5
5
  import type { RecastCodemod, VisualControlChange } from './codemods';
6
6
  import type { EffectClipboardParam, EffectClipboardPasteType, EffectClipboardSnapshot } from './effect-clipboard-data';
@@ -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;
777
+ };
778
+ export type ConfigUpdate = {
779
+ setter: string;
780
+ type: 'delete';
781
+ } | {
782
+ setter: string;
783
+ type: 'set';
784
+ value: ConfigValue;
761
785
  };
762
- export type UpdatePublicLicenseResponse = {
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,19 +800,25 @@ 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;
806
+ export type GetDefaultCodingAgentInfoRequest = {};
807
+ export type GetDefaultCodingAgentInfoResponse = {
808
+ defaultCodingAgent: DefaultCodingAgent | null;
809
+ installedCodingAgents: {
810
+ id: DefaultCodingAgent;
811
+ name: string;
812
+ nameWithType: string;
813
+ iconDataUrl: string | null;
814
+ }[];
779
815
  };
780
- export type UpdateDefaultEditorResponse = {
781
- success: true;
782
- } | {
783
- success: false;
784
- reason: string;
816
+ export type PackageInstallSpec = {
817
+ readonly name: string;
818
+ readonly version: string | null;
785
819
  };
786
820
  export type InstallPackageRequest = {
787
- dependencies: ElementDependency[];
821
+ dependencies: PackageInstallSpec[];
788
822
  };
789
823
  export type InstallPackageResponse = {};
790
824
  export type UndoRequest = {};
@@ -816,6 +850,8 @@ export type ApiRoutes = {
816
850
  '/api/subscribe-to-file-existence': ReqAndRes<SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse>;
817
851
  '/api/remove-render': ReqAndRes<RemoveRenderRequest, undefined>;
818
852
  '/api/open-in-editor': ReqAndRes<OpenInEditorRequest, OpenInEditorResponse>;
853
+ '/api/open-in-coding-agent': ReqAndRes<OpenInCodingAgentRequest, OpenInCodingAgentResponse>;
854
+ '/api/default-coding-agent-info': ReqAndRes<GetDefaultCodingAgentInfoRequest, GetDefaultCodingAgentInfoResponse>;
819
855
  '/api/find-in-file': ReqAndRes<FindInFileRequest, FindInFileResponse>;
820
856
  '/api/open-in-file-explorer': ReqAndRes<OpenInFileExplorerRequest, void>;
821
857
  '/api/register-client-render': ReqAndRes<CompletedClientRender, void>;
@@ -859,10 +895,10 @@ export type ApiRoutes = {
859
895
  '/api/project-info': ReqAndRes<ProjectInfoRequest, ProjectInfoResponse>;
860
896
  '/api/delete-static-file': ReqAndRes<DeleteStaticFileRequest, DeleteStaticFileResponse>;
861
897
  '/api/rename-static-file': ReqAndRes<RenameStaticFileRequest, RenameStaticFileResponse>;
898
+ '/api/copy-render-output-to-asset': ReqAndRes<CopyRenderOutputToAssetRequest, CopyRenderOutputToAssetResponse>;
862
899
  '/api/restart-studio': ReqAndRes<RestartStudioRequest, RestartStudioResponse>;
863
- '/api/update-public-license': ReqAndRes<UpdatePublicLicenseRequest, UpdatePublicLicenseResponse>;
900
+ '/api/update-config': ReqAndRes<UpdateConfigRequest, UpdateConfigResponse>;
864
901
  '/api/default-editor-info': ReqAndRes<GetDefaultEditorInfoRequest, GetDefaultEditorInfoResponse>;
865
- '/api/update-default-editor': ReqAndRes<UpdateDefaultEditorRequest, UpdateDefaultEditorResponse>;
866
902
  '/api/install-package': ReqAndRes<InstallPackageRequest, InstallPackageResponse>;
867
903
  '/api/undo': ReqAndRes<UndoRequest, UndoResponse>;
868
904
  '/api/redo': ReqAndRes<RedoRequest, RedoResponse>;
@@ -0,0 +1,2 @@
1
+ export type ConfigFileChangeType = 'runtime' | 'reload' | 'restart';
2
+ export declare const getConfigFileChangeMessage: (changeType: ConfigFileChangeType) => string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfigFileChangeMessage = void 0;
4
+ const getConfigFileChangeMessage = (changeType) => {
5
+ if (changeType === 'restart') {
6
+ return 'Restart Studio to apply config file changes';
7
+ }
8
+ if (changeType === 'reload') {
9
+ return 'Reload page to apply config file changes';
10
+ }
11
+ return 'Config file changed';
12
+ };
13
+ exports.getConfigFileChangeMessage = getConfigFileChangeMessage;
@@ -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,
@@ -50,6 +50,111 @@ var compositionDragDataToSymbolicatedStack = (dragData) => {
50
50
  originalScriptCode: null
51
51
  };
52
52
  };
53
+ // src/config-file-change.ts
54
+ var getConfigFileChangeMessage = (changeType) => {
55
+ if (changeType === "restart") {
56
+ return "Restart Studio to apply config file changes";
57
+ }
58
+ if (changeType === "reload") {
59
+ return "Reload page to apply config file changes";
60
+ }
61
+ return "Config file changed";
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
+ };
53
158
  // src/default-buffer-state-delay-in-milliseconds.ts
54
159
  var DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS = 300;
55
160
  // src/detect-file-type.ts
@@ -365,7 +470,7 @@ var isFiniteNumber = (value) => {
365
470
  return typeof value === "number" && Number.isFinite(value);
366
471
  };
367
472
  var isKeyframeEasing = (value) => {
368
- 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");
369
474
  };
370
475
  var normalizeKeyframeEasing = (easing) => {
371
476
  if (easing.type !== "spring") {
@@ -619,6 +724,20 @@ var EFFECT_CATALOG = [
619
724
  config: {}
620
725
  }
621
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
+ },
622
741
  {
623
742
  id: "effects-zoom-blur",
624
743
  category: "Blur & Shadow",
@@ -1295,7 +1414,7 @@ var isFiniteNumber2 = (value) => {
1295
1414
  return typeof value === "number" && Number.isFinite(value);
1296
1415
  };
1297
1416
  var isEasing = (value) => {
1298
- 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");
1299
1418
  };
1300
1419
  var normalizeEasing = (easing) => {
1301
1420
  if (easing.type !== "spring") {
@@ -1723,6 +1842,7 @@ var parseKeyframeClipboardData = (value) => {
1723
1842
  };
1724
1843
  // src/keyframe-easing-presets.ts
1725
1844
  var LINEAR_KEYFRAME_EASING = { type: "linear" };
1845
+ var HOLD_KEYFRAME_EASING = { type: "step1" };
1726
1846
  var EASE_KEYFRAME_EASING = {
1727
1847
  type: "bezier",
1728
1848
  x1: 0.42,
@@ -1794,6 +1914,11 @@ var KEYFRAME_EASING_PRESETS = [
1794
1914
  label: "Ease in-out",
1795
1915
  easing: { type: "bezier", x1: 0.42, y1: 0, x2: 0.58, y2: 1 }
1796
1916
  },
1917
+ {
1918
+ id: "hold",
1919
+ label: "Hold",
1920
+ easing: HOLD_KEYFRAME_EASING
1921
+ },
1797
1922
  {
1798
1923
  id: "tail-spring",
1799
1924
  label: "Tail spring",
@@ -3669,6 +3794,7 @@ export {
3669
3794
  getEffectDocumentationLink,
3670
3795
  getEffectCatalogCategories,
3671
3796
  getDefaultOutLocation,
3797
+ getConfigFileChangeMessage,
3672
3798
  getBackKeyframeEasing,
3673
3799
  getAssetSchemaKeys,
3674
3800
  getAllSchemaKeys,
@@ -3676,6 +3802,7 @@ export {
3676
3802
  extraPackages,
3677
3803
  detectFileType,
3678
3804
  descriptions,
3805
+ configMethodLifecycles,
3679
3806
  compositionDragDataToSymbolicatedStack,
3680
3807
  canMoveKeyframesWithoutCollisions,
3681
3808
  canEditEasingForInterpolationFunction,
@@ -3685,6 +3812,7 @@ export {
3685
3812
  QUAD_KEYFRAME_EASING,
3686
3813
  LINEAR_KEYFRAME_EASING,
3687
3814
  KEYFRAME_EASING_PRESETS,
3815
+ HOLD_KEYFRAME_EASING,
3688
3816
  EFFECT_CATALOG,
3689
3817
  EASE_KEYFRAME_EASING,
3690
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
  };
@@ -1,7 +1,10 @@
1
1
  import type { CanUpdateSequencePropsResponse, SequencePropsSubscriptionKey, StaticFile } from 'remotion';
2
2
  import type { CanUpdateDefaultPropsResponse, ElementInstallRequest } from './api-requests';
3
+ import type { ConfigFileChangeType } from './config-file-change';
3
4
  import type { HotMiddlewareMessage } from './hot-middleware';
5
+ import type { RenderDefaults } from './render-defaults';
4
6
  import type { CompletedClientRender, RenderJob } from './render-job';
7
+ import type { StudioRuntimeConfig } from './studio-runtime-config';
5
8
  export type EventSourceEvent = {
6
9
  type: 'new-input-props';
7
10
  newProps: object;
@@ -15,6 +18,14 @@ export type EventSourceEvent = {
15
18
  newEnvVariables: Record<string, string>;
16
19
  } | {
17
20
  type: 'config-file-changed';
21
+ changeType: ConfigFileChangeType;
22
+ originatorClientId: string | null;
23
+ renderDefaults: RenderDefaults;
24
+ studioRuntimeConfig: StudioRuntimeConfig;
25
+ editorName: string | null;
26
+ } | {
27
+ type: 'config-file-reload-failed';
28
+ errorMessage: string;
18
29
  } | {
19
30
  type: 'root-file-changed';
20
31
  } | {
@@ -61,6 +72,9 @@ export type EventSourceEvent = {
61
72
  } | {
62
73
  type: 'element-install-request';
63
74
  request: ElementInstallRequest;
75
+ } | {
76
+ type: 'license-key-install-request';
77
+ licenseKey: string;
64
78
  } | {
65
79
  type: 'visual-control-values-changed';
66
80
  values: Array<{
package/dist/index.d.ts CHANGED
@@ -1,8 +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, ElementInstallExpectedFileState, ElementInstallRequest, ElementInstallSource, EditorPickerId, FindInFileRequest, FindInFileResponse, GetDefaultEditorInfoRequest, GetDefaultEditorInfoResponse, GoogleFontSourceEdit, InsertElementFileConflict, InsertElementRequest, InsertElementResponse, InsertJsxElementRequest, InsertJsxElementResponse, InsertableCompositionElement, InsertableCompositionElementPosition, InstallPackageRequest, InstallPackageResponse, LogStudioErrorRequest, LogStudioErrorResponse, MoveEffectKeyframe, MoveKeyframesRequest, MoveKeyframesResponse, MoveSequenceKeyframe, OpenInEditorRequest, OpenInEditorResponse, OpenInFileExplorerRequest, 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, 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
+ export { getConfigFileChangeMessage, type ConfigFileChangeType, } from './config-file-change';
7
+ export { configMethodLifecycles } from './config-method-lifecycles';
6
8
  export { DEFAULT_BUFFER_STATE_DELAY_IN_MILLISECONDS } from './default-buffer-state-delay-in-milliseconds';
7
9
  export { detectFileType, isImageFileType, type FileDimensions, type FileType, type ImageFileType, } from './detect-file-type';
8
10
  export { parseEasingClipboardData, parseEasingClipboardDataResult, type EasingClipboardData, type EasingClipboardDataParseResult, } from './easing-clipboard-data';
@@ -17,7 +19,7 @@ export { getProjectName } from './get-project-name';
17
19
  export type { GitSource } from './git-source';
18
20
  export { HotMiddlewareMessage, HotMiddlewareOptions, ModuleMap, hotMiddlewareOptions, } from './hot-middleware';
19
21
  export { isKeyframeClipboardFieldType, parseKeyframeClipboardData, parseKeyframeClipboardDataResult, type KeyframeClipboardData, type KeyframeClipboardDataParseResult, type KeyframeClipboardFieldType, } from './keyframe-clipboard-data';
20
- 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';
21
23
  export { canEditEasingForInterpolationFunction, getKeyframeInterpolationFunction, getKeyframeInterpolationFunctionForSchemaField, isInteractivitySchemaFieldKeyframable, isKeyframeInterpolationFunction, isSchemaFieldKeyframable, keyframeInterpolationFunctions, type KeyframeInterpolationFunction, } from './keyframe-interpolation-function';
22
24
  export { DEFAULT_TIMELINE_TRACKS } from './max-timeline-tracks';
23
25
  export { Pkgs, apiDocs, descriptions, extraPackages, installableMap, packages, type ExtraPackage, } from './package-info';
package/dist/index.js CHANGED
@@ -14,14 +14,18 @@ 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.DEFAULT_SPRING_EASING = 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.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 = 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; } });
22
22
  __exportStar(require("./api-requests"), exports);
23
23
  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
+ const config_file_change_1 = require("./config-file-change");
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; } });
25
29
  const default_buffer_state_delay_in_milliseconds_1 = require("./default-buffer-state-delay-in-milliseconds");
26
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; } });
27
31
  const detect_file_type_1 = require("./detect-file-type");
@@ -62,6 +66,7 @@ Object.defineProperty(exports, "parseKeyframeClipboardDataResult", { enumerable:
62
66
  const keyframe_easing_presets_1 = require("./keyframe-easing-presets");
63
67
  Object.defineProperty(exports, "CUBIC_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.CUBIC_KEYFRAME_EASING; } });
64
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; } });
65
70
  Object.defineProperty(exports, "KEYFRAME_EASING_PRESETS", { enumerable: true, get: function () { return keyframe_easing_presets_1.KEYFRAME_EASING_PRESETS; } });
66
71
  Object.defineProperty(exports, "LINEAR_KEYFRAME_EASING", { enumerable: true, get: function () { return keyframe_easing_presets_1.LINEAR_KEYFRAME_EASING; } });
67
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.505",
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.505",
25
- "remotion": "4.0.505"
24
+ "@remotion/studio-protocol": "4.0.507",
25
+ "remotion": "4.0.507"
26
26
  },
27
27
  "devDependencies": {
28
- "@remotion/renderer": "4.0.505",
29
- "@remotion/eslint-config-internal": "4.0.505",
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;