@hyperframes/studio 0.8.114 → 0.8.116

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 (266) hide show
  1. package/dist/assets/{hyperframes-player-aXNJKiIg.js → hyperframes-player-mGYvPVpw.js} +1 -1
  2. package/dist/assets/{index-Bn2RJNTJ.js → index-BWHt0-ir.js} +1 -1
  3. package/dist/assets/{index-Dz7doz9l.js → index-DYNaXPVf.js} +203 -203
  4. package/dist/assets/{index-C9N-DGjC.js → index-Dr3hNpvS.js} +1 -1
  5. package/dist/assets/{index-BYnsJnJV.css → index-t1LH6H5H.css} +1 -1
  6. package/dist/{chunk-BIUXP3PG.js → chunk-3F47EFCT.js} +142 -277
  7. package/dist/chunk-3F47EFCT.js.map +1 -0
  8. package/dist/{chunk-K47E2ZJA.js → chunk-5EKWJZLM.js} +504 -17
  9. package/dist/chunk-5EKWJZLM.js.map +1 -0
  10. package/dist/{chunk-VWT7STY3.js → chunk-J6Q572FA.js} +2 -2
  11. package/dist/{domEditingLayers-V67MS4WP.js → domEditingLayers-OL7GLSS4.js} +3 -5
  12. package/dist/index.d.ts +146 -40
  13. package/dist/index.html +2 -2
  14. package/dist/index.js +4021 -3591
  15. package/dist/index.js.map +1 -1
  16. package/dist/player.js +2 -2
  17. package/dist/styles.css +1 -1
  18. package/package.json +9 -8
  19. package/src/App.tsx +2 -2
  20. package/src/captions/hooks/useCaptionSync.ts +10 -6
  21. package/src/components/LinkedSelectionToggle.tsx +3 -2
  22. package/src/components/ProjectUnreachableBanner.tsx +3 -3
  23. package/src/components/dock/Dock.tsx +5 -7
  24. package/src/components/editor/CanvasContextMenu.tsx +3 -2
  25. package/src/components/editor/DomEditCropHandles.test.tsx +27 -0
  26. package/src/components/editor/DomEditCropHandles.tsx +7 -4
  27. package/src/components/editor/DomEditOverlay.tsx +5 -1
  28. package/src/components/editor/FileTreeNodes.tsx +13 -10
  29. package/src/components/editor/MotionPathOverlay.tsx +7 -2
  30. package/src/components/editor/PropertyPanelEmptyState.tsx +12 -2
  31. package/src/components/editor/SnapToolbar.test.tsx +100 -1
  32. package/src/components/editor/SnapToolbar.tsx +43 -5
  33. package/src/components/editor/anchoredResizeCommitFeedsOffset.test.ts +48 -1
  34. package/src/components/editor/audioFxTelemetry.ts +2 -3
  35. package/src/components/editor/commitPreflightHandles.test.tsx +2 -2
  36. package/src/components/editor/cropResize.ts +4 -3
  37. package/src/components/editor/domEditingDom.ts +4 -0
  38. package/src/components/editor/domEditingLayers.ts +1 -5
  39. package/src/components/editor/domGroupMoveBy.test.tsx +252 -0
  40. package/src/components/editor/domGroupMoveBy.ts +95 -0
  41. package/src/components/editor/dragUndoPaint.test.ts +5 -5
  42. package/src/components/editor/gestureHoldsPreviewReload.test.tsx +33 -0
  43. package/src/components/editor/manualEditingAvailability.ts +8 -0
  44. package/src/components/editor/manualEdits.ts +1 -0
  45. package/src/components/editor/manualEditsParsing.ts +7 -0
  46. package/src/components/editor/manualOffsetDrag.ts +5 -6
  47. package/src/components/editor/marqueeCommit.test.tsx +106 -37
  48. package/src/components/editor/marqueeCommit.ts +24 -8
  49. package/src/components/editor/motionPathCommit.test.ts +29 -1
  50. package/src/components/editor/motionPathCommit.ts +21 -9
  51. package/src/components/editor/motionPathSelection.test.ts +6 -31
  52. package/src/components/editor/probeSourceElement.test.ts +45 -0
  53. package/src/components/editor/probeSourceElement.ts +41 -16
  54. package/src/components/editor/propertyPanelFlatTextSection.tsx +10 -7
  55. package/src/components/editor/propertyPanelFont.tsx +3 -2
  56. package/src/components/editor/propertyPanelFxAddMenu.tsx +11 -2
  57. package/src/components/editor/propertyPanelFxCarveModule.tsx +15 -5
  58. package/src/components/editor/propertyPanelFxNodeOpenBody.tsx +3 -0
  59. package/src/components/editor/propertyPanelFxNodeParams.tsx +15 -2
  60. package/src/components/editor/propertyPanelFxNodeRow.tsx +3 -0
  61. package/src/components/editor/propertyPanelFxPresetRun.tsx +10 -2
  62. package/src/components/editor/propertyPanelFxSection.test.tsx +56 -0
  63. package/src/components/editor/propertyPanelFxSection.tsx +30 -28
  64. package/src/components/editor/propertyPanelTypes.ts +6 -3
  65. package/src/components/editor/useColorGradingController.ts +2 -1
  66. package/src/components/editor/useDomEditNudge.test.tsx +37 -0
  67. package/src/components/editor/useDomEditNudge.ts +2 -0
  68. package/src/components/editor/useDomEditOverlayGestures.ts +5 -0
  69. package/src/components/editor/useDomEditZOrder.ts +12 -2
  70. package/src/components/editor/useFxCarveNodes.ts +2 -1
  71. package/src/components/editor/useFxLevelling.ts +2 -1
  72. package/src/components/feedback/projectProvenance.ts +2 -1
  73. package/src/components/nle/NLEContext.test.ts +1 -0
  74. package/src/components/nle/NLEContext.tsx +2 -1
  75. package/src/components/nle/NLEPreview.tsx +12 -10
  76. package/src/components/nle/PreviewPoster.tsx +2 -1
  77. package/src/components/nle/useTimelineEditCallbacks.test.tsx +1 -0
  78. package/src/components/nle/useTimelineEditCallbacks.ts +7 -1
  79. package/src/components/renders/useFfmpegStatus.ts +2 -1
  80. package/src/components/renders/useRenderQueue.ts +5 -4
  81. package/src/components/sidebar/AssetContextMenu.tsx +4 -4
  82. package/src/components/sidebar/AssetsTab.tsx +2 -1
  83. package/src/components/sidebar/GlobalAssetsView.tsx +2 -1
  84. package/src/components/ui/menuStyle.test.ts +61 -0
  85. package/src/components/ui/menuStyle.ts +10 -0
  86. package/src/contexts/DomEditContext.tsx +5 -1
  87. package/src/contexts/TimelineEditContext.tsx +1 -0
  88. package/src/domEditExports.test.tsx +9 -1
  89. package/src/hooks/domEditCommitRunner.ts +1 -1
  90. package/src/hooks/domSelectionTestHarness.ts +23 -0
  91. package/src/hooks/domStyleCommit.propertyNames.test.ts +73 -0
  92. package/src/hooks/domStyleCommit.ts +8 -1
  93. package/src/hooks/draggedGsapPosition.ts +10 -0
  94. package/src/hooks/elementOffsetStager.ts +5 -4
  95. package/src/hooks/gsapDragCommit.test.ts +75 -164
  96. package/src/hooks/gsapDragCommit.ts +4 -125
  97. package/src/hooks/gsapDragPositionCommit.ts +36 -384
  98. package/src/hooks/gsapEditOutcome.ts +22 -2
  99. package/src/hooks/gsapGestureOutcome.test.ts +161 -0
  100. package/src/hooks/gsapGestureOutcome.ts +64 -0
  101. package/src/hooks/gsapGroupPreflight.ts +34 -0
  102. package/src/hooks/gsapKeyframeCommit.ts +3 -12
  103. package/src/hooks/gsapMutationClient.ts +4 -3
  104. package/src/hooks/gsapParsedTween.test-helpers.ts +75 -0
  105. package/src/hooks/gsapParsedTween.test.ts +62 -0
  106. package/src/hooks/gsapParsedTween.ts +243 -0
  107. package/src/hooks/gsapPositionDetection.test.ts +78 -0
  108. package/src/hooks/gsapPositionDetection.ts +52 -33
  109. package/src/hooks/gsapResizeDropPoint.test.ts +4 -3
  110. package/src/hooks/gsapResizeElementSize.test.tsx +1 -0
  111. package/src/hooks/gsapResizeGeometrySweep.test.ts +13 -25
  112. package/src/hooks/gsapResizeIntercept.test.ts +96 -11
  113. package/src/hooks/gsapResizeIntercept.ts +79 -168
  114. package/src/hooks/gsapResizeSweep.test.ts +16 -33
  115. package/src/hooks/gsapRuntimeBridge.sharedTween.test.ts +6 -8
  116. package/src/hooks/gsapRuntimeBridge.test.ts +41 -6
  117. package/src/hooks/gsapRuntimeBridge.ts +105 -131
  118. package/src/hooks/gsapScriptCommitHelpers.ts +2 -1
  119. package/src/hooks/gsapScriptCommitTypes.ts +13 -0
  120. package/src/hooks/gsapShared.ts +7 -0
  121. package/src/hooks/gsapShared.writeTarget.test.ts +45 -57
  122. package/src/hooks/gsapValueAtPlayhead.browser.test.ts +83 -0
  123. package/src/hooks/gsapValueAtPlayhead.realGsap.test.ts +179 -0
  124. package/src/hooks/gsapValueAtPlayhead.test.ts +552 -0
  125. package/src/hooks/gsapValueAtPlayhead.ts +292 -0
  126. package/src/hooks/gsapWholePropertyOffsetCommit.test.ts +43 -0
  127. package/src/hooks/gsapWholePropertyOffsetCommit.ts +2 -3
  128. package/src/hooks/keyframeCacheAstLoad.ts +8 -6
  129. package/src/hooks/newTweenTarget.test.ts +41 -76
  130. package/src/hooks/plainRotation.ts +3 -2
  131. package/src/hooks/previewPromotionSelection.test.tsx +1 -1
  132. package/src/hooks/refreshTimelineRowText.test.ts +65 -0
  133. package/src/hooks/refreshTimelineRowText.ts +29 -0
  134. package/src/hooks/timelineTimingSync.test.ts +1 -0
  135. package/src/hooks/timelineTimingSync.ts +2 -1
  136. package/src/hooks/useAnimatedPropertyCommit.test.tsx +46 -5
  137. package/src/hooks/useAnimatedPropertyCommit.ts +2 -2
  138. package/src/hooks/useAskAgentModal.ts +2 -1
  139. package/src/hooks/useBlockCatalog.ts +2 -1
  140. package/src/hooks/useBlockedTimelineEditToast.ts +12 -3
  141. package/src/hooks/useCaptionDetection.ts +2 -1
  142. package/src/hooks/useCompositionContentLoader.ts +2 -1
  143. package/src/hooks/useDomEditCommitsHelpers.ts +3 -2
  144. package/src/hooks/useDomEditPositionPatchCommit.ts +18 -23
  145. package/src/hooks/useDomEditSession.test.tsx +30 -1
  146. package/src/hooks/useDomEditSession.ts +10 -0
  147. package/src/hooks/useDomEditTextCommits.test.tsx +41 -0
  148. package/src/hooks/useDomEditTextCommits.ts +13 -3
  149. package/src/hooks/useDomEditWiring.ts +4 -2
  150. package/src/hooks/useDomGeometryCommit.test.tsx +25 -6
  151. package/src/hooks/useDomGeometryCommit.ts +8 -4
  152. package/src/hooks/useDomGeometryCommits.test.tsx +1 -0
  153. package/src/hooks/useDomGeometryCommits.ts +3 -2
  154. package/src/hooks/useDomSelection.test.ts +26 -0
  155. package/src/hooks/useDomSelection.ts +10 -3
  156. package/src/hooks/useDomSelectionTypes.ts +6 -1
  157. package/src/hooks/useEditHistoryActions.paint.test.tsx +82 -20
  158. package/src/hooks/useEditHistoryActions.test.tsx +15 -0
  159. package/src/hooks/useEditHistoryActions.ts +16 -5
  160. package/src/hooks/useElementLifecycleOps.ts +2 -1
  161. package/src/hooks/useEnableKeyframes.test.ts +34 -3
  162. package/src/hooks/useEnableKeyframes.ts +7 -4
  163. package/src/hooks/useExternalFileChangeCoordinator.test.tsx +121 -0
  164. package/src/hooks/useExternalFileChangeCoordinator.ts +35 -8
  165. package/src/hooks/useFileManager.projectOwnership.test.tsx +6 -1
  166. package/src/hooks/useFileManager.ts +14 -10
  167. package/src/hooks/useFileTree.ts +3 -2
  168. package/src/hooks/useFrameCapture.ts +5 -1
  169. package/src/hooks/useFreezeFrame.ts +3 -2
  170. package/src/hooks/useGestureCommit.test.tsx +225 -55
  171. package/src/hooks/useGestureCommit.ts +86 -55
  172. package/src/hooks/useGroupCommits.ts +2 -1
  173. package/src/hooks/useGsapAwareEditing.groupPlan.test.tsx +160 -0
  174. package/src/hooks/useGsapAwareEditing.test.tsx +28 -35
  175. package/src/hooks/useGsapAwareEditing.testHelpers.tsx +42 -0
  176. package/src/hooks/useGsapAwareEditing.ts +101 -195
  177. package/src/hooks/useGsapAwareGroupMove.ts +179 -0
  178. package/src/hooks/useGsapInteractionFailureTelemetry.ts +10 -4
  179. package/src/hooks/useGsapKeyframeOps.sdkUsage.test.tsx +114 -0
  180. package/src/hooks/useGsapKeyframeOps.ts +36 -10
  181. package/src/hooks/useGsapScriptCommits.test.tsx +60 -1
  182. package/src/hooks/useGsapScriptCommits.ts +15 -10
  183. package/src/hooks/useGsapSelectionHandlers.test.tsx +1 -1
  184. package/src/hooks/useGsapSelectionHandlers.ts +24 -18
  185. package/src/hooks/useGsapTweenCache.ts +18 -12
  186. package/src/hooks/useLintModal.ts +2 -1
  187. package/src/hooks/usePersistentEditHistory.test.ts +277 -1
  188. package/src/hooks/usePersistentEditHistory.ts +47 -8
  189. package/src/hooks/usePopulateKeyframeCacheForFile.test.tsx +76 -2
  190. package/src/hooks/usePreviewInteraction.test.ts +21 -0
  191. package/src/hooks/usePreviewInteraction.ts +2 -0
  192. package/src/hooks/usePreviewPersistence.history.test.tsx +14 -3
  193. package/src/hooks/usePreviewPersistence.ts +13 -11
  194. package/src/hooks/useProjectFileWriter.ts +20 -19
  195. package/src/hooks/useRemoveBackground.ts +2 -1
  196. package/src/hooks/useRenderClipContent.test.ts +18 -0
  197. package/src/hooks/useRenderClipContent.ts +4 -5
  198. package/src/hooks/useSdkSession.ts +2 -1
  199. package/src/hooks/useServerConnection.ts +4 -3
  200. package/src/hooks/useStudioSelectionPublisher.ts +2 -1
  201. package/src/hooks/useThumbnailStill.test.ts +100 -0
  202. package/src/hooks/useThumbnailStill.ts +37 -0
  203. package/src/hooks/useTimelineDeleteOps.test.tsx +30 -22
  204. package/src/hooks/useTimelineDeleteOps.ts +22 -27
  205. package/src/hooks/useTimelineEditing.test.tsx +1 -1
  206. package/src/index.ts +4 -0
  207. package/src/player/components/AudioWaveform.tsx +3 -2
  208. package/src/player/components/AutomationSelectionMenu.tsx +3 -2
  209. package/src/player/components/ClipContextMenu.test.tsx +73 -0
  210. package/src/player/components/ClipContextMenu.tsx +33 -31
  211. package/src/player/components/CompositionThumbnail.tsx +2 -1
  212. package/src/player/components/KeyframeDiamondContextMenu.tsx +8 -9
  213. package/src/player/components/OutOfSyncBadge.tsx +5 -5
  214. package/src/player/components/TextClipContent.test.ts +19 -0
  215. package/src/player/components/TextClipContent.tsx +27 -0
  216. package/src/player/components/TrackGapContextMenu.tsx +3 -6
  217. package/src/player/components/clipMenuNormalize.ts +2 -1
  218. package/src/player/components/clipMenuToolItems.test.tsx +23 -0
  219. package/src/player/components/clipMenuToolItems.tsx +13 -9
  220. package/src/player/components/clipPeakMap.ts +2 -1
  221. package/src/player/components/timelineCallbacks.ts +1 -0
  222. package/src/player/components/timelineClipDragGestureLifecycle.ts +1 -1
  223. package/src/player/components/timelineClipGestureHandlers.test.ts +94 -0
  224. package/src/player/components/timelineClipGestureHandlers.ts +20 -2
  225. package/src/player/components/timelineEditing.ts +3 -1
  226. package/src/player/components/timelineLinkSelection.ts +35 -1
  227. package/src/player/components/useTimelineClipDrag.keyboard.test.tsx +14 -0
  228. package/src/player/components/useTimelineClipDrag.ts +6 -7
  229. package/src/player/hooks/timelinePlayerSync.test.ts +6 -0
  230. package/src/player/hooks/timelinePlayerSync.ts +6 -1
  231. package/src/player/hooks/useTimelinePlayer.ts +5 -1
  232. package/src/player/lib/thumbnailScheduler.test.ts +16 -0
  233. package/src/player/lib/thumbnailScheduler.ts +10 -2
  234. package/src/player/lib/timelineElementHelpers.test.ts +87 -1
  235. package/src/player/lib/timelineElementHelpers.ts +6 -15
  236. package/src/player/lib/timelineText.ts +40 -0
  237. package/src/player/sceneSwap.ts +2 -1
  238. package/src/player/store/timelineElement.ts +12 -0
  239. package/src/styles/theme.css +3 -0
  240. package/src/telemetry/client.ts +2 -1
  241. package/src/utils/blockInstaller.ts +2 -1
  242. package/src/utils/elementGsap.test.ts +9 -0
  243. package/src/utils/elementGsap.ts +7 -0
  244. package/src/utils/gsapSoftReload.ts +2 -3
  245. package/src/utils/gsapUndoRestore.browser.test.ts +51 -45
  246. package/src/utils/gsapUndoRestore.ts +3 -6
  247. package/src/utils/keyframeUsage.ts +79 -0
  248. package/src/utils/previewFeatureUsage.test.ts +32 -0
  249. package/src/utils/previewFeatureUsage.ts +46 -0
  250. package/src/utils/previewPrefetch.ts +2 -1
  251. package/src/utils/razorSplitTransaction.ts +12 -8
  252. package/src/utils/softReloadTargets.ts +1 -3
  253. package/src/utils/studioApiFetch.test.ts +75 -0
  254. package/src/utils/studioApiFetch.ts +13 -0
  255. package/src/utils/studioFileHistory.ts +4 -1
  256. package/src/utils/studioHelpers.ts +7 -1
  257. package/src/utils/studioPendingEdits.test.ts +23 -6
  258. package/src/utils/studioPendingEdits.ts +32 -8
  259. package/src/utils/studioTelemetry.test.ts +107 -0
  260. package/src/utils/studioTelemetry.ts +51 -5
  261. package/src/utils/timelineCompositionInsert.ts +3 -2
  262. package/src/webmcp/StudioAgentTools.tsx +4 -3
  263. package/dist/chunk-BIUXP3PG.js.map +0 -1
  264. package/dist/chunk-K47E2ZJA.js.map +0 -1
  265. /package/dist/{chunk-VWT7STY3.js.map → chunk-J6Q572FA.js.map} +0 -0
  266. /package/dist/{domEditingLayers-V67MS4WP.js.map → domEditingLayers-OL7GLSS4.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -386,6 +386,16 @@ interface TimelineElement {
386
386
  authoredStartIsMasterTime?: boolean;
387
387
  /** Legacy marker for an inline sub-composition child; current rows never set it. */
388
388
  expandedHostKey?: string;
389
+ /** A text layer's words and look, which its row draws live instead of a captured picture. */
390
+ text?: TimelineText;
391
+ }
392
+ interface TimelineText {
393
+ value: string;
394
+ fontFamily?: string;
395
+ fontWeight?: string;
396
+ color?: string;
397
+ /** The layer's own opaque background colour, when it paints one. */
398
+ background?: string;
389
399
  }
390
400
  /**
391
401
  * The fields `updateElement` may write.
@@ -399,7 +409,7 @@ interface TimelineElement {
399
409
  * write has to be able to land here or the header goes on rendering whatever it
400
410
  * parsed at load.
401
411
  */
402
- type TimelineElementPatch = Partial<Pick<TimelineElement, "start" | "duration" | "track" | "zIndex" | "hasExplicitZIndex" | "playbackStart" | "hidden" | "audioGroup" | "audioGroupLabel" | "audioGroupVolume" | "audioGroupHidden" | "audioGroupFxChain" | "audioGroupAutomation">>;
412
+ type TimelineElementPatch = Partial<Pick<TimelineElement, "start" | "duration" | "track" | "zIndex" | "hasExplicitZIndex" | "playbackStart" | "hidden" | "audioGroup" | "audioGroupLabel" | "audioGroupVolume" | "audioGroupHidden" | "audioGroupFxChain" | "audioGroupAutomation" | "text">>;
403
413
  /**
404
414
  * The `data-*` state an expanded sub-composition child needs but cannot reach.
405
415
  *
@@ -805,7 +815,7 @@ interface TimelineStackingReorderIntent {
805
815
  zIndexChanges: TimelineStackingZIndexChange[];
806
816
  }
807
817
 
808
- type BlockedTimelineEditIntent = "move" | "resize-start" | "resize-end";
818
+ type BlockedTimelineEditIntent = "move" | "edit-many" | "resize-start" | "resize-end";
809
819
  interface TimelineRangeSelection {
810
820
  start: number;
811
821
  end: number;
@@ -926,9 +936,12 @@ type RuntimeTweenChange = {
926
936
  props: SetPatchProps;
927
937
  };
928
938
 
939
+ type KeyframeUsageAction = "add" | "convert" | "remove_all" | "reset";
940
+
929
941
  interface MutationResult {
930
942
  ok: boolean;
931
943
  changed?: boolean;
944
+ mutationChanges?: boolean[];
932
945
  parsed?: ParsedGsap;
933
946
  before?: string;
934
947
  after?: string;
@@ -936,6 +949,9 @@ interface MutationResult {
936
949
  }
937
950
  interface CommitMutationOptions {
938
951
  label: string;
952
+ keyframeTelemetry?: boolean;
953
+ keyframeAction?: KeyframeUsageAction;
954
+ keyframeProperty?: string;
939
955
  /** Observe the durable writer result without duplicating the request path. */
940
956
  onResult?: (result: MutationResult) => void;
941
957
  coalesceKey?: string;
@@ -1143,6 +1159,7 @@ interface TimelineEditCallbacks {
1143
1159
  onRazorSplit?: (element: TimelineElement, splitTime: number) => Promise<void> | void;
1144
1160
  onRazorSplitAll?: (splitTime: number) => Promise<void> | void;
1145
1161
  onFreezeFrame?: (element: TimelineElement, time: number) => Promise<void> | void;
1162
+ clipMenuTools?: boolean;
1146
1163
  onNotice?: (message: string, tone?: "error" | "info") => void;
1147
1164
  onDeleteKeyframe?: (elementId: string, keyframe: TimelineKeyframeTarget) => void;
1148
1165
  onDeleteAllKeyframes?: (element: TimelineElement, animationId?: string) => void;
@@ -2015,9 +2032,31 @@ interface PreviewCompositionSize {
2015
2032
  height: number;
2016
2033
  }
2017
2034
 
2018
- interface NLEPreviewProps {
2035
+ interface CompositionLevel {
2036
+ /** Unique id — "master" or composition file path */
2037
+ id: string;
2038
+ /** Display label — "Master" or filename without extension */
2039
+ label: string;
2040
+ /** Preview URL for this composition level */
2041
+ previewUrl: string;
2042
+ }
2043
+ interface CompositionBreadcrumbProps {
2044
+ stack: CompositionLevel[];
2045
+ onNavigate: (index: number) => void;
2046
+ }
2047
+ declare function CompositionBreadcrumb({ stack, onNavigate }: CompositionBreadcrumbProps): react_jsx_runtime.JSX.Element | null;
2048
+
2049
+ interface NLEContextValue {
2019
2050
  projectId: string;
2020
- iframeRef: RefObject<HTMLIFrameElement | null>;
2051
+ iframeRef: React.MutableRefObject<HTMLIFrameElement | null>;
2052
+ play: () => void;
2053
+ pause: () => void;
2054
+ togglePlay: () => void;
2055
+ seek: (time: number, options?: {
2056
+ keepPlaying?: boolean;
2057
+ follow?: boolean;
2058
+ }) => boolean;
2059
+ refreshPlayer: () => void;
2021
2060
  onIframeLoad: () => void;
2022
2061
  previewSlots: PreviewIframeSlot[];
2023
2062
  onShadowIframeLoad: (gen: number) => void;
@@ -2025,6 +2064,29 @@ interface NLEPreviewProps {
2025
2064
  onShadowError: (gen: number, message: string) => void;
2026
2065
  setShadowIframeNode: (node: HTMLIFrameElement | null) => void;
2027
2066
  resetPreviewSlots: () => void;
2067
+ containerRef: React.MutableRefObject<HTMLDivElement | null>;
2068
+ compositionStack: CompositionLevel[];
2069
+ updateCompositionStack: React.Dispatch<React.SetStateAction<CompositionLevel[]>>;
2070
+ handleNavigateComposition: (index: number) => void;
2071
+ handleDrillDown: (element: TimelineElement) => void;
2072
+ compIdToSrc: Map<string, string>;
2073
+ compositionLoading: boolean;
2074
+ setCompositionLoading: (loading: boolean) => void;
2075
+ timelineDisabled: boolean;
2076
+ timelineSessionEpoch: number;
2077
+ hasLoadedOnceRef: React.MutableRefObject<boolean>;
2078
+ previewCompositionSize: {
2079
+ width: number;
2080
+ height: number;
2081
+ } | null;
2082
+ setPreviewCompositionSize: (size: {
2083
+ width: number;
2084
+ height: number;
2085
+ } | null) => void;
2086
+ }
2087
+
2088
+ interface NLEPreviewProps extends Pick<NLEContextValue, "projectId" | "onIframeLoad" | "previewSlots" | "onShadowIframeLoad" | "onShadowReadyChange" | "onShadowError" | "setShadowIframeNode" | "resetPreviewSlots"> {
2089
+ iframeRef: RefObject<HTMLIFrameElement | null>;
2028
2090
  onCompositionLoadingChange?: (loading: boolean) => void;
2029
2091
  portrait?: boolean;
2030
2092
  directUrl?: string;
@@ -2044,20 +2106,6 @@ interface ShortcutsButtonProps {
2044
2106
  }
2045
2107
  declare function ShortcutsButton({ sections, disabled, onSeek }: ShortcutsButtonProps): react_jsx_runtime.JSX.Element;
2046
2108
 
2047
- interface CompositionLevel {
2048
- /** Unique id — "master" or composition file path */
2049
- id: string;
2050
- /** Display label — "Master" or filename without extension */
2051
- label: string;
2052
- /** Preview URL for this composition level */
2053
- previewUrl: string;
2054
- }
2055
- interface CompositionBreadcrumbProps {
2056
- stack: CompositionLevel[];
2057
- onNavigate: (index: number) => void;
2058
- }
2059
- declare function CompositionBreadcrumb({ stack, onNavigate }: CompositionBreadcrumbProps): react_jsx_runtime.JSX.Element | null;
2060
-
2061
2109
  interface UseCompositionStackOptions {
2062
2110
  projectId: string;
2063
2111
  activeCompositionPath?: string | null;
@@ -2226,6 +2274,21 @@ declare function useRenderClipContent({ projectIdRef, compIdToSrc, activePreview
2226
2274
  label: string;
2227
2275
  }, context?: TimelineClipRenderContext) => ReactNode;
2228
2276
 
2277
+ interface UseThumbnailStillOptions {
2278
+ sessionEpoch?: number;
2279
+ priority?: ThumbnailPriority;
2280
+ }
2281
+ type ThumbnailStill = {
2282
+ status: "loading";
2283
+ } | {
2284
+ status: "ready";
2285
+ url: string;
2286
+ } | {
2287
+ status: "failed";
2288
+ };
2289
+ /** A host picture's server still through the thumbnail scheduler, so it yields to a preview reload. */
2290
+ declare function useThumbnailStill(url: string | null, projectId: string, { sessionEpoch, priority }?: UseThumbnailStillOptions): ThumbnailStill;
2291
+
2229
2292
  interface DomEditCompositionRect {
2230
2293
  left: number;
2231
2294
  top: number;
@@ -2293,6 +2356,11 @@ interface SourceEditorProps {
2293
2356
  }
2294
2357
  declare const SourceEditor: react.NamedExoticComponent<SourceEditorProps>;
2295
2358
 
2359
+ interface GeometryCommitResult {
2360
+ ok: true;
2361
+ changed: boolean;
2362
+ }
2363
+
2296
2364
  /**
2297
2365
  * Edit callbacks shared by GsapAnimationSection and each AnimationCard it
2298
2366
  * renders. Extracted so the two prop interfaces don't duplicate the (large)
@@ -2391,14 +2459,14 @@ interface PropertyPanelProps {
2391
2459
  y: number;
2392
2460
  }, route?: {
2393
2461
  plainTranslate: boolean;
2394
- }) => void | Promise<void>;
2462
+ }) => void | Promise<void | GeometryCommitResult>;
2395
2463
  onSetManualSize: (element: DomEditSelection, next: {
2396
2464
  width: number;
2397
2465
  height: number;
2398
- }) => void | Promise<void>;
2466
+ }) => void | Promise<void | GeometryCommitResult>;
2399
2467
  onSetManualRotation: (element: DomEditSelection, next: {
2400
2468
  angle: number;
2401
- }) => void | Promise<void>;
2469
+ }) => void | Promise<void | GeometryCommitResult>;
2402
2470
  onSetText: (value: string, fieldKey?: string) => void;
2403
2471
  onSetTextFieldStyle: (fieldKey: string, property: string, value: string) => void;
2404
2472
  onPreviewTextFieldStyle?: (fieldKey: string, property: string, value: string) => void;
@@ -2711,6 +2779,7 @@ interface RecordEditInput$4 {
2711
2779
  interface ApplyCallbacks {
2712
2780
  readFile: (path: string) => Promise<string>;
2713
2781
  serialize?: <T>(paths: readonly string[], task: () => Promise<T>) => Promise<T>;
2782
+ claimedAfter?: number;
2714
2783
  }
2715
2784
  interface UsePersistentEditHistoryOptions {
2716
2785
  projectId: string | null;
@@ -2749,6 +2818,7 @@ declare function usePersistentEditHistory({ projectId }: UsePersistentEditHistor
2749
2818
  id: string;
2750
2819
  files: RestoreFiles;
2751
2820
  } | null;
2821
+ claims: () => number;
2752
2822
  noteOutsideChange: () => void;
2753
2823
  };
2754
2824
 
@@ -2793,7 +2863,7 @@ declare function useTimelineEditing({ projectId, activeCompPath, timelineElement
2793
2863
  handleTimelineAssetDrop: (assetPath: string, placement: TimelineDropPlacement, durationOverride?: number | undefined) => Promise<void>;
2794
2864
  handleTimelineFileDrop: (files: File[], placement?: TimelineDropPlacement | undefined) => Promise<void>;
2795
2865
  handleTimelineCompositionDrop: (sourcePath: string, placement: Pick<TimelineElement, "track" | "start">) => Promise<void>;
2796
- handleBlockedTimelineEdit: (element: TimelineElement) => void;
2866
+ handleBlockedTimelineEdit: (element: TimelineElement, intent: BlockedTimelineEditIntent) => void;
2797
2867
  handleTimelineGroupMove: (changes: TimelineGroupMoveChange[], options?: TimelineGroupCommitOptions | undefined) => Promise<void>;
2798
2868
  handleTimelineGroupResize: (changes: TimelineGroupResizeChange[], options?: TimelineGroupCommitOptions | undefined) => Promise<void>;
2799
2869
  restoreLiveLanes: (restore: Parameters<(restore: LiveLaneRestore) => void>[0]) => void;
@@ -2830,7 +2900,9 @@ type StudioSaveDrainResult<Failure = unknown> = {
2830
2900
 
2831
2901
  type StudioPendingEditsDrainResult = StudioSaveDrainResult;
2832
2902
  declare function revertNewestStudioPendingEdit(): (() => void) | null;
2833
- declare function flushStudioPendingEdits(): Promise<StudioPendingEditsDrainResult>;
2903
+ declare function flushStudioPendingEdits({ onlyCurrent, }?: {
2904
+ onlyCurrent?: boolean | undefined;
2905
+ }): Promise<StudioPendingEditsDrainResult>;
2834
2906
 
2835
2907
  interface HistoryResult {
2836
2908
  ok: boolean;
@@ -2845,6 +2917,7 @@ interface HistoryResult {
2845
2917
  interface HistoryFileCallbacks {
2846
2918
  readFile: (path: string) => Promise<string>;
2847
2919
  serialize?: <T>(paths: readonly string[], task: () => Promise<T>) => Promise<T>;
2920
+ claimedAfter?: number;
2848
2921
  }
2849
2922
  interface EditHistoryHandle {
2850
2923
  undo: (cb: HistoryFileCallbacks) => Promise<HistoryResult>;
@@ -2853,6 +2926,7 @@ interface EditHistoryHandle {
2853
2926
  id: string;
2854
2927
  files: RestoreFiles;
2855
2928
  } | null;
2929
+ claims?: () => number;
2856
2930
  state: {
2857
2931
  undo: ReadonlyArray<{
2858
2932
  createdAt: number;
@@ -2863,7 +2937,7 @@ interface EditHistoryHandle {
2863
2937
  };
2864
2938
  }
2865
2939
  interface UseEditHistoryActionsOptions {
2866
- editHistory: Pick<EditHistoryHandle, "undo" | "redo" | "predict">;
2940
+ editHistory: Pick<EditHistoryHandle, "undo" | "redo" | "predict" | "claims">;
2867
2941
  readOptionalProjectFile: (path: string) => Promise<string>;
2868
2942
  readProjectFile: (path: string) => Promise<string>;
2869
2943
  writeProjectFile: (path: string, content: string) => Promise<void>;
@@ -3190,6 +3264,10 @@ interface SnapGuideOverlayProps {
3190
3264
  }
3191
3265
  declare const SnapGuideOverlay: react.NamedExoticComponent<SnapGuideOverlayProps>;
3192
3266
 
3267
+ interface DomSelectionResult {
3268
+ changed: boolean;
3269
+ count: number;
3270
+ }
3193
3271
  interface ApplyDomSelectionOptions {
3194
3272
  revealPanel?: boolean;
3195
3273
  additive?: boolean;
@@ -3250,6 +3328,7 @@ type DomEditCommitDeclineReason = "no-project" | "no-selection" | "geometry-prop
3250
3328
  type DomEditCommitOutcome = {
3251
3329
  ok: true;
3252
3330
  persistence?: DomEditPersistOutcome;
3331
+ changed?: boolean;
3253
3332
  } | {
3254
3333
  ok: false;
3255
3334
  reason: DomEditCommitDeclineReason;
@@ -3273,6 +3352,15 @@ interface RecordEditInput$2 {
3273
3352
  }>;
3274
3353
  }
3275
3354
 
3355
+ interface DomGroupMove {
3356
+ selection: DomEditSelection;
3357
+ /** Composition px: the element's box moves by exactly this in the film. */
3358
+ delta: {
3359
+ x: number;
3360
+ y: number;
3361
+ };
3362
+ }
3363
+
3276
3364
  interface UseDomEditSessionParams extends DomEditTimelineParams {
3277
3365
  compositionLoading: boolean;
3278
3366
  showToast: (message: string, tone?: "error" | "info") => void;
@@ -3326,7 +3414,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3326
3414
  clearDomSelection: () => void;
3327
3415
  refreshDomEditSelectionFromPreview: (selection: DomEditSelection) => Promise<void>;
3328
3416
  handleDomStyleCommit: (property: string, value: string) => Promise<DomEditCommitOutcome>;
3329
- handleDomStyleCommitForSelection: (selection: DomEditSelection, property: string, value: string) => Promise<DomEditCommitOutcome>;
3417
+ handleDomStyleCommitForSelection: (selection: DomEditSelection, propertyOrStylesAsOnePatch: string | Record<string, string>, value?: string) => Promise<DomEditCommitOutcome>;
3330
3418
  handleDomAttributeCommit: (attr: string, value: string) => Promise<void>;
3331
3419
  handleDomAttributeLiveCommit: (attr: string, value: string | null, onSettled?: (ok: boolean) => void, live?: {
3332
3420
  previewOnly?: boolean;
@@ -3338,8 +3426,11 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3338
3426
  handleDomPathOffsetCommit: (selection: DomEditSelection, next: {
3339
3427
  x: number;
3340
3428
  y: number;
3341
- }, modifiers?: MoveCommitOptions) => Promise<void>;
3342
- handleDomGroupPathOffsetCommit: (updates: DomEditGroupPathOffsetCommit[]) => Promise<void>;
3429
+ }, modifiers?: MoveCommitOptions) => Promise<GeometryCommitResult | undefined>;
3430
+ handleDomGroupPathOffsetCommit: (updates: DomEditGroupPathOffsetCommit[], options?: {
3431
+ refusalToast?: boolean;
3432
+ }) => Promise<GeometryCommitResult>;
3433
+ handleDomGroupMoveBy: (moves: DomGroupMove[]) => Promise<void>;
3343
3434
  handleDomZIndexReorderCommit: (entries: Array<{
3344
3435
  element: HTMLElement;
3345
3436
  zIndex: number;
@@ -3355,9 +3446,9 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3355
3446
  }, offset?: {
3356
3447
  x: number;
3357
3448
  y: number;
3358
- }, restore?: () => void) => Promise<void>;
3359
- handleDomRotationCommit: (selection: DomEditSelection, next: RotationCommit) => Promise<void>;
3360
- handleDomManualEditsReset: (selection: DomEditSelection) => Promise<void>;
3449
+ }, restore?: () => void) => Promise<GeometryCommitResult>;
3450
+ handleDomRotationCommit: (selection: DomEditSelection, next: RotationCommit) => Promise<GeometryCommitResult | undefined>;
3451
+ handleDomManualEditsReset: (selection: DomEditSelection) => Promise<DomEditPersistOutcome | undefined>;
3361
3452
  handleDomTextCommit: (value: string, fieldKey?: string) => Promise<DomEditCommitOutcome>;
3362
3453
  handleDomTextCommitForSelection: (selection: DomEditSelection, value: string, fieldKey?: string) => Promise<DomEditCommitOutcome>;
3363
3454
  handleDomRichTextCommit: ({ element, html, previousHtml }: InlineTextEditCommit) => Promise<void>;
@@ -3378,7 +3469,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3378
3469
  buildDomSelectionFromTarget: (target: HTMLElement, options?: ResolveDomSelectionOptions) => Promise<DomEditSelection | null>;
3379
3470
  buildDomSelectionForTimelineElement: (element: TimelineElement) => Promise<DomEditSelection | null>;
3380
3471
  updateDomEditHoverSelection: (selection: DomEditSelection | null) => void;
3381
- applyMarqueeSelection: (selections: DomEditSelection[], additive: boolean) => void;
3472
+ applyMarqueeSelection: (selections: DomEditSelection[], additive: boolean) => DomSelectionResult;
3382
3473
  resolveImportedFontAsset: (fontFamilyValue: string) => ImportedFontAsset | null;
3383
3474
  setAgentModalOpen: react.Dispatch<react.SetStateAction<boolean>>;
3384
3475
  setAgentPromptSelectionContext: react.Dispatch<react.SetStateAction<string | undefined>>;
@@ -3410,7 +3501,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3410
3501
  to: number;
3411
3502
  }>, selectionOverride?: DomEditSelection | null) => Promise<boolean>;
3412
3503
  handleGsapConvertToKeyframes: (animId: string, resolvedFromValues?: Record<string, number | string>, duration?: number, commitOverrides?: Partial<CommitMutationOptions>, selectionOverride?: DomEditSelection | null) => Promise<void>;
3413
- handleGsapRemoveAllKeyframes: (animId: string, selectionOverride?: DomEditSelection | null) => Promise<boolean>;
3504
+ handleGsapRemoveAllKeyframes: (animId: string, selectionOverride?: DomEditSelection | null, telemetry?: boolean) => Promise<boolean>;
3414
3505
  handleResetSelectedElementKeyframes: () => boolean;
3415
3506
  handleUpdateKeyframeEase: (animationId: string, percentage: number, ease: string) => void;
3416
3507
  handleUpdateSegmentEase: (targets: AnimationKeyframeTarget[], ease: string) => void;
@@ -3446,10 +3537,7 @@ declare function useDomEditSession({ projectId, activeCompPath, compIdToSrc, cap
3446
3537
  handleUnroll: () => void;
3447
3538
  invalidateGsapCache: () => void;
3448
3539
  previewIframeRef: react.MutableRefObject<HTMLIFrameElement | null>;
3449
- commitMutation: (mutation: Record<string, unknown>, options: {
3450
- label: string;
3451
- softReload?: boolean;
3452
- }) => Promise<void>;
3540
+ commitMutation: (mutation: Record<string, unknown>, options: CommitMutationOptions, selection?: DomEditSelection | null) => Promise<void>;
3453
3541
  };
3454
3542
 
3455
3543
  /** The one source for which preview is on screen: the host's iframe, then each reload promoted in its place. */
@@ -3520,7 +3608,7 @@ type DomEditValue = ReturnType<typeof useDomEditSession>;
3520
3608
  interface DomEditSelectionValue extends Pick<DomEditValue, "domEditSelection" | "domEditGroupSelections" | "domEditHoverSelection" | "activeGroupElement" | "domEditSelectionRef" | "selectedGsapAnimations" | "gsapMultipleTimelines" | "gsapUnsupportedTimelinePattern" | "agentModalOpen" | "agentModalAnchorPoint" | "copiedAgentPrompt" | "agentPromptSelectionContext"> {
3521
3609
  }
3522
3610
  declare function useDomEditSelectionContext(): DomEditSelectionValue;
3523
- declare function DomEditProvider({ value: { domEditSelection, domEditGroupSelections, domEditHoverSelection, agentModalOpen, agentModalAnchorPoint, copiedAgentPrompt, agentPromptSelectionContext, domEditSelectionRef, handleTimelineElementSelect, handlePreviewCanvasMouseDown, handlePreviewCanvasPointerMove, handlePreviewCanvasPointerLeave, applyDomSelection, clearDomSelection, refreshDomEditSelectionFromPreview, handleDomStyleCommit, handleDomStyleCommitForSelection, handleDomAttributeCommit, handleDomAttributeLiveCommit, handleDomAttributeQuietCommit, handleDomHtmlAttributeCommit, handleDomAttributesCommit, handleDomAttributeBatchCommit, handleDomPathOffsetCommit, handleDomGroupPathOffsetCommit, handleDomZIndexReorderCommit, handleDomBoxSizeCommit, handleDomRotationCommit, handleDomManualEditsReset, handleDomTextCommit, handleDomTextCommitForSelection, handleDomRichTextCommit, handleDomTextFieldStyleCommit, handleDomAddTextField, handleDomRemoveTextField, getGsapAnimationsForSelection, handleAskAgent, handleAgentModalSubmit, handleBlockedDomMove, handleDomManualDragStart, handleDomEditElementDelete, handleGroupSelection, handleUngroupSelection, setActiveGroupElement, activeGroupElement, buildDomSelectionFromTarget, buildDomSelectionForTimelineElement, updateDomEditHoverSelection, resolveImportedFontAsset, setAgentModalOpen, setAgentPromptSelectionContext, setAgentModalAnchorPoint, selectedGsapAnimations, gsapMultipleTimelines, gsapUnsupportedTimelinePattern, handleGsapUpdateProperty, handleGsapUpdateMeta, handleGsapDeleteAnimation, handleGsapDeleteAllForElement, handleGsapAddAnimation, handleGsapAddProperty, handleGsapRemoveProperty, handleGsapUpdateFromProperty, handleGsapAddFromProperty, handleGsapRemoveFromProperty, handleGsapAddKeyframe, handleGsapAddKeyframeBatch, handleGsapRemoveKeyframe, handleGsapMoveKeyframeToPlayhead, handleGsapMoveKeyframe, handleGsapResizeKeyframedTween, handleGsapConvertToKeyframes, handleGsapRemoveAllKeyframes, handleResetSelectedElementKeyframes, commitAnimatedProperty, commitAnimatedProperties, handleSetArcPath, handleUpdateArcSegment, handleUnroll, invalidateGsapCache, previewIframeRef, commitMutation, applyMarqueeSelection, handleUpdateKeyframeEase, handleUpdateSegmentEase, handleSetAllKeyframeEases, }, children, }: {
3611
+ declare function DomEditProvider({ value: { domEditSelection, domEditGroupSelections, domEditHoverSelection, agentModalOpen, agentModalAnchorPoint, copiedAgentPrompt, agentPromptSelectionContext, domEditSelectionRef, handleTimelineElementSelect, handlePreviewCanvasMouseDown, handlePreviewCanvasPointerMove, handlePreviewCanvasPointerLeave, applyDomSelection, clearDomSelection, refreshDomEditSelectionFromPreview, handleDomStyleCommit, handleDomStyleCommitForSelection, handleDomAttributeCommit, handleDomAttributeLiveCommit, handleDomAttributeQuietCommit, handleDomHtmlAttributeCommit, handleDomAttributesCommit, handleDomAttributeBatchCommit, handleDomPathOffsetCommit, handleDomGroupPathOffsetCommit, handleDomGroupMoveBy, handleDomZIndexReorderCommit, handleDomBoxSizeCommit, handleDomRotationCommit, handleDomManualEditsReset, handleDomTextCommit, handleDomTextCommitForSelection, handleDomRichTextCommit, handleDomTextFieldStyleCommit, handleDomAddTextField, handleDomRemoveTextField, getGsapAnimationsForSelection, handleAskAgent, handleAgentModalSubmit, handleBlockedDomMove, handleDomManualDragStart, handleDomEditElementDelete, handleGroupSelection, handleUngroupSelection, setActiveGroupElement, activeGroupElement, buildDomSelectionFromTarget, buildDomSelectionForTimelineElement, updateDomEditHoverSelection, resolveImportedFontAsset, setAgentModalOpen, setAgentPromptSelectionContext, setAgentModalAnchorPoint, selectedGsapAnimations, gsapMultipleTimelines, gsapUnsupportedTimelinePattern, handleGsapUpdateProperty, handleGsapUpdateMeta, handleGsapDeleteAnimation, handleGsapDeleteAllForElement, handleGsapAddAnimation, handleGsapAddProperty, handleGsapRemoveProperty, handleGsapUpdateFromProperty, handleGsapAddFromProperty, handleGsapRemoveFromProperty, handleGsapAddKeyframe, handleGsapAddKeyframeBatch, handleGsapRemoveKeyframe, handleGsapMoveKeyframeToPlayhead, handleGsapMoveKeyframe, handleGsapResizeKeyframedTween, handleGsapConvertToKeyframes, handleGsapRemoveAllKeyframes, handleResetSelectedElementKeyframes, commitAnimatedProperty, commitAnimatedProperties, handleSetArcPath, handleUpdateArcSegment, handleUnroll, invalidateGsapCache, previewIframeRef, commitMutation, applyMarqueeSelection, handleUpdateKeyframeEase, handleUpdateSegmentEase, handleSetAllKeyframeEases, }, children, }: {
3524
3612
  value: DomEditValue;
3525
3613
  children: ReactNode;
3526
3614
  }): react_jsx_runtime.JSX.Element;
@@ -3620,7 +3708,7 @@ interface DomEditOverlayProps {
3620
3708
  onStyleCommit?: (property: string, value: string) => Promise<unknown> | void;
3621
3709
  recordingState?: GestureRecordingState;
3622
3710
  onToggleRecording?: () => void;
3623
- onMarqueeSelect?: (selections: DomEditSelection[], additive: boolean) => void;
3711
+ onMarqueeSelect?: (selections: DomEditSelection[], additive: boolean) => DomSelectionResult | void;
3624
3712
  /**
3625
3713
  * Delete the selected canvas element.
3626
3714
  * Wire to handleDomEditElementDelete from useDomEditActionsContext —
@@ -3688,6 +3776,24 @@ declare function useDomStyleCommit({ projectId, iframeRef, writeProjectFile, rec
3688
3776
  waitForPendingSaves: () => Promise<DomEditSaveDrainResult>;
3689
3777
  };
3690
3778
 
3779
+ declare function ColorField({ label, value, disabled, onReset, flat, mixed, onPreview, onCommit, }: {
3780
+ label: string;
3781
+ value: string;
3782
+ disabled?: boolean;
3783
+ onReset?: () => void;
3784
+ flat?: boolean;
3785
+ mixed?: boolean;
3786
+ onPreview?: (nextValue: string) => void;
3787
+ onCommit: (nextValue: string) => void;
3788
+ }): react_jsx_runtime.JSX.Element;
3789
+
3790
+ declare function GradientField({ value, fallbackColor, disabled, onCommit, }: {
3791
+ value: string;
3792
+ fallbackColor: string | undefined;
3793
+ disabled?: boolean;
3794
+ onCommit: (nextValue: string) => void;
3795
+ }): react_jsx_runtime.JSX.Element;
3796
+
3691
3797
  /**
3692
3798
  * Studio's `Player` must show the project, with `beginTimelineSession(projectId)` run before it
3693
3799
  * mounts; drain `waitForPendingSaves` before switching projects.
@@ -3722,7 +3828,7 @@ interface MarqueeGesturesDeps<T = DomEditSelection> {
3722
3828
  iframeRef: React.RefObject<HTMLIFrameElement | null>;
3723
3829
  overlayRef: React.RefObject<HTMLDivElement | null>;
3724
3830
  activeCompositionPathRef: React.RefObject<string | null>;
3725
- onMarqueeSelectRef: React.RefObject<((selections: T[], additive: boolean) => void) | undefined>;
3831
+ onMarqueeSelectRef: React.RefObject<((selections: T[], additive: boolean) => DomSelectionResult | void) | undefined>;
3726
3832
  /** Turns the elements a drag touched into picks; without it, Studio's edit selections. */
3727
3833
  resolveHits?: (elements: HTMLElement[]) => T[] | Promise<T[]>;
3728
3834
  selectionRef?: React.RefObject<DomEditSelection | null>;
@@ -4095,4 +4201,4 @@ declare function buildStudioTools(depsRef: {
4095
4201
  readonly current: StudioAgentToolsDeps;
4096
4202
  }): ModelContextTool[];
4097
4203
 
4098
- export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, Dock, type DockController, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomEditZOrder, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FadeEdge, type FadeHandleBox, type FadeHandleClipBox, type FfmpegStatus, FileTree, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, type ModelContextTool, NLEPreview, type PanelId, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, type PreviewPromotion, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, ShortcutsButton, type ShortcutsButtonProps, type SnapContext, type SnapEdge, type SnapGuide, SnapGuideOverlay, type SnapGuideOverlayProps, type SnapGuidesState, type Rect as SnapRect, type SnapResult, type SnapTarget, SnapToolbar, SourceEditor, type SpacingGuide, type StartRenderOptions, type StudioAgentToolsDeps, StudioApp, StudioFileConflictError, type StudioLookSnapshot, type StudioPendingEditsDrainResult, TRACK_H, type ThumbnailPriority, Timeline, TimelineClipMenu, type TimelineClipMenuItem, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineHistoryButtons, type TimelineHistoryButtonsProps, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, TimelineToolbar, type TimelineToolbarProps, type TimelineTrackPadding, type TimelineZIndexReorderCommit, type ToolResult, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, type ZOrderAction, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, buildStudioTools, collectSnapContext, collectStudioLookScene, displayTrackOrder, extractSnapTargets, fadeHandleBoxes, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, openAudioGainDialog, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, revertNewestStudioPendingEdit, snapEngagedForTravel, useAudioGainDialogStore, useAudioMetersVisible, useClipboard, useCompositionStack, useDockLayoutStore, useDomEditSelectionContext, useDomEditSession, useDomEditZOrder, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useLivePreviewIframe, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewIframeStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
4204
+ export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioMeterStrip, type AudioMeterStripProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, type CanEditTimelineElement, ColorField, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ConnectedDomEditOverlay, type ConnectedDomEditOverlayProps, DEFAULT_SHORTCUT_SECTIONS, Dock, type DockController, type DomEditCapabilities, type DomEditCommitDeclineReason, type DomEditCommitOutcome, type DomEditGroupPathOffsetCommit, DomEditOverlay, type DomEditOverlayProps, DomEditProvider, type DomEditSelection, type DomEditZOrder, type DomGeometryCommits, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FadeEdge, type FadeHandleBox, type FadeHandleClipBox, type FfmpegStatus, FileTree, GradientField, GridOverlay, ImageThumbnail, type ImageThumbnailProps, type MarqueeGestures, type MarqueeGesturesDeps, MarqueeOverlay, type MarqueeOverlayProps, type Rect$1 as MarqueeRect, type ModelContextTool, NLEPreview, type PanelId, type PatchOperation, type PersistedRenderSettings, type PickedElement, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, type PreviewPromotion, PreviewReadOnlyProvider, type PreviewSnapPreferences, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, SNAP_THRESHOLD_PX, type ShortcutHint, type ShortcutSection, ShortcutsButton, type ShortcutsButtonProps, type SnapContext, type SnapEdge, type SnapGuide, SnapGuideOverlay, type SnapGuideOverlayProps, type SnapGuidesState, type Rect as SnapRect, type SnapResult, type SnapTarget, SnapToolbar, SourceEditor, type SpacingGuide, type StartRenderOptions, type StudioAgentToolsDeps, StudioApp, StudioFileConflictError, type StudioLookSnapshot, type StudioPendingEditsDrainResult, TRACK_H, type ThumbnailPriority, type ThumbnailStill, Timeline, TimelineClipMenu, type TimelineClipMenuItem, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineHistoryButtons, type TimelineHistoryButtonsProps, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, TimelineToolbar, type TimelineToolbarProps, type TimelineTrackPadding, type TimelineZIndexReorderCommit, type ToolResult, type UseClipboardOptions, type UseDomEditSessionParams, type UseDomGeometryCommitOptions, type UseDomStyleCommitOptions, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UsePreviewPersistenceParams, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseThumbnailStillOptions, type UseTimelineEditingOptions, VideoThumbnail, type ZOrderAction, applyPatch, buildCompositionSnapTarget, buildGridSnapEdges, buildPickerAgentContextPreview, buildPickerAgentPrompt, buildStudioTools, collectSnapContext, collectStudioLookScene, displayTrackOrder, extractSnapTargets, fadeHandleBoxes, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, openAudioGainDialog, parseStyleString, persistRenderSettings, resolveDomEditSelection, resolveEquidistanceGuides, resolveGuideLineRect, resolveIframe, resolveSnapAdjustment, resolveSourceFile, revertNewestStudioPendingEdit, snapEngagedForTravel, useAudioGainDialogStore, useAudioMetersVisible, useClipboard, useCompositionStack, useDockLayoutStore, useDomEditSelectionContext, useDomEditSession, useDomEditZOrder, useDomGeometryCommit, useDomStyleCommit, useEditHistoryActions, useElementPicker, useLivePreviewIframe, useMarqueeGestures, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewIframeStore, usePreviewOverlayContext, usePreviewPersistence, useProjectFileWriter, useRenderClipContent, useRenderQueue, useThumbnailStill, useTimelineContext, useTimelineEditing, useTimelinePlayer };
package/dist/index.html CHANGED
@@ -14,8 +14,8 @@
14
14
  document.documentElement.dataset.theme = "paper";
15
15
  }
16
16
  </script>
17
- <script type="module" crossorigin src="/assets/index-Dz7doz9l.js"></script>
18
- <link rel="stylesheet" crossorigin href="/assets/index-BYnsJnJV.css">
17
+ <script type="module" crossorigin src="/assets/index-DYNaXPVf.js"></script>
18
+ <link rel="stylesheet" crossorigin href="/assets/index-t1LH6H5H.css">
19
19
  </head>
20
20
  <body>
21
21
  <div data-hf-id="hf-aph5" id="root"></div>