@remotion/studio 4.0.516 → 4.0.517

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 (117) hide show
  1. package/dist/components/AssetSelector.js +1 -1
  2. package/dist/components/Canvas.js +15 -12
  3. package/dist/components/CanvasCaptureDropHandler.d.ts +4 -0
  4. package/dist/components/CanvasCaptureDropHandler.js +42 -0
  5. package/dist/components/CanvasOrLoading.js +4 -3
  6. package/dist/components/CaptionInspector.js +1 -1
  7. package/dist/components/CheckboardToggle.js +1 -1
  8. package/dist/components/Checkbox.d.ts +0 -1
  9. package/dist/components/Checkbox.js +2 -19
  10. package/dist/components/ConfigureLicenseModal.js +79 -46
  11. package/dist/components/CurrentAsset.d.ts +1 -1
  12. package/dist/components/CurrentAsset.js +9 -4
  13. package/dist/components/Editor.js +2 -1
  14. package/dist/components/EditorContent.js +5 -2
  15. package/dist/components/EditorContexts.js +2 -1
  16. package/dist/components/EditorRuler/Ruler.d.ts +1 -0
  17. package/dist/components/EditorRuler/Ruler.js +9 -8
  18. package/dist/components/EditorRuler/index.d.ts +1 -0
  19. package/dist/components/EditorRuler/index.js +3 -4
  20. package/dist/components/EditorRuler/use-is-ruler-visible.d.ts +1 -1
  21. package/dist/components/EditorRuler/use-is-ruler-visible.js +8 -2
  22. package/dist/components/ElementLibraryModal.d.ts +5 -0
  23. package/dist/components/ElementLibraryModal.js +38 -0
  24. package/dist/components/FilePreview.js +71 -0
  25. package/dist/components/InlineEditableTitle.js +2 -2
  26. package/dist/components/InspectorPanel/CompositionInspector.js +11 -38
  27. package/dist/components/InspectorPanel/CompositionInspectorHeader.js +2 -2
  28. package/dist/components/InspectorPanel/CompositionMetadata.js +11 -4
  29. package/dist/components/InspectorPanel/EasingInspector.js +2 -2
  30. package/dist/components/InspectorPanel/ElementLibraryButton.d.ts +2 -0
  31. package/dist/components/InspectorPanel/ElementLibraryButton.js +139 -0
  32. package/dist/components/InspectorPanel/KeyframeInspector.js +1 -1
  33. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +12 -5
  34. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +1 -3
  35. package/dist/components/InspectorPanel/common.d.ts +0 -1
  36. package/dist/components/InspectorPanel/common.js +3 -7
  37. package/dist/components/InspectorPanel/inspector-selection.d.ts +2 -2
  38. package/dist/components/InspectorPanel/styles.d.ts +0 -1
  39. package/dist/components/InspectorPanel/styles.js +3 -4
  40. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +1 -2
  41. package/dist/components/InspectorSequenceSection.d.ts +1 -2
  42. package/dist/components/InspectorSourceLocation.js +1 -1
  43. package/dist/components/Menu/MenuItem.js +15 -6
  44. package/dist/components/MenuToolbar.js +7 -3
  45. package/dist/components/Modals.js +2 -1
  46. package/dist/components/PlaybackRateSelector.js +1 -1
  47. package/dist/components/Preview.js +83 -5
  48. package/dist/components/PreviewToolbar.js +10 -4
  49. package/dist/components/PreviewToolbarOverflowButton.d.ts +1 -0
  50. package/dist/components/PreviewToolbarOverflowButton.js +9 -2
  51. package/dist/components/RadioButton.d.ts +6 -0
  52. package/dist/components/RadioButton.js +62 -0
  53. package/dist/components/RenderButton.js +2 -1
  54. package/dist/components/RulersAndGuidesToggle.d.ts +3 -1
  55. package/dist/components/RulersAndGuidesToggle.js +18 -7
  56. package/dist/components/SelectedOutlinePolygon.d.ts +1 -2
  57. package/dist/components/SelectedOutlineRenderer.d.ts +1 -2
  58. package/dist/components/SelectedOutlineUvControls.d.ts +1 -1
  59. package/dist/components/SettingsModal.js +1 -1
  60. package/dist/components/SettingsModalFooter.d.ts +3 -1
  61. package/dist/components/SettingsModalFooter.js +19 -4
  62. package/dist/components/ShowPixelGridProvider.d.ts +4 -0
  63. package/dist/components/ShowPixelGridProvider.js +24 -0
  64. package/dist/components/SidebarCollapserControls.js +2 -2
  65. package/dist/components/Timeline/Timeline.js +41 -0
  66. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +6 -7
  67. package/dist/components/Timeline/TimelineDragHandler.js +11 -4
  68. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -2
  69. package/dist/components/Timeline/TimelinePlayCursorSyncer.js +4 -2
  70. package/dist/components/Timeline/TimelineSelection.d.ts +29 -66
  71. package/dist/components/Timeline/TimelineSelection.js +30 -170
  72. package/dist/components/Timeline/TimelineSequenceItem.d.ts +1 -0
  73. package/dist/components/Timeline/TimelineSequenceItem.js +8 -6
  74. package/dist/components/Timeline/TimelineSequenceRightEdgeDragHandle.d.ts +3 -4
  75. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +3 -4
  76. package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +3 -4
  77. package/dist/components/Timeline/find-track-for-node-path-info.d.ts +1 -1
  78. package/dist/components/Timeline/keyframe-clipboard.d.ts +2 -3
  79. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +2 -3
  80. package/dist/components/Timeline/sequence-prop-clipboard.d.ts +2 -3
  81. package/dist/components/Timeline/split-selected-timeline-item.d.ts +2 -3
  82. package/dist/components/Timeline/timeline-expanded-filter.d.ts +1 -2
  83. package/dist/components/Timeline/timeline-scroll-logic.d.ts +7 -5
  84. package/dist/components/Timeline/timeline-scroll-logic.js +12 -7
  85. package/dist/components/Timeline/update-selected-easing.d.ts +7 -7
  86. package/dist/components/Timeline/use-timeline-asset-drop.js +24 -1
  87. package/dist/components/Timeline/use-timeline-keyframe-drag.d.ts +6 -7
  88. package/dist/components/canvas-capture-drop.d.ts +4 -0
  89. package/dist/components/canvas-capture-drop.js +22 -0
  90. package/dist/components/selected-outline-measurement.d.ts +7 -8
  91. package/dist/esm/{chunk-w4244j4n.js → chunk-gzqm3g2m.js} +15184 -8344
  92. package/dist/esm/internals.mjs +15184 -8344
  93. package/dist/esm/previewEntry.mjs +15096 -8256
  94. package/dist/esm/renderEntry.mjs +1 -1
  95. package/dist/helpers/calculate-timeline.d.ts +1 -7
  96. package/dist/helpers/calculate-timeline.js +2 -146
  97. package/dist/helpers/editor-ruler.js +6 -5
  98. package/dist/helpers/get-asset-metadata.d.ts +19 -0
  99. package/dist/helpers/get-asset-metadata.js +51 -6
  100. package/dist/helpers/get-connected-compositions.d.ts +1 -6
  101. package/dist/helpers/get-connected-compositions.js +2 -8
  102. package/dist/helpers/get-sequence-visible-range.d.ts +1 -5
  103. package/dist/helpers/get-sequence-visible-range.js +6 -51
  104. package/dist/helpers/get-timeline-nestedness.d.ts +1 -2
  105. package/dist/helpers/get-timeline-nestedness.js +2 -12
  106. package/dist/helpers/get-timeline-sequence-sort-key.d.ts +2 -22
  107. package/dist/helpers/get-timeline-sequence-sort-key.js +2 -16
  108. package/dist/helpers/is-current-selected-still.js +4 -2
  109. package/dist/helpers/sort-by-nonce-history.d.ts +1 -5
  110. package/dist/helpers/sort-by-nonce-history.js +3 -148
  111. package/dist/helpers/timeline-node-path-key.d.ts +1 -2
  112. package/dist/helpers/timeline-node-path-key.js +2 -2
  113. package/dist/helpers/use-menu-structure.js +20 -0
  114. package/dist/state/editor-pixel-grid.d.ts +8 -0
  115. package/dist/state/editor-pixel-grid.js +18 -0
  116. package/dist/state/modals.d.ts +4 -0
  117. package/package.json +14 -12
@@ -7,17 +7,28 @@ const colors_1 = require("../helpers/colors");
7
7
  const editor_guides_1 = require("../state/editor-guides");
8
8
  const editor_rulers_1 = require("../state/editor-rulers");
9
9
  const ControlButton_1 = require("./ControlButton");
10
- const RulersAndGuidesToggle = () => {
10
+ const RulersAndGuidesToggle = ({ showGuides }) => {
11
11
  const { editorShowGuides, setEditorShowGuides } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
12
12
  const { editorShowRulers, setEditorShowRulers } = (0, react_1.useContext)(editor_rulers_1.EditorShowRulersContext);
13
- const rulersOrGuidesAreVisible = editorShowRulers || editorShowGuides;
13
+ const rulersOrGuidesAreVisible = editorShowRulers || (showGuides && editorShowGuides);
14
14
  const onClick = (0, react_1.useCallback)(() => {
15
15
  setEditorShowRulers(() => !rulersOrGuidesAreVisible);
16
- setEditorShowGuides(() => !rulersOrGuidesAreVisible);
17
- }, [rulersOrGuidesAreVisible, setEditorShowGuides, setEditorShowRulers]);
18
- const accessibilityLabel = rulersOrGuidesAreVisible
19
- ? 'Hide rulers and guides'
20
- : 'Show rulers and guides';
16
+ if (showGuides) {
17
+ setEditorShowGuides(() => !rulersOrGuidesAreVisible);
18
+ }
19
+ }, [
20
+ rulersOrGuidesAreVisible,
21
+ setEditorShowGuides,
22
+ setEditorShowRulers,
23
+ showGuides,
24
+ ]);
25
+ const accessibilityLabel = showGuides
26
+ ? rulersOrGuidesAreVisible
27
+ ? 'Hide rulers and guides'
28
+ : 'Show rulers and guides'
29
+ : editorShowRulers
30
+ ? 'Hide rulers'
31
+ : 'Show rulers';
21
32
  return (jsx_runtime_1.jsx(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, "aria-pressed": rulersOrGuidesAreVisible, onClick: onClick, children: (color) => (jsx_runtime_1.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 576 512", style: { width: 18, height: 18 }, "aria-hidden": "true", focusable: "false", children: jsx_runtime_1.jsx("path", { fill: rulersOrGuidesAreVisible ? colors_1.BLUE : color, d: "M525.9 154.2L186.5 493.6c-6.2 6.2-16.4 6.2-22.6 0L50.7 380.5c-6.2-6.2-6.2-16.4 0-22.6l33.9-33.9 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 39.6-39.6 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 39.6-39.6 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 39.6-39.6 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 39.6-39.6 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 33.9-33.9c6.2-6.2 16.4-6.2 22.6 0L525.9 131.5c6.2 6.2 6.2 16.4 0 22.6zM73.3 289.9L28.1 335.2c-18.7 18.7-18.7 49.1 0 67.9L141.2 516.2c18.7 18.7 49.1 18.7 67.9 0L548.5 176.8c18.7-18.7 18.7-49.1 0-67.9L435.4-4.2C416.6-23 386.2-23 367.5-4.2 77.1 286.2 140.3 223 73.3 289.9z" }) })) }));
22
33
  };
23
34
  exports.RulersAndGuidesToggle = RulersAndGuidesToggle;
@@ -2,7 +2,6 @@ import React from 'react';
2
2
  import type { SelectedOutline } from './selected-outline-geometry';
3
3
  import { type SelectedOutlineSnapPoint } from './selected-outline-snap';
4
4
  import { type SelectedOutlineDragTarget, type SelectedOutlineLayoutTarget, type SelectedOutlineTarget } from './selected-outline-types';
5
- import type { TimelineSelection, TimelineSelectionInteraction } from './Timeline/TimelineSelection';
6
5
  export declare const SELECTED_OUTLINE_KEY_ATTR = "data-remotion-studio-selected-outline-key";
7
6
  export declare const SelectedOutlinePolygon: React.NamedExoticComponent<{
8
7
  readonly compositionHeight: number;
@@ -20,7 +19,7 @@ export declare const SelectedOutlinePolygon: React.NamedExoticComponent<{
20
19
  readonly onDraggingChange: (dragging: boolean) => void;
21
20
  readonly onHoverChange: (key: string | null) => void;
22
21
  readonly onSnapPointsChange: (snapPoints: readonly SelectedOutlineSnapPoint[]) => void;
23
- readonly onSelect: (item: TimelineSelection, interaction: TimelineSelectionInteraction) => void;
22
+ readonly onSelect: (item: import("@remotion/canvas").CanvasSelectionItem, interaction: import("@remotion/canvas").CanvasSelectionInteraction) => void;
24
23
  readonly onDoubleClickTarget: (target: SelectedOutlineTarget, button: number, sequenceWasDragged: boolean) => boolean;
25
24
  readonly scale: number;
26
25
  readonly showSelectedOutline: boolean;
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { SelectedOutlineLayoutTarget, SelectedOutlineTarget } from './selected-outline-types';
3
- import type { TimelineSelection, TimelineSelectionInteraction } from './Timeline/TimelineSelection';
4
3
  export declare const SelectedOutlineRenderer: React.NamedExoticComponent<{
5
4
  readonly compositionHeight: number;
6
5
  readonly compositionWidth: number;
@@ -9,7 +8,7 @@ export declare const SelectedOutlineRenderer: React.NamedExoticComponent<{
9
8
  readonly getOutlineTargets: () => readonly SelectedOutlineLayoutTarget[];
10
9
  readonly onDraggingChange: (dragging: boolean) => void;
11
10
  readonly onContextMenuOpenChange: (open: boolean) => void;
12
- readonly onSelect: (item: TimelineSelection, interaction?: TimelineSelectionInteraction | undefined) => void;
11
+ readonly onSelect: (item: import("@remotion/canvas").CanvasSelectionItem, interaction?: import("@remotion/canvas").CanvasSelectionInteraction | undefined) => void;
13
12
  readonly scale: number;
14
13
  readonly sequences: readonly {
15
14
  readonly id: string;
@@ -7,7 +7,7 @@ export declare const getSelectedOutlineUvHandleTimelineSelection: ({ effectIndex
7
7
  readonly effectIndex: number;
8
8
  readonly fieldKey: string;
9
9
  readonly nodePathInfo: SequenceNodePathInfo;
10
- }) => TimelineSelection;
10
+ }) => import("@remotion/canvas").CanvasSelectionItem;
11
11
  export declare const SelectedOutlineUvHandleConnectionLayer: React.FC<{
12
12
  readonly layoutTarget: SelectedOutlineLayoutTarget | undefined;
13
13
  readonly outline: SelectedOutline;
@@ -83,6 +83,6 @@ const SettingsModal = ({ initialPublicLicenseKey, initialTab }) => {
83
83
  }, [initialPublicLicenseKey, setPublicLicenseKey]);
84
84
  return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { panelStyle: render_modals_1.outerModalStyle, children: jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
85
85
  jsx_runtime_1.jsx(ModalHeader_1.ModalHeader, { title: "Settings", onClose: dismiss }), jsx_runtime_1.jsxs("div", { style: render_modals_1.horizontalLayout, children: [
86
- jsx_runtime_1.jsxs("div", { style: settingsLeftSidebar, children: [isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'rendering', onClick: () => selectTab('rendering'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(video_1.FilmIcon, { color: color, style: render_modals_1.icon }) })), children: "Defaults" })), isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'studio', onClick: () => selectTab('studio'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(remotion_triangle_1.RemotionTriangleIcon, { color: color, style: render_modals_1.icon }) })), children: "Studio" })), jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'shortcuts', onClick: () => selectTab('shortcuts'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(keyboard_1.KeyboardIcon, { color: color, style: keyboardIcon }) })), children: "Shortcuts" }), showPackages ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'packages', onClick: () => selectTab('packages'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(package_1.PackageIcon, { color: color, style: render_modals_1.icon }) })), children: "Packages" })) : null, isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'skills', onClick: () => selectTab('skills'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(skills_1.SkillsIcon, { color: color, style: skillsIcon }) })), children: "Skills" })), isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'apps', onClick: () => selectTab('apps'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(apps_1.AppsIcon, { color: color, style: appsIcon }) })), children: "Apps" })), isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'license', onClick: () => selectTab('license'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(license_1.LicenseIcon, { color: color, style: render_modals_1.icon }) })), children: "License" }))] }), openedTabs.includes('packages') ? (jsx_runtime_1.jsx("div", { style: tab === 'packages' ? render_modals_1.optionsPanel : hiddenPanel, children: jsx_runtime_1.jsx(InstallPackage_1.InstallPackageSettings, { footerContainer: packagesFooterContainer, packageManager: packageManager }) })) : null, openedTabs.includes('apps') ? (jsx_runtime_1.jsx("div", { style: tab === 'apps' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ConfigureDefaultEditorModal_1.DefaultEditorSettings, {}) })) : null, openedTabs.includes('license') ? (jsx_runtime_1.jsx("div", { style: tab === 'license' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ConfigureLicenseModal_1.LicenseSettings, {}) })) : null, openedTabs.includes('skills') ? (jsx_runtime_1.jsx("div", { style: tab === 'skills' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(SkillsSettings_1.SkillsSettings, {}) })) : null, openedTabs.includes('shortcuts') ? (jsx_runtime_1.jsx("div", { style: tab === 'shortcuts' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(KeyboardShortcutsSettings_1.KeyboardShortcutsSettings, {}) })) : null, openedTabs.includes('rendering') ? (jsx_runtime_1.jsx("div", { style: tab === 'rendering' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(RenderingSettings_1.RenderingSettings, {}) })) : null, openedTabs.includes('studio') ? (jsx_runtime_1.jsx("div", { style: tab === 'studio' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(StudioSettings_1.StudioSettings, {}) })) : null] }), tab === 'packages' ? (jsx_runtime_1.jsx("div", { ref: setPackagesFooterContainer })) : isBrowserStudio ? null : (jsx_runtime_1.jsx(SettingsModalFooter_1.SettingsModalFooter, {}))] }) }));
86
+ jsx_runtime_1.jsxs("div", { style: settingsLeftSidebar, children: [isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'rendering', onClick: () => selectTab('rendering'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(video_1.FilmIcon, { color: color, style: render_modals_1.icon }) })), children: "Defaults" })), isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'studio', onClick: () => selectTab('studio'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(remotion_triangle_1.RemotionTriangleIcon, { color: color, style: render_modals_1.icon }) })), children: "Studio" })), jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'shortcuts', onClick: () => selectTab('shortcuts'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(keyboard_1.KeyboardIcon, { color: color, style: keyboardIcon }) })), children: "Shortcuts" }), showPackages ? (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'packages', onClick: () => selectTab('packages'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(package_1.PackageIcon, { color: color, style: render_modals_1.icon }) })), children: "Packages" })) : null, isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'skills', onClick: () => selectTab('skills'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(skills_1.SkillsIcon, { color: color, style: skillsIcon }) })), children: "Skills" })), isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'apps', onClick: () => selectTab('apps'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(apps_1.AppsIcon, { color: color, style: appsIcon }) })), children: "Apps" })), isBrowserStudio ? null : (jsx_runtime_1.jsx(vertical_1.VerticalTab, { style: render_modals_1.horizontalTab, selected: tab === 'license', onClick: () => selectTab('license'), renderIcon: (color) => (jsx_runtime_1.jsx("div", { style: render_modals_1.iconContainer, children: jsx_runtime_1.jsx(license_1.LicenseIcon, { color: color, style: render_modals_1.icon }) })), children: "License" }))] }), openedTabs.includes('packages') ? (jsx_runtime_1.jsx("div", { style: tab === 'packages' ? render_modals_1.optionsPanel : hiddenPanel, children: jsx_runtime_1.jsx(InstallPackage_1.InstallPackageSettings, { footerContainer: packagesFooterContainer, packageManager: packageManager }) })) : null, openedTabs.includes('apps') ? (jsx_runtime_1.jsx("div", { style: tab === 'apps' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ConfigureDefaultEditorModal_1.DefaultEditorSettings, {}) })) : null, openedTabs.includes('license') ? (jsx_runtime_1.jsx("div", { style: tab === 'license' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(ConfigureLicenseModal_1.LicenseSettings, {}) })) : null, openedTabs.includes('skills') ? (jsx_runtime_1.jsx("div", { style: tab === 'skills' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(SkillsSettings_1.SkillsSettings, {}) })) : null, openedTabs.includes('shortcuts') ? (jsx_runtime_1.jsx("div", { style: tab === 'shortcuts' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(KeyboardShortcutsSettings_1.KeyboardShortcutsSettings, {}) })) : null, openedTabs.includes('rendering') ? (jsx_runtime_1.jsx("div", { style: tab === 'rendering' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(RenderingSettings_1.RenderingSettings, {}) })) : null, openedTabs.includes('studio') ? (jsx_runtime_1.jsx("div", { style: tab === 'studio' ? settingsOptionsPanel : hiddenPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(StudioSettings_1.StudioSettings, {}) })) : null] }), tab === 'packages' ? (jsx_runtime_1.jsx("div", { ref: setPackagesFooterContainer })) : isBrowserStudio ? null : (jsx_runtime_1.jsx(SettingsModalFooter_1.SettingsModalFooter, { showLicenseFaq: tab === 'license' }))] }) }));
87
87
  };
88
88
  exports.SettingsModal = SettingsModal;
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const SettingsModalFooter: React.FC;
2
+ export declare const SettingsModalFooter: React.FC<{
3
+ readonly showLicenseFaq: boolean;
4
+ }>;
@@ -5,6 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const InspectorOpenInEditor_1 = require("./InspectorOpenInEditor");
8
+ const common_1 = require("./InspectorPanel/common");
8
9
  const layout_1 = require("./layout");
9
10
  const ModalFooter_1 = require("./ModalFooter");
10
11
  const footer = {
@@ -13,6 +14,7 @@ const footer = {
13
14
  const footerRow = {
14
15
  alignItems: 'center',
15
16
  display: 'flex',
17
+ justifyContent: 'space-between',
16
18
  };
17
19
  const configFileHint = {
18
20
  alignItems: 'center',
@@ -30,7 +32,14 @@ const configFileName = {
30
32
  fontWeight: 'bold',
31
33
  lineHeight: '20px',
32
34
  };
33
- const SettingsModalFooter = () => {
35
+ const externalLinkIndicator = {
36
+ display: 'inline-block',
37
+ height: 12,
38
+ marginLeft: 4,
39
+ verticalAlign: -2,
40
+ width: 12,
41
+ };
42
+ const SettingsModalFooter = ({ showLicenseFaq }) => {
34
43
  const configFileLocation = (0, react_1.useMemo)(() => {
35
44
  return {
36
45
  source: 'remotion.config.ts',
@@ -38,8 +47,14 @@ const SettingsModalFooter = () => {
38
47
  column: 1,
39
48
  };
40
49
  }, []);
41
- return (jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { style: footer, children: jsx_runtime_1.jsx("div", { style: footerRow, children: jsx_runtime_1.jsxs("div", { style: configFileHint, children: ["Changes save to",
42
- jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, location: configFileLocation, label: jsx_runtime_1.jsx("strong", { style: configFileName, children: "remotion.config.ts" }) })
43
- ] }) }) }));
50
+ const openLicenseFaq = (0, react_1.useCallback)(() => {
51
+ window.open('https://www.remotion.dev/docs/license/faq', '_blank', 'noopener,noreferrer');
52
+ }, []);
53
+ return (jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { style: footer, children: jsx_runtime_1.jsxs("div", { style: footerRow, children: [
54
+ jsx_runtime_1.jsxs("div", { style: configFileHint, children: ["Changes save to",
55
+ jsx_runtime_1.jsx(layout_1.Spacing, { x: 0.5 }), jsx_runtime_1.jsx(InspectorOpenInEditor_1.InspectorOpenInEditor, { locationType: null, location: configFileLocation, label: jsx_runtime_1.jsx("strong", { style: configFileName, children: "remotion.config.ts" }) })
56
+ ] }), showLicenseFaq ? (jsx_runtime_1.jsxs(common_1.InspectorQuickAction, { disabled: false, onClick: openLicenseFaq, style: { flex: 'none', width: 'fit-content' }, title: "Open the Remotion License FAQ in a new tab", children: ["License FAQ",
57
+ jsx_runtime_1.jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", style: externalLinkIndicator, children: jsx_runtime_1.jsx("path", { d: "M4 12 12 4M6 4h6v6", fill: "none", stroke: colors_1.CURRENT_COLOR, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "1.5" }) })
58
+ ] })) : null] }) }));
44
59
  };
45
60
  exports.SettingsModalFooter = SettingsModalFooter;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const ShowPixelGridProvider: React.FC<{
3
+ readonly children: React.ReactNode;
4
+ }>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShowPixelGridProvider = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const editor_pixel_grid_1 = require("../state/editor-pixel-grid");
7
+ const ShowPixelGridProvider = ({ children }) => {
8
+ const [editorShowPixelGrid, setEditorShowPixelGridState] = (0, react_1.useState)(() => (0, editor_pixel_grid_1.loadEditorShowPixelGridOption)());
9
+ const setEditorShowPixelGrid = (0, react_1.useCallback)((newValue) => {
10
+ setEditorShowPixelGridState((prevState) => {
11
+ const newVal = newValue(prevState);
12
+ (0, editor_pixel_grid_1.persistEditorShowPixelGridOption)(newVal);
13
+ return newVal;
14
+ });
15
+ }, []);
16
+ const editorShowPixelGridCtx = (0, react_1.useMemo)(() => {
17
+ return {
18
+ editorShowPixelGrid,
19
+ setEditorShowPixelGrid,
20
+ };
21
+ }, [editorShowPixelGrid, setEditorShowPixelGrid]);
22
+ return (jsx_runtime_1.jsx(editor_pixel_grid_1.EditorShowPixelGridContext.Provider, { value: editorShowPixelGridCtx, children: children }));
23
+ };
24
+ exports.ShowPixelGridProvider = ShowPixelGridProvider;
@@ -139,8 +139,8 @@ const SidebarCollapserControl = ({ side }) => {
139
139
  return (jsx_runtime_1.jsx("div", { "data-sidebar-toggle": "right", style: colorStyle(color), title: toggleRightTooltip, children: jsx_runtime_1.jsx("div", { style: rightIcon(color) }) }));
140
140
  }, [colorStyle, rightIcon, toggleRightTooltip]);
141
141
  if (side === 'left') {
142
- return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: toggleLeft, renderAction: toggleLeftAction, unhoveredColor: colors_1.WHITE_ALPHA_80 }));
142
+ return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: toggleLeft, renderAction: toggleLeftAction, style: { marginRight: 4 } }));
143
143
  }
144
- return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: toggleRight, renderAction: toggleRightAction, unhoveredColor: colors_1.WHITE_ALPHA_80 }));
144
+ return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { variant: null, onClick: toggleRight, renderAction: toggleRightAction }));
145
145
  };
146
146
  exports.SidebarCollapserControl = SidebarCollapserControl;
@@ -62,6 +62,7 @@ const should_subscribe_to_sequence_props_1 = require("./should-subscribe-to-sequ
62
62
  const SubscribeToNodePaths_1 = require("./SubscribeToNodePaths");
63
63
  const timeline_asset_drop_context_1 = require("./timeline-asset-drop-context");
64
64
  const timeline_refs_1 = require("./timeline-refs");
65
+ const timeline_scroll_logic_1 = require("./timeline-scroll-logic");
65
66
  const TimelineDragHandler_1 = require("./TimelineDragHandler");
66
67
  const TimelineHeightContainer_1 = require("./TimelineHeightContainer");
67
68
  const TimelineInOutDragHandler_1 = require("./TimelineInOutDragHandler");
@@ -72,6 +73,7 @@ const TimelinePinchZoom_1 = require("./TimelinePinchZoom");
72
73
  const TimelinePlayCursorSyncer_1 = require("./TimelinePlayCursorSyncer");
73
74
  const TimelineScrollable_1 = require("./TimelineScrollable");
74
75
  const TimelineSelection_1 = require("./TimelineSelection");
76
+ const TimelineSequenceItem_1 = require("./TimelineSequenceItem");
75
77
  const TimelineSlider_1 = require("./TimelineSlider");
76
78
  const TimelineTimeIndicators_1 = require("./TimelineTimeIndicators");
77
79
  const TimelineTracks_1 = require("./TimelineTracks");
@@ -94,6 +96,7 @@ const TimelineContextMenuArea = ({ children }) => {
94
96
  const assetDropFrame = (0, use_timeline_asset_drop_1.useTimelineAssetDrop)();
95
97
  const { compositions, canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
96
98
  const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
99
+ const isStill = (0, is_current_selected_still_1.useIsStill)();
97
100
  const [isAddingSolid, setIsAddingSolid] = (0, react_1.useState)(false);
98
101
  const [isAddingAsset, setIsAddingAsset] = (0, react_1.useState)(false);
99
102
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
@@ -101,6 +104,44 @@ const TimelineContextMenuArea = ({ children }) => {
101
104
  const previewInteractive = previewConnected && (0, interactivity_enabled_1.isStudioInteractivityEnabled)();
102
105
  const browserStudioOperations = (0, browser_studio_operations_1.getBrowserStudioOperations)();
103
106
  const browserStudioCanInsertSolid = browserStudioOperations !== null;
107
+ (0, react_1.useEffect)(() => {
108
+ const verticalScroll = timeline_refs_1.timelineVerticalScroll.current;
109
+ if (!verticalScroll) {
110
+ return;
111
+ }
112
+ const autoScroll = (0, timeline_scroll_logic_1.startTimelineEdgeAutoScroll)({
113
+ includeHorizontal: false,
114
+ includeVertical: true,
115
+ verticalTopOffset: isStill ? 0 : TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
116
+ onTick: (directions) => {
117
+ if (directions.y === null) {
118
+ return;
119
+ }
120
+ verticalScroll.scrollTop +=
121
+ directions.y === 'up'
122
+ ? -timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT
123
+ : timeline_scroll_logic_1.EDGE_SCROLL_VERTICAL_INCREMENT;
124
+ },
125
+ });
126
+ const onDragOver = (event) => {
127
+ if (!event.dataTransfer ||
128
+ !Array.from(event.dataTransfer.types).includes(TimelineSequenceItem_1.SEQUENCE_REORDER_MIME_TYPE)) {
129
+ autoScroll.stop();
130
+ return;
131
+ }
132
+ autoScroll.update(event);
133
+ };
134
+ const stopAutoScroll = () => autoScroll.stop();
135
+ verticalScroll.addEventListener('dragover', onDragOver, true);
136
+ document.addEventListener('dragend', stopAutoScroll, true);
137
+ document.addEventListener('drop', stopAutoScroll, true);
138
+ return () => {
139
+ autoScroll.stop();
140
+ verticalScroll.removeEventListener('dragover', onDragOver, true);
141
+ document.removeEventListener('dragend', stopAutoScroll, true);
142
+ document.removeEventListener('drop', stopAutoScroll, true);
143
+ };
144
+ }, [isStill]);
104
145
  const currentCompositionId = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ? canvasContent.compositionId : null;
105
146
  const currentComposition = (0, react_1.useMemo)(() => {
106
147
  var _a;
@@ -3,7 +3,6 @@ import type React from 'react';
3
3
  import { type OverrideIdToNodePaths, type PropStatuses, type SequencePropsSubscriptionKey, type InteractivitySchema, type TSequence } from 'remotion';
4
4
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
5
5
  import { type EffectsClipboardEnvelope } from './effects-clipboard';
6
- import { type TimelineSelection } from './TimelineSelection';
7
6
  export type PasteEffectsTarget = {
8
7
  readonly type: 'valid';
9
8
  readonly nodePathInfo: SequenceNodePathInfo;
@@ -28,9 +27,9 @@ export type PasteEffectPropTarget = {
28
27
  } | {
29
28
  readonly type: 'none' | 'unsupported' | 'effect-type-mismatch' | 'prop-mismatch' | 'uncopyable';
30
29
  };
31
- export declare const getPasteEffectsTarget: (selectedItems: readonly TimelineSelection[]) => PasteEffectsTarget;
30
+ export declare const getPasteEffectsTarget: (selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[]) => PasteEffectsTarget;
32
31
  export declare const getSnapshotsFromSelection: ({ selection, propStatuses, }: {
33
- selection: TimelineSelection;
32
+ selection: import("@remotion/canvas").CanvasSelectionItem;
34
33
  propStatuses: PropStatuses;
35
34
  }) => EffectClipboardSnapshot[] | null;
36
35
  export type EffectClipboardDataFromSelections = {
@@ -44,15 +43,15 @@ export type EffectClipboardDataFromSelections = {
44
43
  readonly type: 'uncopyable';
45
44
  };
46
45
  export declare const getEffectClipboardDataFromSelections: ({ selectedItems, propStatuses, }: {
47
- selectedItems: readonly TimelineSelection[];
46
+ selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
48
47
  propStatuses: PropStatuses;
49
48
  }) => EffectClipboardDataFromSelections;
50
49
  export declare const getEffectsClipboardEnvelopeFromSelections: ({ selectedItems, payload, }: {
51
- selectedItems: readonly TimelineSelection[];
50
+ selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
52
51
  payload: EffectClipboardData;
53
52
  }) => EffectsClipboardEnvelope;
54
53
  export declare const getEffectPropClipboardDataFromSelection: ({ selection, propStatuses, }: {
55
- selection: TimelineSelection;
54
+ selection: import("@remotion/canvas").CanvasSelectionItem;
56
55
  propStatuses: PropStatuses;
57
56
  }) => EffectPropClipboardData | null;
58
57
  export declare const getEasingClipboardDataFromSelection: ({ selection, sequences, overrideIdsToNodePaths, propStatuses, }: {
@@ -68,7 +67,7 @@ export declare const getEasingClipboardDataFromSelection: ({ selection, sequence
68
67
  propStatuses: PropStatuses;
69
68
  }) => EasingClipboardData | null;
70
69
  export declare const getPasteEffectPropTarget: ({ selectedItems, payload, propStatuses, sequences, overrideIdsToNodePaths, }: {
71
- readonly selectedItems: readonly TimelineSelection[];
70
+ readonly selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
72
71
  readonly payload: EffectPropClipboardData;
73
72
  readonly propStatuses: PropStatuses;
74
73
  readonly sequences: TSequence[];
@@ -74,20 +74,25 @@ const getClientXWithScroll = (x) => {
74
74
  const TimelineDragHandler = () => {
75
75
  const video = remotion_1.Internals.useUnsafeVideoConfig();
76
76
  const { zoom: zoomMap } = (0, react_1.useContext)(timeline_zoom_1.TimelineZoomCtx);
77
- const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
77
+ const { canvasContent, currentAssetMetadata } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
78
78
  const containerStyle = (0, react_1.useMemo)(() => {
79
79
  var _a;
80
- if (!canvasContent || canvasContent.type !== 'composition') {
80
+ if (!canvasContent) {
81
81
  return {};
82
82
  }
83
- const zoom = (_a = zoomMap[canvasContent.compositionId]) !== null && _a !== void 0 ? _a : timeline_zoom_1.TIMELINE_MIN_ZOOM;
83
+ const zoom = canvasContent.type === 'composition'
84
+ ? ((_a = zoomMap[canvasContent.compositionId]) !== null && _a !== void 0 ? _a : timeline_zoom_1.TIMELINE_MIN_ZOOM)
85
+ : timeline_zoom_1.TIMELINE_MIN_ZOOM;
84
86
  return {
85
87
  ...container,
86
88
  width: 100 * zoom + '%',
87
89
  height: TimelineTimeIndicators_1.TIMELINE_TIME_INDICATOR_HEIGHT,
88
90
  };
89
91
  }, [canvasContent, zoomMap]);
90
- if (!canvasContent || canvasContent.type !== 'composition') {
92
+ const hasPlayableContent = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'composition' ||
93
+ ((canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset' &&
94
+ (currentAssetMetadata === null || currentAssetMetadata === void 0 ? void 0 : currentAssetMetadata.asset) === canvasContent.asset);
95
+ if (!hasPlayableContent) {
91
96
  return null;
92
97
  }
93
98
  return (jsx_runtime_1.jsx("div", { ref: timeline_refs_1.sliderAreaRef, style: containerStyle, [TimelineSelection_1.TIMELINE_SCRUBBER_ATTR]: true, children: video && (0, interactivity_enabled_1.isStudioSelectionEnabled)() ? (jsx_runtime_1.jsx(TimelineDragHandlerInnerMemo, {})) : null }));
@@ -248,7 +253,9 @@ const TimelineDragHandlerInner = () => {
248
253
  return;
249
254
  }
250
255
  const scroller = (0, timeline_scroll_logic_1.startTimelineEdgeAutoScroll)({
256
+ includeHorizontal: true,
251
257
  includeVertical: false,
258
+ verticalTopOffset: 0,
252
259
  onTick: onEdgeScrollTick,
253
260
  });
254
261
  autoScroller.current = scroller;
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { CanUpdateSequencePropStatus, DragOverrideValue, InteractivitySchema, SequencePropsSubscriptionKey } from 'remotion';
3
3
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
- import { type TimelineSelection } from './TimelineSelection';
5
4
  export declare const getSelectedKeyframeControlNodePathInfos: ({ clickedNodePathInfo, selectedItems, }: {
6
5
  readonly clickedNodePathInfo: SequenceNodePathInfo;
7
- readonly selectedItems: readonly TimelineSelection[];
6
+ readonly selectedItems: readonly import("@remotion/canvas").CanvasSelectionItem[];
8
7
  }) => readonly SequenceNodePathInfo[];
9
8
  export declare const shouldShowTimelineKeyframeControls: ({ propStatus, selected, keyframable, }: {
10
9
  propStatus: CanUpdateSequencePropStatus | null;
@@ -19,10 +19,12 @@ const TimelinePlayCursorSyncer = () => {
19
19
  const compositionId = canvasContent && canvasContent.type === 'composition'
20
20
  ? canvasContent.compositionId
21
21
  : null;
22
+ // Asset previews have a synthetic video config, but no composition ID
23
+ // with which to look up a persisted timeline zoom.
22
24
  const zoom = compositionId
23
25
  ? ((_a = zoomMap[compositionId]) !== null && _a !== void 0 ? _a : timeline_zoom_1.TIMELINE_MIN_ZOOM)
24
- : null;
25
- if (zoom && video) {
26
+ : timeline_zoom_1.TIMELINE_MIN_ZOOM;
27
+ if (video) {
26
28
  (0, imperative_state_1.setCurrentFrame)(timelinePosition);
27
29
  (0, imperative_state_1.setCurrentZoom)(zoom);
28
30
  (0, imperative_state_1.setCurrentDuration)(video.durationInFrames);
@@ -1,3 +1,4 @@
1
+ import { type CanvasSelectionInteraction, type CanvasSelectionItem, type CanvasSelectionSnapshot } from '@remotion/canvas';
1
2
  import React, { type CSSProperties } from 'react';
2
3
  import { type GetDragOverrides, type GetEffectDragOverrides, type PropStatuses } from 'remotion';
3
4
  import type { SequenceNodePathInfo, TimelineTrackData } from '../../helpers/get-timeline-sequence-sort-key';
@@ -20,46 +21,11 @@ export declare const getTimelineRowHighlightBackground: ({ showSelectedBackgroun
20
21
  }) => string | undefined;
21
22
  export declare const TIMELINE_BACKGROUND = "#15181B";
22
23
  export declare const TIMELINE_TICKS_BACKGROUND = "rgb(31,36,40)";
23
- export type TimelineSelection = {
24
- readonly type: 'guide';
25
- readonly guideId: string;
26
- } | {
27
- readonly type: 'sequence';
28
- readonly nodePathInfo: SequenceNodePathInfo;
29
- } | {
30
- readonly type: 'sequence-prop';
31
- readonly nodePathInfo: SequenceNodePathInfo;
32
- readonly key: string;
33
- } | {
34
- readonly type: 'sequence-all-effects';
35
- readonly nodePathInfo: SequenceNodePathInfo;
36
- } | {
37
- readonly type: 'sequence-effect';
38
- readonly nodePathInfo: SequenceNodePathInfo;
39
- readonly i: number;
40
- } | {
41
- readonly type: 'sequence-effect-prop';
42
- readonly nodePathInfo: SequenceNodePathInfo;
43
- readonly i: number;
44
- readonly key: string;
45
- } | {
46
- readonly type: 'keyframe';
47
- readonly nodePathInfo: SequenceNodePathInfo;
48
- readonly frame: number;
49
- } | {
50
- readonly type: 'easing';
51
- readonly nodePathInfo: SequenceNodePathInfo;
52
- readonly fromFrame: number;
53
- readonly toFrame: number;
54
- readonly segmentIndex: number;
55
- };
24
+ export type TimelineSelection = CanvasSelectionItem;
56
25
  export type TimelineEasingSelection = Extract<TimelineSelection, {
57
26
  type: 'easing';
58
27
  }>;
59
- export type TimelineSelectionInteraction = {
60
- readonly shiftKey: boolean;
61
- readonly toggleKey: boolean;
62
- };
28
+ export type TimelineSelectionInteraction = CanvasSelectionInteraction;
63
29
  export declare const isTimelineSelectionModifierEvent: ({ shiftKey, metaKey, ctrlKey, }: {
64
30
  readonly shiftKey: boolean;
65
31
  readonly metaKey: boolean;
@@ -71,10 +37,7 @@ export declare const shouldSelectTimelineRowOnPointerDown: ({ selected, shiftKey
71
37
  readonly metaKey: boolean;
72
38
  readonly ctrlKey: boolean;
73
39
  }) => boolean;
74
- export type TimelineSelectionState = {
75
- readonly selectedItems: readonly TimelineSelection[];
76
- readonly anchor: TimelineSelection | null;
77
- };
40
+ export type TimelineSelectionState = CanvasSelectionSnapshot;
78
41
  export declare const EMPTY_TIMELINE_SELECTION_STATE: TimelineSelectionState;
79
42
  export type TimelineMarqueeRect = {
80
43
  readonly left: number;
@@ -88,16 +51,16 @@ export type TimelineMarqueeSelectionCandidate = {
88
51
  readonly rect: TimelineMarqueeRect;
89
52
  };
90
53
  export declare const getTimelineSelectionAfterInteraction: ({ currentState, clickedItem, interaction, allSelectableItems, }: {
91
- readonly currentState: TimelineSelectionState;
92
- readonly clickedItem: TimelineSelection;
93
- readonly interaction: TimelineSelectionInteraction;
94
- readonly allSelectableItems: readonly TimelineSelection[];
95
- }) => TimelineSelectionState;
54
+ readonly currentState: CanvasSelectionSnapshot;
55
+ readonly clickedItem: CanvasSelectionItem;
56
+ readonly interaction: CanvasSelectionInteraction;
57
+ readonly allSelectableItems: readonly CanvasSelectionItem[];
58
+ }) => CanvasSelectionSnapshot;
96
59
  export declare const getAvailableTimelineSelectionState: ({ availableKeys, availableItemsByKey, state, }: {
97
60
  readonly availableKeys: ReadonlySet<string>;
98
- readonly availableItemsByKey?: ReadonlyMap<string, TimelineSelection> | undefined;
99
- readonly state: TimelineSelectionState;
100
- }) => TimelineSelectionState;
61
+ readonly availableItemsByKey?: ReadonlyMap<string, CanvasSelectionItem> | undefined;
62
+ readonly state: CanvasSelectionSnapshot;
63
+ }) => CanvasSelectionSnapshot;
101
64
  export declare const getNormalizedTimelineMarqueeRect: ({ startX, startY, currentX, currentY, }: {
102
65
  readonly startX: number;
103
66
  readonly startY: number;
@@ -119,12 +82,12 @@ export declare const getTimelineMarqueeSelection: ({ candidates, lockedSelection
119
82
  readonly marqueeRect: TimelineMarqueeRect;
120
83
  }) => {
121
84
  readonly lockedSelectionKind: TimelineMarqueeSelectionKind | null;
122
- readonly selectedItems: readonly TimelineSelection[];
85
+ readonly selectedItems: readonly CanvasSelectionItem[];
123
86
  };
124
87
  export declare const extendTimelineMarqueeSelection: ({ currentSelection, marqueeSelection, }: {
125
- readonly currentSelection: readonly TimelineSelection[];
126
- readonly marqueeSelection: readonly TimelineSelection[];
127
- }) => readonly TimelineSelection[];
88
+ readonly currentSelection: readonly CanvasSelectionItem[];
89
+ readonly marqueeSelection: readonly CanvasSelectionItem[];
90
+ }) => readonly CanvasSelectionItem[];
128
91
  type TimelineSelectionContextValue = {
129
92
  readonly canSelect: boolean;
130
93
  readonly revealRequest: TimelineSelectionRevealRequest | null;
@@ -151,23 +114,23 @@ type TimelineSelectionRevealRequest = {
151
114
  readonly item: TimelineSelection;
152
115
  readonly token: number;
153
116
  };
154
- export declare const getTimelineSelectionFromNodePathInfo: (nodePathInfo: SequenceNodePathInfo | null) => TimelineSelection | null;
155
- export declare const getTimelineSelectionKey: (item: TimelineSelection) => string;
156
- export declare const getSelectableTimelineSequenceSelections: (tracks: readonly Pick<TimelineTrackData, "nodePathInfo">[]) => TimelineSelection[];
117
+ export declare const getTimelineSelectionFromNodePathInfo: (nodePathInfo: SequenceNodePathInfo | null) => CanvasSelectionItem | null;
118
+ export declare const getTimelineSelectionKey: (item: CanvasSelectionItem) => string;
119
+ export declare const getSelectableTimelineSequenceSelections: (tracks: readonly Pick<TimelineTrackData, "nodePathInfo">[]) => CanvasSelectionItem[];
157
120
  export declare const getSelectableTimelineItems: ({ getDragOverrides, getEffectDragOverrides, getIsExpanded, propStatuses, selectedItems, timeline, timelinePosition, }: {
158
121
  readonly getDragOverrides: GetDragOverrides;
159
122
  readonly getEffectDragOverrides: GetEffectDragOverrides;
160
123
  readonly getIsExpanded: GetIsExpanded;
161
124
  readonly propStatuses: PropStatuses;
162
- readonly selectedItems: readonly TimelineSelection[];
125
+ readonly selectedItems: readonly CanvasSelectionItem[];
163
126
  readonly timeline: readonly TimelineTrackData[];
164
127
  readonly timelinePosition: number;
165
- }) => TimelineSelection[];
128
+ }) => CanvasSelectionItem[];
166
129
  export declare const getTimelineSequenceSelectionKey: (nodePathInfo: SequenceNodePathInfo) => string;
167
130
  export declare const TimelineSelectAllKeybindings: React.FC<{
168
131
  readonly timeline: readonly TimelineTrackData[];
169
132
  }>;
170
- export declare const getTimelineSequenceSelectionForEscape: (selectedItems: readonly TimelineSelection[]) => {
133
+ export declare const getTimelineSequenceSelectionForEscape: (selectedItems: readonly CanvasSelectionItem[]) => {
171
134
  readonly type: "sequence";
172
135
  readonly nodePathInfo: SequenceNodePathInfo;
173
136
  } | null;
@@ -186,17 +149,17 @@ export declare const useTimelineMarqueeSelection: () => {
186
149
  marqueeRect: TimelineMarqueeRect | null;
187
150
  onPointerDownCapture: (event: React.PointerEvent<HTMLDivElement>) => void;
188
151
  };
189
- export declare const useTimelineMarqueeSelectableItem: (item: TimelineSelection | null, ref: React.RefObject<Element | null>) => void;
152
+ export declare const useTimelineMarqueeSelectableItem: (item: CanvasSelectionItem | null, ref: React.RefObject<Element | null>) => void;
190
153
  export declare const useTimelineRowSelection: (nodePathInfo: SequenceNodePathInfo | null) => {
191
- onSelect: (interaction?: TimelineSelectionInteraction | undefined) => void;
154
+ onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
192
155
  selectable: boolean;
193
- selectionItem: TimelineSelection | null;
156
+ selectionItem: CanvasSelectionItem | null;
194
157
  selected: boolean;
195
158
  };
196
159
  export declare const useTimelineKeyframeSelection: (nodePathInfo: SequenceNodePathInfo, frame: number) => {
197
- onSelect: (interaction?: TimelineSelectionInteraction | undefined) => void;
160
+ onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
198
161
  selectable: boolean;
199
- selectionItem: TimelineSelection;
162
+ selectionItem: CanvasSelectionItem;
200
163
  selected: boolean;
201
164
  };
202
165
  export declare const useTimelineEasingSelection: ({ nodePathInfo, fromFrame, toFrame, segmentIndex, }: {
@@ -205,7 +168,7 @@ export declare const useTimelineEasingSelection: ({ nodePathInfo, fromFrame, toF
205
168
  readonly toFrame: number;
206
169
  readonly segmentIndex: number;
207
170
  }) => {
208
- onSelect: (interaction?: TimelineSelectionInteraction | undefined) => void;
171
+ onSelect: (interaction?: CanvasSelectionInteraction | undefined) => void;
209
172
  selectable: boolean;
210
173
  selected: boolean;
211
174
  selectionItem: {
@@ -221,7 +184,7 @@ export declare const useTimelineGuideSelection: (guideId: string) => {
221
184
  onSelect: () => void;
222
185
  selectable: boolean;
223
186
  selected: boolean;
224
- selectionItem: TimelineSelection;
187
+ selectionItem: CanvasSelectionItem;
225
188
  };
226
189
  export declare const useTimelineRowContainsSelection: (nodePathInfo: SequenceNodePathInfo | null) => boolean;
227
190
  export declare const useTimelineRowHighlightBackground: (nodePathInfo: SequenceNodePathInfo | null, { hovered, selectedBackground, }: {