@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.
- package/dist/assets/index-CLmYRLY-.css +1 -0
- package/dist/assets/index-CRvFpc0E.js +84 -0
- package/dist/index.html +2 -2
- package/package.json +2 -2
- package/src/App.tsx +139 -657
- package/src/components/LintModal.tsx +149 -0
- package/src/components/MediaPreview.tsx +79 -0
- package/src/components/editor/FileTree.tsx +50 -40
- package/src/components/editor/PropertyPanel.tsx +3 -3
- package/src/components/nle/NLELayout.tsx +59 -43
- package/src/components/renders/RenderQueue.tsx +19 -16
- package/src/components/renders/RenderQueueItem.tsx +77 -19
- package/src/components/renders/useRenderQueue.ts +1 -0
- package/src/components/sidebar/AssetsTab.tsx +37 -149
- package/src/components/sidebar/CompositionsTab.tsx +48 -162
- package/src/components/sidebar/LeftSidebar.tsx +79 -8
- package/src/components/ui/VideoFrameThumbnail.tsx +50 -0
- package/src/index.ts +0 -3
- package/src/player/components/CompositionThumbnail.tsx +21 -95
- package/src/player/components/EditModal.tsx +5 -5
- package/src/player/components/Player.tsx +0 -1
- package/src/player/components/PlayerControls.tsx +56 -3
- package/src/player/components/Timeline.tsx +14 -18
- package/src/player/components/TimelineClip.tsx +0 -1
- package/src/player/index.ts +0 -1
- package/src/player/store/playerStore.ts +3 -28
- package/src/utils/mediaTypes.ts +9 -0
- package/dist/assets/index-BEwJNmPo.js +0 -92
- package/dist/assets/index-BnvciBdD.css +0 -1
- package/src/components/ui/ExpandOnHover.tsx +0 -194
- package/src/hooks/useCodeEditor.ts +0 -88
- 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
|
+
}
|