@remotion/studio 4.0.463 → 4.0.465

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 (94) hide show
  1. package/dist/components/CanvasOrLoading.js +1 -1
  2. package/dist/components/ColorPicker/AlphaSlider.d.ts +9 -0
  3. package/dist/components/ColorPicker/AlphaSlider.js +88 -0
  4. package/dist/components/ColorPicker/ColorPicker.d.ts +18 -0
  5. package/dist/components/ColorPicker/ColorPicker.js +176 -0
  6. package/dist/components/ColorPicker/ColorPickerPopup.d.ts +8 -0
  7. package/dist/components/ColorPicker/ColorPickerPopup.js +276 -0
  8. package/dist/components/ColorPicker/HueSlider.d.ts +6 -0
  9. package/dist/components/ColorPicker/HueSlider.js +68 -0
  10. package/dist/components/ColorPicker/SaturationValueArea.d.ts +14 -0
  11. package/dist/components/ColorPicker/SaturationValueArea.js +93 -0
  12. package/dist/components/ColorPicker/checker.d.ts +4 -0
  13. package/dist/components/ColorPicker/checker.js +9 -0
  14. package/dist/components/ExpandedTracksProvider.d.ts +2 -0
  15. package/dist/components/ExpandedTracksProvider.js +18 -1
  16. package/dist/components/NewComposition/CodemodFooter.d.ts +1 -0
  17. package/dist/components/NewComposition/CodemodFooter.js +35 -23
  18. package/dist/components/NewComposition/DeleteComposition.js +3 -1
  19. package/dist/components/NewComposition/DiffPreview.js +1 -1
  20. package/dist/components/NewComposition/DuplicateComposition.js +3 -1
  21. package/dist/components/NewComposition/RenameComposition.js +4 -2
  22. package/dist/components/RenderModal/SchemaEditor/ZodColorEditor.js +8 -47
  23. package/dist/components/RenderQueue/actions.d.ts +2 -1
  24. package/dist/components/RenderQueue/actions.js +2 -1
  25. package/dist/components/Timeline/Padder.js +2 -2
  26. package/dist/components/Timeline/SubscribeToNodePaths.d.ts +1 -1
  27. package/dist/components/Timeline/SubscribeToNodePaths.js +9 -4
  28. package/dist/components/Timeline/Timeline.js +4 -7
  29. package/dist/components/Timeline/TimelineColorField.js +18 -156
  30. package/dist/components/Timeline/TimelineEffectFieldRow.d.ts +1 -2
  31. package/dist/components/Timeline/TimelineEffectFieldRow.js +22 -31
  32. package/dist/components/Timeline/TimelineEffectGroupRow.d.ts +1 -2
  33. package/dist/components/Timeline/TimelineEffectGroupRow.js +67 -12
  34. package/dist/components/Timeline/TimelineExpandedRow.js +15 -30
  35. package/dist/components/Timeline/TimelineFieldRow.d.ts +1 -2
  36. package/dist/components/Timeline/TimelineFieldRow.js +19 -16
  37. package/dist/components/Timeline/TimelineImageInfo.js +5 -17
  38. package/dist/components/Timeline/TimelineListItem.d.ts +0 -1
  39. package/dist/components/Timeline/TimelineListItem.js +12 -14
  40. package/dist/components/Timeline/TimelineRowChrome.d.ts +8 -0
  41. package/dist/components/Timeline/TimelineRowChrome.js +21 -0
  42. package/dist/components/Timeline/TimelineTimeIndicators.js +4 -11
  43. package/dist/components/Timeline/TimelineTracks.js +0 -4
  44. package/dist/components/Timeline/TimelineVideoInfo.js +25 -8
  45. package/dist/components/Timeline/get-timeline-video-info-widths.d.ts +9 -0
  46. package/dist/components/Timeline/get-timeline-video-info-widths.js +11 -0
  47. package/dist/components/Timeline/save-effect-prop.d.ts +2 -1
  48. package/dist/components/Timeline/save-effect-prop.js +2 -13
  49. package/dist/components/Timeline/save-prop-queue.d.ts +1 -2
  50. package/dist/components/Timeline/save-prop-queue.js +3 -12
  51. package/dist/components/Timeline/save-sequence-prop.d.ts +2 -1
  52. package/dist/components/Timeline/save-sequence-prop.js +2 -11
  53. package/dist/components/Timeline/should-show-track-in-timeline.d.ts +2 -0
  54. package/dist/components/Timeline/should-show-track-in-timeline.js +23 -0
  55. package/dist/components/Timeline/timeline-field-row-layout.d.ts +2 -0
  56. package/dist/components/Timeline/timeline-field-row-layout.js +14 -0
  57. package/dist/components/Timeline/timeline-indent.d.ts +1 -0
  58. package/dist/components/Timeline/timeline-indent.js +4 -0
  59. package/dist/components/Timeline/timeline-row-layout.d.ts +11 -0
  60. package/dist/components/Timeline/timeline-row-layout.js +27 -0
  61. package/dist/components/Timeline/use-resolved-stack-react-to-change.d.ts +2 -0
  62. package/dist/components/Timeline/use-resolved-stack-react-to-change.js +59 -0
  63. package/dist/components/Timeline/use-resolved-stack.d.ts +1 -0
  64. package/dist/components/Timeline/use-resolved-stack.js +10 -1
  65. package/dist/components/Timeline/use-sequence-props-subscription.js +27 -1
  66. package/dist/error-overlay/remotion-overlay/ShortcutHint.js +5 -3
  67. package/dist/esm/chunk-6jf1natv.js +25 -0
  68. package/dist/esm/{chunk-b0m62frw.js → chunk-pqk2qd0d.js} +4971 -4013
  69. package/dist/esm/index.mjs +16 -0
  70. package/dist/esm/internals.mjs +4984 -4011
  71. package/dist/esm/previewEntry.mjs +4995 -4023
  72. package/dist/esm/renderEntry.mjs +4 -3
  73. package/dist/helpers/client-id.d.ts +2 -9
  74. package/dist/helpers/client-id.js +15 -40
  75. package/dist/helpers/color-conversion.d.ts +36 -0
  76. package/dist/helpers/color-conversion.js +121 -0
  77. package/dist/helpers/inject-css.js +4 -7
  78. package/dist/helpers/migrate-expanded-tracks-for-subscription-key.d.ts +3 -0
  79. package/dist/helpers/migrate-expanded-tracks-for-subscription-key.js +26 -0
  80. package/dist/helpers/preview-server-events.d.ts +15 -0
  81. package/dist/helpers/preview-server-events.js +81 -0
  82. package/dist/helpers/resolved-stack-to-symbolicated.d.ts +3 -0
  83. package/dist/helpers/resolved-stack-to-symbolicated.js +16 -0
  84. package/dist/helpers/timeline-layout.d.ts +0 -1
  85. package/dist/helpers/timeline-layout.js +29 -25
  86. package/dist/hot-middleware-client/client.js +10 -16
  87. package/package.json +10 -10
  88. package/dist/components/NewComposition/RemInputTypeColor.d.ts +0 -8
  89. package/dist/components/NewComposition/RemInputTypeColor.js +0 -53
  90. package/dist/components/Timeline/is-collapsed.d.ts +0 -2
  91. package/dist/components/Timeline/is-collapsed.js +0 -10
  92. package/dist/esm/chunk-5gtx3pza.js +0 -9
  93. package/dist/helpers/color-math.d.ts +0 -1
  94. package/dist/helpers/color-math.js +0 -13
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SaturationValueArea = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const color_conversion_1 = require("../../helpers/color-conversion");
7
+ const AREA_HEIGHT = 140;
8
+ const containerStyle = {
9
+ position: 'relative',
10
+ width: '100%',
11
+ height: AREA_HEIGHT,
12
+ cursor: 'crosshair',
13
+ borderRadius: 3,
14
+ overflow: 'hidden',
15
+ touchAction: 'none',
16
+ };
17
+ const valueOverlay = {
18
+ position: 'absolute',
19
+ inset: 0,
20
+ background: 'linear-gradient(to top, #000, transparent)',
21
+ };
22
+ const saturationOverlay = {
23
+ position: 'absolute',
24
+ inset: 0,
25
+ background: 'linear-gradient(to right, #fff, transparent)',
26
+ };
27
+ const SaturationValueArea = ({ hue, saturation, value, onChange, onChangeComplete }) => {
28
+ const containerRef = (0, react_1.useRef)(null);
29
+ const baseColor = (0, react_1.useMemo)(() => {
30
+ const { r, g, b } = (0, color_conversion_1.hsvToRgb)({ h: hue, s: 1, v: 1 });
31
+ return `rgb(${r}, ${g}, ${b})`;
32
+ }, [hue]);
33
+ const updateFromEvent = (0, react_1.useCallback)((clientX, clientY, isFinal) => {
34
+ const { current } = containerRef;
35
+ if (!current) {
36
+ return;
37
+ }
38
+ const rect = current.getBoundingClientRect();
39
+ const x = (0, color_conversion_1.clamp)((clientX - rect.left) / rect.width, 0, 1);
40
+ const y = (0, color_conversion_1.clamp)((clientY - rect.top) / rect.height, 0, 1);
41
+ const next = { s: x, v: 1 - y };
42
+ if (isFinal) {
43
+ onChangeComplete(next);
44
+ }
45
+ else {
46
+ onChange(next);
47
+ }
48
+ }, [onChange, onChangeComplete]);
49
+ const onPointerDown = (0, react_1.useCallback)((e) => {
50
+ var _a, _b;
51
+ if (e.button !== 0) {
52
+ return;
53
+ }
54
+ e.preventDefault();
55
+ (_b = (_a = e.target).setPointerCapture) === null || _b === void 0 ? void 0 : _b.call(_a, e.pointerId);
56
+ updateFromEvent(e.clientX, e.clientY, false);
57
+ const onMove = (ev) => {
58
+ updateFromEvent(ev.clientX, ev.clientY, false);
59
+ };
60
+ const onUp = (ev) => {
61
+ window.removeEventListener('pointermove', onMove);
62
+ window.removeEventListener('pointerup', onUp);
63
+ updateFromEvent(ev.clientX, ev.clientY, true);
64
+ };
65
+ window.addEventListener('pointermove', onMove);
66
+ window.addEventListener('pointerup', onUp);
67
+ }, [updateFromEvent]);
68
+ const containerWithBg = (0, react_1.useMemo)(() => {
69
+ return {
70
+ ...containerStyle,
71
+ backgroundColor: baseColor,
72
+ };
73
+ }, [baseColor]);
74
+ const handleStyle = (0, react_1.useMemo)(() => {
75
+ return {
76
+ position: 'absolute',
77
+ left: `${saturation * 100}%`,
78
+ top: `${(1 - value) * 100}%`,
79
+ width: 12,
80
+ height: 12,
81
+ marginLeft: -6,
82
+ marginTop: -6,
83
+ borderRadius: '50%',
84
+ border: '2px solid #fff',
85
+ boxShadow: '0 0 0 1px rgba(0, 0, 0, 0.6)',
86
+ pointerEvents: 'none',
87
+ };
88
+ }, [saturation, value]);
89
+ return (jsx_runtime_1.jsxs("div", { ref: containerRef, style: containerWithBg, onPointerDown: onPointerDown, children: [
90
+ jsx_runtime_1.jsx("div", { style: saturationOverlay }), jsx_runtime_1.jsx("div", { style: valueOverlay }), jsx_runtime_1.jsx("div", { style: handleStyle })
91
+ ] }));
92
+ };
93
+ exports.SaturationValueArea = SaturationValueArea;
@@ -0,0 +1,4 @@
1
+ export declare const CHECKER_BACKGROUND_IMAGE = "linear-gradient(45deg, #888 25%, transparent 25%), linear-gradient(-45deg, #888 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #888 75%), linear-gradient(-45deg, transparent 75%, #888 75%)";
2
+ export declare const CHECKER_BACKGROUND_SIZE = "8px 8px";
3
+ export declare const CHECKER_BACKGROUND_POSITION = "0 0, 0 4px, 4px -4px, -4px 0";
4
+ export declare const CHECKER_BACKGROUND_COLOR = "#444";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CHECKER_BACKGROUND_COLOR = exports.CHECKER_BACKGROUND_POSITION = exports.CHECKER_BACKGROUND_SIZE = exports.CHECKER_BACKGROUND_IMAGE = void 0;
4
+ // Checkerboard background used to indicate transparency in color swatches
5
+ // and the alpha slider. Rendered as a CSS gradient so we don't need an asset.
6
+ exports.CHECKER_BACKGROUND_IMAGE = 'linear-gradient(45deg, #888 25%, transparent 25%), linear-gradient(-45deg, #888 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #888 75%), linear-gradient(-45deg, transparent 75%, #888 75%)';
7
+ exports.CHECKER_BACKGROUND_SIZE = '8px 8px';
8
+ exports.CHECKER_BACKGROUND_POSITION = '0 0, 0 4px, 4px -4px, -4px 0';
9
+ exports.CHECKER_BACKGROUND_COLOR = '#444';
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import type { SequencePropsSubscriptionKey } from 'remotion';
2
3
  import type { SequenceNodePathInfo } from '../helpers/get-timeline-sequence-sort-key';
3
4
  export type GetIsExpanded = (nodePathInfo: SequenceNodePathInfo) => boolean;
4
5
  type ExpandedTracksGetterContextValue = {
@@ -6,6 +7,7 @@ type ExpandedTracksGetterContextValue = {
6
7
  };
7
8
  type ExpandedTracksSetterContextValue = {
8
9
  readonly toggleTrack: (nodePathInfo: SequenceNodePathInfo) => void;
10
+ readonly migrateExpandedTracksForSubscriptionKey: (oldKey: SequencePropsSubscriptionKey, newKey: SequencePropsSubscriptionKey) => void;
9
11
  };
10
12
  export declare const ExpandedTracksGetterContext: React.Context<ExpandedTracksGetterContextValue>;
11
13
  export declare const ExpandedTracksSetterContext: React.Context<ExpandedTracksSetterContextValue>;
@@ -4,6 +4,7 @@ exports.ExpandedTracksProvider = exports.ExpandedTracksSetterContext = exports.E
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const studio_shared_1 = require("@remotion/studio-shared");
6
6
  const react_1 = require("react");
7
+ const migrate_expanded_tracks_for_subscription_key_1 = require("../helpers/migrate-expanded-tracks-for-subscription-key");
7
8
  const persist_boolean_map_1 = require("../helpers/persist-boolean-map");
8
9
  const nodePathInfoToExpandedKey = (info) => [
9
10
  (0, studio_shared_1.stringifySequenceExpandedRowKey)(info.sequenceSubscriptionKey),
@@ -23,6 +24,9 @@ exports.ExpandedTracksSetterContext = (0, react_1.createContext)({
23
24
  toggleTrack: () => {
24
25
  throw new Error('ExpandedTracksSetterContext not initialized');
25
26
  },
27
+ migrateExpandedTracksForSubscriptionKey: () => {
28
+ throw new Error('ExpandedTracksSetterContext not initialized');
29
+ },
26
30
  });
27
31
  const ExpandedTracksProvider = ({ children }) => {
28
32
  const [expandedTracks, setExpandedTracks] = (0, react_1.useState)(loadExpandedTracks);
@@ -34,13 +38,26 @@ const ExpandedTracksProvider = ({ children }) => {
34
38
  return next;
35
39
  });
36
40
  }, []);
41
+ const migrateExpandedTracks = (0, react_1.useCallback)((oldKey, newKey) => {
42
+ setExpandedTracks((prev) => {
43
+ const next = (0, migrate_expanded_tracks_for_subscription_key_1.migrateExpandedTracksForSubscriptionKey)(prev, oldKey, newKey);
44
+ if (!next) {
45
+ return prev;
46
+ }
47
+ (0, persist_boolean_map_1.persistBooleanMap)(SESSION_STORAGE_KEY, next);
48
+ return next;
49
+ });
50
+ }, []);
37
51
  const getterValue = (0, react_1.useMemo)(() => ({
38
52
  getIsExpanded: (nodePathInfo) => {
39
53
  var _a;
40
54
  return (_a = expandedTracks[nodePathInfoToExpandedKey(nodePathInfo)]) !== null && _a !== void 0 ? _a : false;
41
55
  },
42
56
  }), [expandedTracks]);
43
- const setterValue = (0, react_1.useMemo)(() => ({ toggleTrack }), [toggleTrack]);
57
+ const setterValue = (0, react_1.useMemo)(() => ({
58
+ toggleTrack,
59
+ migrateExpandedTracksForSubscriptionKey: migrateExpandedTracks,
60
+ }), [toggleTrack, migrateExpandedTracks]);
44
61
  return (jsx_runtime_1.jsx(exports.ExpandedTracksSetterContext.Provider, { value: setterValue, children: jsx_runtime_1.jsx(exports.ExpandedTracksGetterContext.Provider, { value: getterValue, children: children }) }));
45
62
  };
46
63
  exports.ExpandedTracksProvider = ExpandedTracksProvider;
@@ -3,6 +3,7 @@ import React from 'react';
3
3
  export declare const CodemodFooter: React.FC<{
4
4
  readonly valid: boolean;
5
5
  readonly codemod: RecastCodemod;
6
+ readonly stack: string | null;
6
7
  readonly loadingNotification: React.ReactNode;
7
8
  readonly successNotification: React.ReactNode;
8
9
  readonly errorNotification: string;
@@ -4,33 +4,25 @@ exports.CodemodFooter = void 0;
4
4
  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
+ const resolved_stack_to_symbolicated_1 = require("../../helpers/resolved-stack-to-symbolicated");
7
8
  const use_keybinding_1 = require("../../helpers/use-keybinding");
8
9
  const modals_1 = require("../../state/modals");
9
10
  const layout_1 = require("../layout");
10
11
  const ModalButton_1 = require("../ModalButton");
11
12
  const NotificationCenter_1 = require("../Notifications/NotificationCenter");
12
13
  const actions_1 = require("../RenderQueue/actions");
14
+ const use_resolved_stack_1 = require("../Timeline/use-resolved-stack");
13
15
  const DiffPreview_1 = require("./DiffPreview");
14
- const CodemodFooter = ({ codemod, valid, loadingNotification, successNotification, errorNotification, genericSubmitLabel, submitLabel, onSuccess, }) => {
16
+ const CodemodFooter = ({ codemod, stack, valid, loadingNotification, successNotification, errorNotification, genericSubmitLabel, submitLabel, onSuccess, }) => {
17
+ var _a;
15
18
  const [submitting, setSubmitting] = (0, react_1.useState)(false);
16
19
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
17
20
  const [codemodStatus, setCanApplyCodemod] = (0, react_1.useState)({
18
21
  type: 'loading',
19
22
  });
20
- const [projectInfo, setProjectInfo] = (0, react_1.useState)(null);
21
- (0, react_1.useEffect)(() => {
22
- const controller = new AbortController();
23
- (0, actions_1.getProjectInfo)(controller.signal)
24
- .then((info) => {
25
- setProjectInfo(info.projectInfo);
26
- })
27
- .catch((err) => {
28
- (0, NotificationCenter_1.showNotification)(`Could not get project info: ${err.message}. Unable to duplicate composition`, 3000);
29
- });
30
- return () => {
31
- controller.abort();
32
- };
33
- }, []);
23
+ const resolvedLocation = (0, use_resolved_stack_1.useResolvedStack)(stack);
24
+ const symbolicatedStack = (0, react_1.useMemo)(() => (0, resolved_stack_to_symbolicated_1.resolvedStackToSymbolicated)(resolvedLocation), [resolvedLocation]);
25
+ const relativeFilePath = (_a = symbolicatedStack === null || symbolicatedStack === void 0 ? void 0 : symbolicatedStack.originalFileName) !== null && _a !== void 0 ? _a : null;
34
26
  const trigger = (0, react_1.useCallback)(() => {
35
27
  setSubmitting(true);
36
28
  setSelectedModal(null);
@@ -38,6 +30,7 @@ const CodemodFooter = ({ codemod, valid, loadingNotification, successNotificatio
38
30
  (0, actions_1.applyCodemod)({
39
31
  codemod,
40
32
  dryRun: false,
33
+ symbolicatedStack,
41
34
  signal: new AbortController().signal,
42
35
  })
43
36
  .then(() => {
@@ -54,11 +47,13 @@ const CodemodFooter = ({ codemod, valid, loadingNotification, successNotificatio
54
47
  onSuccess,
55
48
  setSelectedModal,
56
49
  successNotification,
50
+ symbolicatedStack,
57
51
  ]);
58
52
  const getCanApplyCodemod = (0, react_1.useCallback)(async (signal) => {
59
53
  const res = await (0, actions_1.applyCodemod)({
60
54
  codemod,
61
55
  dryRun: true,
56
+ symbolicatedStack,
62
57
  signal,
63
58
  });
64
59
  if (res.success) {
@@ -70,8 +65,25 @@ const CodemodFooter = ({ codemod, valid, loadingNotification, successNotificatio
70
65
  error: res.reason,
71
66
  });
72
67
  }
73
- }, [codemod]);
68
+ }, [codemod, symbolicatedStack]);
74
69
  (0, react_1.useEffect)(() => {
70
+ if (!stack) {
71
+ setCanApplyCodemod({
72
+ type: 'fail',
73
+ error: 'Could not determine where this composition is defined',
74
+ });
75
+ return;
76
+ }
77
+ if (!(0, use_resolved_stack_1.hasResolvedStack)(stack)) {
78
+ return;
79
+ }
80
+ if (!symbolicatedStack) {
81
+ setCanApplyCodemod({
82
+ type: 'fail',
83
+ error: 'Could not resolve the source location of this composition',
84
+ });
85
+ return;
86
+ }
75
87
  const abortController = new AbortController();
76
88
  let aborted = false;
77
89
  getCanApplyCodemod(abortController.signal)
@@ -80,16 +92,16 @@ const CodemodFooter = ({ codemod, valid, loadingNotification, successNotificatio
80
92
  if (aborted) {
81
93
  return;
82
94
  }
83
- (0, NotificationCenter_1.showNotification)(`Cannot duplicate composition: ${err.message}`, 3000);
95
+ (0, NotificationCenter_1.showNotification)(`${errorNotification}: ${err.message}`, 3000);
84
96
  });
85
97
  return () => {
86
98
  aborted = true;
87
99
  abortController.abort();
88
100
  };
89
- }, [getCanApplyCodemod]);
101
+ }, [errorNotification, getCanApplyCodemod, stack, symbolicatedStack]);
90
102
  const disabled = !valid ||
91
103
  submitting ||
92
- projectInfo === null ||
104
+ symbolicatedStack === null ||
93
105
  codemodStatus.type !== 'success';
94
106
  const { registerKeybinding } = (0, use_keybinding_1.useKeybinding)();
95
107
  (0, react_1.useEffect)(() => {
@@ -100,7 +112,7 @@ const CodemodFooter = ({ codemod, valid, loadingNotification, successNotificatio
100
112
  callback() {
101
113
  trigger();
102
114
  },
103
- commandCtrlKey: true,
115
+ commandCtrlKey: false,
104
116
  key: 'Enter',
105
117
  event: 'keydown',
106
118
  preventDefault: true,
@@ -112,9 +124,9 @@ const CodemodFooter = ({ codemod, valid, loadingNotification, successNotificatio
112
124
  };
113
125
  }, [disabled, registerKeybinding, trigger, valid]);
114
126
  return (jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [
115
- jsx_runtime_1.jsx(DiffPreview_1.CodemodDiffPreview, { status: codemodStatus }), jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(layout_1.Spacing, { block: true, x: 2 }), jsx_runtime_1.jsxs(ModalButton_1.ModalButton, { onClick: trigger, disabled: disabled, children: [projectInfo && projectInfo.relativeRootFile
116
- ? submitLabel({ relativeRootPath: projectInfo.relativeRootFile })
117
- : genericSubmitLabel, jsx_runtime_1.jsx(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })
127
+ jsx_runtime_1.jsx(DiffPreview_1.CodemodDiffPreview, { status: codemodStatus }), jsx_runtime_1.jsx(layout_1.Flex, {}), jsx_runtime_1.jsx(layout_1.Spacing, { block: true, x: 2 }), jsx_runtime_1.jsxs(ModalButton_1.ModalButton, { onClick: trigger, disabled: disabled, children: [relativeFilePath
128
+ ? submitLabel({ relativeRootPath: relativeFilePath })
129
+ : genericSubmitLabel, jsx_runtime_1.jsx(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: false })
118
130
  ] })
119
131
  ] }));
120
132
  };
@@ -16,11 +16,13 @@ const content = {
16
16
  minWidth: 500,
17
17
  };
18
18
  const DeleteCompositionLoaded = ({ compositionId }) => {
19
+ var _a;
19
20
  const context = (0, react_1.useContext)(ResolveCompositionBeforeModal_1.ResolvedCompositionContext);
20
21
  if (!context) {
21
22
  throw new Error('Resolved composition context');
22
23
  }
23
24
  const { unresolved } = context;
25
+ const compositionStack = (_a = unresolved.stack) !== null && _a !== void 0 ? _a : null;
24
26
  const codemod = (0, react_1.useMemo)(() => {
25
27
  return {
26
28
  type: 'delete-composition',
@@ -36,7 +38,7 @@ const DeleteCompositionLoaded = ({ compositionId }) => {
36
38
  jsx_runtime_1.jsx("br", {}),
37
39
  "The associated ",
38
40
  jsx_runtime_1.jsx("code", { style: styles_1.inlineCodeSnippet, children: "component" }),
39
- " will remain in your code."] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { errorNotification: `Could not delete composition`, loadingNotification: 'Deleting', successNotification: `Deleted ${unresolved.id}`, genericSubmitLabel: `Delete`, submitLabel: ({ relativeRootPath }) => `Delete from ${relativeRootPath}`, codemod: codemod, valid: true, onSuccess: null }) })
41
+ " will remain in your code."] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { errorNotification: `Could not delete composition`, loadingNotification: 'Deleting', successNotification: `Deleted ${unresolved.id}`, genericSubmitLabel: `Delete`, submitLabel: ({ relativeRootPath }) => `Delete from ${relativeRootPath}`, codemod: codemod, stack: compositionStack, valid: true, onSuccess: null }) })
40
42
  ] })
41
43
  ] }));
42
44
  };
@@ -11,7 +11,7 @@ const CodemodDiffPreview = ({ status }) => {
11
11
  return (jsx_runtime_1.jsx("span", { style: { color: colors_1.FAIL_COLOR, fontSize: 13, lineHeight: 1.2 }, children: status.error }));
12
12
  }
13
13
  return (jsx_runtime_1.jsxs("div", { style: { lineHeight: 1.2 }, children: [
14
- jsx_runtime_1.jsx("span", { style: { color: colors_1.LIGHT_TEXT, fontSize: 13, lineHeight: 1.2 }, children: "This will edit your Root file." }), jsx_runtime_1.jsx("br", {}), jsx_runtime_1.jsxs("span", { style: { color: colors_1.BLUE, fontSize: 13, lineHeight: 1.2 }, children: [status.diff.additions, " addition", status.diff.additions === 1 ? '' : 's', ","] }), ' ', jsx_runtime_1.jsxs("span", { style: {
14
+ jsx_runtime_1.jsx("span", { style: { color: colors_1.LIGHT_TEXT, fontSize: 13, lineHeight: 1.2 }, children: "This will edit your codebase." }), jsx_runtime_1.jsx("br", {}), jsx_runtime_1.jsxs("span", { style: { color: colors_1.BLUE, fontSize: 13, lineHeight: 1.2 }, children: [status.diff.additions, " addition", status.diff.additions === 1 ? '' : 's', ","] }), ' ', jsx_runtime_1.jsxs("span", { style: {
15
15
  color: colors_1.SELECTED_GUIDE,
16
16
  fontSize: 13,
17
17
  lineHeight: 1.2,
@@ -29,11 +29,13 @@ const comboBoxStyle = {
29
29
  width: 190,
30
30
  };
31
31
  const DuplicateCompositionLoaded = ({ initialType }) => {
32
+ var _a;
32
33
  const context = (0, react_1.useContext)(ResolveCompositionBeforeModal_1.ResolvedCompositionContext);
33
34
  if (!context) {
34
35
  throw new Error('Resolved composition context');
35
36
  }
36
37
  const { resolved, unresolved } = context;
38
+ const compositionStack = (_a = unresolved.stack) !== null && _a !== void 0 ? _a : null;
37
39
  const [initialCompType] = (0, react_1.useState)(initialType);
38
40
  const hadDimensionsDefined = unresolved.width && unresolved.height;
39
41
  const hadFpsDefined = unresolved.fps !== undefined;
@@ -199,7 +201,7 @@ const DuplicateCompositionLoaded = ({ initialType }) => {
199
201
  ] })
200
202
  ] })) : null, type === 'composition' && hadDurationDefined ? (jsx_runtime_1.jsx(NewCompDuration_1.NewCompDuration, { durationInFrames: durationInFrames, setDurationInFrames: setDurationInFrames })) : null, type === 'composition' && hadFpsDefined ? (jsx_runtime_1.jsxs("div", { style: layout_2.optionRow, children: [
201
203
  jsx_runtime_1.jsx("div", { style: layout_2.label, children: "FPS" }), jsx_runtime_1.jsx("div", { style: layout_2.rightRow, children: jsx_runtime_1.jsx(InputDragger_1.InputDragger, { type: "number", value: selectedFrameRate, onTextChange: onTextFpsChange, placeholder: "Frame rate (fps)", name: "fps", min: 1, required: true, status: "ok", max: 240, step: 0.01, onValueChange: onFpsChange, rightAlign: false }) })
202
- ] })) : null] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: 'Duplicating...', errorNotification: 'Could not duplicate composition', successNotification: `Duplicated ${unresolved.id} as ${newId}`, genericSubmitLabel: 'Duplicate', submitLabel: ({ relativeRootPath }) => `Add to ${relativeRootPath}`, codemod: codemod, valid: valid, onSuccess: onDuplicateSuccess }) })
204
+ ] })) : null] }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: 'Duplicating...', errorNotification: 'Could not duplicate composition', successNotification: `Duplicated ${unresolved.id} as ${newId}`, genericSubmitLabel: 'Duplicate', submitLabel: ({ relativeRootPath }) => `Add to ${relativeRootPath}`, codemod: codemod, stack: compositionStack, valid: valid, onSuccess: onDuplicateSuccess }) })
203
205
  ] })
204
206
  ] }));
205
207
  };
@@ -22,11 +22,13 @@ const content = {
22
22
  minWidth: 500,
23
23
  };
24
24
  const RenameCompositionLoaded = () => {
25
+ var _a;
25
26
  const context = (0, react_1.useContext)(ResolveCompositionBeforeModal_1.ResolvedCompositionContext);
26
27
  if (!context) {
27
28
  throw new Error('Resolved composition context');
28
29
  }
29
- const { resolved } = context;
30
+ const { resolved, unresolved } = context;
31
+ const compositionStack = (_a = unresolved.stack) !== null && _a !== void 0 ? _a : null;
30
32
  const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
31
33
  const [newId, setName] = (0, react_1.useState)(() => {
32
34
  return resolved.result.id;
@@ -55,7 +57,7 @@ const RenameCompositionLoaded = () => {
55
57
  jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: newId, onChange: onNameChange, type: "text", autoFocus: true, placeholder: "Composition ID", status: "ok", rightAlign: true }), compNameErrMessage ? (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [
56
58
  jsx_runtime_1.jsx(layout_1.Spacing, { y: 1, block: true }), jsx_runtime_1.jsx(ValidationMessage_1.ValidationMessage, { align: "flex-start", message: compNameErrMessage, type: "error" })
57
59
  ] })) : null] }) })
58
- ] }) }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: 'Renaming...', errorNotification: 'Could not rename composition', successNotification: `Renamed to ${newId}`, genericSubmitLabel: 'Rename', submitLabel: ({ relativeRootPath }) => `Modify ${relativeRootPath}`, codemod: codemod, valid: valid, onSuccess: null }) })
60
+ ] }) }), jsx_runtime_1.jsx(ModalFooter_1.ModalFooterContainer, { children: jsx_runtime_1.jsx(CodemodFooter_1.CodemodFooter, { loadingNotification: 'Renaming...', errorNotification: 'Could not rename composition', successNotification: `Renamed to ${newId}`, genericSubmitLabel: 'Rename', submitLabel: ({ relativeRootPath }) => `Modify ${relativeRootPath}`, codemod: codemod, stack: compositionStack, valid: valid, onSuccess: null }) })
59
61
  ] })
60
62
  ] }));
61
63
  };
@@ -3,12 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZodColorEditor = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const color_math_1 = require("../../../helpers/color-math");
7
- const get_zod_if_possible_1 = require("../../get-zod-if-possible");
6
+ const ColorPicker_1 = require("../../ColorPicker/ColorPicker");
8
7
  const layout_1 = require("../../layout");
9
- const InputDragger_1 = require("../../NewComposition/InputDragger");
10
8
  const RemInput_1 = require("../../NewComposition/RemInput");
11
- const RemInputTypeColor_1 = require("../../NewComposition/RemInputTypeColor");
12
9
  const Fieldset_1 = require("./Fieldset");
13
10
  const SchemaLabel_1 = require("./SchemaLabel");
14
11
  const zod_schema_type_1 = require("./zod-schema-type");
@@ -17,25 +14,13 @@ const fullWidth = {
17
14
  width: '100%',
18
15
  };
19
16
  const ZodColorEditor = ({ jsonPath, value, setValue, schema, onRemove, mayPad }) => {
20
- const z = (0, get_zod_if_possible_1.useZodIfPossible)();
21
- if (!z) {
22
- throw new Error('expected zod');
23
- }
24
- const zodTypes = (0, get_zod_if_possible_1.useZodTypesIfPossible)();
25
- if (!zodTypes) {
26
- throw new Error('expected zod color');
27
- }
28
17
  const localValue = (0, react_1.useMemo)(() => (0, zod_schema_type_1.zodSafeParse)(schema, value), [schema, value]);
29
- const { a, b, g, r } = localValue.success
30
- ? zodTypes.ZodZypesInternals.parseColor(value)
31
- : { a: 1, b: 0, g: 0, r: 0 };
32
- const onChange = (0, react_1.useCallback)((e) => {
33
- const newColor = (0, color_math_1.colorWithNewOpacity)(e.target.value, Math.round(a), zodTypes);
34
- setValue(() => newColor, { shouldSave: false });
35
- }, [a, setValue, zodTypes]);
36
- const onColorBlur = (0, react_1.useCallback)(() => {
37
- setValue(() => value, { shouldSave: true });
38
- }, [setValue, value]);
18
+ const onPickerChange = (0, react_1.useCallback)((next) => {
19
+ setValue(() => next, { shouldSave: false });
20
+ }, [setValue]);
21
+ const onPickerComplete = (0, react_1.useCallback)((next) => {
22
+ setValue(() => next, { shouldSave: true });
23
+ }, [setValue]);
39
24
  const onTextChange = (0, react_1.useCallback)((e) => {
40
25
  const newValue = e.target.value;
41
26
  setValue(() => newValue, { shouldSave: false });
@@ -43,35 +28,11 @@ const ZodColorEditor = ({ jsonPath, value, setValue, schema, onRemove, mayPad })
43
28
  const onTextBlur = (0, react_1.useCallback)(() => {
44
29
  setValue(() => value, { shouldSave: true });
45
30
  }, [setValue, value]);
46
- const rgb = `#${r.toString(16).padStart(2, '0')}${g
47
- .toString(16)
48
- .padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
49
31
  const status = localValue.success ? 'ok' : 'error';
50
- const colorPicker = (0, react_1.useMemo)(() => {
51
- return {
52
- height: 39,
53
- width: 45,
54
- display: 'inline-block',
55
- };
56
- }, []);
57
- const onOpacityChange = (0, react_1.useCallback)((newValue) => {
58
- const newColor = (0, color_math_1.colorWithNewOpacity)(value, Math.round((Number(newValue) / 100) * 255), zodTypes);
59
- setValue(() => newColor, { shouldSave: true });
60
- }, [setValue, value, zodTypes]);
61
- const onOpacityValueChange = (0, react_1.useCallback)((newValue) => {
62
- const newColor = (0, color_math_1.colorWithNewOpacity)(value, Math.round((Number(newValue) / 100) * 255), zodTypes);
63
- setValue(() => newColor, { shouldSave: false });
64
- }, [setValue, value, zodTypes]);
65
- const onOpacityValueChangeEnd = (0, react_1.useCallback)((newValue) => {
66
- const newColor = (0, color_math_1.colorWithNewOpacity)(value, Math.round((Number(newValue) / 100) * 255), zodTypes);
67
- setValue(() => newColor, { shouldSave: true });
68
- }, [setValue, value, zodTypes]);
69
32
  return (jsx_runtime_1.jsxs(Fieldset_1.Fieldset, { shouldPad: mayPad, children: [
70
33
  jsx_runtime_1.jsx(SchemaLabel_1.SchemaLabel, { handleClick: null, jsonPath: jsonPath, onRemove: onRemove, valid: localValue.success, suffix: null }), jsx_runtime_1.jsxs("div", { style: fullWidth, children: [
71
34
  jsx_runtime_1.jsxs(layout_1.Row, { align: "center", children: [
72
- jsx_runtime_1.jsx("div", { style: colorPicker, children: jsx_runtime_1.jsx(RemInputTypeColor_1.RemInputTypeColor, { type: "color", style: {
73
- height: 39,
74
- }, value: rgb, onChange: onChange, onBlur: onColorBlur, className: "__remotion_color_picker", status: status, name: jsonPath.join('.') }) }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1, block: true }), jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: value, status: status, placeholder: jsonPath.join('.'), onChange: onTextChange, onBlur: onTextBlur, rightAlign: false }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1 }), jsx_runtime_1.jsx(InputDragger_1.InputDragger, { onTextChange: onOpacityChange, onValueChange: onOpacityValueChange, onValueChangeEnd: onOpacityValueChangeEnd, status: status, value: (a / 255) * 100, min: 0, max: 100, step: 1, formatter: (v) => `${Math.round(Number(v))}%`, rightAlign: false })
35
+ jsx_runtime_1.jsx(ColorPicker_1.ColorPicker, { value: value, status: status, onChange: onPickerChange, onChangeComplete: onPickerComplete, width: 45, height: 39, name: jsonPath.join('.') }), jsx_runtime_1.jsx(layout_1.Spacing, { x: 1, block: true }), jsx_runtime_1.jsx(RemInput_1.RemotionInput, { value: value, status: status, placeholder: jsonPath.join('.'), onChange: onTextChange, onBlur: onTextBlur, rightAlign: false })
75
36
  ] }), jsx_runtime_1.jsx(ZodFieldValidation_1.ZodFieldValidation, { path: jsonPath, zodValidation: localValue })
76
37
  ] })
77
38
  ] }));
@@ -97,9 +97,10 @@ export declare const subscribeToFileExistenceWatcher: ({ file, clientId, }: {
97
97
  export declare const openInFileExplorer: ({ directory }: {
98
98
  directory: string;
99
99
  }) => Promise<void>;
100
- export declare const applyCodemod: ({ codemod, dryRun, signal, }: {
100
+ export declare const applyCodemod: ({ codemod, dryRun, symbolicatedStack, signal, }: {
101
101
  codemod: RecastCodemod;
102
102
  dryRun: boolean;
103
+ symbolicatedStack: import("@remotion/studio-shared").SymbolicatedStackFrame | null;
103
104
  signal: AbortSignal;
104
105
  }) => Promise<import("@remotion/studio-shared").ApplyCodemodResponse>;
105
106
  export declare const removeRenderJob: (job: RenderJob) => Promise<undefined>;
@@ -133,10 +133,11 @@ const openInFileExplorer = ({ directory }) => {
133
133
  return (0, call_api_1.callApi)('/api/open-in-file-explorer', body);
134
134
  };
135
135
  exports.openInFileExplorer = openInFileExplorer;
136
- const applyCodemod = ({ codemod, dryRun, signal, }) => {
136
+ const applyCodemod = ({ codemod, dryRun, symbolicatedStack, signal, }) => {
137
137
  const body = {
138
138
  codemod,
139
139
  dryRun,
140
+ symbolicatedStack,
140
141
  };
141
142
  return (0, call_api_1.callApi)('/api/apply-codemod', body, signal);
142
143
  };
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Padder = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
- const TimelineListItem_1 = require("./TimelineListItem");
6
+ const timeline_indent_1 = require("./timeline-indent");
7
7
  const Padder = ({ depth }) => {
8
8
  const style = (0, react_1.useMemo)(() => ({
9
- width: TimelineListItem_1.INDENT * depth,
9
+ width: timeline_indent_1.TIMELINE_INDENT * depth,
10
10
  flexShrink: 0,
11
11
  }), [depth]);
12
12
  return jsx_runtime_1.jsx("div", { style: style });
@@ -3,6 +3,6 @@ import type { EffectDefinition, SequenceSchema } from 'remotion';
3
3
  export declare const SubscribeToNodePaths: FC<{
4
4
  readonly overrideId: string;
5
5
  readonly schema: SequenceSchema;
6
- readonly stack: string;
6
+ readonly getStack: () => string | null;
7
7
  readonly effects: readonly EffectDefinition<unknown>[];
8
8
  }>;
@@ -2,12 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SubscribeToNodePaths = void 0;
4
4
  const react_1 = require("react");
5
- const use_resolved_stack_1 = require("./use-resolved-stack");
5
+ const no_react_1 = require("remotion/no-react");
6
+ const use_resolved_stack_react_to_change_1 = require("./use-resolved-stack-react-to-change");
6
7
  const use_sequence_props_subscription_1 = require("./use-sequence-props-subscription");
7
- const SubscribeToNodePaths = ({ overrideId, schema, stack, effects }) => {
8
- const originalLocation = (0, use_resolved_stack_1.useResolvedStack)(stack);
8
+ const SubscribeToNodePaths = ({ overrideId, schema, getStack, effects }) => {
9
+ const originalLocation = (0, use_resolved_stack_react_to_change_1.useResolveStackAndReactToChange)(getStack);
9
10
  const effectSubscriptions = (0, react_1.useMemo)(() => {
10
- return effects.map((effect) => effect.schema);
11
+ return effects
12
+ .map((effect) => {
13
+ return effect.schema;
14
+ })
15
+ .filter(no_react_1.NoReactInternals.truthy);
11
16
  }, [effects]);
12
17
  (0, use_sequence_props_subscription_1.useSequencePropsSubscription)({
13
18
  overrideId,
@@ -44,9 +44,9 @@ const is_menu_item_1 = require("../Menu/is-menu-item");
44
44
  const SplitterContainer_1 = require("../Splitter/SplitterContainer");
45
45
  const SplitterElement_1 = require("../Splitter/SplitterElement");
46
46
  const SplitterHandle_1 = require("../Splitter/SplitterHandle");
47
- const is_collapsed_1 = require("./is-collapsed");
48
47
  const MaxTimelineTracks_1 = require("./MaxTimelineTracks");
49
48
  const SequencePropsObserver_1 = require("./SequencePropsObserver");
49
+ const should_show_track_in_timeline_1 = require("./should-show-track-in-timeline");
50
50
  const SubscribeToNodePaths_1 = require("./SubscribeToNodePaths");
51
51
  const timeline_refs_1 = require("./timeline-refs");
52
52
  const TimelineDragHandler_1 = require("./TimelineDragHandler");
@@ -88,10 +88,7 @@ const TimelineInner = () => {
88
88
  }, [sequences, videoConfigIsNull, overrideIdToNodePathMappings]);
89
89
  const durationInFrames = (_a = videoConfig === null || videoConfig === void 0 ? void 0 : videoConfig.durationInFrames) !== null && _a !== void 0 ? _a : 0;
90
90
  const filtered = (0, react_1.useMemo)(() => {
91
- return timeline.filter((t) => !(0, is_collapsed_1.isTrackHidden)(t) &&
92
- t.sequence.from <= durationInFrames &&
93
- t.sequence.duration > 0 &&
94
- t.sequence.showInTimeline);
91
+ return timeline.filter((t) => (0, should_show_track_in_timeline_1.shouldShowTrackInTimeline)(t, durationInFrames));
95
92
  }, [durationInFrames, timeline]);
96
93
  const shown = (0, react_1.useMemo)(() => {
97
94
  return filtered.length > MaxTimelineTracks_1.MAX_TIMELINE_TRACKS
@@ -100,10 +97,10 @@ const TimelineInner = () => {
100
97
  }, [filtered]);
101
98
  const hasBeenCut = filtered.length > shown.length;
102
99
  return (jsx_runtime_1.jsxs("div", { ref: timeline_refs_1.timelineVerticalScroll, style: container, className: 'css-reset ' + is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: [sequences.map((sequence) => {
103
- if (!sequence.controls || !previewConnected || !sequence.stack) {
100
+ if (!sequence.controls || !previewConnected || !sequence.getStack()) {
104
101
  return null;
105
102
  }
106
- return (jsx_runtime_1.jsx(SubscribeToNodePaths_1.SubscribeToNodePaths, { overrideId: sequence.controls.overrideId, schema: sequence.controls.schema, stack: sequence.stack, effects: sequence.effects }, sequence.id));
103
+ return (jsx_runtime_1.jsx(SubscribeToNodePaths_1.SubscribeToNodePaths, { overrideId: sequence.controls.overrideId, schema: sequence.controls.schema, getStack: sequence.getStack, effects: sequence.effects }, sequence.id));
107
104
  }), jsx_runtime_1.jsx(SequencePropsObserver_1.SequencePropsObserver, {}), jsx_runtime_1.jsxs(TimelineWidthProvider_1.TimelineWidthProvider, { children: [
108
105
  jsx_runtime_1.jsx(TimelinePinchZoom_1.TimelinePinchZoom, {}), jsx_runtime_1.jsx(TimelineHeightContainer_1.TimelineHeightContainer, { shown: shown, hasBeenCut: hasBeenCut, children: jsx_runtime_1.jsxs(SplitterContainer_1.SplitterContainer, { orientation: "vertical", defaultFlex: 0.2, id: "names-to-timeline", maxFlex: 0.5, minFlex: 0.15, children: [
109
106
  jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { type: "flexer", sticky: jsx_runtime_1.jsx(TimelineTimeIndicators_1.TimelineTimePlaceholders, {}), children: jsx_runtime_1.jsx(TimelineList_1.TimelineList, { timeline: shown }) }), jsx_runtime_1.jsx(SplitterHandle_1.SplitterHandle, { onCollapse: noop, allowToCollapse: "none" }), jsx_runtime_1.jsx(SplitterElement_1.SplitterElement, { type: "anti-flexer", sticky: null, children: jsx_runtime_1.jsxs(TimelineScrollable_1.TimelineScrollable, { children: [