@remotion/studio 4.0.477 → 4.0.479

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 (191) hide show
  1. package/dist/components/AssetSelector.js +8 -14
  2. package/dist/components/Button.d.ts +1 -0
  3. package/dist/components/Button.js +8 -5
  4. package/dist/components/CanvasIfSizeIsAvailable.js +2 -6
  5. package/dist/components/CompactExplanation.d.ts +12 -0
  6. package/dist/components/CompactExplanation.js +52 -0
  7. package/dist/components/CompositionSelector.js +2 -4
  8. package/dist/components/CurrentAsset.d.ts +3 -1
  9. package/dist/components/CurrentAsset.js +42 -34
  10. package/dist/components/CurrentComposition.d.ts +1 -1
  11. package/dist/components/CurrentComposition.js +38 -31
  12. package/dist/components/DefaultPropsEditor.d.ts +12 -2
  13. package/dist/components/DefaultPropsEditor.js +2 -2
  14. package/dist/components/EditorGuides/Guide.js +37 -9
  15. package/dist/components/EditorRuler/Ruler.js +4 -14
  16. package/dist/components/EditorRuler/index.js +9 -4
  17. package/dist/components/EffectPickerModal.d.ts +5 -0
  18. package/dist/components/EffectPickerModal.js +179 -0
  19. package/dist/components/InlineAction.js +1 -0
  20. package/dist/components/InspectorInfoHeader.d.ts +11 -0
  21. package/dist/components/InspectorInfoHeader.js +55 -0
  22. package/dist/components/InspectorPanel/DefaultInspector.d.ts +8 -0
  23. package/dist/components/InspectorPanel/DefaultInspector.js +93 -0
  24. package/dist/components/InspectorPanel/EasingInspector.d.ts +5 -0
  25. package/dist/components/InspectorPanel/EasingInspector.js +41 -0
  26. package/dist/components/InspectorPanel/GuideInspector.d.ts +7 -0
  27. package/dist/components/InspectorPanel/GuideInspector.js +55 -0
  28. package/dist/components/InspectorPanel/KeyframeInspector.d.ts +7 -0
  29. package/dist/components/InspectorPanel/KeyframeInspector.js +109 -0
  30. package/dist/components/InspectorPanel/SelectedInspector.d.ts +5 -0
  31. package/dist/components/InspectorPanel/SelectedInspector.js +26 -0
  32. package/dist/components/InspectorPanel/SequenceSelectionInspector.d.ts +5 -0
  33. package/dist/components/InspectorPanel/SequenceSelectionInspector.js +116 -0
  34. package/dist/components/InspectorPanel/common.d.ts +15 -0
  35. package/dist/components/InspectorPanel/common.js +18 -0
  36. package/dist/components/InspectorPanel/inspector-selection.d.ts +10 -0
  37. package/dist/components/InspectorPanel/inspector-selection.js +34 -0
  38. package/dist/components/InspectorPanel/styles.d.ts +27 -0
  39. package/dist/components/InspectorPanel/styles.js +178 -0
  40. package/dist/components/InspectorPanel/use-track-for-selection.d.ts +2 -0
  41. package/dist/components/InspectorPanel/use-track-for-selection.js +22 -0
  42. package/dist/components/InspectorPanel.d.ts +8 -0
  43. package/dist/components/InspectorPanel.js +26 -0
  44. package/dist/components/InspectorPanelLayout.d.ts +1 -0
  45. package/dist/components/InspectorPanelLayout.js +4 -0
  46. package/dist/components/InspectorSequenceSection.d.ts +16 -0
  47. package/dist/components/InspectorSequenceSection.js +147 -0
  48. package/dist/components/InspectorSourceLocation.d.ts +7 -0
  49. package/dist/components/InspectorSourceLocation.js +71 -0
  50. package/dist/components/MenuToolbar.d.ts +1 -0
  51. package/dist/components/MenuToolbar.js +4 -1
  52. package/dist/components/Modals.js +3 -3
  53. package/dist/components/NewComposition/InputDragger.js +1 -1
  54. package/dist/components/NewComposition/RemInput.d.ts +1 -0
  55. package/dist/components/NewComposition/RemInput.js +8 -2
  56. package/dist/components/NewComposition/RemTextarea.d.ts +1 -0
  57. package/dist/components/NewComposition/RemTextarea.js +8 -2
  58. package/dist/components/NewComposition/ValidationMessage.d.ts +3 -0
  59. package/dist/components/NewComposition/ValidationMessage.js +16 -5
  60. package/dist/components/OptionsPanel.d.ts +1 -1
  61. package/dist/components/OptionsPanel.js +8 -17
  62. package/dist/components/QuickSwitcher/QuickSwitcherContent.js +2 -7
  63. package/dist/components/QuickSwitcher/QuickSwitcherResult.js +3 -10
  64. package/dist/components/QuickSwitcher/shared.d.ts +4 -0
  65. package/dist/components/QuickSwitcher/shared.js +24 -0
  66. package/dist/components/RenderModal/DataEditor.d.ts +29 -2
  67. package/dist/components/RenderModal/DataEditor.js +107 -56
  68. package/dist/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -0
  69. package/dist/components/RenderModal/RenderModalJSONPropsEditor.js +25 -7
  70. package/dist/components/RenderModal/SchemaEditor/Fieldset.d.ts +2 -1
  71. package/dist/components/RenderModal/SchemaEditor/Fieldset.js +10 -5
  72. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +4 -0
  73. package/dist/components/RenderModal/SchemaEditor/SchemaEditor.js +27 -4
  74. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.d.ts +12 -4
  75. package/dist/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +23 -9
  76. package/dist/components/RenderModal/SchemaEditor/SchemaLabel.js +3 -3
  77. package/dist/components/RenderModal/SchemaEditor/SchemaSeparationLine.js +8 -1
  78. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
  79. package/dist/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
  80. package/dist/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +1 -1
  81. package/dist/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  82. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +1 -0
  83. package/dist/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -6
  84. package/dist/components/RenderModal/SchemaEditor/ZodFieldValidation.js +2 -2
  85. package/dist/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +2 -1
  86. package/dist/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
  87. package/dist/components/RenderModal/SchemaEditor/ZodObjectEditor.js +9 -11
  88. package/dist/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
  89. package/dist/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  90. package/dist/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
  91. package/dist/components/RenderModal/SchemaEditor/ZodTextareaEditor.js +1 -1
  92. package/dist/components/RenderModal/WarningIndicatorButton.d.ts +1 -0
  93. package/dist/components/RenderModal/WarningIndicatorButton.js +17 -4
  94. package/dist/components/RenderModal/get-render-modal-warnings.d.ts +2 -1
  95. package/dist/components/RenderModal/get-render-modal-warnings.js +6 -3
  96. package/dist/components/RendersTab.js +1 -1
  97. package/dist/components/SegmentedControl.d.ts +3 -0
  98. package/dist/components/SegmentedControl.js +11 -5
  99. package/dist/components/SelectedOutlineElement.js +135 -31
  100. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  101. package/dist/components/SelectedOutlineOverlay.js +45 -29
  102. package/dist/components/SelectedOutlineUvControls.d.ts +9 -0
  103. package/dist/components/SelectedOutlineUvControls.js +64 -10
  104. package/dist/components/Tabs/index.js +4 -4
  105. package/dist/components/Timeline/EasingEditorModal.d.ts +5 -4
  106. package/dist/components/Timeline/EasingEditorModal.js +597 -124
  107. package/dist/components/Timeline/KeyframeSettingsModal.d.ts +2 -2
  108. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +2 -2
  109. package/dist/components/Timeline/TimelineClipboardKeybindings.d.ts +15 -3
  110. package/dist/components/Timeline/TimelineClipboardKeybindings.js +85 -1
  111. package/dist/components/Timeline/TimelineDeleteKeybindings.js +10 -3
  112. package/dist/components/Timeline/TimelineEffectItem.d.ts +2 -2
  113. package/dist/components/Timeline/TimelineEffectPropItem.d.ts +8 -0
  114. package/dist/components/Timeline/TimelineEffectPropItem.js +24 -20
  115. package/dist/components/Timeline/TimelineExpandedRow.d.ts +5 -2
  116. package/dist/components/Timeline/TimelineExpandedRow.js +4 -4
  117. package/dist/components/Timeline/TimelineExpandedSection.d.ts +1 -1
  118. package/dist/components/Timeline/TimelineExpandedSection.js +5 -19
  119. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +8 -2
  120. package/dist/components/Timeline/TimelineKeyframeControls.js +24 -3
  121. package/dist/components/Timeline/TimelineKeyframeEasingLine.js +2 -47
  122. package/dist/components/Timeline/TimelineKeyframedValue.d.ts +1 -1
  123. package/dist/components/Timeline/TimelineKeyframedValue.js +8 -10
  124. package/dist/components/Timeline/TimelineNumberField.js +5 -11
  125. package/dist/components/Timeline/TimelineRotationField.js +5 -6
  126. package/dist/components/Timeline/TimelineScaleField.js +4 -8
  127. package/dist/components/Timeline/TimelineSelection.d.ts +6 -0
  128. package/dist/components/Timeline/TimelineSelection.js +109 -14
  129. package/dist/components/Timeline/TimelineSequence.js +22 -14
  130. package/dist/components/Timeline/TimelineSequenceItem.js +12 -67
  131. package/dist/components/Timeline/TimelineSequencePropItem.d.ts +12 -2
  132. package/dist/components/Timeline/TimelineSequencePropItem.js +56 -52
  133. package/dist/components/Timeline/TimelineTransformOriginField.js +4 -5
  134. package/dist/components/Timeline/TimelineTranslateField.js +4 -5
  135. package/dist/components/Timeline/TimelineUvCoordinateField.js +4 -4
  136. package/dist/components/Timeline/TimelineVideoInfo.d.ts +1 -0
  137. package/dist/components/Timeline/TimelineVideoInfo.js +93 -8
  138. package/dist/components/Timeline/call-add-keyframe.d.ts +4 -4
  139. package/dist/components/Timeline/call-delete-keyframe.d.ts +4 -4
  140. package/dist/components/Timeline/call-move-keyframe.d.ts +2 -2
  141. package/dist/components/Timeline/call-update-keyframe-settings.d.ts +3 -3
  142. package/dist/components/Timeline/delete-selected-timeline-item.d.ts +2 -1
  143. package/dist/components/Timeline/delete-selected-timeline-item.js +27 -1
  144. package/dist/components/Timeline/duplicate-selected-timeline-item.d.ts +7 -0
  145. package/dist/components/Timeline/duplicate-selected-timeline-item.js +32 -3
  146. package/dist/components/Timeline/parse-keyframe-field-from-node-path.js +2 -2
  147. package/dist/components/Timeline/reset-selected-timeline-props.d.ts +3 -3
  148. package/dist/components/Timeline/reset-selected-timeline-props.js +19 -5
  149. package/dist/components/Timeline/save-effect-prop.d.ts +2 -2
  150. package/dist/components/Timeline/save-sequence-prop.d.ts +2 -2
  151. package/dist/components/Timeline/sequence-props-subscription-store.d.ts +3 -3
  152. package/dist/components/Timeline/timeline-field-display-utils.d.ts +5 -0
  153. package/dist/components/Timeline/timeline-field-display-utils.js +244 -0
  154. package/dist/components/Timeline/timeline-video-filmstrip-times.d.ts +17 -0
  155. package/dist/components/Timeline/timeline-video-filmstrip-times.js +22 -0
  156. package/dist/components/Timeline/update-selected-easing.d.ts +47 -4
  157. package/dist/components/Timeline/update-selected-easing.js +40 -9
  158. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.d.ts +13 -0
  159. package/dist/components/Timeline/use-sequence-freeze-frame-menu-item.js +73 -0
  160. package/dist/components/Timeline/use-sequence-props-subscription.d.ts +3 -3
  161. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +11 -0
  162. package/dist/components/Timeline/use-timeline-expanded-tree.js +33 -0
  163. package/dist/components/VisualControls/VisualControlsContent.d.ts +1 -1
  164. package/dist/components/VisualControls/VisualControlsContent.js +4 -5
  165. package/dist/components/effect-drag-and-drop.d.ts +10 -0
  166. package/dist/components/effect-drag-and-drop.js +17 -8
  167. package/dist/components/effect-picker-search.d.ts +5 -0
  168. package/dist/components/effect-picker-search.js +77 -0
  169. package/dist/components/import-assets.d.ts +11 -2
  170. package/dist/components/import-assets.js +61 -6
  171. package/dist/components/selected-outline-drag.d.ts +44 -2
  172. package/dist/components/selected-outline-drag.js +74 -1
  173. package/dist/components/selected-outline-types.d.ts +7 -7
  174. package/dist/components/selected-outline-uv.d.ts +4 -3
  175. package/dist/components/selected-outline-uv.js +6 -2
  176. package/dist/error-overlay/remotion-overlay/Overlay.js +3 -0
  177. package/dist/esm/{chunk-t8fjnw2d.js → chunk-fge2mq5p.js} +17004 -13432
  178. package/dist/esm/internals.mjs +17004 -13432
  179. package/dist/esm/previewEntry.mjs +26617 -23041
  180. package/dist/esm/renderEntry.mjs +1 -1
  181. package/dist/helpers/editor-guide-selection.js +1 -1
  182. package/dist/helpers/get-preview-file-type.js +1 -1
  183. package/dist/helpers/render-codec-label.d.ts +2 -0
  184. package/dist/helpers/render-codec-label.js +49 -0
  185. package/dist/helpers/ruler-canvas-size.d.ts +5 -0
  186. package/dist/helpers/ruler-canvas-size.js +17 -0
  187. package/dist/helpers/timeline-layout.d.ts +4 -4
  188. package/dist/helpers/use-media-metadata.d.ts +8 -2
  189. package/dist/helpers/use-media-metadata.js +17 -4
  190. package/dist/state/modals.d.ts +9 -4
  191. package/package.json +12 -12
@@ -73,12 +73,13 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
73
73
  if (!shouldDeleteGuideRef.current) {
74
74
  shouldDeleteGuideRef.current = true;
75
75
  }
76
- (0, ForceSpecificCursor_1.forceSpecificCursor)('no-drop');
77
76
  setGuidesList((prevState) => {
78
77
  const newGuides = prevState.map((guide) => {
79
78
  if (guide.id !== draggingGuideId) {
80
79
  return guide;
81
80
  }
81
+ const desiredCursor = guide.orientation === 'vertical' ? 'ew-resize' : 'ns-resize';
82
+ (0, ForceSpecificCursor_1.forceSpecificCursor)(desiredCursor);
82
83
  return {
83
84
  ...guide,
84
85
  show: false,
@@ -124,9 +125,10 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
124
125
  canvasPosition.top,
125
126
  ]);
126
127
  const onMouseUp = (0, react_1.useCallback)(() => {
128
+ const shouldDeleteGuide = shouldDeleteGuideRef.current;
127
129
  setGuidesList((prevState) => {
128
130
  const newGuides = prevState.filter((selected) => {
129
- if (!shouldDeleteGuideRef.current) {
131
+ if (!shouldDeleteGuide) {
130
132
  return true;
131
133
  }
132
134
  return selected.id !== draggingGuideId;
@@ -135,7 +137,7 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
135
137
  return newGuides;
136
138
  });
137
139
  const deletedGuideWasSelected = selectedItems.some((item) => item.type === 'guide' && item.guideId === draggingGuideId);
138
- if (shouldDeleteGuideRef.current && deletedGuideWasSelected) {
140
+ if (shouldDeleteGuide && deletedGuideWasSelected) {
139
141
  clearSelection();
140
142
  }
141
143
  shouldDeleteGuideRef.current = false;
@@ -143,6 +145,7 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
143
145
  shouldCreateGuideRef.current = false;
144
146
  setDraggingGuideId(() => null);
145
147
  document.removeEventListener('pointerup', onMouseUp);
148
+ document.removeEventListener('pointercancel', onMouseUp);
146
149
  document.removeEventListener('pointermove', onMouseMove);
147
150
  }, [
148
151
  clearSelection,
@@ -154,14 +157,16 @@ const EditorRulers = ({ contentDimensions, canvasSize, assetMetadata, containerR
154
157
  onMouseMove,
155
158
  selectedItems,
156
159
  ]);
157
- (0, react_1.useEffect)(() => {
160
+ (0, react_1.useLayoutEffect)(() => {
158
161
  if (draggingGuideId !== null) {
159
162
  document.addEventListener('pointermove', onMouseMove);
160
163
  document.addEventListener('pointerup', onMouseUp);
164
+ document.addEventListener('pointercancel', onMouseUp);
161
165
  }
162
166
  return () => {
163
167
  document.removeEventListener('pointermove', onMouseMove);
164
168
  document.removeEventListener('pointerup', onMouseUp);
169
+ document.removeEventListener('pointercancel', onMouseUp);
165
170
  if (requestAnimationFrameRef.current) {
166
171
  cancelAnimationFrame(requestAnimationFrameRef.current);
167
172
  }
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { type AddEffectModalState } from '../state/modals';
3
+ export declare const EffectPickerModal: React.FC<{
4
+ readonly state: AddEffectModalState;
5
+ }>;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EffectPickerModal = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const studio_shared_1 = require("@remotion/studio-shared");
6
+ const react_1 = require("react");
7
+ const colors_1 = require("../helpers/colors");
8
+ const use_keybinding_1 = require("../helpers/use-keybinding");
9
+ const modals_1 = require("../state/modals");
10
+ const ContextMenu_1 = require("./ContextMenu");
11
+ const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
12
+ const effect_picker_search_1 = require("./effect-picker-search");
13
+ const layout_1 = require("./layout");
14
+ const is_menu_item_1 = require("./Menu/is-menu-item");
15
+ const DismissableModal_1 = require("./NewComposition/DismissableModal");
16
+ const RemInput_1 = require("./NewComposition/RemInput");
17
+ const shared_1 = require("./QuickSwitcher/shared");
18
+ const container = {
19
+ width: 500,
20
+ };
21
+ const content = {
22
+ padding: '12px 16px 10px',
23
+ };
24
+ const inputStyle = {
25
+ width: '100%',
26
+ };
27
+ const resultList = {
28
+ height: 320,
29
+ overflowY: 'auto',
30
+ paddingBottom: 10,
31
+ };
32
+ const noResults = {
33
+ color: colors_1.LIGHT_TEXT,
34
+ fontSize: 13,
35
+ padding: '12px 16px',
36
+ };
37
+ const resultContainer = {
38
+ cursor: 'pointer',
39
+ display: 'flex',
40
+ flexDirection: 'row',
41
+ alignItems: 'center',
42
+ padding: '7px 16px',
43
+ };
44
+ const labelContainer = {
45
+ flex: 1,
46
+ minWidth: 0,
47
+ };
48
+ const label = {
49
+ fontSize: shared_1.QUICK_SWITCHER_RESULT_LABEL_FONT_SIZE,
50
+ overflow: 'hidden',
51
+ textOverflow: 'ellipsis',
52
+ whiteSpace: 'nowrap',
53
+ };
54
+ const category = {
55
+ color: colors_1.LIGHT_TEXT,
56
+ fontSize: 11,
57
+ flexShrink: 0,
58
+ };
59
+ const EffectPickerResult = ({ item, selected, onSelected }) => {
60
+ const [hovered, setHovered] = (0, react_1.useState)(false);
61
+ const ref = (0, react_1.useRef)(null);
62
+ (0, shared_1.useScrollIntoViewOnSelected)(ref, selected);
63
+ const style = (0, react_1.useMemo)(() => {
64
+ return {
65
+ ...resultContainer,
66
+ backgroundColor: (0, colors_1.getBackgroundFromHoverState)({ hovered, selected }),
67
+ };
68
+ }, [hovered, selected]);
69
+ const labelStyle = (0, react_1.useMemo)(() => {
70
+ return {
71
+ ...label,
72
+ color: selected || hovered ? 'white' : colors_1.LIGHT_TEXT,
73
+ };
74
+ }, [hovered, selected]);
75
+ const onClick = (0, react_1.useCallback)(() => {
76
+ onSelected(item);
77
+ }, [item, onSelected]);
78
+ const contextMenuValues = (0, react_1.useMemo)(() => {
79
+ const documentationLink = (0, studio_shared_1.getEffectDocumentationLink)(item);
80
+ return [
81
+ {
82
+ type: 'item',
83
+ id: `open-${item.id}-docs`,
84
+ keyHint: null,
85
+ label: 'Open effect docs',
86
+ leftItem: null,
87
+ disabled: false,
88
+ onClick: () => {
89
+ window.open(documentationLink, '_blank', 'noopener,noreferrer');
90
+ },
91
+ quickSwitcherLabel: null,
92
+ subMenu: null,
93
+ value: `open-${item.id}-docs`,
94
+ },
95
+ ];
96
+ }, [item]);
97
+ return (jsx_runtime_1.jsx(ContextMenu_1.ContextMenu, { values: contextMenuValues, onOpen: null, children: jsx_runtime_1.jsxs("div", { ref: ref, style: style, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), children: [
98
+ jsx_runtime_1.jsx("div", { style: labelContainer, children: jsx_runtime_1.jsx("div", { style: labelStyle, children: item.label }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx("div", { style: category, children: item.category })
99
+ ] }) }));
100
+ };
101
+ const EffectPickerContent = ({ state }) => {
102
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
103
+ const [query, setQuery] = (0, react_1.useState)('');
104
+ const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0);
105
+ const inputRef = (0, react_1.useRef)(null);
106
+ const keybindings = (0, use_keybinding_1.useKeybinding)();
107
+ const results = (0, react_1.useMemo)(() => {
108
+ return (0, effect_picker_search_1.filterEffectCatalog)({ items: studio_shared_1.EFFECT_CATALOG, query });
109
+ }, [query]);
110
+ const selectedIndexRounded = results.length === 0 ? -1 : (0, shared_1.loopIndex)(selectedIndex, results.length);
111
+ const selectItem = (0, react_1.useCallback)((item) => {
112
+ setSelectedModal(null);
113
+ (0, effect_drag_and_drop_1.addEffectToSequence)({
114
+ clientId: state.clientId,
115
+ effect: item.effect,
116
+ fileName: state.fileName,
117
+ nodePath: state.nodePath,
118
+ });
119
+ }, [setSelectedModal, state.clientId, state.fileName, state.nodePath]);
120
+ const onArrowDown = (0, react_1.useCallback)(() => {
121
+ setSelectedIndex((i) => i + 1);
122
+ }, []);
123
+ const onArrowUp = (0, react_1.useCallback)(() => {
124
+ setSelectedIndex((i) => i - 1);
125
+ }, []);
126
+ const onEnter = (0, react_1.useCallback)(() => {
127
+ if (selectedIndexRounded === -1) {
128
+ return;
129
+ }
130
+ selectItem(results[selectedIndexRounded]);
131
+ }, [results, selectItem, selectedIndexRounded]);
132
+ (0, react_1.useEffect)(() => {
133
+ const downBinding = keybindings.registerKeybinding({
134
+ key: 'ArrowDown',
135
+ callback: onArrowDown,
136
+ commandCtrlKey: false,
137
+ event: 'keydown',
138
+ preventDefault: true,
139
+ triggerIfInputFieldFocused: true,
140
+ keepRegisteredWhenNotHighestContext: false,
141
+ });
142
+ const upBinding = keybindings.registerKeybinding({
143
+ key: 'ArrowUp',
144
+ callback: onArrowUp,
145
+ commandCtrlKey: false,
146
+ event: 'keydown',
147
+ preventDefault: true,
148
+ triggerIfInputFieldFocused: true,
149
+ keepRegisteredWhenNotHighestContext: false,
150
+ });
151
+ const enterBinding = keybindings.registerKeybinding({
152
+ key: 'Enter',
153
+ callback: onEnter,
154
+ commandCtrlKey: false,
155
+ event: 'keydown',
156
+ preventDefault: true,
157
+ triggerIfInputFieldFocused: true,
158
+ keepRegisteredWhenNotHighestContext: false,
159
+ });
160
+ return () => {
161
+ downBinding.unregister();
162
+ upBinding.unregister();
163
+ enterBinding.unregister();
164
+ };
165
+ }, [keybindings, onArrowDown, onArrowUp, onEnter]);
166
+ const onTextChange = (0, react_1.useCallback)((e) => {
167
+ setQuery(e.target.value);
168
+ setSelectedIndex(0);
169
+ }, []);
170
+ return (jsx_runtime_1.jsxs("div", { style: container, children: [
171
+ jsx_runtime_1.jsx("div", { style: content, children: jsx_runtime_1.jsx(RemInput_1.RemotionInput, { ref: inputRef, type: "text", style: inputStyle, autoFocus: true, status: "ok", value: query, onChange: onTextChange, placeholder: "Search effects...", rightAlign: false }) }), jsx_runtime_1.jsx("div", { style: resultList, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: results.length === 0 ? (jsx_runtime_1.jsx("div", { style: noResults, children: "No effects found" })) : (results.map((item, i) => {
172
+ return (jsx_runtime_1.jsx(EffectPickerResult, { item: item, selected: selectedIndexRounded === i, onSelected: selectItem }, item.id));
173
+ })) })
174
+ ] }));
175
+ };
176
+ const EffectPickerModal = ({ state }) => {
177
+ return (jsx_runtime_1.jsx(DismissableModal_1.DismissableModal, { children: jsx_runtime_1.jsx(EffectPickerContent, { state: state }) }));
178
+ };
179
+ exports.EffectPickerModal = EffectPickerModal;
@@ -22,6 +22,7 @@ const InlineAction = ({ renderAction, onClick, disabled, title, }) => {
22
22
  : (0, colors_1.getBackgroundFromHoverState)({ hovered, selected: false }),
23
23
  height: 24,
24
24
  width: 24,
25
+ padding: 0,
25
26
  display: 'inline-flex',
26
27
  justifyContent: 'center',
27
28
  alignItems: 'center',
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export declare const INSPECTOR_INFO_HEADER_MIN_HEIGHT = 84;
3
+ export declare const InspectorInfoHeader: React.FC<{
4
+ readonly children?: React.ReactNode;
5
+ }>;
6
+ export declare const InspectorInfoTitle: React.FC<{
7
+ readonly children: React.ReactNode;
8
+ }>;
9
+ export declare const InspectorInfoSubtitle: React.FC<{
10
+ readonly children: React.ReactNode;
11
+ }>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InspectorInfoSubtitle = exports.InspectorInfoTitle = exports.InspectorInfoHeader = exports.INSPECTOR_INFO_HEADER_MIN_HEIGHT = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const colors_1 = require("../helpers/colors");
6
+ const InspectorPanelLayout_1 = require("./InspectorPanelLayout");
7
+ exports.INSPECTOR_INFO_HEADER_MIN_HEIGHT = 84;
8
+ const container = {
9
+ backgroundColor: colors_1.BACKGROUND,
10
+ color: 'white',
11
+ display: 'block',
12
+ minHeight: exports.INSPECTOR_INFO_HEADER_MIN_HEIGHT,
13
+ padding: `6px ${InspectorPanelLayout_1.INSPECTOR_PANEL_HORIZONTAL_PADDING}px`,
14
+ };
15
+ const row = {
16
+ backgroundColor: colors_1.BACKGROUND,
17
+ display: 'flex',
18
+ flexDirection: 'row',
19
+ lineHeight: '18px',
20
+ minWidth: 0,
21
+ };
22
+ const content = {
23
+ minWidth: 0,
24
+ width: '100%',
25
+ };
26
+ const title = {
27
+ backgroundColor: colors_1.BACKGROUND,
28
+ color: 'white',
29
+ fontSize: 12,
30
+ lineHeight: '18px',
31
+ overflow: 'hidden',
32
+ textOverflow: 'ellipsis',
33
+ whiteSpace: 'nowrap',
34
+ };
35
+ const subtitle = {
36
+ backgroundColor: colors_1.BACKGROUND,
37
+ color: colors_1.LIGHT_TEXT,
38
+ fontSize: 12,
39
+ lineHeight: '18px',
40
+ overflow: 'hidden',
41
+ textOverflow: 'ellipsis',
42
+ whiteSpace: 'nowrap',
43
+ };
44
+ const InspectorInfoHeader = ({ children }) => {
45
+ return (jsx_runtime_1.jsx("div", { style: container, children: children === undefined || children === null ? null : (jsx_runtime_1.jsx("div", { style: row, children: jsx_runtime_1.jsx("div", { style: content, children: children }) })) }));
46
+ };
47
+ exports.InspectorInfoHeader = InspectorInfoHeader;
48
+ const InspectorInfoTitle = ({ children }) => {
49
+ return jsx_runtime_1.jsx("div", { style: title, children: children });
50
+ };
51
+ exports.InspectorInfoTitle = InspectorInfoTitle;
52
+ const InspectorInfoSubtitle = ({ children }) => {
53
+ return jsx_runtime_1.jsx("div", { style: subtitle, children: children });
54
+ };
55
+ exports.InspectorInfoSubtitle = InspectorInfoSubtitle;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { _InternalTypes } from 'remotion';
3
+ import type { UpdaterFunction } from '../RenderModal/SchemaEditor/ZodSwitch';
4
+ export declare const DefaultInspector: React.FC<{
5
+ readonly composition: _InternalTypes['AnyComposition'] | null;
6
+ readonly currentDefaultProps: Record<string, unknown>;
7
+ readonly setDefaultProps: UpdaterFunction<Record<string, unknown>>;
8
+ }>;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultInspector = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
7
+ const VisualControls_1 = require("../../visual-controls/VisualControls");
8
+ const CurrentAsset_1 = require("../CurrentAsset");
9
+ const CurrentComposition_1 = require("../CurrentComposition");
10
+ const DefaultPropsEditor_1 = require("../DefaultPropsEditor");
11
+ const get_zod_if_possible_1 = require("../get-zod-if-possible");
12
+ const is_menu_item_1 = require("../Menu/is-menu-item");
13
+ const ObserveDefaultPropsContext_1 = require("../ObserveDefaultPropsContext");
14
+ const DataEditor_1 = require("../RenderModal/DataEditor");
15
+ const zod_schema_type_1 = require("../RenderModal/SchemaEditor/zod-schema-type");
16
+ const WarningIndicatorButton_1 = require("../RenderModal/WarningIndicatorButton");
17
+ const SegmentedControl_1 = require("../SegmentedControl");
18
+ const VisualControlsContent_1 = require("../VisualControls/VisualControlsContent");
19
+ const common_1 = require("./common");
20
+ const styles_1 = require("./styles");
21
+ const DefaultInspector = ({ composition, currentDefaultProps, setDefaultProps }) => {
22
+ var _a, _b;
23
+ const { canvasContent } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
24
+ const hasSelectedAsset = (canvasContent === null || canvasContent === void 0 ? void 0 : canvasContent.type) === 'asset';
25
+ const z = (0, get_zod_if_possible_1.useZodIfPossible)();
26
+ const canSaveDefaultProps = (0, react_1.useContext)(ObserveDefaultPropsContext_1.ObserveDefaultPropsContext);
27
+ const { handles: visualControlHandles } = (0, react_1.useContext)(VisualControls_1.VisualControlsContext);
28
+ const [defaultPropsMode, setDefaultPropsMode] = (0, react_1.useState)('schema');
29
+ const compositionId = (_a = composition === null || composition === void 0 ? void 0 : composition.id) !== null && _a !== void 0 ? _a : null;
30
+ const hasVisualControls = Object.keys(visualControlHandles).length > 0;
31
+ (0, react_1.useEffect)(() => {
32
+ setDefaultPropsMode('schema');
33
+ }, [compositionId]);
34
+ const defaultPropsModeItems = (0, react_1.useMemo)(() => {
35
+ return [
36
+ {
37
+ key: 'schema',
38
+ label: 'Schema',
39
+ onClick: () => {
40
+ setDefaultPropsMode('schema');
41
+ },
42
+ selected: defaultPropsMode === 'schema',
43
+ },
44
+ {
45
+ key: 'json',
46
+ label: 'JSON',
47
+ onClick: () => {
48
+ setDefaultPropsMode('json');
49
+ },
50
+ selected: defaultPropsMode === 'json',
51
+ },
52
+ ];
53
+ }, [defaultPropsMode]);
54
+ const canShowDefaultPropsSection = (0, react_1.useMemo)(() => {
55
+ if (!z || !(composition === null || composition === void 0 ? void 0 : composition.schema) || !composition.defaultProps) {
56
+ return false;
57
+ }
58
+ if (!(typeof composition.schema.safeParse ===
59
+ 'function')) {
60
+ return false;
61
+ }
62
+ return (0, zod_schema_type_1.getZodSchemaType)(composition.schema) !== 'any';
63
+ }, [composition === null || composition === void 0 ? void 0 : composition.defaultProps, composition === null || composition === void 0 ? void 0 : composition.schema, z]);
64
+ const { setShowWarning, showWarning } = (0, DataEditor_1.useDataEditorWarningVisibility)();
65
+ const { warnings: defaultPropsWarnings } = (0, DataEditor_1.useDataEditorWarnings)({
66
+ canSaveDefaultProps: (_b = canSaveDefaultProps === null || canSaveDefaultProps === void 0 ? void 0 : canSaveDefaultProps.canSaveDefaultProps) !== null && _b !== void 0 ? _b : null,
67
+ defaultProps: currentDefaultProps,
68
+ mode: defaultPropsMode,
69
+ propsEditType: 'default-props',
70
+ showCannotSaveDefaultPropsWarning: canShowDefaultPropsSection,
71
+ });
72
+ if (hasSelectedAsset) {
73
+ return (jsx_runtime_1.jsx("div", { style: styles_1.scrollableContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx("div", { style: styles_1.compositionSection, children: jsx_runtime_1.jsx(CurrentAsset_1.CurrentAsset, {}) }) }));
74
+ }
75
+ if (composition === null) {
76
+ return jsx_runtime_1.jsx("div", { style: styles_1.container });
77
+ }
78
+ return (jsx_runtime_1.jsxs("div", { style: styles_1.scrollableContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [
79
+ jsx_runtime_1.jsx("div", { style: styles_1.compositionSection, children: jsx_runtime_1.jsx(CurrentComposition_1.CurrentComposition, {}) }), canShowDefaultPropsSection ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
80
+ jsx_runtime_1.jsx("div", { style: styles_1.inspectorSectionDivider }), jsx_runtime_1.jsxs("div", { style: styles_1.defaultPropsSection, children: [
81
+ jsx_runtime_1.jsx(common_1.InspectorSectionHeader, { children: jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderRow, children: [
82
+ jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderStart, children: [
83
+ jsx_runtime_1.jsx("span", { style: styles_1.sectionHeaderTitle, children: "Default Props" }), jsx_runtime_1.jsx(SegmentedControl_1.SegmentedControl, { items: defaultPropsModeItems, needsWrapping: false, size: "compact" })
84
+ ] }), jsx_runtime_1.jsx("div", { style: styles_1.sectionHeaderEnd, children: defaultPropsWarnings.length > 0 ? (jsx_runtime_1.jsx(WarningIndicatorButton_1.WarningIndicatorButton, { setShowWarning: setShowWarning, showWarning: showWarning, warningCount: defaultPropsWarnings.length, size: "compact" })) : null })
85
+ ] }) }), defaultPropsWarnings.length > 0 && showWarning ? (jsx_runtime_1.jsx("div", { style: styles_1.defaultPropsWarningContainer, children: jsx_runtime_1.jsx(common_1.InspectorDefaultPropsWarnings, { warnings: defaultPropsWarnings }) })) : null, jsx_runtime_1.jsx(DefaultPropsEditor_1.DefaultPropsEditor, { unresolvedComposition: composition, defaultProps: currentDefaultProps, setDefaultProps: setDefaultProps, propsEditType: "default-props", schemaErrorMode: "compact", layout: "inspector", mode: defaultPropsMode, onModeChange: setDefaultPropsMode, hideModeControls: canShowDefaultPropsSection, warnings: defaultPropsWarnings, showWarning: false, setShowWarning: setShowWarning, hideWarningButton: true }, composition.id)
86
+ ] })
87
+ ] })) : null, hasVisualControls ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
88
+ jsx_runtime_1.jsx("div", { style: styles_1.inspectorSectionDivider }), jsx_runtime_1.jsxs("div", { style: styles_1.visualControlsSection, children: [
89
+ jsx_runtime_1.jsx(common_1.InspectorSectionHeader, { children: "Visual Controls" }), jsx_runtime_1.jsx(VisualControlsContent_1.VisualControlsContent, {})
90
+ ] })
91
+ ] })) : null] }));
92
+ };
93
+ exports.DefaultInspector = DefaultInspector;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { type EasingSelection } from '../Timeline/update-selected-easing';
3
+ export declare const EasingInspector: React.FC<{
4
+ readonly selection: EasingSelection;
5
+ }>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EasingInspector = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const remotion_1 = require("remotion");
7
+ const is_menu_item_1 = require("../Menu/is-menu-item");
8
+ const SegmentedControl_1 = require("../SegmentedControl");
9
+ const EasingEditorModal_1 = require("../Timeline/EasingEditorModal");
10
+ const TimelineSelection_1 = require("../Timeline/TimelineSelection");
11
+ const update_selected_easing_1 = require("../Timeline/update-selected-easing");
12
+ const common_1 = require("./common");
13
+ const styles_1 = require("./styles");
14
+ const EasingInspector = ({ selection }) => {
15
+ const { sequences } = (0, react_1.useContext)(remotion_1.Internals.SequenceManager);
16
+ const { overrideIdToNodePathMappings } = (0, react_1.useContext)(remotion_1.Internals.OverrideIdsToNodePathsGettersContext);
17
+ const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
18
+ const initialEasing = (0, react_1.useMemo)(() => (0, update_selected_easing_1.getTimelineEasingValueForSelection)({
19
+ selection,
20
+ sequences,
21
+ overrideIdsToNodePaths: overrideIdToNodePathMappings,
22
+ propStatuses,
23
+ }), [overrideIdToNodePathMappings, propStatuses, selection, sequences]);
24
+ const state = (0, react_1.useMemo)(() => {
25
+ if (initialEasing === null) {
26
+ return null;
27
+ }
28
+ return {
29
+ initialEasing,
30
+ selections: [selection],
31
+ };
32
+ }, [initialEasing, selection]);
33
+ const renderHeader = (0, react_1.useCallback)((modeItems) => (jsx_runtime_1.jsx(common_1.InspectorSectionHeader, { children: jsx_runtime_1.jsx("div", { style: styles_1.sectionHeaderRow, children: jsx_runtime_1.jsxs("div", { style: styles_1.sectionHeaderStart, children: [
34
+ jsx_runtime_1.jsx("span", { style: styles_1.sectionHeaderTitle, children: "Easing" }), jsx_runtime_1.jsx(SegmentedControl_1.SegmentedControl, { items: modeItems, needsWrapping: false, size: "compact" })
35
+ ] }) }) })), []);
36
+ if (state === null) {
37
+ return jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Easing unavailable" });
38
+ }
39
+ return (jsx_runtime_1.jsx("div", { style: styles_1.selectedContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: jsx_runtime_1.jsx(EasingEditorModal_1.EasingEditor, { state: state, renderHeader: renderHeader }, (0, TimelineSelection_1.getTimelineSelectionKey)(selection)) }));
40
+ };
41
+ exports.EasingInspector = EasingInspector;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { TimelineSelection } from '../Timeline/TimelineSelection';
3
+ export declare const GuideInspector: React.FC<{
4
+ readonly selection: Extract<TimelineSelection, {
5
+ type: 'guide';
6
+ }>;
7
+ }>;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GuideInspector = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const editor_guides_1 = require("../../state/editor-guides");
7
+ const is_menu_item_1 = require("../Menu/is-menu-item");
8
+ const InputDragger_1 = require("../NewComposition/InputDragger");
9
+ const common_1 = require("./common");
10
+ const styles_1 = require("./styles");
11
+ const updateGuidePosition = ({ guideId, persist, position, setGuidesList, }) => {
12
+ setGuidesList((prevState) => {
13
+ const newGuides = prevState.map((guide) => {
14
+ if (guide.id !== guideId) {
15
+ return guide;
16
+ }
17
+ return {
18
+ ...guide,
19
+ position: Math.round(position),
20
+ show: true,
21
+ };
22
+ });
23
+ if (persist) {
24
+ (0, editor_guides_1.persistGuidesList)(newGuides);
25
+ }
26
+ return newGuides;
27
+ });
28
+ };
29
+ const GuideInspector = ({ selection }) => {
30
+ const { guidesList, setGuidesList } = (0, react_1.useContext)(editor_guides_1.EditorShowGuidesContext);
31
+ const guide = guidesList.find((candidate) => candidate.id === selection.guideId);
32
+ const onValueChange = (0, react_1.useCallback)((value) => {
33
+ updateGuidePosition({
34
+ guideId: selection.guideId,
35
+ persist: false,
36
+ position: value,
37
+ setGuidesList,
38
+ });
39
+ }, [selection.guideId, setGuidesList]);
40
+ const onValueChangeEnd = (0, react_1.useCallback)((value) => {
41
+ updateGuidePosition({
42
+ guideId: selection.guideId,
43
+ persist: true,
44
+ position: value,
45
+ setGuidesList,
46
+ });
47
+ }, [selection.guideId, setGuidesList]);
48
+ if (!guide) {
49
+ return jsx_runtime_1.jsx(common_1.InspectorMessage, { children: "Guide unavailable" });
50
+ }
51
+ return (jsx_runtime_1.jsxs("div", { style: styles_1.selectedContainer, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [
52
+ jsx_runtime_1.jsxs(common_1.InspectorSectionHeader, { children: [guide.orientation === 'vertical' ? 'Vertical' : 'Horizontal', " guide"] }), jsx_runtime_1.jsx("div", { style: styles_1.guideDetailsContainer, children: jsx_runtime_1.jsx(common_1.InspectorDetailRow, { label: guide.orientation === 'vertical' ? 'X position' : 'Y position', children: jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: guide.position, status: "ok", onValueChange: onValueChange, onValueChangeEnd: onValueChangeEnd, onTextChange: () => undefined, step: 1, formatter: (value) => String(Math.round(Number(value))), rightAlign: true, small: true }) }) })
53
+ ] }));
54
+ };
55
+ exports.GuideInspector = GuideInspector;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { TimelineSelection } from '../Timeline/TimelineSelection';
3
+ export declare const KeyframeInspector: React.FC<{
4
+ readonly selection: Extract<TimelineSelection, {
5
+ type: 'keyframe';
6
+ }>;
7
+ }>;