@hyperframes/studio 0.7.86 → 0.7.88

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 (93) hide show
  1. package/dist/assets/{hyperframes-player-BL3qfGEQ.js → hyperframes-player-B03_wTTS.js} +1 -1
  2. package/dist/assets/{index-B5QGai9B.js → index-BNshnsvB.js} +1 -1
  3. package/dist/assets/index-BXkzp_OU.css +1 -0
  4. package/dist/assets/{index-C0Vr8jjc.js → index-D7KcL_t3.js} +1 -1
  5. package/dist/assets/{index-CISVI7UC.js → index-DbY124Po.js} +221 -221
  6. package/dist/index.d.ts +14 -6
  7. package/dist/index.html +2 -2
  8. package/dist/index.js +6265 -4922
  9. package/dist/index.js.map +1 -1
  10. package/package.json +11 -8
  11. package/src/components/TimelineToolbar.tsx +14 -5
  12. package/src/components/nle/NLEContext.tsx +4 -1
  13. package/src/components/nle/TimelinePane.tsx +2 -0
  14. package/src/hooks/studioTestMode.test.ts +35 -0
  15. package/src/hooks/studioTestMode.ts +23 -0
  16. package/src/hooks/useGestureRecording.test.tsx +120 -0
  17. package/src/hooks/useGestureRecording.ts +49 -40
  18. package/src/hooks/useStudioTestHooks.test.tsx +161 -0
  19. package/src/hooks/useStudioTestHooks.ts +54 -7
  20. package/src/player/components/BeatStrip.tsx +21 -5
  21. package/src/player/components/CompositionThumbnail.test.ts +96 -2
  22. package/src/player/components/CompositionThumbnail.tsx +29 -16
  23. package/src/player/components/Timeline.test.ts +104 -0
  24. package/src/player/components/Timeline.tsx +141 -131
  25. package/src/player/components/Timeline.virtualization.test.tsx +400 -0
  26. package/src/player/components/TimelineCanvas.tsx +18 -10
  27. package/src/player/components/TimelineClip.tsx +4 -0
  28. package/src/player/components/TimelineClipDiamonds.test.tsx +85 -5
  29. package/src/player/components/TimelineClipDiamonds.tsx +53 -13
  30. package/src/player/components/TimelineLanes.test.tsx +15 -4
  31. package/src/player/components/TimelineLanes.tsx +81 -26
  32. package/src/player/components/TimelinePropertyLanes.test.tsx +16 -20
  33. package/src/player/components/TimelinePropertyLanes.tsx +1 -0
  34. package/src/player/components/TimelineRuler.tsx +21 -5
  35. package/src/player/components/TimelineTrackRow.tsx +46 -0
  36. package/src/player/components/TimelineTypes.ts +2 -0
  37. package/src/player/components/timelineClipDragGestureLifecycle.test.ts +97 -0
  38. package/src/player/components/timelineClipDragGestureLifecycle.ts +261 -0
  39. package/src/player/components/timelineDiamondTypes.ts +5 -0
  40. package/src/player/components/timelineDragDrop.ts +5 -5
  41. package/src/player/components/timelineEditing.test.ts +32 -0
  42. package/src/player/components/timelineEditing.ts +47 -5
  43. package/src/player/components/timelineFocusIdentity.test.ts +21 -0
  44. package/src/player/components/timelineFocusIdentity.ts +21 -0
  45. package/src/player/components/timelineLaneProps.ts +9 -0
  46. package/src/player/components/timelineLayout.test.ts +59 -0
  47. package/src/player/components/timelineLayout.ts +202 -176
  48. package/src/player/components/timelineRowVirtualizationFlag.test.ts +23 -0
  49. package/src/player/components/timelineRowVirtualizationFlag.ts +10 -0
  50. package/src/player/components/timelineRulerGeometry.ts +142 -0
  51. package/src/player/components/timelineViewModel.ts +44 -0
  52. package/src/player/components/timelineViewportGeometry.ts +51 -0
  53. package/src/player/components/timelineZoom.test.ts +42 -28
  54. package/src/player/components/timelineZoom.ts +42 -25
  55. package/src/player/components/useTimelineActiveClips.test.ts +82 -79
  56. package/src/player/components/useTimelineActiveClips.ts +49 -55
  57. package/src/player/components/useTimelineClipDrag.ts +40 -230
  58. package/src/player/components/useTimelineClipRenderWindow.ts +95 -0
  59. package/src/player/components/useTimelineGeometry.ts +4 -11
  60. package/src/player/components/useTimelinePlayhead.ts +30 -14
  61. package/src/player/components/useTimelineRangeSelection.ts +5 -4
  62. package/src/player/components/useTimelineRangeSelectionScrub.test.tsx +3 -2
  63. package/src/player/components/useTimelineRevealClip.test.tsx +139 -0
  64. package/src/player/components/useTimelineRevealClip.ts +171 -47
  65. package/src/player/components/useTimelineRowVirtualization.ts +140 -0
  66. package/src/player/components/useTimelineScrollViewport.test.tsx +202 -0
  67. package/src/player/components/useTimelineScrollViewport.ts +87 -9
  68. package/src/player/components/useTimelineSelectionLifecycle.ts +29 -0
  69. package/src/player/components/useTimelineShiftModifier.ts +20 -0
  70. package/src/player/components/useTimelineTicks.ts +22 -0
  71. package/src/player/components/useTimelineTrackLayout.test.ts +32 -26
  72. package/src/player/components/useTimelineTrackLayout.ts +35 -18
  73. package/src/player/components/useTimelineVirtualRows.test.tsx +174 -0
  74. package/src/player/components/useTimelineVirtualRows.ts +126 -0
  75. package/src/player/hooks/timelinePlayerSync.ts +20 -0
  76. package/src/player/hooks/useTimelinePlayer.seek.test.ts +90 -51
  77. package/src/player/hooks/useTimelinePlayer.ts +8 -20
  78. package/src/player/lib/playbackScrub.ts +2 -2
  79. package/src/player/lib/timelineClipIndex.test.ts +169 -0
  80. package/src/player/lib/timelineClipIndex.ts +208 -0
  81. package/src/player/lib/timelineElementIndexes.test.ts +31 -0
  82. package/src/player/lib/timelineElementIndexes.ts +44 -0
  83. package/src/player/lib/timelinePerformanceDiagnostics.test.ts +100 -0
  84. package/src/player/lib/timelinePerformanceDiagnostics.ts +120 -0
  85. package/src/player/lib/timelinePerformanceFixture.ts +167 -0
  86. package/src/player/lib/timelineViewportBudgets.test.ts +60 -0
  87. package/src/player/lib/timelineViewportBudgets.ts +151 -0
  88. package/src/player/store/playerStore.test.ts +20 -3
  89. package/src/player/store/playerStore.ts +73 -45
  90. package/src/utils/studioHelpers.test.ts +48 -1
  91. package/src/utils/studioHelpers.ts +31 -34
  92. package/src/utils/studioUiPreferences.ts +3 -1
  93. package/dist/assets/index-D379YOKT.css +0 -1
package/dist/index.d.ts CHANGED
@@ -66,6 +66,8 @@ interface ClipManifestClip {
66
66
  assetUrl: string | null;
67
67
  }
68
68
 
69
+ type TimelineTimeDisplayMode = "time" | "frame";
70
+
69
71
  interface AnimationKeyframeTarget {
70
72
  animationId: string;
71
73
  tweenPercentage: number;
@@ -197,6 +199,10 @@ interface PlayerState extends KeyframeSlice {
197
199
  currentTime: number;
198
200
  duration: number;
199
201
  timelineReady: boolean;
202
+ /** Increments exactly once when the Studio switches to a different project. */
203
+ timelineSessionEpoch: number;
204
+ /** Project owning the current timeline session; null outside a project-scoped reset. */
205
+ timelineProjectId: string | null;
200
206
  /** True while a beat dot is being dragged — hides the playhead guideline. */
201
207
  beatDragging: boolean;
202
208
  elements: TimelineElement[];
@@ -248,18 +254,15 @@ interface PlayerState extends KeyframeSlice {
248
254
  timelineSnapEnabled: boolean;
249
255
  setTimelineSnapEnabled: (enabled: boolean) => void;
250
256
  /** Transport + ruler readout: timecode ("time") or frame number ("frame"). */
251
- timeDisplayMode: "time" | "frame";
252
- setTimeDisplayMode: (mode: "time" | "frame") => void;
257
+ timeDisplayMode: TimelineTimeDisplayMode;
258
+ setTimeDisplayMode: (mode: TimelineTimeDisplayMode) => void;
253
259
  /**
254
260
  * Pin the timeline zoom to its current visual scale before a duration-changing
255
261
  * edit, so a subsequent duration change (which recomputes fit-pps) stops
256
262
  * rescaling every clip. No-op once already pinned (mode is "manual").
257
263
  */
258
264
  pinTimelineZoom: (currentPixelsPerSecond: number, fitPixelsPerSecond: number) => void;
259
- /**
260
- * The timeline's live pixels-per-second + fit basis, published by <Timeline> on
261
- * every render. Non-reactive scratch state (never read as a render input).
262
- */
265
+ /** The timeline's live pixels-per-second + fit basis, published by <Timeline>. */
263
266
  timelinePps: number;
264
267
  timelineFitPps: number;
265
268
  setTimelineScale: (pps: number, fitPps: number) => void;
@@ -285,6 +288,9 @@ interface PlayerState extends KeyframeSlice {
285
288
  bumpZEditVersion: () => void;
286
289
  setInPoint: (time: number | null) => void;
287
290
  setOutPoint: (time: number | null) => void;
291
+ /** Owns the hard project boundary; repeated calls for one project are no-ops. */
292
+ beginTimelineSession: (projectId: string) => void;
293
+ /** Clears project data without creating a new hard-project session. */
288
294
  reset: () => void;
289
295
  /**
290
296
  * Request a seek from outside the player loop (e.g. Layers panel).
@@ -548,6 +554,8 @@ interface TimelineTheme {
548
554
  type TimelineEditOverrides = Pick<TimelineEditCallbacks, "onMoveElement" | "onMoveElements" | "onResizeElement" | "onResizeElements" | "onBlockedEditAttempt" | "onSplitElement">;
549
555
 
550
556
  interface TimelineProps extends TimelineDropCallbacks, TimelineEditOverrides {
557
+ /** Project-scoped reset boundary; soft source refreshes retain the same epoch. */
558
+ sessionEpoch?: number;
551
559
  onSeek?: (time: number) => void;
552
560
  onDrillDown?: (element: TimelineElement) => void;
553
561
  renderClipContent?: (element: TimelineElement, style: {
package/dist/index.html CHANGED
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
6
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
7
  <title>HyperFrames Studio</title>
8
- <script type="module" crossorigin src="/assets/index-CISVI7UC.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-D379YOKT.css">
8
+ <script type="module" crossorigin src="/assets/index-DbY124Po.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-BXkzp_OU.css">
10
10
  </head>
11
11
  <body>
12
12
  <div data-hf-id="hf-aph5" id="root"></div>