@remotion/studio 4.0.516 → 4.0.518
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AssetSelector.js +63 -22
- package/dist/components/AssetSelectorItem.d.ts +2 -1
- package/dist/components/AssetSelectorItem.js +41 -10
- package/dist/components/Canvas.js +15 -12
- package/dist/components/CanvasCaptureDropHandler.d.ts +4 -0
- package/dist/components/CanvasCaptureDropHandler.js +42 -0
- package/dist/components/CanvasOrLoading.js +4 -3
- package/dist/components/CaptionInspector.js +1 -1
- package/dist/components/CaptionTextEditor.js +32 -8
- package/dist/components/CheckboardToggle.js +1 -1
- package/dist/components/Checkbox.d.ts +0 -1
- package/dist/components/Checkbox.js +2 -19
- package/dist/components/CompositionContextButton.js +2 -1
- package/dist/components/CompositionSelector.js +1 -1
- package/dist/components/ConfigureLicenseModal.js +79 -46
- package/dist/components/CurrentAsset.d.ts +1 -1
- package/dist/components/CurrentAsset.js +9 -4
- package/dist/components/Editor.js +2 -1
- package/dist/components/EditorContent.js +11 -5
- package/dist/components/EditorContexts.js +2 -1
- package/dist/components/EditorRuler/Ruler.d.ts +1 -0
- package/dist/components/EditorRuler/Ruler.js +9 -8
- package/dist/components/EditorRuler/index.d.ts +1 -0
- package/dist/components/EditorRuler/index.js +3 -4
- package/dist/components/EditorRuler/use-is-ruler-visible.d.ts +1 -1
- package/dist/components/EditorRuler/use-is-ruler-visible.js +8 -2
- package/dist/components/ElementInstallConfirmation.d.ts +5 -0
- package/dist/components/ElementInstallConfirmation.js +25 -1
- package/dist/components/ElementLibraryModal.d.ts +5 -0
- package/dist/components/ElementLibraryModal.js +40 -0
- package/dist/components/FilePreview.js +71 -0
- package/dist/components/InlineCaptionInspector.js +13 -2
- package/dist/components/InlineEditableTitle.js +2 -2
- package/dist/components/InspectorPanel/CompositionInspector.js +11 -38
- package/dist/components/InspectorPanel/CompositionInspectorHeader.js +2 -2
- package/dist/components/InspectorPanel/CompositionMetadata.js +11 -4
- package/dist/components/InspectorPanel/EasingInspector.js +2 -2
- package/dist/components/InspectorPanel/ElementLibraryButton.d.ts +2 -0
- package/dist/components/InspectorPanel/ElementLibraryButton.js +139 -0
- package/dist/components/InspectorPanel/KeyframeInspector.js +1 -1
- package/dist/components/InspectorPanel/SequenceInspectorHeader.js +12 -5
- package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -3
- package/dist/components/InspectorPanel/common.d.ts +0 -1
- package/dist/components/InspectorPanel/common.js +3 -7
- package/dist/components/InspectorPanel/inspector-selection.d.ts +2 -2
- package/dist/components/InspectorPanel/styles.d.ts +0 -1
- package/dist/components/InspectorPanel/styles.js +3 -4
- package/dist/components/InspectorPanel/use-track-for-selection.d.ts +1 -2
- package/dist/components/InspectorSequenceSection.d.ts +1 -2
- package/dist/components/InspectorSourceLocation.js +1 -1
- package/dist/components/Menu/MenuItem.js +15 -6
- package/dist/components/MenuToolbar.js +7 -3
- package/dist/components/Modals.js +51 -1
- package/dist/components/PlaybackRateSelector.js +3 -6
- package/dist/components/Preview.js +83 -5
- package/dist/components/PreviewToolbar.js +10 -4
- package/dist/components/PreviewToolbarOverflowButton.d.ts +1 -0
- package/dist/components/PreviewToolbarOverflowButton.js +9 -2
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.d.ts +2 -0
- package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +28 -8
- package/dist/components/RadioButton.d.ts +6 -0
- package/dist/components/RadioButton.js +62 -0
- package/dist/components/RenderButton.js +2 -1
- package/dist/components/RulersAndGuidesToggle.d.ts +3 -1
- package/dist/components/RulersAndGuidesToggle.js +18 -7
- package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -2
- package/dist/components/SelectedOutlineOverlay.d.ts +1 -3
- package/dist/components/SelectedOutlineOverlay.js +21 -17
- package/dist/components/SelectedOutlinePolygon.d.ts +1 -2
- package/dist/components/SelectedOutlineRenderer.d.ts +2 -3
- package/dist/components/SelectedOutlineRenderer.js +9 -78
- package/dist/components/SelectedOutlineUvControls.d.ts +1 -1
- package/dist/components/SettingsModal.js +1 -1
- package/dist/components/SettingsModalFooter.d.ts +3 -1
- package/dist/components/SettingsModalFooter.js +19 -4
- package/dist/components/ShowPixelGridProvider.d.ts +4 -0
- package/dist/components/ShowPixelGridProvider.js +24 -0
- package/dist/components/SidebarCollapserControls.js +2 -2
- package/dist/components/SidebarRenderButton.js +2 -1
- package/dist/components/Timeline/Timeline.js +41 -0
- package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +6 -7
- package/dist/components/Timeline/TimelineDragHandler.js +11 -4
- package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -2
- package/dist/components/Timeline/TimelinePlayCursorSyncer.js +4 -2
- package/dist/components/Timeline/TimelineSelection.d.ts +29 -66
- package/dist/components/Timeline/TimelineSelection.js +30 -170
- package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
- package/dist/components/Timeline/TimelineSequenceItem.js +8 -6
- package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +3 -4
- package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -4
- package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +3 -4
- package/dist/components/Timeline/find-track-for-node-path-info.d.ts +1 -1
- package/dist/components/Timeline/keyframe-clipboard.d.ts +2 -3
- package/dist/components/Timeline/reset-selected-timeline-props.d.ts +2 -3
- package/dist/components/Timeline/sequence-prop-clipboard.d.ts +2 -3
- package/dist/components/Timeline/split-selected-timeline-item.d.ts +2 -3
- package/dist/components/Timeline/timeline-expanded-filter.d.ts +1 -2
- package/dist/components/Timeline/timeline-scroll-logic.d.ts +7 -5
- package/dist/components/Timeline/timeline-scroll-logic.js +12 -7
- package/dist/components/Timeline/update-selected-easing.d.ts +7 -7
- package/dist/components/Timeline/use-timeline-asset-drop.js +24 -1
- package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +6 -7
- package/dist/components/WebMcp.d.ts +2 -0
- package/dist/components/WebMcp.js +945 -0
- package/dist/components/canvas-capture-drop.d.ts +4 -0
- package/dist/components/canvas-capture-drop.js +22 -0
- package/dist/components/composition-menu-items.js +26 -0
- package/dist/components/selected-outline-geometry.d.ts +2 -21
- package/dist/components/selected-outline-geometry.js +5 -16
- package/dist/components/selected-outline-measurement.d.ts +8 -37
- package/dist/components/selected-outline-measurement.js +1 -231
- package/dist/components/selected-outline-types.d.ts +2 -15
- package/dist/components/selected-outline-uv.js +3 -106
- package/dist/esm/{chunk-w4244j4n.js → chunk-7prjt5n5.js} +32831 -26820
- package/dist/esm/internals.mjs +32831 -26820
- package/dist/esm/previewEntry.mjs +17304 -11293
- package/dist/esm/renderEntry.mjs +1 -1
- package/dist/helpers/calculate-timeline.d.ts +1 -7
- package/dist/helpers/calculate-timeline.js +2 -146
- package/dist/helpers/create-folder-tree.js +16 -1
- package/dist/helpers/editor-ruler.js +6 -5
- package/dist/helpers/format-file-location.d.ts +8 -0
- package/dist/helpers/format-file-location.js +14 -3
- package/dist/helpers/get-asset-metadata.d.ts +19 -0
- package/dist/helpers/get-asset-metadata.js +51 -6
- package/dist/helpers/get-connected-compositions.d.ts +1 -6
- package/dist/helpers/get-connected-compositions.js +2 -8
- package/dist/helpers/get-sequence-visible-range.d.ts +1 -5
- package/dist/helpers/get-sequence-visible-range.js +6 -51
- package/dist/helpers/get-timeline-max-zoom.d.ts +8 -0
- package/dist/helpers/get-timeline-max-zoom.js +17 -6
- package/dist/helpers/get-timeline-nestedness.d.ts +1 -2
- package/dist/helpers/get-timeline-nestedness.js +2 -12
- package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -22
- package/dist/helpers/get-timeline-sequence-sort-key.js +2 -16
- package/dist/helpers/hoverable.d.ts +1 -0
- package/dist/helpers/hoverable.js +4 -1
- package/dist/helpers/is-current-selected-still.js +4 -2
- package/dist/helpers/sort-by-nonce-history.d.ts +1 -5
- package/dist/helpers/sort-by-nonce-history.js +3 -148
- package/dist/helpers/timeline-node-path-key.d.ts +1 -2
- package/dist/helpers/timeline-node-path-key.js +2 -2
- package/dist/helpers/use-menu-structure.js +20 -0
- package/dist/icons/enter.d.ts +4 -0
- package/dist/icons/enter.js +10 -0
- package/dist/state/editor-pixel-grid.d.ts +8 -0
- package/dist/state/editor-pixel-grid.js +18 -0
- package/dist/state/modals.d.ts +4 -0
- package/dist/state/playbackrate.d.ts +1 -0
- package/dist/state/playbackrate.js +4 -1
- package/package.json +14 -12
- package/dist/components/selected-outline-order.d.ts +0 -12
- package/dist/components/selected-outline-order.js +0 -251
- package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
- package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
- package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
- package/dist/helpers/get-box-quads-ponyfill.js +0 -23
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getTimelineSequenceSortKey = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const rank = (_a = nonceRanks.get(track.sequence.id)) !== null && _a !== void 0 ? _a : 0;
|
|
7
|
-
const id = String(rank).padStart(6, '0');
|
|
8
|
-
if (!track.sequence.parent) {
|
|
9
|
-
return id;
|
|
10
|
-
}
|
|
11
|
-
const parent = tracks.find((t) => t.sequence.id === track.sequence.parent);
|
|
12
|
-
if (!parent) {
|
|
13
|
-
// Due to effects and conditional `showInTimeline`, a parent
|
|
14
|
-
// may not exist in the `allTracks` array.
|
|
15
|
-
return id;
|
|
16
|
-
}
|
|
17
|
-
return `${(0, exports.getTimelineSequenceSortKey)(parent, tracks, nonceRanks)}-${id}`;
|
|
18
|
-
};
|
|
19
|
-
exports.getTimelineSequenceSortKey = getTimelineSequenceSortKey;
|
|
4
|
+
const canvas_1 = require("@remotion/canvas");
|
|
5
|
+
Object.defineProperty(exports, "getTimelineSequenceSortKey", { enumerable: true, get: function () { return canvas_1.getTimelineSequenceSortKey; } });
|
|
@@ -3,6 +3,7 @@ export declare const HOVERABLE_CLASS_NAME = "__remotion-hoverable";
|
|
|
3
3
|
export declare const HOVER_GROUP_CLASS_NAME = "__remotion-hover-group";
|
|
4
4
|
export declare const HOVER_GROUP_REVEAL_CLASS_NAME = "__remotion-hover-group-reveal";
|
|
5
5
|
export declare const FOCUS_VISIBLE_ONLY_CLASS_NAME = "__remotion-focus-visible-only";
|
|
6
|
+
export declare const NO_HOVER_BACKGROUND_STYLE: React.CSSProperties;
|
|
6
7
|
export declare const hoverableStyle: ({ idleBackground, hoverBackground, idleColor, hoverColor, }: {
|
|
7
8
|
idleBackground: string;
|
|
8
9
|
hoverBackground: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeHoverableCSS = exports.hoverableStyle = exports.FOCUS_VISIBLE_ONLY_CLASS_NAME = exports.HOVER_GROUP_REVEAL_CLASS_NAME = exports.HOVER_GROUP_CLASS_NAME = exports.HOVERABLE_CLASS_NAME = void 0;
|
|
3
|
+
exports.makeHoverableCSS = exports.hoverableStyle = exports.NO_HOVER_BACKGROUND_STYLE = exports.FOCUS_VISIBLE_ONLY_CLASS_NAME = exports.HOVER_GROUP_REVEAL_CLASS_NAME = exports.HOVER_GROUP_CLASS_NAME = exports.HOVERABLE_CLASS_NAME = void 0;
|
|
4
4
|
const colors_1 = require("./colors");
|
|
5
5
|
// Purely visual hover styling must be driven by CSS `:hover` rather than
|
|
6
6
|
// React state: When the Studio runs in an <iframe> (like in Browser Studio),
|
|
@@ -16,6 +16,9 @@ const BG_VARIABLE = '--remotion-hoverable-bg';
|
|
|
16
16
|
const HOVER_BG_VARIABLE = '--remotion-hoverable-hover-bg';
|
|
17
17
|
const COLOR_VARIABLE = '--remotion-hoverable-color';
|
|
18
18
|
const HOVER_COLOR_VARIABLE = '--remotion-hoverable-hover-color';
|
|
19
|
+
exports.NO_HOVER_BACKGROUND_STYLE = {
|
|
20
|
+
[HOVER_BG_VARIABLE]: colors_1.TRANSPARENT,
|
|
21
|
+
};
|
|
19
22
|
// To disable the hover effect (e.g. for a disabled control), pass the idle
|
|
20
23
|
// values as the hover values.
|
|
21
24
|
const hoverableStyle = ({ idleBackground, hoverBackground, idleColor, hoverColor, }) => {
|
|
@@ -14,13 +14,15 @@ const useIsStill = () => {
|
|
|
14
14
|
exports.useIsStill = useIsStill;
|
|
15
15
|
const useIsVideoComposition = () => {
|
|
16
16
|
const isStill = (0, exports.useIsStill)();
|
|
17
|
-
const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
17
|
+
const { canvasContent, currentAssetMetadata } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
18
18
|
if (canvasContent === null) {
|
|
19
19
|
return false;
|
|
20
20
|
}
|
|
21
21
|
if (isStill) {
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
|
-
return canvasContent.type === 'composition'
|
|
24
|
+
return (canvasContent.type === 'composition' ||
|
|
25
|
+
(canvasContent.type === 'asset' &&
|
|
26
|
+
(currentAssetMetadata === null || currentAssetMetadata === void 0 ? void 0 : currentAssetMetadata.asset) === canvasContent.asset));
|
|
25
27
|
};
|
|
26
28
|
exports.useIsVideoComposition = useIsVideoComposition;
|
|
@@ -1,5 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const compareNonceHistories: (a: NonceHistory, b: NonceHistory) => number;
|
|
3
|
-
export declare const sortItemsByNonceHistory: <T extends {
|
|
4
|
-
nonce: NonceHistory;
|
|
5
|
-
}>(items: T[]) => T[];
|
|
1
|
+
export { compareNonceHistories, sortItemsByNonceHistory } from '@remotion/canvas';
|
|
@@ -1,151 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sortItemsByNonceHistory = exports.compareNonceHistories = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const allEpochs = [...new Set([...aMap.keys(), ...bMap.keys()])].sort((x, y) => y - x);
|
|
8
|
-
for (const epoch of allEpochs) {
|
|
9
|
-
const aNonce = aMap.get(epoch);
|
|
10
|
-
const bNonce = bMap.get(epoch);
|
|
11
|
-
if (aNonce !== undefined && bNonce !== undefined) {
|
|
12
|
-
return aNonce - bNonce;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return null;
|
|
16
|
-
};
|
|
17
|
-
const compareNonceHistories = (a, b) => {
|
|
18
|
-
const shared = getSharedEpochOrder(a, b);
|
|
19
|
-
if (shared !== null) {
|
|
20
|
-
return shared;
|
|
21
|
-
}
|
|
22
|
-
// No shared epoch — items from a lower latest epoch come first
|
|
23
|
-
const aLatestEpoch = a[a.length - 1][0];
|
|
24
|
-
const bLatestEpoch = b[b.length - 1][0];
|
|
25
|
-
return aLatestEpoch - bLatestEpoch;
|
|
26
|
-
};
|
|
27
|
-
exports.compareNonceHistories = compareNonceHistories;
|
|
28
|
-
// Compare two histories, each pre-collapsed to parallel arrays of epochs and
|
|
29
|
-
// nonces sorted by descending epoch, without rebuilding a Map per comparison.
|
|
30
|
-
// Equivalent to getSharedEpochOrder: both find the newest shared epoch and
|
|
31
|
-
// compare its nonces.
|
|
32
|
-
const sharedEpochOrderFromSorted = (aEpochs, aNonces, bEpochs, bNonces) => {
|
|
33
|
-
let i = 0;
|
|
34
|
-
let j = 0;
|
|
35
|
-
while (i < aEpochs.length && j < bEpochs.length) {
|
|
36
|
-
const ae = aEpochs[i];
|
|
37
|
-
const be = bEpochs[j];
|
|
38
|
-
if (ae === be) {
|
|
39
|
-
return aNonces[i] - bNonces[j];
|
|
40
|
-
}
|
|
41
|
-
if (ae > be) {
|
|
42
|
-
i++;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
j++;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return null;
|
|
49
|
-
};
|
|
50
|
-
const sortItemsByNonceHistory = (items) => {
|
|
51
|
-
const n = items.length;
|
|
52
|
-
if (n <= 1) {
|
|
53
|
-
return items.slice();
|
|
54
|
-
}
|
|
55
|
-
// Collapse each history once into epoch/nonce arrays sorted by descending
|
|
56
|
-
// epoch. `new Map(nonce)` keeps the last value per duplicated epoch, matching
|
|
57
|
-
// getSharedEpochOrder. This removes the per-pair Map/Set construction the
|
|
58
|
-
// pairwise loop below would otherwise repeat O(n^2) times.
|
|
59
|
-
const epochsOf = new Array(n);
|
|
60
|
-
const noncesOf = new Array(n);
|
|
61
|
-
for (let i = 0; i < n; i++) {
|
|
62
|
-
const map = new Map(items[i].nonce);
|
|
63
|
-
const epochs = [...map.keys()].sort((x, y) => y - x);
|
|
64
|
-
epochsOf[i] = epochs;
|
|
65
|
-
noncesOf[i] = epochs.map((e) => map.get(e));
|
|
66
|
-
}
|
|
67
|
-
// Pairwise "strictly before" relation, stored as bitsets: `before[i]` has
|
|
68
|
-
// bit j set when i must come before j, `known[i]` has bit j set when the
|
|
69
|
-
// pair (i, j) is directly determined by a shared epoch. Bitsets let the
|
|
70
|
-
// transitive closure below combine 32 relationships per word.
|
|
71
|
-
const words = (n + 31) >> 5;
|
|
72
|
-
const before = new Uint32Array(n * words);
|
|
73
|
-
const known = new Uint32Array(n * words);
|
|
74
|
-
// Direct comparison sign per ordered pair; only read where `known` is set.
|
|
75
|
-
const sign = new Int8Array(n * n);
|
|
76
|
-
for (let i = 0; i < n; i++) {
|
|
77
|
-
for (let j = i + 1; j < n; j++) {
|
|
78
|
-
const cmp = sharedEpochOrderFromSorted(epochsOf[i], noncesOf[i], epochsOf[j], noncesOf[j]);
|
|
79
|
-
if (cmp === null) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
known[i * words + (j >> 5)] |= 1 << (j & 31);
|
|
83
|
-
known[j * words + (i >> 5)] |= 1 << (i & 31);
|
|
84
|
-
sign[i * n + j] = cmp < 0 ? -1 : cmp > 0 ? 1 : 0;
|
|
85
|
-
sign[j * n + i] = cmp < 0 ? 1 : cmp > 0 ? -1 : 0;
|
|
86
|
-
if (cmp < 0) {
|
|
87
|
-
before[i * words + (j >> 5)] |= 1 << (j & 31);
|
|
88
|
-
}
|
|
89
|
-
else if (cmp > 0) {
|
|
90
|
-
before[j * words + (i >> 5)] |= 1 << (i & 31);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Transitive closure: if i < k and k < j, then i < j. This is the same
|
|
95
|
-
// Floyd-Warshall relation as before, but the inner sweep is bitwise
|
|
96
|
-
// (`before[k] & ~known[i]` finds all reachable j at once). A newly derived
|
|
97
|
-
// edge is marked known immediately so the first path decides an otherwise
|
|
98
|
-
// undetermined pair — preserving behavior on the inputs where the pairwise
|
|
99
|
-
// comparison is intentionally non-transitive.
|
|
100
|
-
for (let k = 0; k < n; k++) {
|
|
101
|
-
const kBase = k * words;
|
|
102
|
-
const kWord = k >> 5;
|
|
103
|
-
const kBit = 1 << (k & 31);
|
|
104
|
-
for (let i = 0; i < n; i++) {
|
|
105
|
-
if (i === k) {
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
const iBase = i * words;
|
|
109
|
-
if ((before[iBase + kWord] & kBit) === 0) {
|
|
110
|
-
continue; // i is not before k, so k adds nothing for i
|
|
111
|
-
}
|
|
112
|
-
for (let w = 0; w < words; w++) {
|
|
113
|
-
const add = before[kBase + w] & ~known[iBase + w];
|
|
114
|
-
if (add === 0) {
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
before[iBase + w] |= add;
|
|
118
|
-
known[iBase + w] |= add;
|
|
119
|
-
// Set the mirror relationship (j after i) for each newly known pair.
|
|
120
|
-
let bits = add;
|
|
121
|
-
while (bits !== 0) {
|
|
122
|
-
const lowest = bits & -bits;
|
|
123
|
-
const j = (w << 5) + (31 - Math.clz32(lowest));
|
|
124
|
-
sign[i * n + j] = -1;
|
|
125
|
-
known[j * words + (i >> 5)] |= 1 << (i & 31);
|
|
126
|
-
sign[j * n + i] = 1;
|
|
127
|
-
bits ^= lowest;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
const indexMap = new Map(items.map((item, i) => [item, i]));
|
|
133
|
-
const result = items.slice();
|
|
134
|
-
result.sort((a, b) => {
|
|
135
|
-
const ai = indexMap.get(a);
|
|
136
|
-
const bi = indexMap.get(b);
|
|
137
|
-
if ((known[ai * words + (bi >> 5)] >> (bi & 31)) & 1) {
|
|
138
|
-
return sign[ai * n + bi];
|
|
139
|
-
}
|
|
140
|
-
if ((before[ai * words + (bi >> 5)] >> (bi & 31)) & 1) {
|
|
141
|
-
return -1;
|
|
142
|
-
}
|
|
143
|
-
if ((before[bi * words + (ai >> 5)] >> (ai & 31)) & 1) {
|
|
144
|
-
return 1;
|
|
145
|
-
}
|
|
146
|
-
// No transitive relationship — lower latest epoch first
|
|
147
|
-
return a.nonce[a.nonce.length - 1][0] - b.nonce[b.nonce.length - 1][0];
|
|
148
|
-
});
|
|
149
|
-
return result;
|
|
150
|
-
};
|
|
151
|
-
exports.sortItemsByNonceHistory = sortItemsByNonceHistory;
|
|
4
|
+
const canvas_1 = require("@remotion/canvas");
|
|
5
|
+
Object.defineProperty(exports, "compareNonceHistories", { enumerable: true, get: function () { return canvas_1.compareNonceHistories; } });
|
|
6
|
+
Object.defineProperty(exports, "sortItemsByNonceHistory", { enumerable: true, get: function () { return canvas_1.sortItemsByNonceHistory; } });
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { SequencePropsSubscriptionKey } from 'remotion';
|
|
2
1
|
import type { SequenceNodePathInfo } from './get-timeline-sequence-sort-key';
|
|
3
|
-
export
|
|
2
|
+
export { timelineSequenceNodePathToKey } from '@remotion/canvas';
|
|
4
3
|
export declare const timelineNodePathInfoToKey: (info: SequenceNodePathInfo) => string;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.timelineNodePathInfoToKey = exports.timelineSequenceNodePathToKey = void 0;
|
|
4
4
|
const studio_shared_1 = require("@remotion/studio-shared");
|
|
5
|
-
const
|
|
6
|
-
exports
|
|
5
|
+
const canvas_1 = require("@remotion/canvas");
|
|
6
|
+
Object.defineProperty(exports, "timelineSequenceNodePathToKey", { enumerable: true, get: function () { return canvas_1.timelineSequenceNodePathToKey; } });
|
|
7
7
|
const timelineNodePathInfoToKey = (info) => [
|
|
8
8
|
(0, studio_shared_1.stringifySequenceExpandedRowKey)(info.sequenceSubscriptionKey),
|
|
9
9
|
info.auxiliaryKeys.join('.'),
|
|
@@ -20,6 +20,7 @@ const Checkmark_1 = require("../icons/Checkmark");
|
|
|
20
20
|
const canvas_ref_1 = require("../state/canvas-ref");
|
|
21
21
|
const checkerboard_1 = require("../state/checkerboard");
|
|
22
22
|
const editor_guides_1 = require("../state/editor-guides");
|
|
23
|
+
const editor_pixel_grid_1 = require("../state/editor-pixel-grid");
|
|
23
24
|
const editor_rulers_1 = require("../state/editor-rulers");
|
|
24
25
|
const editor_snapping_1 = require("../state/editor-snapping");
|
|
25
26
|
const editor_zoom_gestures_1 = require("../state/editor-zoom-gestures");
|
|
@@ -234,6 +235,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
|
|
|
234
235
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
|
|
235
236
|
const { checkerboard, setCheckerboard } = (0, react_1.useContext)(checkerboard_1.CheckerboardContext);
|
|
236
237
|
const { editorZoomGestures, setEditorZoomGestures } = (0, react_1.useContext)(editor_zoom_gestures_1.EditorZoomGesturesContext);
|
|
238
|
+
const { editorShowPixelGrid, setEditorShowPixelGrid } = (0, react_1.useContext)(editor_pixel_grid_1.EditorShowPixelGridContext);
|
|
237
239
|
const { editorShowRulers, setEditorShowRulers } = (0, react_1.useContext)(editor_rulers_1.EditorShowRulersContext);
|
|
238
240
|
const { editorShowGuides, setEditorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
|
|
239
241
|
const { editorSnapping, setEditorSnapping } = (0, react_1.useContext)(editor_snapping_1.EditorSnappingContext);
|
|
@@ -423,6 +425,22 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
|
|
|
423
425
|
? 'Disable Zoom and Pan Gestures'
|
|
424
426
|
: 'Enable Zoom and Pan Gestures',
|
|
425
427
|
},
|
|
428
|
+
{
|
|
429
|
+
id: 'pixel-grid',
|
|
430
|
+
keyHint: null,
|
|
431
|
+
label: 'Pixel Grid',
|
|
432
|
+
onClick: () => {
|
|
433
|
+
closeMenu();
|
|
434
|
+
setEditorShowPixelGrid((c) => !c);
|
|
435
|
+
},
|
|
436
|
+
type: 'item',
|
|
437
|
+
value: 'pixel-grid',
|
|
438
|
+
leftItem: editorShowPixelGrid ? jsx_runtime_1.jsx(Checkmark_1.Checkmark, {}) : null,
|
|
439
|
+
subMenu: null,
|
|
440
|
+
quickSwitcherLabel: editorShowPixelGrid
|
|
441
|
+
? 'Hide Pixel Grid'
|
|
442
|
+
: 'Show Pixel Grid',
|
|
443
|
+
},
|
|
426
444
|
{
|
|
427
445
|
id: 'show-rulers',
|
|
428
446
|
keyHint: null,
|
|
@@ -990,6 +1008,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
|
|
|
990
1008
|
currentComposition,
|
|
991
1009
|
resolvedCompositionLocation,
|
|
992
1010
|
editorZoomGestures,
|
|
1011
|
+
editorShowPixelGrid,
|
|
993
1012
|
editorShowRulers,
|
|
994
1013
|
editorShowGuides,
|
|
995
1014
|
editorSnapping,
|
|
@@ -1007,6 +1026,7 @@ const useMenuStructure = (closeMenu, readOnlyStudio) => {
|
|
|
1007
1026
|
size.size,
|
|
1008
1027
|
setSize,
|
|
1009
1028
|
setEditorZoomGestures,
|
|
1029
|
+
setEditorShowPixelGrid,
|
|
1010
1030
|
setEditorShowRulers,
|
|
1011
1031
|
setEditorShowGuides,
|
|
1012
1032
|
setEditorSnapping,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnterIcon = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
// Font Awesome Pro v7.3.1, Copyright 2026 Fonticons, Inc.
|
|
6
|
+
// https://fontawesome.com/license (Commercial License)
|
|
7
|
+
const EnterIcon = ({ color, ...props }) => {
|
|
8
|
+
return (jsx_runtime_1.jsx("svg", { ...props, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 640 640", children: jsx_runtime_1.jsx("path", { fill: color, d: "M544 144C544 135.2 551.2 128 560 128C568.8 128 576 135.2 576 144L576 240C576 293 533 336 480 336L118.6 336L235.3 452.7C241.5 458.9 241.5 469.1 235.3 475.3C229.1 481.5 218.9 481.5 212.7 475.3L68.7 331.3C65.7 328.3 64 324.2 64 320C64 315.8 65.7 311.7 68.7 308.7L212.7 164.7C218.9 158.5 229.1 158.5 235.3 164.7C241.5 170.9 241.5 181.1 235.3 187.3L118.6 304L480 304C515.3 304 544 275.3 544 240L544 144z" }) }));
|
|
9
|
+
};
|
|
10
|
+
exports.EnterIcon = EnterIcon;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type State = {
|
|
2
|
+
editorShowPixelGrid: boolean;
|
|
3
|
+
setEditorShowPixelGrid: (cb: (prevState: boolean) => boolean) => void;
|
|
4
|
+
};
|
|
5
|
+
export declare const persistEditorShowPixelGridOption: (option: boolean) => void;
|
|
6
|
+
export declare const loadEditorShowPixelGridOption: () => boolean;
|
|
7
|
+
export declare const EditorShowPixelGridContext: import("react").Context<State>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditorShowPixelGridContext = exports.loadEditorShowPixelGridOption = exports.persistEditorShowPixelGridOption = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const key = 'remotion.editorShowPixelGrid';
|
|
6
|
+
const persistEditorShowPixelGridOption = (option) => {
|
|
7
|
+
localStorage.setItem(key, String(option));
|
|
8
|
+
};
|
|
9
|
+
exports.persistEditorShowPixelGridOption = persistEditorShowPixelGridOption;
|
|
10
|
+
const loadEditorShowPixelGridOption = () => {
|
|
11
|
+
const item = localStorage.getItem(key);
|
|
12
|
+
return item !== 'false';
|
|
13
|
+
};
|
|
14
|
+
exports.loadEditorShowPixelGridOption = loadEditorShowPixelGridOption;
|
|
15
|
+
exports.EditorShowPixelGridContext = (0, react_1.createContext)({
|
|
16
|
+
editorShowPixelGrid: true,
|
|
17
|
+
setEditorShowPixelGrid: () => undefined,
|
|
18
|
+
});
|
package/dist/state/modals.d.ts
CHANGED
|
@@ -181,6 +181,10 @@ export type ModalState = {
|
|
|
181
181
|
excludeCompositionId: string;
|
|
182
182
|
onSelected: (composition: _InternalTypes['AnyComposition']) => void;
|
|
183
183
|
} | null;
|
|
184
|
+
} | {
|
|
185
|
+
type: 'element-library';
|
|
186
|
+
name: string;
|
|
187
|
+
url: string;
|
|
184
188
|
} | AddEffectModalState | ConfirmationDialogState | SvgImportDialogState;
|
|
185
189
|
export type SetSelectedModalContextType = {
|
|
186
190
|
setSelectedModal: React.Dispatch<React.SetStateAction<ModalState | null>>;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadPlaybackRate = exports.persistPlaybackRate = void 0;
|
|
3
|
+
exports.loadPlaybackRate = exports.persistPlaybackRate = exports.commonPlaybackRates = void 0;
|
|
4
4
|
const key = 'remotion.playbackrate';
|
|
5
|
+
exports.commonPlaybackRates = [
|
|
6
|
+
-4, -2, -1, -0.5, -0.25, 0.25, 0.5, 1, 1.5, 2, 4,
|
|
7
|
+
];
|
|
5
8
|
const persistPlaybackRate = (option) => {
|
|
6
9
|
localStorage.setItem(key, String(option));
|
|
7
10
|
};
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/studio"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/studio",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.518",
|
|
7
7
|
"description": "APIs for interacting with the Remotion Studio",
|
|
8
8
|
"main": "dist",
|
|
9
9
|
"scripts": {
|
|
@@ -25,17 +25,19 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@tanstack/react-virtual": "3.14.9",
|
|
28
|
-
"@remotion/
|
|
28
|
+
"@remotion/canvas": "4.0.518",
|
|
29
|
+
"@remotion/studio-protocol": "4.0.518",
|
|
29
30
|
"semver": "7.5.3",
|
|
30
|
-
"remotion": "4.0.
|
|
31
|
-
"@remotion/captions": "4.0.
|
|
32
|
-
"@remotion/
|
|
33
|
-
"@remotion/
|
|
34
|
-
"@remotion/
|
|
35
|
-
"@remotion/
|
|
36
|
-
"@remotion/
|
|
37
|
-
"@remotion/
|
|
38
|
-
"@remotion/
|
|
31
|
+
"remotion": "4.0.518",
|
|
32
|
+
"@remotion/captions": "4.0.518",
|
|
33
|
+
"@remotion/media": "4.0.518",
|
|
34
|
+
"@remotion/player": "4.0.518",
|
|
35
|
+
"@remotion/media-utils": "4.0.518",
|
|
36
|
+
"@remotion/renderer": "4.0.518",
|
|
37
|
+
"@remotion/web-renderer": "4.0.518",
|
|
38
|
+
"@remotion/studio-shared": "4.0.518",
|
|
39
|
+
"@remotion/timeline-utils": "4.0.518",
|
|
40
|
+
"@remotion/zod-types": "4.0.518",
|
|
39
41
|
"@jridgewell/trace-mapping": "0.3.31",
|
|
40
42
|
"mediabunny": "1.55.1",
|
|
41
43
|
"memfs": "3.4.3",
|
|
@@ -46,7 +48,7 @@
|
|
|
46
48
|
"react": "19.2.3",
|
|
47
49
|
"react-dom": "19.2.3",
|
|
48
50
|
"@types/semver": "7.5.3",
|
|
49
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
51
|
+
"@remotion/eslint-config-internal": "4.0.518",
|
|
50
52
|
"eslint": "9.19.0",
|
|
51
53
|
"@typescript/native-preview": "7.0.0-dev.20260217.1"
|
|
52
54
|
},
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { SelectedOutline } from './selected-outline-geometry';
|
|
2
|
-
import type { SelectedOutlineLayoutTarget } from './selected-outline-types';
|
|
3
|
-
type OutlineSequenceParent = {
|
|
4
|
-
readonly id: string;
|
|
5
|
-
readonly parent: string | null;
|
|
6
|
-
};
|
|
7
|
-
export declare const orderOutlinesForRendering: ({ outlines, sequences, targetsByKey, }: {
|
|
8
|
-
readonly outlines: readonly SelectedOutline[];
|
|
9
|
-
readonly sequences: readonly OutlineSequenceParent[];
|
|
10
|
-
readonly targetsByKey: ReadonlyMap<string, SelectedOutlineLayoutTarget>;
|
|
11
|
-
}) => readonly SelectedOutline[];
|
|
12
|
-
export {};
|