@remotion/studio 4.0.484 → 4.0.485

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 (76) hide show
  1. package/dist/components/ContextMenu.js +75 -1
  2. package/dist/components/CurrentComposition.js +3 -2
  3. package/dist/components/InlineCompositionName.d.ts +7 -0
  4. package/dist/components/InlineCompositionName.js +58 -0
  5. package/dist/components/InlineEditableTitle.d.ts +7 -0
  6. package/dist/components/InlineEditableTitle.js +129 -0
  7. package/dist/components/InspectorPanel/KeyframeInspector.js +1 -0
  8. package/dist/components/InspectorPanel/SequenceInspectorHeader.js +17 -30
  9. package/dist/components/InspectorPanel/styles.js +2 -2
  10. package/dist/components/InspectorSequenceSection.js +34 -1
  11. package/dist/components/Modals.js +1 -1
  12. package/dist/components/NewComposition/CodemodFooter.d.ts +7 -1
  13. package/dist/components/NewComposition/CodemodFooter.js +17 -12
  14. package/dist/components/NewComposition/DeleteComposition.js +7 -1
  15. package/dist/components/NewComposition/DeleteFolder.js +7 -1
  16. package/dist/components/NewComposition/DuplicateComposition.js +17 -10
  17. package/dist/components/NewComposition/InputAndValidationContainer.d.ts +3 -0
  18. package/dist/components/NewComposition/InputAndValidationContainer.js +15 -0
  19. package/dist/components/NewComposition/NewCompDuration.js +7 -6
  20. package/dist/components/NewComposition/NewComposition.d.ts +5 -1
  21. package/dist/components/NewComposition/NewComposition.js +29 -86
  22. package/dist/components/NewComposition/RenameComposition.js +13 -14
  23. package/dist/components/NewComposition/RenameFolder.js +9 -2
  24. package/dist/components/NewComposition/RenameStaticFile.js +2 -1
  25. package/dist/components/NewComposition/ValidationMessage.js +9 -1
  26. package/dist/components/OptionsPanel.d.ts +0 -3
  27. package/dist/components/OptionsPanel.js +7 -3
  28. package/dist/components/RenderModal/ServerRenderModal.js +4 -3
  29. package/dist/components/RenderModal/WebRenderModal.js +2 -1
  30. package/dist/components/SelectedOutlineElement.js +45 -3
  31. package/dist/components/SelectedOutlineOverlay.d.ts +1 -1
  32. package/dist/components/SelectedOutlineOverlay.js +15 -3
  33. package/dist/components/Timeline/TimelineDeleteKeybindings.js +34 -1
  34. package/dist/components/Timeline/TimelineExpandedSection.js +1 -0
  35. package/dist/components/Timeline/TimelineInOutPointerHandle.js +2 -1
  36. package/dist/components/Timeline/TimelineKeyframeControls.d.ts +1 -1
  37. package/dist/components/Timeline/TimelineKeyframeControls.js +1 -0
  38. package/dist/components/Timeline/TimelinePrimitiveFieldValue.js +4 -0
  39. package/dist/components/Timeline/TimelineSelection.js +1 -0
  40. package/dist/components/Timeline/TimelineSequenceItem.js +19 -101
  41. package/dist/components/Timeline/TimelineSequencePropItem.js +6 -3
  42. package/dist/components/Timeline/TimelineTextContentField.d.ts +12 -0
  43. package/dist/components/Timeline/TimelineTextContentField.js +100 -0
  44. package/dist/components/Timeline/TimelineWidthProvider.js +18 -3
  45. package/dist/components/Timeline/focus-inspector-field.d.ts +16 -0
  46. package/dist/components/Timeline/focus-inspector-field.js +49 -0
  47. package/dist/components/Timeline/split-selected-timeline-item.d.ts +38 -0
  48. package/dist/components/Timeline/split-selected-timeline-item.js +156 -0
  49. package/dist/components/Timeline/timeline-field-display-utils.js +2 -0
  50. package/dist/components/Timeline/use-expanded-track-keyframe-rows.js +1 -0
  51. package/dist/components/Timeline/use-rename-sequence.d.ts +30 -0
  52. package/dist/components/Timeline/use-rename-sequence.js +115 -0
  53. package/dist/components/Timeline/use-timeline-expanded-tree.d.ts +2 -1
  54. package/dist/components/Timeline/use-timeline-expanded-tree.js +3 -1
  55. package/dist/components/Timeline/use-timeline-height.js +1 -0
  56. package/dist/components/composition-menu-items.js +3 -0
  57. package/dist/components/folder-menu-items.js +20 -0
  58. package/dist/components/options-sidebar-tabs.d.ts +4 -0
  59. package/dist/components/options-sidebar-tabs.js +5 -0
  60. package/dist/components/selected-outline-types.d.ts +6 -1
  61. package/dist/esm/{chunk-9erwh79m.js → chunk-103pp4n7.js} +6734 -5683
  62. package/dist/esm/internals.mjs +6734 -5683
  63. package/dist/esm/previewEntry.mjs +6649 -5598
  64. package/dist/esm/renderEntry.mjs +1 -1
  65. package/dist/helpers/render-codec-label.d.ts +1 -1
  66. package/dist/helpers/timeline-layout.d.ts +4 -3
  67. package/dist/helpers/timeline-layout.js +3 -1
  68. package/dist/helpers/use-create-composition.d.ts +35 -0
  69. package/dist/helpers/use-create-composition.js +111 -0
  70. package/dist/helpers/use-rename-composition.d.ts +16 -0
  71. package/dist/helpers/use-rename-composition.js +49 -0
  72. package/dist/state/modals.d.ts +3 -0
  73. package/dist/state/timeline-zoom.js +17 -14
  74. package/dist/state/z-index.d.ts +1 -0
  75. package/dist/state/z-index.js +11 -2
  76. package/package.json +12 -12
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.SelectedOutlineElement = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
+ const react_dom_1 = require("react-dom");
39
40
  const remotion_1 = require("remotion");
40
41
  const no_react_1 = require("remotion/no-react");
41
42
  const client_id_1 = require("../helpers/client-id");
@@ -49,6 +50,7 @@ const ContextMenu_1 = require("./ContextMenu");
49
50
  const effect_drag_and_drop_1 = require("./effect-drag-and-drop");
50
51
  const ForceSpecificCursor_1 = require("./ForceSpecificCursor");
51
52
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
53
+ const options_sidebar_tabs_1 = require("./options-sidebar-tabs");
52
54
  const selected_outline_drag_1 = require("./selected-outline-drag");
53
55
  const selected_outline_measurement_1 = require("./selected-outline-measurement");
54
56
  const selected_outline_types_1 = require("./selected-outline-types");
@@ -56,6 +58,7 @@ const selected_outline_uv_1 = require("./selected-outline-uv");
56
58
  const call_add_keyframe_1 = require("./Timeline/call-add-keyframe");
57
59
  const disable_sequence_interactivity_1 = require("./Timeline/disable-sequence-interactivity");
58
60
  const duplicate_selected_timeline_item_1 = require("./Timeline/duplicate-selected-timeline-item");
61
+ const focus_inspector_field_1 = require("./Timeline/focus-inspector-field");
59
62
  const get_sequence_context_menu_items_1 = require("./Timeline/get-sequence-context-menu-items");
60
63
  const save_sequence_prop_1 = require("./Timeline/save-sequence-prop");
61
64
  const timeline_asset_link_1 = require("./Timeline/timeline-asset-link");
@@ -310,7 +313,7 @@ const SelectedOutlineTransformOriginHandle = ({ outline, onDraggingChange, targe
310
313
  jsx_runtime_1.jsx("circle", { cx: position.x, cy: position.y, r: 4, stroke: colors_1.BLUE, fill: "none", strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), jsx_runtime_1.jsx("line", { x1: position.x - 8, y1: position.y, x2: position.x + 8, y2: position.y, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke" }), jsx_runtime_1.jsx("line", { x1: position.x, y1: position.y - 8, x2: position.x, y2: position.y + 8, stroke: colors_1.BLUE, strokeWidth: 2, vectorEffect: "non-scaling-stroke" })
311
314
  ] }));
312
315
  };
313
- const SelectedOutlinePolygon = ({ allDragTargets, contextMenuValues, dragging, hovered, onContextMenuOpen, outline, onDraggingChange, onHoverChange, onSelect, scale, target, }) => {
316
+ const SelectedOutlinePolygon = ({ allDragTargets, contextMenuValues, dragging, hovered, onContextMenuOpen, outline, onDraggingChange, onHoverChange, onSelect, onTextEditStart, scale, target, }) => {
314
317
  var _a, _b, _c, _d;
315
318
  const { getDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeDragOverridesContext);
316
319
  const { setPropStatuses, setDragOverrides, clearDragOverrides } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
@@ -339,6 +342,9 @@ const SelectedOutlinePolygon = ({ allDragTargets, contextMenuValues, dragging, h
339
342
  if (drag === null || interaction.shiftKey || interaction.toggleKey) {
340
343
  return;
341
344
  }
345
+ if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
346
+ return;
347
+ }
342
348
  const startPointerX = event.clientX;
343
349
  const startPointerY = event.clientY;
344
350
  const dragStates = (0, selected_outline_drag_1.getSelectedOutlineDragStates)({
@@ -478,6 +484,14 @@ const SelectedOutlinePolygon = ({ allDragTargets, contextMenuValues, dragging, h
478
484
  setDragOverrides,
479
485
  target,
480
486
  ]);
487
+ const onDoubleClick = react_1.default.useCallback((event) => {
488
+ if (target === undefined) {
489
+ return;
490
+ }
491
+ event.preventDefault();
492
+ event.stopPropagation();
493
+ onTextEditStart(target);
494
+ }, [onTextEditStart, target]);
481
495
  const onEffectDragOver = react_1.default.useCallback((event) => {
482
496
  if (effectDrop === null || !(0, effect_drag_and_drop_1.hasEffectDragType)(event.dataTransfer)) {
483
497
  return;
@@ -526,7 +540,7 @@ const SelectedOutlinePolygon = ({ allDragTargets, contextMenuValues, dragging, h
526
540
  if (!dragging) {
527
541
  onHoverChange(null);
528
542
  }
529
- }, onPointerDown: onPointerDown, onDragOver: effectDrop === null ? undefined : onEffectDragOver, onDragLeave: effectDrop === null ? undefined : onEffectDragLeave, onDrop: effectDrop === null ? undefined : onEffectDrop }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: polygonRef, values: [...contextMenuValues], onOpen: onContextMenuOpen })
543
+ }, onPointerDown: onPointerDown, onDoubleClick: onDoubleClick, onDragOver: effectDrop === null ? undefined : onEffectDragOver, onDragLeave: effectDrop === null ? undefined : onEffectDragLeave, onDrop: effectDrop === null ? undefined : onEffectDrop }), jsx_runtime_1.jsx(ContextMenu_1.ContextMenuForTarget, { triggerRef: polygonRef, values: [...contextMenuValues], onOpen: onContextMenuOpen })
530
544
  ] }));
531
545
  };
532
546
  const SelectedOutlineScaleEdgeLine = ({ allScaleDragTargets, contextMenuValues, dragging, edge, outline, onDraggingChange, onContextMenuOpen, onHoverChange, onSelect, target, }) => {
@@ -554,6 +568,9 @@ const SelectedOutlineScaleEdgeLine = ({ allScaleDragTargets, contextMenuValues,
554
568
  if (interaction.shiftKey || interaction.toggleKey) {
555
569
  return;
556
570
  }
571
+ if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
572
+ return;
573
+ }
557
574
  const startPointer = { x: event.clientX, y: event.clientY };
558
575
  const dragStates = (0, selected_outline_drag_1.getSelectedOutlineScaleDragStates)({
559
576
  dragTargets: selected ? allScaleDragTargets : [scaleDrag],
@@ -728,6 +745,9 @@ const SelectedOutlineRotationCornerHandle = ({ allRotationDragTargets, contextMe
728
745
  if (interaction.toggleKey) {
729
746
  return;
730
747
  }
748
+ if ((0, focus_inspector_field_1.commitPendingInspectorFields)()) {
749
+ return;
750
+ }
731
751
  const startPointer = { x: event.clientX, y: event.clientY };
732
752
  const svgRect = svg.getBoundingClientRect();
733
753
  const center = svgPointToClientPoint((0, selected_outline_measurement_1.getSelectedOutlineRotationPivot)({
@@ -916,6 +936,28 @@ const SelectedOutlineElement = ({ allDragTargets, allRotationDragTargets, allSca
916
936
  const confirm = (0, ConfirmationDialog_1.useConfirmationDialog)();
917
937
  const selectAsset = (0, use_select_asset_1.useSelectAsset)();
918
938
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
939
+ const onTextEditStart = react_1.default.useCallback((editTarget) => {
940
+ const { textEdit } = editTarget;
941
+ if (textEdit === null) {
942
+ return;
943
+ }
944
+ if (textEdit.propStatus.status !== 'static' ||
945
+ typeof textEdit.propStatus.codeValue !== 'string') {
946
+ (0, NotificationCenter_1.showNotification)('This text is computed and cannot be edited visually', 3000);
947
+ return;
948
+ }
949
+ (0, react_dom_1.flushSync)(() => {
950
+ var _a;
951
+ if (!editTarget.selected) {
952
+ onSelect(editTarget.selection, { shiftKey: false, toggleKey: false });
953
+ }
954
+ (_a = options_sidebar_tabs_1.optionsSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectInspectorPanel();
955
+ });
956
+ (0, focus_inspector_field_1.requestFocusInspectorField)({
957
+ fieldKey: 'children',
958
+ nodePath: textEdit.nodePath,
959
+ });
960
+ }, [onSelect]);
919
961
  const onContextMenuOpen = react_1.default.useCallback(async () => {
920
962
  if (target === undefined || previewServerState.type !== 'connected') {
921
963
  return false;
@@ -1071,7 +1113,7 @@ const SelectedOutlineElement = ({ allDragTargets, allRotationDragTargets, allSca
1071
1113
  updateResolvedStackTrace,
1072
1114
  ]);
1073
1115
  return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
1074
- jsx_runtime_1.jsx(SelectedOutlinePolygon, { allDragTargets: allDragTargets, contextMenuValues: emptyContextMenuValues, dragging: dragging, hovered: hovered, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, scale: scale, target: target }), (target === null || target === void 0 ? void 0 : target.containsSelection) || hovered
1116
+ jsx_runtime_1.jsx(SelectedOutlinePolygon, { allDragTargets: allDragTargets, contextMenuValues: emptyContextMenuValues, dragging: dragging, hovered: hovered, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, onTextEditStart: onTextEditStart, scale: scale, target: target }), (target === null || target === void 0 ? void 0 : target.containsSelection) || hovered
1075
1117
  ? ['top', 'right', 'bottom', 'left'].map((edge) => (jsx_runtime_1.jsx(SelectedOutlineScaleEdgeLine, { allScaleDragTargets: allScaleDragTargets, contextMenuValues: emptyContextMenuValues, dragging: dragging, edge: edge, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, target: target }, edge)))
1076
1118
  : null, (target === null || target === void 0 ? void 0 : target.containsSelection) || hovered
1077
1119
  ? ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map((corner) => (jsx_runtime_1.jsx(SelectedOutlineRotationCornerHandle, { allRotationDragTargets: allRotationDragTargets, contextMenuValues: emptyContextMenuValues, corner: corner, dragging: dragging, outline: outline, onContextMenuOpen: onContextMenuOpen, onDraggingChange: onDraggingChange, onHoverChange: onHoverChange, onSelect: onSelect, target: target }, corner)))
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { type SelectedOutline } from './selected-outline-geometry';
3
3
  import { type SelectedOutlineTarget } from './selected-outline-types';
4
- export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineUvSnapThresholdPx, selectedOutlineTransformOriginSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineUv, snapSelectedOutlineTransformOriginUv, } from './selected-outline-drag';
4
+ export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutlineActiveSchema, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, selectedOutlineUvSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineTransformOriginUv, snapSelectedOutlineUv, } from './selected-outline-drag';
5
5
  export { getOutlineSelectionInteraction, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
6
6
  export { selectedOutlineDragThresholdPx } from './selected-outline-types';
7
7
  export type { SelectedOutlineDragState, SelectedOutlineRotationDragState, SelectedOutlineScaleDragState, } from './selected-outline-types';
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelectedOutlineOverlay = exports.orderOutlinesForRendering = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.selectedOutlineUvSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
36
+ exports.SelectedOutlineOverlay = exports.orderOutlinesForRendering = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineActiveSchema = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const player_1 = require("@remotion/player");
39
39
  const react_1 = __importStar(require("react"));
@@ -73,11 +73,11 @@ Object.defineProperty(exports, "getSelectedOutlineScaleDragValues", { enumerable
73
73
  Object.defineProperty(exports, "getSelectedOutlineScaleEdgeInfo", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineScaleEdgeInfo; } });
74
74
  Object.defineProperty(exports, "getSelectedOutlineTransformOriginLockedAxis", { enumerable: true, get: function () { return selected_outline_drag_2.getSelectedOutlineTransformOriginLockedAxis; } });
75
75
  Object.defineProperty(exports, "isSelectedOutlineDragPastThreshold", { enumerable: true, get: function () { return selected_outline_drag_2.isSelectedOutlineDragPastThreshold; } });
76
- Object.defineProperty(exports, "selectedOutlineUvSnapThresholdPx", { enumerable: true, get: function () { return selected_outline_drag_2.selectedOutlineUvSnapThresholdPx; } });
77
76
  Object.defineProperty(exports, "selectedOutlineTransformOriginSnapThresholdPx", { enumerable: true, get: function () { return selected_outline_drag_2.selectedOutlineTransformOriginSnapThresholdPx; } });
77
+ Object.defineProperty(exports, "selectedOutlineUvSnapThresholdPx", { enumerable: true, get: function () { return selected_outline_drag_2.selectedOutlineUvSnapThresholdPx; } });
78
78
  Object.defineProperty(exports, "snapSelectedOutlineRotationDeltaDegrees", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineRotationDeltaDegrees; } });
79
- Object.defineProperty(exports, "snapSelectedOutlineUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineUv; } });
80
79
  Object.defineProperty(exports, "snapSelectedOutlineTransformOriginUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineTransformOriginUv; } });
80
+ Object.defineProperty(exports, "snapSelectedOutlineUv", { enumerable: true, get: function () { return selected_outline_drag_2.snapSelectedOutlineUv; } });
81
81
  const selected_outline_measurement_2 = require("./selected-outline-measurement");
82
82
  Object.defineProperty(exports, "getOutlineSelectionInteraction", { enumerable: true, get: function () { return selected_outline_measurement_2.getOutlineSelectionInteraction; } });
83
83
  Object.defineProperty(exports, "getSelectedEffectFieldsBySequenceKey", { enumerable: true, get: function () { return selected_outline_measurement_2.getSelectedEffectFieldsBySequenceKey; } });
@@ -176,6 +176,8 @@ const SelectedOutlineOverlay = ({ scale, translationX, translationY }) => {
176
176
  const rotationPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.rotateFieldKey];
177
177
  const transformOriginFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema[selected_outline_types_1.transformOriginFieldKey];
178
178
  const transformOriginPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses[selected_outline_types_1.transformOriginFieldKey];
179
+ const textContentFieldSchema = activeSchema === null || activeSchema === void 0 ? void 0 : activeSchema.children;
180
+ const textContentPropStatus = nodePropStatuses === null || nodePropStatuses === void 0 ? void 0 : nodePropStatuses.children;
179
181
  const transformOriginValueForRotation = (transformOriginFieldSchema === null || transformOriginFieldSchema === void 0 ? void 0 : transformOriginFieldSchema.type) === 'transform-origin' &&
180
182
  ((transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'static' ||
181
183
  (transformOriginPropStatus === null || transformOriginPropStatus === void 0 ? void 0 : transformOriginPropStatus.status) === 'keyframed')
@@ -228,6 +230,10 @@ const SelectedOutlineOverlay = ({ scale, translationX, translationY }) => {
228
230
  canTransformOriginTranslateStatus;
229
231
  const canDropEffect = previewServerState.type === 'connected' &&
230
232
  (controls === null || controls === void 0 ? void 0 : controls.supportsEffects) === true;
233
+ const canTextEdit = previewServerState.type === 'connected' &&
234
+ controls !== null &&
235
+ (textContentFieldSchema === null || textContentFieldSchema === void 0 ? void 0 : textContentFieldSchema.type) === 'text-content' &&
236
+ textContentPropStatus !== undefined;
231
237
  return {
232
238
  key,
233
239
  containsSelection,
@@ -342,6 +348,12 @@ const SelectedOutlineOverlay = ({ scale, translationX, translationY }) => {
342
348
  })) !== null && _f !== void 0 ? _f : fieldSchema.default),
343
349
  }
344
350
  : null,
351
+ textEdit: canTextEdit
352
+ ? {
353
+ nodePath,
354
+ propStatus: textContentPropStatus,
355
+ }
356
+ : null,
345
357
  uvHandles: containsSelection
346
358
  ? (0, selected_outline_uv_1.getSelectedUvHandles)({
347
359
  propStatuses,
@@ -11,6 +11,7 @@ const ConfirmationDialog_1 = require("../ConfirmationDialog");
11
11
  const delete_selected_timeline_item_1 = require("./delete-selected-timeline-item");
12
12
  const duplicate_selected_timeline_item_1 = require("./duplicate-selected-timeline-item");
13
13
  const reset_selected_timeline_props_1 = require("./reset-selected-timeline-props");
14
+ const split_selected_timeline_item_1 = require("./split-selected-timeline-item");
14
15
  const TimelineSelection_1 = require("./TimelineSelection");
15
16
  const update_selected_easing_1 = require("./update-selected-easing");
16
17
  const TimelineDeleteKeybindings = () => {
@@ -128,7 +129,10 @@ const TimelineDeleteKeybindings = () => {
128
129
  const duplicate = keybindings.registerKeybinding({
129
130
  event: 'keydown',
130
131
  key: 'd',
131
- callback: () => {
132
+ callback: (event) => {
133
+ if (!(0, split_selected_timeline_item_1.shouldHandleTimelineDuplicateShortcut)(event)) {
134
+ return;
135
+ }
132
136
  const { selectedItems } = currentSelection.current;
133
137
  if (selectedItems.length === 0) {
134
138
  return;
@@ -147,10 +151,39 @@ const TimelineDeleteKeybindings = () => {
147
151
  triggerIfInputFieldFocused: false,
148
152
  keepRegisteredWhenNotHighestContext: false,
149
153
  });
154
+ const split = keybindings.registerKeybinding({
155
+ event: 'keydown',
156
+ key: 'd',
157
+ callback: (event) => {
158
+ if (!(0, split_selected_timeline_item_1.shouldHandleTimelineSplitShortcut)(event)) {
159
+ return;
160
+ }
161
+ const { selectedItems } = currentSelection.current;
162
+ if (selectedItems.length === 0) {
163
+ return;
164
+ }
165
+ const splitPromise = (0, split_selected_timeline_item_1.splitSelectedTimelineItems)({
166
+ selections: selectedItems,
167
+ sequences: sequencesRef.current,
168
+ overrideIdsToNodePaths: overrideIdToNodePathMappings,
169
+ propStatuses: propStatusesRef.current,
170
+ splitFrame: timelinePositionRef.current,
171
+ });
172
+ if (splitPromise === null) {
173
+ return;
174
+ }
175
+ splitPromise.catch(() => undefined);
176
+ },
177
+ commandCtrlKey: true,
178
+ preventDefault: true,
179
+ triggerIfInputFieldFocused: false,
180
+ keepRegisteredWhenNotHighestContext: false,
181
+ });
150
182
  return () => {
151
183
  backspace.unregister();
152
184
  deleteKey.unregister();
153
185
  duplicate.unregister();
186
+ split.unregister();
154
187
  };
155
188
  }, [
156
189
  canSelect,
@@ -56,6 +56,7 @@ const TimelineExpandedSection = ({ sequence, validatedLocation, nodePathInfo, ne
56
56
  const { filteredTree, getIsExpanded, toggleTrack } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
57
57
  sequence,
58
58
  nodePathInfo,
59
+ includeTextContent: false,
59
60
  });
60
61
  const flat = (0, react_1.useMemo)(() => (0, timeline_layout_1.flattenVisibleTreeNodes)({ nodes: filteredTree, getIsExpanded }), [filteredTree, getIsExpanded]);
61
62
  const expandedHeight = (0, react_1.useMemo)(() => {
@@ -6,6 +6,7 @@ const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const colors_1 = require("../../helpers/colors");
8
8
  const get_left_of_timeline_slider_1 = require("../../helpers/get-left-of-timeline-slider");
9
+ const TimelineSelection_1 = require("./TimelineSelection");
9
10
  const TimelineWidthProvider_1 = require("./TimelineWidthProvider");
10
11
  const line = {
11
12
  height: '100%',
@@ -30,7 +31,7 @@ const InnerTimelineInOutPointerHandle = ({ atFrame, dragging, onPointerDown, tim
30
31
  top: 0,
31
32
  };
32
33
  }, [atFrame, dragging, timelineWidth, videoConfig.durationInFrames]);
33
- return (jsx_runtime_1.jsx("div", { ref: type === 'in' ? exports.inPointerHandle : exports.outPointerHandle, style: style, onPointerDown: onPointerDown }));
34
+ return (jsx_runtime_1.jsx("div", { ref: type === 'in' ? exports.inPointerHandle : exports.outPointerHandle, style: style, onPointerDown: onPointerDown, [TimelineSelection_1.TIMELINE_SCRUBBER_ATTR]: true }));
34
35
  };
35
36
  const TimelineInOutPointerHandle = ({ dragging, onPointerDown, type, atFrame, }) => {
36
37
  const timelineWidth = (0, react_1.useContext)(TimelineWidthProvider_1.TimelineWidthContext);
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { CanUpdateSequencePropStatus, DragOverrideValue, SequencePropsSubscriptionKey, InteractivitySchema } from 'remotion';
2
+ import type { CanUpdateSequencePropStatus, DragOverrideValue, InteractivitySchema, SequencePropsSubscriptionKey } from 'remotion';
3
3
  import type { SequenceNodePathInfo } from '../../helpers/get-timeline-sequence-sort-key';
4
4
  import { type TimelineSelection } from './TimelineSelection';
5
5
  export declare const getSelectedKeyframeControlNodePathInfos: ({ clickedNodePathInfo, selectedItems, }: {
@@ -113,6 +113,7 @@ const resolveKeyframeControlTarget = ({ nodePathInfo, tracks, propStatuses, getD
113
113
  getDragOverrides,
114
114
  getEffectDragOverrides,
115
115
  propStatuses,
116
+ includeTextContent: false,
116
117
  });
117
118
  const fieldNode = findFieldNode(tree, (0, timeline_node_path_key_1.timelineNodePathInfoToKey)(nodePathInfo));
118
119
  if (fieldNode === null || fieldNode.field === null) {
@@ -8,6 +8,7 @@ const TimelineEnumField_1 = require("./TimelineEnumField");
8
8
  const TimelineNumberField_1 = require("./TimelineNumberField");
9
9
  const TimelineRotationField_1 = require("./TimelineRotationField");
10
10
  const TimelineScaleField_1 = require("./TimelineScaleField");
11
+ const TimelineTextContentField_1 = require("./TimelineTextContentField");
11
12
  const TimelineTransformOriginField_1 = require("./TimelineTransformOriginField");
12
13
  const TimelineTranslateField_1 = require("./TimelineTranslateField");
13
14
  const TimelineUvCoordinateField_1 = require("./TimelineUvCoordinateField");
@@ -52,6 +53,9 @@ const TimelinePrimitiveFieldValue = ({ field, onSave, onDragValueChange, onDragE
52
53
  if (field.typeName === 'enum') {
53
54
  return (jsx_runtime_1.jsx("span", { style: inlineWrapper, children: jsx_runtime_1.jsx(TimelineEnumField_1.TimelineEnumField, { effectiveValue: effectiveValue, field: field, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }) }));
54
55
  }
56
+ if (field.typeName === 'text-content') {
57
+ return (jsx_runtime_1.jsx("span", { style: inlineWrapper, children: jsx_runtime_1.jsx(TimelineTextContentField_1.TimelineTextContentField, { effectiveValue: effectiveValue, field: field, nodePath: scaleLockNodePath, onDragEnd: onDragEnd, onDragValueChange: onDragValueChange, onSave: onSave, propStatus: propStatus }) }));
58
+ }
55
59
  throw new Error(`Unsupported field type: ${field.typeName}`);
56
60
  };
57
61
  exports.TimelinePrimitiveFieldValue = TimelinePrimitiveFieldValue;
@@ -404,6 +404,7 @@ const getSelectableTimelineItems = ({ getDragOverrides, getEffectDragOverrides,
404
404
  getDragOverrides,
405
405
  getEffectDragOverrides,
406
406
  propStatuses,
407
+ includeTextContent: false,
407
408
  });
408
409
  const filteredTree = (0, timeline_expanded_filter_1.filterTimelineExpandedTree)({
409
410
  nodes: tree,
@@ -63,6 +63,7 @@ const TimelineRowChrome_1 = require("./TimelineRowChrome");
63
63
  const TimelineSelection_1 = require("./TimelineSelection");
64
64
  const TimelineSequenceName_1 = require("./TimelineSequenceName");
65
65
  const use_open_sequence_in_editor_1 = require("./use-open-sequence-in-editor");
66
+ const use_rename_sequence_1 = require("./use-rename-sequence");
66
67
  const use_sequence_freeze_frame_menu_item_1 = require("./use-sequence-freeze-frame-menu-item");
67
68
  const use_timeline_expanded_tree_1 = require("./use-timeline-expanded-tree");
68
69
  const labelContainerStyle = {
@@ -78,24 +79,12 @@ const effectDropHighlight = {
78
79
  outlineOffset: -1,
79
80
  };
80
81
  const SEQUENCE_REORDER_MIME_TYPE = 'application/remotion-sequence-reorder';
81
- const getSequenceNameSaveAction = ({ editedName, currentDisplayName, fallbackDisplayName, hasStaticNameProp, }) => {
82
- if (!hasStaticNameProp &&
83
- (editedName === '' || editedName === fallbackDisplayName)) {
84
- return { type: 'noop' };
85
- }
86
- if (hasStaticNameProp && editedName === currentDisplayName) {
87
- return { type: 'noop' };
88
- }
89
- return {
90
- type: 'save',
91
- defaultValue: editedName === '' ? JSON.stringify('') : null,
92
- };
93
- };
94
82
  let currentSequenceDrag = null;
95
83
  const TimelineSequenceExpandArrow = ({ disabled, isExpanded, nodePathInfo, onToggleExpand, sequence }) => {
96
84
  const { filteredTree } = (0, use_timeline_expanded_tree_1.useTimelineExpandedTree)({
97
85
  sequence,
98
86
  nodePathInfo,
87
+ includeTextContent: false,
99
88
  });
100
89
  if (filteredTree.length === 0) {
101
90
  return jsx_runtime_1.jsx(TimelineExpandArrowButton_1.TimelineExpandArrowSpacer, {});
@@ -163,14 +152,13 @@ const getDestinationIndex = ({ fromIndex, insertionIndex, }) => {
163
152
  return insertionIndex > fromIndex ? insertionIndex - 1 : insertionIndex;
164
153
  };
165
154
  const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDisplayOffset, sequenceFrameOffset, trackIndex, }) => {
166
- var _a, _b, _c, _d;
167
- var _e, _f, _g, _h;
168
- const nodePath = (_e = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _e !== void 0 ? _e : null;
155
+ var _a, _b, _c;
156
+ var _d, _e, _f;
157
+ const nodePath = (_d = nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.sequenceSubscriptionKey) !== null && _d !== void 0 ? _d : null;
169
158
  const { previewServerState } = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx);
170
159
  const previewConnected = previewServerState.type === 'connected';
171
160
  const { getIsExpanded } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksGetterContext);
172
161
  const { toggleTrack } = (0, react_1.useContext)(ExpandedTracksProvider_1.ExpandedTracksSetterContext);
173
- const { propStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModePropStatusesContext);
174
162
  const { setPropStatuses } = (0, react_1.useContext)(remotion_1.Internals.VisualModeSettersContext);
175
163
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
176
164
  const { isHighestContext } = (0, use_keybinding_1.useKeybinding)();
@@ -201,9 +189,17 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
201
189
  column: (_a = originalLocation.column) !== null && _a !== void 0 ? _a : 0,
202
190
  };
203
191
  }, [originalLocation]);
192
+ const { canRename: canRenameThisSequence, displayName, fallbackDisplayName, propStatusesForOverride, saveName, } = (0, use_rename_sequence_1.useRenameSequence)({
193
+ clientId: previewServerState.type === 'connected'
194
+ ? previewServerState.clientId
195
+ : null,
196
+ nodePathInfo,
197
+ sequence,
198
+ validatedLocation,
199
+ });
204
200
  const canDeleteFromSource = Boolean(nodePath && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source));
205
201
  const nodePathKey = (0, react_1.useMemo)(() => nodePath ? remotion_1.Internals.makeSequencePropsSubscriptionKey(nodePath) : null, [nodePath]);
206
- const parentId = (_f = sequence.parent) !== null && _f !== void 0 ? _f : null;
202
+ const parentId = (_e = sequence.parent) !== null && _e !== void 0 ? _e : null;
207
203
  const canReorderSequence = previewConnected &&
208
204
  Boolean(nodePath && nodePathKey && (validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source)) &&
209
205
  (nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.numberOfSequencesWithThisNodePath) === 1;
@@ -450,13 +446,7 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
450
446
  }
451
447
  toggleTrack(nodePathInfo);
452
448
  }, [nodePathInfo, toggleTrack]);
453
- const propStatusesForOverride = (0, react_1.useMemo)(() => {
454
- return nodePath
455
- ? remotion_1.Internals.getPropStatusesCtx(propStatuses, nodePath)
456
- : undefined;
457
- }, [propStatuses, nodePath]);
458
449
  const codeHiddenStatus = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.hidden;
459
- const codeNameStatus = propStatusesForOverride === null || propStatusesForOverride === void 0 ? void 0 : propStatusesForOverride.name;
460
450
  const isItemHidden = (0, react_1.useMemo)(() => {
461
451
  var _a;
462
452
  const propStatus = codeHiddenStatus && codeHiddenStatus.status === 'static'
@@ -466,26 +456,6 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
466
456
  const effective = (propStatus !== null && propStatus !== void 0 ? propStatus : runtimeValue);
467
457
  return effective !== null && effective !== void 0 ? effective : false;
468
458
  }, [codeHiddenStatus, (_a = sequence.controls) === null || _a === void 0 ? void 0 : _a.currentRuntimeValueDotNotation]);
469
- const fallbackDisplayName = (_g = (_b = sequence.controls) === null || _b === void 0 ? void 0 : _b.componentName) !== null && _g !== void 0 ? _g : '<Sequence>';
470
- const staticNamePropValue = (codeNameStatus === null || codeNameStatus === void 0 ? void 0 : codeNameStatus.status) === 'static' &&
471
- typeof codeNameStatus.codeValue === 'string'
472
- ? codeNameStatus.codeValue
473
- : null;
474
- const hasStaticNameProp = staticNamePropValue !== null;
475
- const displayName = (0, react_1.useMemo)(() => {
476
- if (staticNamePropValue !== null) {
477
- return staticNamePropValue;
478
- }
479
- if ((codeNameStatus === null || codeNameStatus === void 0 ? void 0 : codeNameStatus.status) === 'static') {
480
- return fallbackDisplayName;
481
- }
482
- return sequence.displayName;
483
- }, [
484
- codeNameStatus === null || codeNameStatus === void 0 ? void 0 : codeNameStatus.status,
485
- fallbackDisplayName,
486
- sequence.displayName,
487
- staticNamePropValue,
488
- ]);
489
459
  const onToggleVisibility = (0, react_1.useCallback)((type) => {
490
460
  if (!sequence.controls ||
491
461
  !nodePath ||
@@ -554,14 +524,6 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
554
524
  codeHiddenStatus !== undefined &&
555
525
  codeHiddenStatus !== null &&
556
526
  codeHiddenStatus.status === 'static';
557
- const canRenameThisSequence = previewServerState.type === 'connected' &&
558
- !window.remotion_isReadOnlyStudio &&
559
- Boolean(sequence.controls) &&
560
- nodePath !== null &&
561
- validatedLocation !== null &&
562
- codeNameStatus !== undefined &&
563
- codeNameStatus !== null &&
564
- codeNameStatus.status === 'static';
565
527
  const onSequenceDoubleClick = (0, react_1.useCallback)((e) => {
566
528
  if ((0, TimelineSelection_1.isTimelineSelectionModifierEvent)(e)) {
567
529
  e.stopPropagation();
@@ -577,58 +539,14 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
577
539
  const canRenameSelectedSequence = canRenameThisSequence &&
578
540
  selected &&
579
541
  selectedItems.length === 1 &&
580
- ((_c = selectedItems[0]) === null || _c === void 0 ? void 0 : _c.type) === 'sequence';
542
+ ((_b = selectedItems[0]) === null || _b === void 0 ? void 0 : _b.type) === 'sequence';
581
543
  const onCancelRenaming = (0, react_1.useCallback)(() => {
582
544
  setIsRenaming(false);
583
545
  }, []);
584
546
  const onSaveName = (0, react_1.useCallback)(async (name) => {
585
- if (!canRenameThisSequence ||
586
- previewServerState.type !== 'connected' ||
587
- !sequence.controls ||
588
- !nodePath ||
589
- !validatedLocation) {
590
- setIsRenaming(false);
591
- return;
592
- }
593
- const action = getSequenceNameSaveAction({
594
- editedName: name,
595
- currentDisplayName: displayName,
596
- fallbackDisplayName,
597
- hasStaticNameProp,
598
- });
599
- if (action.type === 'noop') {
600
- setIsRenaming(false);
601
- return;
602
- }
603
- const savePromise = (0, save_sequence_prop_1.saveSequenceProps)({
604
- changes: [
605
- {
606
- fileName: validatedLocation.source,
607
- nodePath,
608
- fieldKey: 'name',
609
- value: name,
610
- defaultValue: action.defaultValue,
611
- schema: sequence.controls.schema,
612
- },
613
- ],
614
- setPropStatuses,
615
- clientId: previewServerState.clientId,
616
- undoLabel: 'Rename sequence',
617
- redoLabel: 'Rename sequence again',
618
- });
619
547
  setIsRenaming(false);
620
- await savePromise;
621
- }, [
622
- canRenameThisSequence,
623
- displayName,
624
- fallbackDisplayName,
625
- hasStaticNameProp,
626
- nodePath,
627
- previewServerState,
628
- sequence.controls,
629
- setPropStatuses,
630
- validatedLocation,
631
- ]);
548
+ await saveName(name);
549
+ }, [saveName]);
632
550
  react_1.default.useEffect(() => {
633
551
  if (!canRenameSelectedSequence || !process.env.KEYBOARD_SHORTCUTS_ENABLED) {
634
552
  setIsRenaming(false);
@@ -673,7 +591,7 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
673
591
  sequenceFrameOffset,
674
592
  setPropStatuses,
675
593
  timelinePosition,
676
- validatedSource: (_h = validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) !== null && _h !== void 0 ? _h : null,
594
+ validatedSource: (_f = validatedLocation === null || validatedLocation === void 0 ? void 0 : validatedLocation.source) !== null && _f !== void 0 ? _f : null,
677
595
  });
678
596
  const canAddEffect = (nodePathInfo === null || nodePathInfo === void 0 ? void 0 : nodePathInfo.supportsEffects) === true &&
679
597
  previewServerState.type === 'connected' &&
@@ -780,7 +698,7 @@ const TimelineSequenceItem = ({ nestedDepth, sequence, nodePathInfo, keyframeDis
780
698
  const canDropEffect = previewServerState.type === 'connected' &&
781
699
  nodePath !== null &&
782
700
  validatedLocation !== null &&
783
- ((_d = sequence.controls) === null || _d === void 0 ? void 0 : _d.supportsEffects) === true;
701
+ ((_c = sequence.controls) === null || _c === void 0 ? void 0 : _c.supportsEffects) === true;
784
702
  const sequenceReorderLineStyle = (0, react_1.useMemo)(() => {
785
703
  if (!sequenceDropIndicator) {
786
704
  return null;
@@ -64,9 +64,11 @@ const Value = ({ field, nodePath, validatedLocation, schema, propStatus }) => {
64
64
  if (!clientId) {
65
65
  return Promise.reject(new Error('Not connected to studio server'));
66
66
  }
67
- const defaultValue = field.fieldSchema.default !== undefined
68
- ? JSON.stringify(field.fieldSchema.default)
69
- : null;
67
+ const defaultValue = field.fieldSchema.type === 'text-content'
68
+ ? null
69
+ : field.fieldSchema.default !== undefined
70
+ ? JSON.stringify(field.fieldSchema.default)
71
+ : null;
70
72
  const stringifiedValue = JSON.stringify(value);
71
73
  const fieldLabel = (_a = field.description) !== null && _a !== void 0 ? _a : field.key;
72
74
  if (value === propStatus.codeValue) {
@@ -97,6 +99,7 @@ const Value = ({ field, nodePath, validatedLocation, schema, propStatus }) => {
97
99
  clientId,
98
100
  field.description,
99
101
  field.fieldSchema.default,
102
+ field.fieldSchema.type,
100
103
  field.key,
101
104
  nodePath,
102
105
  schema,
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { CanUpdateSequencePropStatusStatic, SequencePropsSubscriptionKey } from 'remotion';
3
+ import type { SchemaFieldInfo, TimelineFieldOnDragValueChange, TimelineFieldOnSave } from '../../helpers/timeline-layout';
4
+ export declare const TimelineTextContentField: React.FC<{
5
+ readonly field: SchemaFieldInfo;
6
+ readonly effectiveValue: unknown;
7
+ readonly propStatus: CanUpdateSequencePropStatusStatic;
8
+ readonly nodePath: SequencePropsSubscriptionKey | null;
9
+ readonly onDragEnd: () => void;
10
+ readonly onDragValueChange: TimelineFieldOnDragValueChange;
11
+ readonly onSave: TimelineFieldOnSave;
12
+ }>;