remotion 4.0.533 → 4.0.535

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.
Files changed (107) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/AbsoluteFill.d.ts +1 -6
  3. package/dist/cjs/AbsoluteFill.js +1 -1
  4. package/dist/cjs/Composition.js +15 -20
  5. package/dist/cjs/CompositionManager.d.ts +4 -4
  6. package/dist/cjs/CompositionManagerContext.d.ts +1 -6
  7. package/dist/cjs/CompositionManagerContext.js +0 -4
  8. package/dist/cjs/CompositionManagerProvider.js +77 -172
  9. package/dist/cjs/CompositionRegistryProvider.d.ts +5 -0
  10. package/dist/cjs/CompositionRegistryProvider.js +142 -0
  11. package/dist/cjs/DefaultPremountContext.d.ts +1 -0
  12. package/dist/cjs/DefaultPremountContext.js +6 -0
  13. package/dist/cjs/Folder.js +11 -20
  14. package/dist/cjs/HtmlInCanvas.d.ts +2 -2
  15. package/dist/cjs/HtmlInCanvas.js +179 -31
  16. package/dist/cjs/IFrame.js +40 -8
  17. package/dist/cjs/Img.js +2 -1
  18. package/dist/cjs/Interactive.d.ts +12 -0
  19. package/dist/cjs/Interactive.js +19 -8
  20. package/dist/cjs/RemotionRoot.js +2 -1
  21. package/dist/cjs/Sequence.d.ts +6 -2
  22. package/dist/cjs/Sequence.js +107 -40
  23. package/dist/cjs/SequenceActivityBoundary.d.ts +10 -0
  24. package/dist/cjs/SequenceActivityBoundary.js +88 -0
  25. package/dist/cjs/SequenceActivityBudget.d.ts +13 -0
  26. package/dist/cjs/SequenceActivityBudget.js +181 -0
  27. package/dist/cjs/SequenceManager.d.ts +13 -29
  28. package/dist/cjs/SequenceManager.js +36 -176
  29. package/dist/cjs/SequenceRegistryProvider.d.ts +4 -0
  30. package/dist/cjs/SequenceRegistryProvider.js +292 -0
  31. package/dist/cjs/Track.d.ts +13 -0
  32. package/dist/cjs/Track.js +33 -0
  33. package/dist/cjs/animated-image/AnimatedImage.js +42 -30
  34. package/dist/cjs/audio/AudioForPreview.js +54 -41
  35. package/dist/cjs/audio/get-audio-sync-anchor-tolerance.d.ts +1 -0
  36. package/dist/cjs/audio/get-audio-sync-anchor-tolerance.js +11 -0
  37. package/dist/cjs/audio/use-audio-context.js +26 -7
  38. package/dist/cjs/canvas-image/CanvasImage.js +4 -2
  39. package/dist/cjs/committed-metadata.d.ts +68 -0
  40. package/dist/cjs/committed-metadata.js +39 -0
  41. package/dist/cjs/component-identity.d.ts +6 -0
  42. package/dist/cjs/component-identity.js +39 -0
  43. package/dist/cjs/composition-registry-fallback.d.ts +14 -0
  44. package/dist/cjs/composition-registry-fallback.js +35 -0
  45. package/dist/cjs/create-element-source-proxy.d.ts +4 -0
  46. package/dist/cjs/create-element-source-proxy.js +46 -0
  47. package/dist/cjs/default-premount-in-seconds.d.ts +3 -0
  48. package/dist/cjs/default-premount-in-seconds.js +12 -0
  49. package/dist/cjs/effects/Solid.js +5 -3
  50. package/dist/cjs/effects/canvas-pool.d.ts +1 -0
  51. package/dist/cjs/effects/canvas-pool.js +15 -10
  52. package/dist/cjs/effects/run-effect-chain.js +3 -3
  53. package/dist/cjs/effects/use-memoized-effects.d.ts +3 -1
  54. package/dist/cjs/effects/use-memoized-effects.js +104 -21
  55. package/dist/cjs/enable-sequence-stack-traces.d.ts +2 -8
  56. package/dist/cjs/enable-sequence-stack-traces.js +7 -38
  57. package/dist/cjs/evaluate-source-expressions.d.ts +5 -0
  58. package/dist/cjs/evaluate-source-expressions.js +98 -0
  59. package/dist/cjs/freeze.js +9 -8
  60. package/dist/cjs/index.d.ts +2 -2
  61. package/dist/cjs/index.js +3 -3
  62. package/dist/cjs/interactivity-schema.d.ts +45 -9
  63. package/dist/cjs/interactivity-schema.js +30 -3
  64. package/dist/cjs/internals.d.ts +113 -27
  65. package/dist/cjs/internals.js +37 -7
  66. package/dist/cjs/interpolate-keyframed-status.d.ts +4 -0
  67. package/dist/cjs/interpolate-keyframed-status.js +38 -1
  68. package/dist/cjs/interpolate.d.ts +12 -0
  69. package/dist/cjs/interpolate.js +7 -0
  70. package/dist/cjs/no-react.d.ts +6 -0
  71. package/dist/cjs/no-react.js +9 -0
  72. package/dist/cjs/optimistic-sequence-deletion.d.ts +17 -0
  73. package/dist/cjs/optimistic-sequence-deletion.js +114 -0
  74. package/dist/cjs/registry-store.d.ts +17 -0
  75. package/dist/cjs/registry-store.js +68 -0
  76. package/dist/cjs/sequence-activity-context.d.ts +13 -0
  77. package/dist/cjs/sequence-activity-context.js +20 -0
  78. package/dist/cjs/sequence-activity-defaults.d.ts +1 -0
  79. package/dist/cjs/sequence-activity-defaults.js +4 -0
  80. package/dist/cjs/sequence-outline.js +1 -2
  81. package/dist/cjs/sequence-registry-context.d.ts +26 -0
  82. package/dist/cjs/sequence-registry-context.js +71 -0
  83. package/dist/cjs/series/index.d.ts +2 -1
  84. package/dist/cjs/series/index.js +15 -5
  85. package/dist/cjs/timeline-position-state.js +11 -3
  86. package/dist/cjs/timeline-track-context.d.ts +10 -0
  87. package/dist/cjs/timeline-track-context.js +6 -0
  88. package/dist/cjs/use-lazy-component.js +29 -15
  89. package/dist/cjs/use-media-in-timeline.d.ts +7 -14
  90. package/dist/cjs/use-media-in-timeline.js +29 -119
  91. package/dist/cjs/use-premounting.js +3 -4
  92. package/dist/cjs/use-schema.d.ts +32 -18
  93. package/dist/cjs/use-sequence-registration.d.ts +1 -1
  94. package/dist/cjs/use-sequence-registration.js +22 -6
  95. package/dist/cjs/use-video.d.ts +7 -2
  96. package/dist/cjs/use-video.js +11 -3
  97. package/dist/cjs/version.d.ts +1 -1
  98. package/dist/cjs/version.js +1 -1
  99. package/dist/cjs/video/VideoForPreview.js +55 -42
  100. package/dist/cjs/video/html5-video.js +1 -1
  101. package/dist/cjs/with-interactivity-schema.js +48 -16
  102. package/dist/cjs/wrap-remotion-context.d.ts +17 -2
  103. package/dist/cjs/wrap-remotion-context.js +108 -4
  104. package/dist/esm/index.mjs +3526 -2259
  105. package/dist/esm/no-react.mjs +149 -35
  106. package/dist/esm/version.mjs +1 -1
  107. package/package.json +2 -2
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var _a;
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.useSequenceActivityAdmission = exports.SequenceActivityBudgetProvider = void 0;
38
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
+ const react_1 = __importStar(require("react"));
40
+ const registry_store_js_1 = require("./registry-store.js");
41
+ const sequence_activity_context_js_1 = require("./sequence-activity-context.js");
42
+ const TimelineContext_js_1 = require("./TimelineContext.js");
43
+ const use_sync_external_store_js_1 = require("./use-sync-external-store.js");
44
+ // Count nested dormant content too: one admitted scene must not be able to
45
+ // recursively mount another thousand expensive scenes behind its Activity.
46
+ const useCommitEffect = (_a = react_1.default.useInsertionEffect) !== null && _a !== void 0 ? _a : react_1.default.useLayoutEffect;
47
+ const createActivityBudget = () => {
48
+ const registry = (0, registry_store_js_1.createRegistryStore)(new Set());
49
+ const candidates = new Map();
50
+ let frame = {};
51
+ let limit = sequence_activity_context_js_1.DEFAULT_SEQUENCE_ACTIVITY_LIMIT;
52
+ let scheduled = false;
53
+ const schedule = () => {
54
+ if (scheduled) {
55
+ return;
56
+ }
57
+ scheduled = true;
58
+ // Insertion effects run in hidden Activities too. Publish only after the
59
+ // whole commit, once all candidates and the root playhead are current.
60
+ queueMicrotask(() => {
61
+ scheduled = false;
62
+ const ranked = [...candidates.values()]
63
+ .filter((candidate) => candidate.end > candidate.from)
64
+ .map((candidate) => {
65
+ var _a;
66
+ const currentFrame = (_a = frame[candidate.compositionId]) !== null && _a !== void 0 ? _a : 0;
67
+ return {
68
+ candidate,
69
+ distance: Math.max(0, candidate.from - currentFrame, currentFrame - candidate.end),
70
+ };
71
+ })
72
+ .sort((a, b) => a.distance - b.distance);
73
+ const selected = new Set();
74
+ for (const { candidate } of ranked) {
75
+ const ancestors = [];
76
+ let ancestor = candidate;
77
+ while (ancestor && !selected.has(ancestor.id)) {
78
+ ancestors.push(ancestor.id);
79
+ if (selected.size + ancestors.length > limit) {
80
+ break;
81
+ }
82
+ ancestor =
83
+ ancestor.parent === null
84
+ ? undefined
85
+ : candidates.get(ancestor.parent);
86
+ }
87
+ if (selected.size + ancestors.length > limit) {
88
+ continue;
89
+ }
90
+ for (const id of ancestors) {
91
+ selected.add(id);
92
+ }
93
+ if (selected.size === limit) {
94
+ break;
95
+ }
96
+ }
97
+ // Reserve nearby visible trees too, so becoming dormant retains their
98
+ // state immediately. All other visible trees bypass admission. Reserved
99
+ // IDs bound dormant content, including during a large seek.
100
+ registry.setSnapshot((previous) => previous.size === selected.size &&
101
+ [...previous].every((id) => selected.has(id))
102
+ ? previous
103
+ : selected);
104
+ });
105
+ };
106
+ return {
107
+ ...registry,
108
+ setLimit: (next) => {
109
+ if (limit !== next) {
110
+ limit = next;
111
+ schedule();
112
+ }
113
+ },
114
+ setFrame: (next) => {
115
+ frame = next;
116
+ schedule();
117
+ },
118
+ register: (candidate) => {
119
+ candidates.set(candidate.id, candidate);
120
+ schedule();
121
+ return () => {
122
+ candidates.delete(candidate.id);
123
+ schedule();
124
+ };
125
+ },
126
+ };
127
+ };
128
+ const ActivityBudgetContext = (0, react_1.createContext)(null);
129
+ const InactiveTimelineContext = (0, react_1.createContext)(null);
130
+ const emptySelection = new Set();
131
+ const ActivitySelectionContext = (0, react_1.createContext)(emptySelection);
132
+ const SequenceActivityBudgetProvider = ({ children }) => {
133
+ var _a;
134
+ const enabled = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivityContext);
135
+ const settings = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivitySettingsContext);
136
+ const limit = (_a = settings === null || settings === void 0 ? void 0 : settings.limit) !== null && _a !== void 0 ? _a : sequence_activity_context_js_1.DEFAULT_SEQUENCE_ACTIVITY_LIMIT;
137
+ const admitting = enabled && limit > 0;
138
+ const [budget] = (0, react_1.useState)(createActivityBudget);
139
+ const timeline = (0, react_1.useContext)(admitting ? TimelineContext_js_1.TimelineContext : InactiveTimelineContext);
140
+ const selected = (0, use_sync_external_store_js_1.useSyncExternalStore)(budget.subscribe, budget.getSnapshot, budget.getSnapshot);
141
+ // Shrinking the setting must not keep the old, larger selection for a commit
142
+ // while the budget schedules its new snapshot.
143
+ const admitted = (0, react_1.useMemo)(() => !admitting
144
+ ? emptySelection
145
+ : selected.size > limit
146
+ ? new Set([...selected].slice(0, limit))
147
+ : selected, [admitting, limit, selected]);
148
+ useCommitEffect(() => {
149
+ budget.setLimit(admitting ? limit : 0);
150
+ if (admitting && timeline !== null) {
151
+ budget.setFrame(timeline.frame);
152
+ }
153
+ }, [admitting, budget, limit, timeline]);
154
+ return (jsx_runtime_1.jsx(ActivityBudgetContext.Provider, { value: admitting ? budget : null, children: jsx_runtime_1.jsx(ActivitySelectionContext.Provider, { value: admitted, children: children }) }));
155
+ };
156
+ exports.SequenceActivityBudgetProvider = SequenceActivityBudgetProvider;
157
+ const useSequenceActivityAdmission = (candidate) => {
158
+ var _a, _b, _c, _d, _e;
159
+ const budget = (0, react_1.useContext)(ActivityBudgetContext);
160
+ const enabled = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivityContext);
161
+ const settings = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivitySettingsContext);
162
+ const unlimited = enabled && (settings === null || settings === void 0 ? void 0 : settings.limit) === -1;
163
+ const selected = (0, react_1.useContext)(ActivitySelectionContext);
164
+ const id = (_a = candidate === null || candidate === void 0 ? void 0 : candidate.id) !== null && _a !== void 0 ? _a : null;
165
+ const parent = (_b = candidate === null || candidate === void 0 ? void 0 : candidate.parent) !== null && _b !== void 0 ? _b : null;
166
+ const compositionId = (_c = candidate === null || candidate === void 0 ? void 0 : candidate.compositionId) !== null && _c !== void 0 ? _c : null;
167
+ const from = (_d = candidate === null || candidate === void 0 ? void 0 : candidate.from) !== null && _d !== void 0 ? _d : null;
168
+ const end = (_e = candidate === null || candidate === void 0 ? void 0 : candidate.end) !== null && _e !== void 0 ? _e : null;
169
+ const committedCandidate = (0, react_1.useMemo)(() => id !== null && compositionId !== null && from !== null && end !== null
170
+ ? { id, parent, compositionId, from, end }
171
+ : null, [id, parent, compositionId, from, end]);
172
+ useCommitEffect(() => {
173
+ if (budget !== null && committedCandidate !== null) {
174
+ return budget.register(committedCandidate);
175
+ }
176
+ }, [budget, committedCandidate]);
177
+ // Unlimited discovery admits children on their first render, without waiting
178
+ // for their registration and a subsequent budget publication.
179
+ return id !== null && (unlimited || selected.has(id));
180
+ };
181
+ exports.useSequenceActivityAdmission = useSequenceActivityAdmission;
@@ -1,27 +1,9 @@
1
1
  import React from 'react';
2
- import type { TSequence } from './CompositionManager.js';
2
+ export * from './sequence-registry-context.js';
3
+ import { type SequenceManagerActions, type SequenceNodePath } from './sequence-registry-context.js';
3
4
  import type { CanUpdateSequencePropStatus, DragOverrideValue, GetDragOverrides, GetEffectDragOverrides, PropStatuses } from './use-schema.js';
5
+ import type { SourceNumericValue } from './use-schema.js';
4
6
  import type { VideoConfigValues } from './video-config.js';
5
- export type SequenceManagerContext = {
6
- registerSequence: (seq: TSequence) => void;
7
- updateSequence: ((seq: TSequence) => void) | null;
8
- unregisterSequence: (id: string) => void;
9
- sequences: TSequence[];
10
- };
11
- export type SequenceManagerRef = {
12
- current: TSequence[];
13
- };
14
- export type SequenceNodePath = Array<string | number>;
15
- type SequenceManagerActions = Pick<SequenceManagerContext, 'registerSequence' | 'updateSequence' | 'unregisterSequence'>;
16
- export declare const SequenceManagerActionsContext: React.Context<SequenceManagerActions>;
17
- export declare const SequenceManager: React.Context<SequenceManagerContext>;
18
- export declare const useSequenceManagerSequences: () => TSequence[];
19
- export declare const SequenceManagerRefContext: React.Context<SequenceManagerRef>;
20
- export declare const SequenceRegistrationContext: React.Context<boolean>;
21
- export declare const DisableSequenceRegistrationContext: React.Context<boolean>;
22
- export declare const DisableSequenceRegistrationProvider: React.FC<{
23
- readonly children: React.ReactNode;
24
- }>;
25
7
  export type VisualModePropStatuses = {
26
8
  propStatuses: PropStatuses;
27
9
  };
@@ -66,12 +48,12 @@ export type VisualModeBatchSetters = {
66
48
  readonly value: DragOverrideValue;
67
49
  }[]) => void;
68
50
  };
69
- export type CanUpdateEffectPropsResponseTrue = {
51
+ export type CanUpdateEffectPropsResponseTrue<Numeric = SourceNumericValue> = {
70
52
  canUpdate: true;
71
53
  callee: string;
72
54
  importPath: string | null;
73
55
  effectIndex: number;
74
- props: Record<string, CanUpdateSequencePropStatus>;
56
+ props: Record<string, CanUpdateSequencePropStatus<Numeric>>;
75
57
  };
76
58
  export type CannotUpdateEffectReason = 'not-found' | 'computed' | 'not-call-expression';
77
59
  export type CannotUpdateSequenceReason = 'not-found' | 'error';
@@ -80,24 +62,25 @@ export type CanUpdateEffectPropsResponseFalse = {
80
62
  effectIndex: number;
81
63
  reason: CannotUpdateEffectReason;
82
64
  };
83
- export type CanUpdateEffectPropsResponse = CanUpdateEffectPropsResponseTrue | CanUpdateEffectPropsResponseFalse;
84
- export type CanUpdateSequencePropsResponseTrue = {
65
+ export type CanUpdateEffectPropsResponse<Numeric = SourceNumericValue> = CanUpdateEffectPropsResponseTrue<Numeric> | CanUpdateEffectPropsResponseFalse;
66
+ export type CanUpdateSequencePropsResponseTrue<Numeric = SourceNumericValue> = {
85
67
  canUpdate: true;
86
- props: Record<string, CanUpdateSequencePropStatus>;
87
- effects: CanUpdateEffectPropsResponse[];
68
+ props: Record<string, CanUpdateSequencePropStatus<Numeric>>;
69
+ effects: CanUpdateEffectPropsResponse<Numeric>[];
88
70
  };
89
71
  export type CanUpdateSequencePropsResponseFalse = {
90
72
  canUpdate: false;
91
73
  reason: CannotUpdateSequenceReason;
92
74
  };
93
- export type CanUpdateSequencePropsResponse = CanUpdateSequencePropsResponseTrue | CanUpdateSequencePropsResponseFalse;
75
+ export type CanUpdateSequencePropsResponse<Numeric = SourceNumericValue> = CanUpdateSequencePropsResponseTrue<Numeric> | CanUpdateSequencePropsResponseFalse;
94
76
  export declare const makeSequencePropsSubscriptionKey: (key: SequencePropsSubscriptionKey) => string;
95
77
  export declare const VisualModePropStatusesContext: React.Context<VisualModePropStatuses>;
96
78
  export declare const VisualModePropStatusesRefContext: React.Context<VisualModePropStatusesRef>;
97
79
  export declare const VisualModeDragOverridesContext: React.Context<VisualModeDragOverrides>;
80
+ export declare const VisualModeDragOverridesRefContext: React.Context<React.RefObject<VisualModeDragOverrides>>;
98
81
  export declare const useDragOverridesForNodePath: (nodePath: SequencePropsSubscriptionKey | null) => Record<string, DragOverrideValue>;
99
82
  export declare const useActiveFromDragOverrideKeys: () => ReadonlySet<string>;
100
- export declare const useEffectDragOverridesForNodePath: (nodePath: SequencePropsSubscriptionKey | null, effectCount: number) => Record<string, Record<string, DragOverrideValue>>;
83
+ export declare const useEffectDragOverridesForNodePath: (nodePath: SequencePropsSubscriptionKey | null) => Record<string, Record<string, DragOverrideValue>>;
101
84
  export declare const VisualModeSettersContext: React.Context<VisualModeSetters>;
102
85
  export declare const VisualModeBatchSettersContext: React.Context<VisualModeBatchSetters | null>;
103
86
  export type SequencePropsSubscriptionKey = {
@@ -105,6 +88,7 @@ export type SequencePropsSubscriptionKey = {
105
88
  nodePath: SequenceNodePath;
106
89
  sequenceKeys: string[];
107
90
  effectKeys: string[][];
91
+ /** Evaluation context of a rendered instance. Never part of source identity. */
108
92
  videoConfigValues: VideoConfigValues | null;
109
93
  };
110
94
  export type { VideoConfigValues } from './video-config.js';
@@ -32,64 +32,34 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SequenceManagerProvider = exports.VisualModeBatchSettersContext = exports.VisualModeSettersContext = exports.useEffectDragOverridesForNodePath = exports.useActiveFromDragOverrideKeys = exports.useDragOverridesForNodePath = exports.VisualModeDragOverridesContext = exports.VisualModePropStatusesRefContext = exports.VisualModePropStatusesContext = exports.makeSequencePropsSubscriptionKey = exports.VisualModeDragOverridesSubscriptionContext = exports.DisableSequenceRegistrationProvider = exports.DisableSequenceRegistrationContext = exports.SequenceRegistrationContext = exports.SequenceManagerRefContext = exports.useSequenceManagerSequences = exports.SequenceManager = exports.SequenceManagerActionsContext = void 0;
39
+ exports.SequenceManagerProvider = exports.VisualModeBatchSettersContext = exports.VisualModeSettersContext = exports.useEffectDragOverridesForNodePath = exports.useActiveFromDragOverrideKeys = exports.useDragOverridesForNodePath = exports.VisualModeDragOverridesRefContext = exports.VisualModeDragOverridesContext = exports.VisualModePropStatusesRefContext = exports.VisualModePropStatusesContext = exports.makeSequencePropsSubscriptionKey = exports.VisualModeDragOverridesSubscriptionContext = void 0;
37
40
  const jsx_runtime_1 = require("react/jsx-runtime");
38
41
  const react_1 = __importStar(require("react"));
39
- const sequence_order_marker_js_1 = require("./sequence-order-marker.js");
42
+ __exportStar(require("./sequence-registry-context.js"), exports);
43
+ const sequence_activity_context_js_1 = require("./sequence-activity-context.js");
44
+ const sequence_registry_context_js_1 = require("./sequence-registry-context.js");
45
+ const SequenceActivityBudget_js_1 = require("./SequenceActivityBudget.js");
46
+ const SequenceRegistryProvider_js_1 = require("./SequenceRegistryProvider.js");
40
47
  const use_remotion_environment_js_1 = require("./use-remotion-environment.js");
41
48
  const use_sync_external_store_js_1 = require("./use-sync-external-store.js");
42
49
  const useIsomorphicLayoutEffect = typeof window === 'undefined' ? react_1.default.useEffect : react_1.default.useLayoutEffect;
43
- const defaultSequenceManager = {
44
- registerSequence: () => {
45
- throw new Error('SequenceManagerContext not initialized');
46
- },
47
- updateSequence: null,
48
- unregisterSequence: () => {
49
- throw new Error('SequenceManagerContext not initialized');
50
- },
51
- sequences: [],
52
- };
53
- exports.SequenceManagerActionsContext = react_1.default.createContext({
54
- registerSequence: defaultSequenceManager.registerSequence,
55
- updateSequence: defaultSequenceManager.updateSequence,
56
- unregisterSequence: defaultSequenceManager.unregisterSequence,
57
- });
58
- exports.SequenceManager = react_1.default.createContext(defaultSequenceManager);
59
- const NativeSequenceManagerProvider = exports.SequenceManager.Provider;
60
- const SequenceManagerProviderWithActions = ({ value, children }) => {
61
- const actions = (0, react_1.useMemo)(() => ({
62
- registerSequence: value.registerSequence,
63
- updateSequence: value.updateSequence,
64
- unregisterSequence: value.unregisterSequence,
65
- }), [value.registerSequence, value.updateSequence, value.unregisterSequence]);
66
- return (jsx_runtime_1.jsx(exports.SequenceManagerActionsContext.Provider, { value: actions, children: jsx_runtime_1.jsx(NativeSequenceManagerProvider, { value: value, children: children }) }));
67
- };
68
- // Keep custom SequenceManager.Provider trees in sync with the stable actions
69
- // context while preserving the legacy reactive sequence-list context.
70
- Object.defineProperty(exports.SequenceManager, 'Provider', {
71
- value: SequenceManagerProviderWithActions,
72
- });
73
- const useSequenceManagerSequences = () => {
74
- return (0, react_1.useContext)(exports.SequenceManager).sequences;
75
- };
76
- exports.useSequenceManagerSequences = useSequenceManagerSequences;
77
- exports.SequenceManagerRefContext = react_1.default.createContext({
78
- current: [],
79
- });
80
- exports.SequenceRegistrationContext = react_1.default.createContext(false);
81
- exports.DisableSequenceRegistrationContext = react_1.default.createContext(false);
82
- const DisableSequenceRegistrationProvider = ({ children }) => {
83
- return react_1.default.createElement(exports.DisableSequenceRegistrationContext.Provider, { value: true }, children);
84
- };
85
- exports.DisableSequenceRegistrationProvider = DisableSequenceRegistrationProvider;
86
50
  exports.VisualModeDragOverridesSubscriptionContext = react_1.default.createContext(null);
87
51
  const ActiveFromDragOverrideKeysContext = react_1.default.createContext(null);
88
52
  const SequenceManagerScopeProviders = ({ children, dragOverridesSubscription, fromKeys }) => {
89
- const manager = (0, react_1.useContext)(exports.SequenceManagerActionsContext);
53
+ const { isStudio } = (0, use_remotion_environment_js_1.useRemotionEnvironment)();
54
+ const activitySettings = (0, react_1.useContext)(sequence_activity_context_js_1.SequenceActivitySettingsContext);
55
+ const commitRegistrationEnabled = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceCommitRegistrationContext);
56
+ const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
90
57
  const scopedDragOverridesSubscription = (0, react_1.useMemo)(() => ({ ...dragOverridesSubscription, manager }), [dragOverridesSubscription, manager]);
91
58
  const activeFromDragOverrideKeys = (0, react_1.useMemo)(() => ({ manager, keys: fromKeys }), [fromKeys, manager]);
92
- return (jsx_runtime_1.jsx(ActiveFromDragOverrideKeysContext.Provider, { value: activeFromDragOverrideKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesSubscriptionContext.Provider, { value: scopedDragOverridesSubscription, children: children }) }));
59
+ return (jsx_runtime_1.jsx(ActiveFromDragOverrideKeysContext.Provider, { value: activeFromDragOverrideKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesSubscriptionContext.Provider, { value: scopedDragOverridesSubscription, children: jsx_runtime_1.jsx(sequence_activity_context_js_1.SequenceActivityContext.Provider, { value: (activitySettings === null || activitySettings === void 0 ? void 0 : activitySettings.enabled) === true &&
60
+ isStudio &&
61
+ commitRegistrationEnabled &&
62
+ typeof react_1.default.Activity !== 'undefined', children: jsx_runtime_1.jsx(SequenceActivityBudget_js_1.SequenceActivityBudgetProvider, { children: children }) }) }) }));
93
63
  };
94
64
  const emptyDragOverrides = {};
95
65
  const emptyFromOverrideKeys = new Set();
@@ -104,24 +74,20 @@ exports.VisualModePropStatusesContext = react_1.default.createContext({
104
74
  exports.VisualModePropStatusesRefContext = react_1.default.createContext({
105
75
  current: {},
106
76
  });
107
- exports.VisualModeDragOverridesContext = react_1.default.createContext({
77
+ const defaultVisualModeDragOverrides = {
108
78
  getDragOverrides: () => {
109
79
  throw new Error('VisualModeDragOverridesContext not initialized');
110
80
  },
111
81
  getEffectDragOverrides: () => {
112
82
  throw new Error('VisualModeDragOverridesContext not initialized');
113
83
  },
114
- });
115
- /* eslint-disable react-hooks/rules-of-hooks */
84
+ };
85
+ exports.VisualModeDragOverridesContext = react_1.default.createContext(defaultVisualModeDragOverrides);
86
+ exports.VisualModeDragOverridesRefContext = react_1.default.createContext({ current: defaultVisualModeDragOverrides });
116
87
  const useDragOverridesForNodePath = (nodePath) => {
117
88
  const subscription = (0, react_1.useContext)(exports.VisualModeDragOverridesSubscriptionContext);
118
- const manager = (0, react_1.useContext)(exports.SequenceManagerActionsContext);
89
+ const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
119
90
  const scopedSubscription = (subscription === null || subscription === void 0 ? void 0 : subscription.manager) === manager ? subscription : null;
120
- // Legacy providers only supply VisualModeDragOverridesContext. Its presence is
121
- // fixed for the lifetime of a mounted tree.
122
- const legacy = scopedSubscription === null
123
- ? (0, react_1.useContext)(exports.VisualModeDragOverridesContext)
124
- : null;
125
91
  const key = nodePath === null ? null : (0, exports.makeSequencePropsSubscriptionKey)(nodePath);
126
92
  const subscribe = (0, react_1.useCallback)((listener) => {
127
93
  var _a;
@@ -131,27 +97,19 @@ const useDragOverridesForNodePath = (nodePath) => {
131
97
  var _a;
132
98
  return (_a = scopedSubscription === null || scopedSubscription === void 0 ? void 0 : scopedSubscription.getSnapshot(key)) !== null && _a !== void 0 ? _a : emptyDragOverrides;
133
99
  }, [key, scopedSubscription]);
134
- const overrides = (0, use_sync_external_store_js_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
135
- return legacy !== null && nodePath !== null
136
- ? legacy.getDragOverrides(nodePath)
137
- : overrides;
100
+ return (0, use_sync_external_store_js_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
138
101
  };
139
102
  exports.useDragOverridesForNodePath = useDragOverridesForNodePath;
140
103
  const useActiveFromDragOverrideKeys = () => {
141
104
  const snapshot = (0, react_1.useContext)(ActiveFromDragOverrideKeysContext);
142
- const manager = (0, react_1.useContext)(exports.SequenceManagerActionsContext);
105
+ const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
143
106
  return (snapshot === null || snapshot === void 0 ? void 0 : snapshot.manager) === manager ? snapshot.keys : emptyFromOverrideKeys;
144
107
  };
145
108
  exports.useActiveFromDragOverrideKeys = useActiveFromDragOverrideKeys;
146
- const useEffectDragOverridesForNodePath = (nodePath, effectCount) => {
109
+ const useEffectDragOverridesForNodePath = (nodePath) => {
147
110
  const subscription = (0, react_1.useContext)(exports.VisualModeDragOverridesSubscriptionContext);
148
- const manager = (0, react_1.useContext)(exports.SequenceManagerActionsContext);
111
+ const manager = (0, react_1.useContext)(sequence_registry_context_js_1.SequenceManagerActionsContext);
149
112
  const scopedSubscription = (subscription === null || subscription === void 0 ? void 0 : subscription.manager) === manager ? subscription : null;
150
- // Legacy providers only supply VisualModeDragOverridesContext. Its presence is
151
- // fixed for the lifetime of a mounted tree.
152
- const legacy = scopedSubscription === null
153
- ? (0, react_1.useContext)(exports.VisualModeDragOverridesContext)
154
- : null;
155
113
  const key = nodePath === null ? null : (0, exports.makeSequencePropsSubscriptionKey)(nodePath);
156
114
  const subscribe = (0, react_1.useCallback)((listener) => {
157
115
  var _a;
@@ -161,18 +119,9 @@ const useEffectDragOverridesForNodePath = (nodePath, effectCount) => {
161
119
  var _a;
162
120
  return (_a = scopedSubscription === null || scopedSubscription === void 0 ? void 0 : scopedSubscription.getEffectSnapshot(key)) !== null && _a !== void 0 ? _a : emptyEffectDragOverrides;
163
121
  }, [key, scopedSubscription]);
164
- const overrides = (0, use_sync_external_store_js_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
165
- if (legacy !== null && nodePath !== null) {
166
- const legacyOverrides = {};
167
- for (let index = 0; index < effectCount; index++) {
168
- legacyOverrides[index] = legacy.getEffectDragOverrides(nodePath, index);
169
- }
170
- return legacyOverrides;
171
- }
172
- return overrides;
122
+ return (0, use_sync_external_store_js_1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
173
123
  };
174
124
  exports.useEffectDragOverridesForNodePath = useEffectDragOverridesForNodePath;
175
- /* eslint-enable react-hooks/rules-of-hooks */
176
125
  exports.VisualModeSettersContext = react_1.default.createContext({
177
126
  setDragOverrides: () => {
178
127
  throw new Error('VisualModeSettersContext not initialized');
@@ -196,13 +145,6 @@ exports.VisualModeSettersContext = react_1.default.createContext({
196
145
  exports.VisualModeBatchSettersContext = react_1.default.createContext(null);
197
146
  const effectDragOverridesKey = (nodePath, effectIndex) => `${(0, exports.makeSequencePropsSubscriptionKey)(nodePath)}.effects.${effectIndex}`;
198
147
  const SequenceManagerProvider = ({ children }) => {
199
- const { isStudio } = (0, use_remotion_environment_js_1.useRemotionEnvironment)();
200
- const [sequenceManagerId] = (0, react_1.useState)(() => String(Math.random()));
201
- const committedOrderRef = (0, react_1.useRef)(null);
202
- const committedOrderIdsRef = (0, react_1.useRef)(null);
203
- const [sequences, setSequences] = (0, react_1.useState)([]);
204
- const sequencesRef = (0, react_1.useRef)(sequences);
205
- sequencesRef.current = sequences;
206
148
  const [dragOverrideState, setDragOverrideState] = (0, react_1.useState)(() => ({
207
149
  overrides: {},
208
150
  fromKeys: new Set(),
@@ -220,7 +162,9 @@ const SequenceManagerProvider = ({ children }) => {
220
162
  });
221
163
  const [propStatuses, setPropStatusesMapState] = (0, react_1.useState)({});
222
164
  const propStatusesRef = (0, react_1.useRef)(propStatuses);
223
- propStatusesRef.current = propStatuses;
165
+ useIsomorphicLayoutEffect(() => {
166
+ propStatusesRef.current = propStatuses;
167
+ }, [propStatuses]);
224
168
  const setDragOverridesBatch = (0, react_1.useCallback)((overrides) => {
225
169
  setDragOverrideState((prevState) => {
226
170
  var _a;
@@ -436,94 +380,6 @@ const SequenceManagerProvider = ({ children }) => {
436
380
  return next;
437
381
  });
438
382
  }, []);
439
- useIsomorphicLayoutEffect(() => {
440
- if (!isStudio) {
441
- return;
442
- }
443
- let unmounted = false;
444
- const onCommitOrder = (event) => {
445
- const { detail } = event;
446
- const managerOrder = detail.sequenceManagers.find((item) => item.managerId === sequenceManagerId);
447
- if (!managerOrder) {
448
- return;
449
- }
450
- const previousOrder = committedOrderIdsRef.current;
451
- if (previousOrder !== null &&
452
- previousOrder.length === managerOrder.sequenceIds.length &&
453
- previousOrder.every((sequenceId, index) => sequenceId === managerOrder.sequenceIds[index])) {
454
- return;
455
- }
456
- const order = new Map(managerOrder.sequenceIds.map((sequenceId, index) => [
457
- sequenceId,
458
- index,
459
- ]));
460
- committedOrderIdsRef.current = managerOrder.sequenceIds;
461
- committedOrderRef.current = order;
462
- queueMicrotask(() => {
463
- if (unmounted) {
464
- return;
465
- }
466
- setSequences((currentSequences) => {
467
- let changed = false;
468
- const nextSequences = currentSequences.map((sequence) => {
469
- var _a;
470
- const timelineOrder = (_a = order.get(sequence.id)) !== null && _a !== void 0 ? _a : null;
471
- if (sequence.timelineOrder === timelineOrder) {
472
- return sequence;
473
- }
474
- changed = true;
475
- return { ...sequence, timelineOrder };
476
- });
477
- return changed ? nextSequences : currentSequences;
478
- });
479
- });
480
- };
481
- window.addEventListener(sequence_order_marker_js_1.COMMIT_ORDER_EVENT, onCommitOrder);
482
- return () => {
483
- unmounted = true;
484
- window.removeEventListener(sequence_order_marker_js_1.COMMIT_ORDER_EVENT, onCommitOrder);
485
- };
486
- }, [isStudio, sequenceManagerId]);
487
- const registerSequence = (0, react_1.useCallback)((seq) => {
488
- setSequences((seqs) => {
489
- var _a;
490
- var _b;
491
- return [
492
- ...seqs,
493
- {
494
- ...seq,
495
- timelineOrder: (_b = (_a = committedOrderRef.current) === null || _a === void 0 ? void 0 : _a.get(seq.id)) !== null && _b !== void 0 ? _b : null,
496
- },
497
- ];
498
- });
499
- }, []);
500
- const updateSequence = (0, react_1.useCallback)((seq) => {
501
- setSequences((seqs) => {
502
- var _a;
503
- var _b;
504
- const index = seqs.findIndex((item) => item.id === seq.id);
505
- if (index === -1) {
506
- return seqs;
507
- }
508
- const next = [...seqs];
509
- next[index] = {
510
- ...seq,
511
- timelineOrder: (_b = (_a = committedOrderRef.current) === null || _a === void 0 ? void 0 : _a.get(seq.id)) !== null && _b !== void 0 ? _b : null,
512
- };
513
- return next;
514
- });
515
- }, []);
516
- const unregisterSequence = (0, react_1.useCallback)((seq) => {
517
- setSequences((seqs) => seqs.filter((s) => s.id !== seq));
518
- }, []);
519
- const sequenceContext = (0, react_1.useMemo)(() => {
520
- return {
521
- registerSequence,
522
- sequences,
523
- updateSequence,
524
- unregisterSequence,
525
- };
526
- }, [registerSequence, sequences, unregisterSequence, updateSequence]);
527
383
  const dragOverridesSubscription = (0, react_1.useMemo)(() => ({
528
384
  subscribe: subscribeDragOverrides,
529
385
  getSnapshot: getDragOverridesSnapshot,
@@ -554,6 +410,11 @@ const SequenceManagerProvider = ({ children }) => {
554
410
  getEffectDragOverrides,
555
411
  };
556
412
  }, [getDragOverrides, getEffectDragOverrides]);
413
+ const dragOverridesRef = (0, react_1.useRef)(dragOverridesContext);
414
+ useIsomorphicLayoutEffect(() => {
415
+ // Interaction handlers read the latest committed overrides without subscribing.
416
+ dragOverridesRef.current = dragOverridesContext;
417
+ }, [dragOverridesContext]);
557
418
  const settersContext = (0, react_1.useMemo)(() => {
558
419
  return {
559
420
  setDragOverrides,
@@ -572,7 +433,6 @@ const SequenceManagerProvider = ({ children }) => {
572
433
  remapPropStatuses,
573
434
  ]);
574
435
  const batchSettersContext = (0, react_1.useMemo)(() => ({ setDragOverridesBatch, setEffectDragOverridesBatch }), [setDragOverridesBatch, setEffectDragOverridesBatch]);
575
- const providers = (jsx_runtime_1.jsx(exports.SequenceManagerRefContext.Provider, { value: sequencesRef, children: jsx_runtime_1.jsx(exports.SequenceManager.Provider, { value: sequenceContext, children: jsx_runtime_1.jsx(exports.VisualModePropStatusesRefContext.Provider, { value: propStatusesRef, children: jsx_runtime_1.jsx(exports.VisualModePropStatusesContext.Provider, { value: propStatusesContext, children: jsx_runtime_1.jsx(SequenceManagerScopeProviders, { dragOverridesSubscription: dragOverridesSubscription, fromKeys: dragOverrideState.fromKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesContext.Provider, { value: dragOverridesContext, children: jsx_runtime_1.jsx(exports.VisualModeSettersContext.Provider, { value: settersContext, children: jsx_runtime_1.jsx(exports.VisualModeBatchSettersContext.Provider, { value: batchSettersContext, children: children }) }) }) }) }) }) }) }));
576
- return isStudio ? (jsx_runtime_1.jsx(sequence_order_marker_js_1.SequenceManagerOrderMarker, { managerId: sequenceManagerId, children: providers })) : (providers);
436
+ return (jsx_runtime_1.jsx(SequenceRegistryProvider_js_1.SequenceRegistryProvider, { children: jsx_runtime_1.jsx(exports.VisualModePropStatusesRefContext.Provider, { value: propStatusesRef, children: jsx_runtime_1.jsx(exports.VisualModePropStatusesContext.Provider, { value: propStatusesContext, children: jsx_runtime_1.jsx(SequenceManagerScopeProviders, { dragOverridesSubscription: dragOverridesSubscription, fromKeys: dragOverrideState.fromKeys, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesContext.Provider, { value: dragOverridesContext, children: jsx_runtime_1.jsx(exports.VisualModeDragOverridesRefContext.Provider, { value: dragOverridesRef, children: jsx_runtime_1.jsx(exports.VisualModeSettersContext.Provider, { value: settersContext, children: jsx_runtime_1.jsx(exports.VisualModeBatchSettersContext.Provider, { value: batchSettersContext, children: children }) }) }) }) }) }) }) }));
577
437
  };
578
438
  exports.SequenceManagerProvider = SequenceManagerProvider;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const SequenceRegistryProvider: React.FC<{
3
+ readonly children: React.ReactNode;
4
+ }>;