@hyperframes/studio 0.1.12 → 0.1.14

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 (32) hide show
  1. package/dist/assets/index-CLmYRLY-.css +1 -0
  2. package/dist/assets/index-CRvFpc0E.js +84 -0
  3. package/dist/index.html +2 -2
  4. package/package.json +2 -2
  5. package/src/App.tsx +139 -657
  6. package/src/components/LintModal.tsx +149 -0
  7. package/src/components/MediaPreview.tsx +79 -0
  8. package/src/components/editor/FileTree.tsx +50 -40
  9. package/src/components/editor/PropertyPanel.tsx +3 -3
  10. package/src/components/nle/NLELayout.tsx +59 -43
  11. package/src/components/renders/RenderQueue.tsx +19 -16
  12. package/src/components/renders/RenderQueueItem.tsx +77 -19
  13. package/src/components/renders/useRenderQueue.ts +1 -0
  14. package/src/components/sidebar/AssetsTab.tsx +37 -149
  15. package/src/components/sidebar/CompositionsTab.tsx +48 -162
  16. package/src/components/sidebar/LeftSidebar.tsx +79 -8
  17. package/src/components/ui/VideoFrameThumbnail.tsx +50 -0
  18. package/src/index.ts +0 -3
  19. package/src/player/components/CompositionThumbnail.tsx +21 -95
  20. package/src/player/components/EditModal.tsx +5 -5
  21. package/src/player/components/Player.tsx +0 -1
  22. package/src/player/components/PlayerControls.tsx +56 -3
  23. package/src/player/components/Timeline.tsx +14 -18
  24. package/src/player/components/TimelineClip.tsx +0 -1
  25. package/src/player/index.ts +0 -1
  26. package/src/player/store/playerStore.ts +3 -28
  27. package/src/utils/mediaTypes.ts +9 -0
  28. package/dist/assets/index-BEwJNmPo.js +0 -92
  29. package/dist/assets/index-BnvciBdD.css +0 -1
  30. package/src/components/ui/ExpandOnHover.tsx +0 -194
  31. package/src/hooks/useCodeEditor.ts +0 -88
  32. package/src/player/components/PreviewPanel.tsx +0 -181
@@ -27,10 +27,6 @@ interface PlayerState {
27
27
  zoomMode: ZoomMode;
28
28
  /** Pixels per second when in manual zoom mode */
29
29
  pixelsPerSecond: number;
30
- /** Edit range selection */
31
- editRangeStart: number | null;
32
- editRangeEnd: number | null;
33
- editMode: boolean;
34
30
 
35
31
  setIsPlaying: (playing: boolean) => void;
36
32
  setCurrentTime: (time: number) => void;
@@ -39,11 +35,6 @@ interface PlayerState {
39
35
  setTimelineReady: (ready: boolean) => void;
40
36
  setElements: (elements: TimelineElement[]) => void;
41
37
  setSelectedElementId: (id: string | null) => void;
42
- setEditRange: (start: number | null, end: number | null) => void;
43
- setEditMode: (active: boolean) => void;
44
- updateElementStart: (elementId: string, newStart: number) => void;
45
- updateElementDuration: (elementId: string, newDuration: number) => void;
46
- updateElementTrack: (elementId: string, newTrack: number) => void;
47
38
  updateElement: (
48
39
  elementId: string,
49
40
  updates: Partial<Pick<TimelineElement, "start" | "duration" | "track">>,
@@ -76,9 +67,6 @@ export const usePlayerStore = create<PlayerState>((set) => ({
76
67
  playbackRate: 1,
77
68
  zoomMode: "fit",
78
69
  pixelsPerSecond: 100,
79
- editRangeStart: null,
80
- editRangeEnd: null,
81
- editMode: false,
82
70
 
83
71
  setIsPlaying: (playing) => set({ isPlaying: playing }),
84
72
  setPlaybackRate: (rate) => set({ playbackRate: rate }),
@@ -89,26 +77,13 @@ export const usePlayerStore = create<PlayerState>((set) => ({
89
77
  setTimelineReady: (ready) => set({ timelineReady: ready }),
90
78
  setElements: (elements) => set({ elements }),
91
79
  setSelectedElementId: (id) => set({ selectedElementId: id }),
92
- setEditRange: (start, end) => set({ editRangeStart: start, editRangeEnd: end }),
93
- setEditMode: (active) => set({ editMode: active, editRangeStart: null, editRangeEnd: null }),
94
- updateElementStart: (elementId, newStart) =>
95
- set((state) => ({
96
- elements: state.elements.map((el) => (el.id === elementId ? { ...el, start: newStart } : el)),
97
- })),
98
- updateElementDuration: (elementId, newDuration) =>
99
- set((state) => ({
100
- elements: state.elements.map((el) =>
101
- el.id === elementId ? { ...el, duration: newDuration } : el,
102
- ),
103
- })),
104
- updateElementTrack: (elementId, newTrack) =>
105
- set((state) => ({
106
- elements: state.elements.map((el) => (el.id === elementId ? { ...el, track: newTrack } : el)),
107
- })),
108
80
  updateElement: (elementId, updates) =>
109
81
  set((state) => ({
110
82
  elements: state.elements.map((el) => (el.id === elementId ? { ...el, ...updates } : el)),
111
83
  })),
84
+ // Resets project-specific state when switching compositions.
85
+ // playbackRate, zoomMode, and pixelsPerSecond are intentionally preserved
86
+ // because they are user preferences that should survive project switches.
112
87
  reset: () =>
113
88
  set({
114
89
  isPlaying: false,
@@ -0,0 +1,9 @@
1
+ export const IMAGE_EXT = /\.(jpg|jpeg|png|gif|webp|svg|ico)$/i;
2
+ export const VIDEO_EXT = /\.(mp4|webm|mov)$/i;
3
+ export const AUDIO_EXT = /\.(mp3|wav|ogg|m4a|aac)$/i;
4
+ export const FONT_EXT = /\.(woff|woff2|ttf|otf|eot)$/i;
5
+ export const MEDIA_EXT = /\.(mp4|webm|mov|mp3|wav|ogg|m4a|aac|jpg|jpeg|png|gif|webp|svg|ico)$/i;
6
+
7
+ export function isMediaFile(path: string): boolean {
8
+ return MEDIA_EXT.test(path);
9
+ }