@remotion/studio 4.0.517 → 4.0.518

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/components/AssetSelector.js +62 -21
  2. package/dist/components/AssetSelectorItem.d.ts +2 -1
  3. package/dist/components/AssetSelectorItem.js +41 -10
  4. package/dist/components/CaptionTextEditor.js +32 -8
  5. package/dist/components/CompositionContextButton.js +2 -1
  6. package/dist/components/CompositionSelector.js +1 -1
  7. package/dist/components/EditorContent.js +6 -3
  8. package/dist/components/ElementInstallConfirmation.d.ts +5 -0
  9. package/dist/components/ElementInstallConfirmation.js +25 -1
  10. package/dist/components/ElementLibraryModal.js +3 -1
  11. package/dist/components/InlineCaptionInspector.js +13 -2
  12. package/dist/components/Modals.js +49 -0
  13. package/dist/components/PlaybackRateSelector.js +2 -5
  14. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.d.ts +2 -0
  15. package/dist/components/QuickSwitcher/ExplorerQuickSwitcherTrigger.js +28 -8
  16. package/dist/components/SelectedOutlineKeyboardControls.d.ts +2 -2
  17. package/dist/components/SelectedOutlineOverlay.d.ts +1 -3
  18. package/dist/components/SelectedOutlineOverlay.js +21 -17
  19. package/dist/components/SelectedOutlineRenderer.d.ts +1 -1
  20. package/dist/components/SelectedOutlineRenderer.js +9 -78
  21. package/dist/components/SidebarRenderButton.js +2 -1
  22. package/dist/components/WebMcp.d.ts +2 -0
  23. package/dist/components/WebMcp.js +945 -0
  24. package/dist/components/composition-menu-items.js +26 -0
  25. package/dist/components/selected-outline-geometry.d.ts +2 -21
  26. package/dist/components/selected-outline-geometry.js +5 -16
  27. package/dist/components/selected-outline-measurement.d.ts +1 -29
  28. package/dist/components/selected-outline-measurement.js +1 -231
  29. package/dist/components/selected-outline-types.d.ts +2 -15
  30. package/dist/components/selected-outline-uv.js +3 -106
  31. package/dist/esm/{chunk-gzqm3g2m.js → chunk-7prjt5n5.js} +4782 -5611
  32. package/dist/esm/internals.mjs +4782 -5611
  33. package/dist/esm/previewEntry.mjs +4790 -5619
  34. package/dist/esm/renderEntry.mjs +1 -1
  35. package/dist/helpers/create-folder-tree.js +16 -1
  36. package/dist/helpers/format-file-location.d.ts +8 -0
  37. package/dist/helpers/format-file-location.js +14 -3
  38. package/dist/helpers/get-timeline-max-zoom.d.ts +8 -0
  39. package/dist/helpers/get-timeline-max-zoom.js +17 -6
  40. package/dist/helpers/hoverable.d.ts +1 -0
  41. package/dist/helpers/hoverable.js +4 -1
  42. package/dist/icons/enter.d.ts +4 -0
  43. package/dist/icons/enter.js +10 -0
  44. package/dist/state/playbackrate.d.ts +1 -0
  45. package/dist/state/playbackrate.js +4 -1
  46. package/package.json +14 -14
  47. package/dist/components/selected-outline-order.d.ts +0 -12
  48. package/dist/components/selected-outline-order.js +0 -251
  49. package/dist/helpers/get-box-quads-polyfill-internals.d.ts +0 -82
  50. package/dist/helpers/get-box-quads-polyfill-internals.js +0 -2403
  51. package/dist/helpers/get-box-quads-ponyfill.d.ts +0 -10
  52. package/dist/helpers/get-box-quads-ponyfill.js +0 -23
@@ -5,32 +5,46 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const ShortcutHint_1 = require("../../error-overlay/remotion-overlay/ShortcutHint");
7
7
  const colors_1 = require("../../helpers/colors");
8
+ const hoverable_1 = require("../../helpers/hoverable");
8
9
  const use_keybinding_1 = require("../../helpers/use-keybinding");
10
+ const ellipsis_1 = require("../../icons/ellipsis");
9
11
  const modals_1 = require("../../state/modals");
12
+ const InlineDropdown_1 = require("../InlineDropdown");
10
13
  const quickSwitcherArea = {
11
- padding: '4px 4px 4px 8px',
14
+ padding: '4px 8px',
12
15
  borderBottom: `1px solid ${colors_1.BLACK_HEX}`,
13
- overflowY: 'auto',
16
+ display: 'flex',
17
+ alignItems: 'center',
18
+ gap: 4,
14
19
  };
15
20
  const quickSwitcherTrigger = {
16
- backgroundColor: colors_1.WHITE_ALPHA_06,
17
21
  borderRadius: 4,
18
22
  padding: '4px 10px 4px 12px',
19
- color: colors_1.LIGHT_TEXT,
20
23
  fontSize: 12,
21
- cursor: 'pointer',
24
+ cursor: 'default',
22
25
  display: 'flex',
23
26
  alignItems: 'center',
24
27
  justifyContent: 'space-between',
25
28
  border: 'none',
26
- width: '100%',
29
+ flex: 1,
27
30
  appearance: 'none',
31
+ ...(0, hoverable_1.hoverableStyle)({
32
+ idleBackground: colors_1.WHITE_ALPHA_06,
33
+ hoverBackground: colors_1.WHITE_ALPHA_06,
34
+ idleColor: colors_1.LIGHT_TEXT,
35
+ hoverColor: colors_1.WHITE,
36
+ }),
37
+ };
38
+ const ellipsisSvgProps = {
39
+ style: {
40
+ height: 12,
41
+ },
28
42
  };
29
43
  const shortcutLabel = {
30
44
  fontSize: 11,
31
45
  opacity: 0.6,
32
46
  };
33
- const ExplorerQuickSwitcherTrigger = ({ mode, showShortcut, tabIndex }) => {
47
+ const ExplorerQuickSwitcherTrigger = ({ mode, showShortcut, tabIndex, getActions }) => {
34
48
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.SetSelectedModalContext);
35
49
  const openQuickSwitcher = (0, react_1.useCallback)(() => {
36
50
  setSelectedModal({
@@ -41,6 +55,12 @@ const ExplorerQuickSwitcherTrigger = ({ mode, showShortcut, tabIndex }) => {
41
55
  compositionSelection: null,
42
56
  });
43
57
  }, [mode, setSelectedModal]);
44
- return (jsx_runtime_1.jsx("div", { style: quickSwitcherArea, className: "__remotion-vertical-scrollbar", children: jsx_runtime_1.jsxs("button", { type: "button", style: quickSwitcherTrigger, onClick: openQuickSwitcher, tabIndex: tabIndex, children: ["Search...", showShortcut && !(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? (jsx_runtime_1.jsxs("span", { style: shortcutLabel, children: [ShortcutHint_1.cmdOrCtrlCharacter, "+K"] })) : null] }) }));
58
+ const renderMoreActions = (0, react_1.useCallback)((color) => {
59
+ return jsx_runtime_1.jsx(ellipsis_1.EllipsisIcon, { svgProps: ellipsisSvgProps, fill: color });
60
+ }, []);
61
+ const moreActionsTitle = mode === 'assets' ? 'More asset actions' : 'More composition actions';
62
+ return (jsx_runtime_1.jsxs("div", { style: quickSwitcherArea, children: [
63
+ jsx_runtime_1.jsxs("button", { type: "button", style: quickSwitcherTrigger, onClick: openQuickSwitcher, tabIndex: tabIndex, className: `${hoverable_1.HOVERABLE_CLASS_NAME} ${hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME}`, children: ["Search...", showShortcut && !(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? (jsx_runtime_1.jsxs("span", { style: shortcutLabel, children: [ShortcutHint_1.cmdOrCtrlCharacter, "+K"] })) : null] }), jsx_runtime_1.jsx(InlineDropdown_1.InlineDropdown, { variant: null, title: moreActionsTitle, renderAction: renderMoreActions, getItems: getActions, className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME })
64
+ ] }));
45
65
  };
46
66
  exports.ExplorerQuickSwitcherTrigger = ExplorerQuickSwitcherTrigger;
@@ -1,7 +1,7 @@
1
+ import type { CanvasSelectableOutline } from '@remotion/canvas';
1
2
  import type React from 'react';
2
- import type { getSequencesWithSelectableOutlines } from './selected-outline-measurement';
3
3
  import { type SelectedOutlineTarget } from './selected-outline-types';
4
4
  export declare const SelectedOutlineKeyboardControls: React.FC<{
5
5
  readonly getLatestOutlineTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
6
- readonly getSelectableOutlines: () => ReturnType<typeof getSequencesWithSelectableOutlines>;
6
+ readonly getSelectableOutlines: () => readonly CanvasSelectableOutline[];
7
7
  }>;
@@ -1,8 +1,6 @@
1
1
  import React from 'react';
2
- import { orderOutlinesForRendering } from './selected-outline-order';
3
- export { orderOutlinesForRendering };
4
2
  export { applySelectedOutlineDragAxisLock, applySelectedOutlineTransformOriginAxisLock, compensateTranslateForTransformOrigin, getSelectedOutline3DRotationDragValues, getSelectedOutlineActiveSchema, getSelectedOutlineCropDragChanges, getSelectedOutlineCropDragValues, getSelectedOutlineCropFollowingTransformOrigin, getSelectedOutlineDragChanges, getSelectedOutlineDragValues, getSelectedOutlineKeyboardNudgeDelta, getSelectedOutlineKeyboardNudgeDeltas, getSelectedOutlineRotationDragChanges, getSelectedOutlineRotationDragStates, getSelectedOutlineRotationDragValues, getSelectedOutlineScaleDragChanges, getSelectedOutlineScaleDragStates, getSelectedOutlineScaleDragValues, getSelectedOutlineScaleEdgeInfo, getSelectedOutlineTransformOriginDragChanges, getSelectedOutlineTransformOriginLockedAxis, isSelectedOutlineDragPastThreshold, selectedOutlineTransformOriginSnapThresholdPx, selectedOutlineUvSnapThresholdPx, snapSelectedOutlineRotationDeltaDegrees, snapSelectedOutlineTransformOriginUv, snapSelectedOutlineUv, } from './selected-outline-drag';
5
- export { getOutlineSelectionInteraction, getSelectedCropInfo, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, getSequencesWithSelectableOutlines, getTransformedSvgViewportPoints, } from './selected-outline-measurement';
3
+ export { getOutlineSelectionInteraction, getSelectedCropInfo, getSelectedEffectFieldsBySequenceKey, getSelectedOutlineRotationCornerInfo, getSelectedOutlineRotationDeltaDegrees, getSelectedOutlineRotationPivot, getSelectedSequenceKeys, } from './selected-outline-measurement';
6
4
  export { selectedOutlineDragThresholdPx } from './selected-outline-types';
7
5
  export type { SelectedOutlineDragState, SelectedOutlineRotationDragState, SelectedOutlineScaleDragState, } from './selected-outline-types';
8
6
  type SelectedOutlineOverlayProps = {
@@ -33,8 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SelectedOutlineOverlay = exports.selectedOutlineDragThresholdPx = exports.getTransformedSvgViewportPoints = exports.getSequencesWithSelectableOutlines = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getSelectedCropInfo = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineTransformOriginDragChanges = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineCropFollowingTransformOrigin = exports.getSelectedOutlineCropDragValues = exports.getSelectedOutlineCropDragChanges = exports.getSelectedOutlineActiveSchema = exports.getSelectedOutline3DRotationDragValues = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = exports.orderOutlinesForRendering = void 0;
36
+ exports.SelectedOutlineOverlay = exports.selectedOutlineDragThresholdPx = exports.getSelectedSequenceKeys = exports.getSelectedOutlineRotationPivot = exports.getSelectedOutlineRotationDeltaDegrees = exports.getSelectedOutlineRotationCornerInfo = exports.getSelectedEffectFieldsBySequenceKey = exports.getSelectedCropInfo = exports.getOutlineSelectionInteraction = exports.snapSelectedOutlineUv = exports.snapSelectedOutlineTransformOriginUv = exports.snapSelectedOutlineRotationDeltaDegrees = exports.selectedOutlineUvSnapThresholdPx = exports.selectedOutlineTransformOriginSnapThresholdPx = exports.isSelectedOutlineDragPastThreshold = exports.getSelectedOutlineTransformOriginLockedAxis = exports.getSelectedOutlineTransformOriginDragChanges = exports.getSelectedOutlineScaleEdgeInfo = exports.getSelectedOutlineScaleDragValues = exports.getSelectedOutlineScaleDragStates = exports.getSelectedOutlineScaleDragChanges = exports.getSelectedOutlineRotationDragValues = exports.getSelectedOutlineRotationDragStates = exports.getSelectedOutlineRotationDragChanges = exports.getSelectedOutlineKeyboardNudgeDeltas = exports.getSelectedOutlineKeyboardNudgeDelta = exports.getSelectedOutlineDragValues = exports.getSelectedOutlineDragChanges = exports.getSelectedOutlineCropFollowingTransformOrigin = exports.getSelectedOutlineCropDragValues = exports.getSelectedOutlineCropDragChanges = exports.getSelectedOutlineActiveSchema = exports.getSelectedOutline3DRotationDragValues = exports.compensateTranslateForTransformOrigin = exports.applySelectedOutlineTransformOriginAxisLock = exports.applySelectedOutlineDragAxisLock = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const canvas_1 = require("@remotion/canvas");
38
39
  const player_1 = require("@remotion/player");
39
40
  const react_1 = __importStar(require("react"));
40
41
  const remotion_1 = require("remotion");
@@ -50,8 +51,6 @@ const timeline_sequence_hover_1 = require("../state/timeline-sequence-hover");
50
51
  const transform_3d_mode_1 = require("../state/transform-3d-mode");
51
52
  const selected_outline_drag_1 = require("./selected-outline-drag");
52
53
  const selected_outline_measurement_1 = require("./selected-outline-measurement");
53
- const selected_outline_order_1 = require("./selected-outline-order");
54
- Object.defineProperty(exports, "orderOutlinesForRendering", { enumerable: true, get: function () { return selected_outline_order_1.orderOutlinesForRendering; } });
55
54
  const selected_outline_types_1 = require("./selected-outline-types");
56
55
  const SelectedOutlineKeyboardControls_1 = require("./SelectedOutlineKeyboardControls");
57
56
  const SelectedOutlineRenderer_1 = require("./SelectedOutlineRenderer");
@@ -94,8 +93,6 @@ Object.defineProperty(exports, "getSelectedOutlineRotationCornerInfo", { enumera
94
93
  Object.defineProperty(exports, "getSelectedOutlineRotationDeltaDegrees", { enumerable: true, get: function () { return selected_outline_measurement_2.getSelectedOutlineRotationDeltaDegrees; } });
95
94
  Object.defineProperty(exports, "getSelectedOutlineRotationPivot", { enumerable: true, get: function () { return selected_outline_measurement_2.getSelectedOutlineRotationPivot; } });
96
95
  Object.defineProperty(exports, "getSelectedSequenceKeys", { enumerable: true, get: function () { return selected_outline_measurement_2.getSelectedSequenceKeys; } });
97
- Object.defineProperty(exports, "getSequencesWithSelectableOutlines", { enumerable: true, get: function () { return selected_outline_measurement_2.getSequencesWithSelectableOutlines; } });
98
- Object.defineProperty(exports, "getTransformedSvgViewportPoints", { enumerable: true, get: function () { return selected_outline_measurement_2.getTransformedSvgViewportPoints; } });
99
96
  const selected_outline_types_2 = require("./selected-outline-types");
100
97
  Object.defineProperty(exports, "selectedOutlineDragThresholdPx", { enumerable: true, get: function () { return selected_outline_types_2.selectedOutlineDragThresholdPx; } });
101
98
  const getEffectiveCropValue = ({ activeSchema, dragOverrides, fieldKey, frame, propStatuses, runtimeValues, }) => {
@@ -263,6 +260,7 @@ const calculateOutlineTargets = ({ connectedClientId, editorShowOutlines, getDra
263
260
  key,
264
261
  containsSelection,
265
262
  crop,
263
+ includeOutsideContainer: showSelectedOutline,
266
264
  keyframeDisplayOffset: nodeKeyframeDisplayOffset,
267
265
  nodePathInfo,
268
266
  ref: sequence.refForOutline,
@@ -533,25 +531,31 @@ const ActiveSelectedOutlineOverlayUnmemoized = ({ calculateOutlineTargetsForCurr
533
531
  controls.runtimeValues,
534
532
  outlineRuntimeSnapshots[index],
535
533
  ])), [outlineRuntimeControls, outlineRuntimeSnapshots]);
536
- const outlineTargets = (0, react_1.useMemo)(() => calculateOutlineTargetsForCurrentState({
537
- mode: 'layout',
538
- runtimeValuesByStore: outlineRuntimeValuesByStore,
539
- selectableOutlines: selectableOutlinesForLayout,
540
- targetKey: null,
541
- targetTimelinePosition: timelinePosition,
542
- }), [
534
+ const outlineTargets = (0, react_1.useMemo)(() => {
535
+ const targets = calculateOutlineTargetsForCurrentState({
536
+ mode: 'layout',
537
+ runtimeValuesByStore: outlineRuntimeValuesByStore,
538
+ selectableOutlines: selectableOutlinesForLayout,
539
+ targetKey: null,
540
+ targetTimelinePosition: timelinePosition,
541
+ });
542
+ return targets.map((target) => {
543
+ const hovered = (0, timeline_node_path_key_1.timelineSequenceNodePathToKey)(target.nodePathInfo.sequenceSubscriptionKey) === hoveredTimelineNodePathKey;
544
+ return hovered && !target.includeOutsideContainer
545
+ ? { ...target, includeOutsideContainer: true }
546
+ : target;
547
+ });
548
+ }, [
543
549
  calculateOutlineTargetsForCurrentState,
550
+ hoveredTimelineNodePathKey,
544
551
  outlineRuntimeValuesByStore,
545
552
  selectableOutlinesForLayout,
546
553
  timelinePosition,
547
554
  ]);
548
- const outlineTargetsRef = (0, react_1.useRef)(outlineTargets);
549
- const getOutlineTargets = (0, react_1.useCallback)(() => outlineTargetsRef.current, []);
550
555
  (0, react_1.useLayoutEffect)(() => {
551
- outlineTargetsRef.current = outlineTargets;
552
556
  updateOutlinesRef.current();
553
557
  }, [outlineTargets, scale, translationX, translationY]);
554
- return (jsx_runtime_1.jsx(SelectedOutlineRenderer_1.SelectedOutlineRenderer, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: draggingOutline, getLatestOutlineTargetByKey: getLatestOutlineTargetByKey, getOutlineTargets: getOutlineTargets, onDraggingChange: onDraggingChange, onContextMenuOpenChange: onContextMenuOpenChange, onSelect: onSelect, scale: scale, sequences: sequences, updateOutlinesRef: updateOutlinesRef }));
558
+ return (jsx_runtime_1.jsx(SelectedOutlineRenderer_1.SelectedOutlineRenderer, { compositionHeight: compositionHeight, compositionWidth: compositionWidth, dragging: draggingOutline, getLatestOutlineTargetByKey: getLatestOutlineTargetByKey, outlineTargets: outlineTargets, onDraggingChange: onDraggingChange, onContextMenuOpenChange: onContextMenuOpenChange, onSelect: onSelect, scale: scale, sequences: sequences, updateOutlinesRef: updateOutlinesRef }));
555
559
  };
556
560
  const ActiveSelectedOutlineOverlay = react_1.default.memo(ActiveSelectedOutlineOverlayUnmemoized);
557
561
  const SelectedOutlineOverlayUnmemoized = ({ canvasHovered, compositionHeight, compositionWidth, scale, translationX, translationY, }) => {
@@ -585,7 +589,7 @@ const SelectedOutlineOverlayUnmemoized = ({ canvasHovered, compositionHeight, co
585
589
  !editorShowOutlines) {
586
590
  return [];
587
591
  }
588
- return (0, selected_outline_measurement_1.getSequencesWithSelectableOutlines)({
592
+ return (0, canvas_1.getCanvasSelectableOutlines)({
589
593
  sequences,
590
594
  overrideIdsToNodePaths: overrideIdToNodePathMappings,
591
595
  compositions,
@@ -5,7 +5,7 @@ export declare const SelectedOutlineRenderer: React.NamedExoticComponent<{
5
5
  readonly compositionWidth: number;
6
6
  readonly dragging: boolean;
7
7
  readonly getLatestOutlineTargetByKey: (key: string) => SelectedOutlineTarget | undefined;
8
- readonly getOutlineTargets: () => readonly SelectedOutlineLayoutTarget[];
8
+ readonly outlineTargets: readonly SelectedOutlineLayoutTarget[];
9
9
  readonly onDraggingChange: (dragging: boolean) => void;
10
10
  readonly onContextMenuOpenChange: (open: boolean) => void;
11
11
  readonly onSelect: (item: import("@remotion/canvas").CanvasSelectionItem, interaction?: import("@remotion/canvas").CanvasSelectionInteraction | undefined) => void;
@@ -35,12 +35,11 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.SelectedOutlineRenderer = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
+ const canvas_1 = require("@remotion/canvas");
38
39
  const react_1 = __importStar(require("react"));
39
40
  const timeline_node_path_key_1 = require("../helpers/timeline-node-path-key");
40
41
  const timeline_sequence_hover_1 = require("../state/timeline-sequence-hover");
41
42
  const ContextMenu_1 = require("./ContextMenu");
42
- const selected_outline_measurement_1 = require("./selected-outline-measurement");
43
- const selected_outline_order_1 = require("./selected-outline-order");
44
43
  const SelectedOutlineEditingHandles_1 = require("./SelectedOutlineEditingHandles");
45
44
  const SelectedOutlineElement_1 = require("./SelectedOutlineElement");
46
45
  const SelectedOutlinePolygon_1 = require("./SelectedOutlinePolygon");
@@ -53,17 +52,11 @@ const outlineContainer = {
53
52
  pointerEvents: 'none',
54
53
  overflow: 'visible',
55
54
  };
56
- const emptyRenderState = {
57
- outlines: [],
58
- targets: [],
59
- };
60
- const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth, dragging, getLatestOutlineTargetByKey, getOutlineTargets, onDraggingChange, onContextMenuOpenChange, onSelect, scale, sequences, updateOutlinesRef, }) => {
55
+ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth, dragging, getLatestOutlineTargetByKey, outlineTargets, onDraggingChange, onContextMenuOpenChange, onSelect, scale, sequences, updateOutlinesRef, }) => {
61
56
  var _a;
62
- const [renderState, setRenderState] = (0, react_1.useState)(emptyRenderState);
57
+ const outlinesController = (0, canvas_1.useCanvasOutlinesController)();
58
+ const renderState = (0, canvas_1.useCanvasOutlines)(outlinesController);
63
59
  const overlayRef = (0, react_1.useRef)(null);
64
- const resizeObserverRef = (0, react_1.useRef)(null);
65
- const resizeObserverAnimationFrameRef = (0, react_1.useRef)(null);
66
- const observedOutlineElementsRef = (0, react_1.useRef)(new Set());
67
60
  const contextMenuOpenHandlersRef = (0, react_1.useRef)(new Map());
68
61
  const registerContextMenuOpen = (0, react_1.useCallback)((key, handler) => {
69
62
  if (handler === null) {
@@ -90,24 +83,9 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
90
83
  const hoveredSequence = (0, timeline_sequence_hover_1.useTimelineSequenceHoverState)();
91
84
  const setHoveredSequence = (0, timeline_sequence_hover_1.useSetTimelineSequenceHover)();
92
85
  const hoveredNodePathKey = (_a = hoveredSequence === null || hoveredSequence === void 0 ? void 0 : hoveredSequence.nodePathKey) !== null && _a !== void 0 ? _a : null;
93
- const hoveredTimelineNodePathKey = (hoveredSequence === null || hoveredSequence === void 0 ? void 0 : hoveredSequence.source) === 'timeline' ? hoveredNodePathKey : null;
94
86
  const updateOutlines = (0, react_1.useCallback)(() => {
95
- const targets = getOutlineTargets();
96
- if (overlayRef.current === null || targets.length === 0) {
97
- setRenderState((prevState) => prevState.targets.length === 0 ? prevState : emptyRenderState);
98
- return;
99
- }
100
- const nextOutlines = (0, selected_outline_measurement_1.measureOutlines)(overlayRef.current, targets, hoveredTimelineNodePathKey);
101
- setRenderState((prevState) => {
102
- const outlines = (0, selected_outline_measurement_1.outlinesAreEqual)(prevState.outlines, nextOutlines)
103
- ? prevState.outlines
104
- : nextOutlines;
105
- if (prevState.targets === targets && prevState.outlines === outlines) {
106
- return prevState;
107
- }
108
- return { outlines, targets };
109
- });
110
- }, [getOutlineTargets, hoveredTimelineNodePathKey]);
87
+ outlinesController.update(overlayRef.current, outlineTargets);
88
+ }, [outlineTargets, outlinesController]);
111
89
  (0, react_1.useLayoutEffect)(() => {
112
90
  updateOutlinesRef.current = updateOutlines;
113
91
  updateOutlines();
@@ -118,55 +96,8 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
118
96
  };
119
97
  }, [updateOutlines, updateOutlinesRef]);
120
98
  (0, react_1.useLayoutEffect)(() => {
121
- if (typeof ResizeObserver === 'undefined') {
122
- return;
123
- }
124
- const resizeObserver = new ResizeObserver(() => {
125
- if (resizeObserverAnimationFrameRef.current !== null) {
126
- return;
127
- }
128
- resizeObserverAnimationFrameRef.current = requestAnimationFrame(() => {
129
- resizeObserverAnimationFrameRef.current = null;
130
- updateOutlinesRef.current();
131
- });
132
- });
133
- resizeObserverRef.current = resizeObserver;
134
- return () => {
135
- if (resizeObserverAnimationFrameRef.current !== null) {
136
- cancelAnimationFrame(resizeObserverAnimationFrameRef.current);
137
- resizeObserverAnimationFrameRef.current = null;
138
- }
139
- resizeObserver.disconnect();
140
- resizeObserverRef.current = null;
141
- observedOutlineElementsRef.current = new Set();
142
- };
143
- }, [updateOutlinesRef]);
144
- (0, react_1.useLayoutEffect)(() => {
145
- const resizeObserver = resizeObserverRef.current;
146
- if (resizeObserver === null) {
147
- return;
148
- }
149
- const nextObservedElements = new Set();
150
- if (overlayRef.current !== null) {
151
- nextObservedElements.add(overlayRef.current);
152
- }
153
- for (const target of renderState.targets) {
154
- if (target.ref.current !== null) {
155
- nextObservedElements.add(target.ref.current);
156
- }
157
- }
158
- for (const element of observedOutlineElementsRef.current) {
159
- if (!nextObservedElements.has(element)) {
160
- resizeObserver.unobserve(element);
161
- }
162
- }
163
- for (const element of nextObservedElements) {
164
- if (!observedOutlineElementsRef.current.has(element)) {
165
- resizeObserver.observe(element);
166
- }
167
- }
168
- observedOutlineElementsRef.current = nextObservedElements;
169
- }, [renderState.targets]);
99
+ return () => outlinesController.disconnect();
100
+ }, [outlinesController]);
170
101
  const targetsByKey = (0, react_1.useMemo)(() => {
171
102
  return new Map(renderState.targets.map((target) => [target.key, target]));
172
103
  }, [renderState.targets]);
@@ -180,7 +111,7 @@ const SelectedOutlineRendererUnmemoized = ({ compositionHeight, compositionWidth
180
111
  const outlineRenderingOrderRef = (0, react_1.useRef)([]);
181
112
  const outlinesForRendering = (0, react_1.useMemo)(() => {
182
113
  if (!dragging || outlineRenderingOrderRef.current.length === 0) {
183
- const orderedOutlines = (0, selected_outline_order_1.orderOutlinesForRendering)({
114
+ const orderedOutlines = (0, canvas_1.orderCanvasOutlinesForRendering)({
184
115
  outlines: renderState.outlines,
185
116
  sequences,
186
117
  targetsByKey,
@@ -5,6 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const client_id_1 = require("../helpers/client-id");
8
+ const hoverable_1 = require("../helpers/hoverable");
8
9
  const render_1 = require("../icons/render");
9
10
  const modals_1 = require("../state/modals");
10
11
  const InlineAction_1 = require("./InlineAction");
@@ -87,6 +88,6 @@ const SidebarRenderButton = ({ composition, visible }) => {
87
88
  if (!visible || connectionStatus !== 'connected') {
88
89
  return null;
89
90
  }
90
- return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { renderAction: renderAction, onClick: onClick, variant: null }));
91
+ return (jsx_runtime_1.jsx(InlineAction_1.InlineAction, { renderAction: renderAction, onClick: onClick, variant: null, style: hoverable_1.NO_HOVER_BACKGROUND_STYLE, className: hoverable_1.FOCUS_VISIBLE_ONLY_CLASS_NAME }));
91
92
  };
92
93
  exports.SidebarRenderButton = SidebarRenderButton;
@@ -0,0 +1,2 @@
1
+ import { type FC } from 'react';
2
+ export declare const WebMcp: FC;