@elah/editor 0.1.0

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.
@@ -0,0 +1,25 @@
1
+ import { useMemo, useRef } from 'react';
2
+ import { useTimelineEngine, useTracksStore, usePlaybackStore, resolveTimeline, } from '@elah/core';
3
+ export function useResolvedScene(frameOverride) {
4
+ const engine = useTimelineEngine();
5
+ const playbackFrame = usePlaybackStore((s) => (s.isPlaying ? null : s.currentFrame));
6
+ const frozenFrameRef = useRef(playbackFrame ?? 0);
7
+ if (playbackFrame !== null)
8
+ frozenFrameRef.current = playbackFrame;
9
+ useTracksStore((s) => s.tracks);
10
+ useTracksStore((s) => s.stage);
11
+ useTracksStore((s) => s.clips);
12
+ const frame = frameOverride ?? frozenFrameRef.current;
13
+ const project = engine.getProject();
14
+ const last = useRef(null);
15
+ return useMemo(() => {
16
+ if (last.current !== null &&
17
+ last.current.frame === frame &&
18
+ last.current.project === project) {
19
+ return last.current.scene;
20
+ }
21
+ const scene = resolveTimeline(frame, project);
22
+ last.current = { frame, project, scene };
23
+ return scene;
24
+ }, [frame, project]);
25
+ }
@@ -0,0 +1,54 @@
1
+ export type { Clip, Track, Project, Transform, TextAnimation, TextAnimationKind, ClipType, TrackKind, FrameCount, TimelineConfig, InitialTrackConfig, EngineEvent, Transition, TransitionKind, TransitionEasing, TransitionDirection, } from '@elah/core';
2
+ export { TimelineEngine } from '@elah/core';
3
+ export { PlaybackEngine } from '@elah/core';
4
+ export type { PlaybackSnapshot, PlaybackEngineConfig } from '@elah/core';
5
+ export { resolveTimeline } from '@elah/core';
6
+ export type { Scene, ActiveTransition, ActiveVideoClip, ActiveAudioClip, ActiveTextClip, ActiveImageClip, ActiveClipBase, } from '@elah/core';
7
+ export type { Renderer } from '@elah/core';
8
+ export { GpuRenderer } from '@elah/core';
9
+ export type { RendererOptions } from '@elah/core';
10
+ export { GpuDebugCounters } from '@elah/core';
11
+ export type { CounterSnapshot } from '@elah/core';
12
+ export { createMediabunnyBackend, isMediabunnyCompatible } from '@elah/core';
13
+ export type { MediabunnyModule, CreateMediabunnyBackendOpts } from '@elah/core';
14
+ export type { DemuxerBackend, DemuxerFactory } from '@elah/core';
15
+ export type { VideoFrameProvider, VideoFrameProviderDeps } from '@elah/core';
16
+ export { createVideoFrameProvider, MockVideoFrameProvider, SyntheticVideoFrameProvider } from '@elah/core';
17
+ export { AudioPlaybackController } from '@elah/core';
18
+ export type { AudioPlaybackControllerOptions } from '@elah/core';
19
+ export { useMediaLibrary, useMediaLibraryStore, MEDIA_DRAG_MIME, importFiles } from '@elah/core';
20
+ export type { MediaAsset, MediaKind, DragMediaPayload, ImportFilesOptions, ImportFilesResult, SkippedImport } from '@elah/core';
21
+ export { useTracksStore } from '@elah/core';
22
+ export { usePlaybackStore } from '@elah/core';
23
+ export { useSelectionStore } from '@elah/core';
24
+ export { createVideoClip } from '@elah/core';
25
+ export { createAudioClip } from '@elah/core';
26
+ export { createTextClip } from '@elah/core';
27
+ export { createImageClip } from '@elah/core';
28
+ export { splitClipAtPlayhead } from '@elah/core';
29
+ export type { SplitAtPlayheadData } from '@elah/core';
30
+ export type { ActionResult, ActionFailureReason } from '@elah/core';
31
+ export { framesToTimecode, secondsToFrames, framesToSeconds, getTotalFrames } from '@elah/core';
32
+ export { generateId } from '@elah/core';
33
+ export { exportVideo } from '@elah/core';
34
+ export { lazyExportVideo } from '@elah/core';
35
+ export type { ExportOptions, ExportProgress, ExportVideoCodec, ExportAudioCodec } from '@elah/core';
36
+ export { Timeline } from '@elah/timeline';
37
+ export type { TimelineProps, TimelineRef } from '@elah/timeline';
38
+ export { useTimeline } from '@elah/timeline';
39
+ export { useTracks } from '@elah/timeline';
40
+ export { usePlayback } from '@elah/timeline';
41
+ export { useSelection } from '@elah/timeline';
42
+ export { useTimelineDrop } from '@elah/timeline';
43
+ export { ELEMENT_DRAG_MIME } from '@elah/timeline';
44
+ export type { DragElementPayload, ElementKind } from '@elah/timeline';
45
+ export { EditorProvider } from './editor/EditorProvider';
46
+ export type { EditorProviderProps } from './editor/EditorProvider';
47
+ export { useEditor, useTimelineEngine, usePlaybackEngine } from '@elah/core';
48
+ export { useResolvedScene } from './editor/useResolvedScene';
49
+ export { AssetPanel } from './editor/AssetPanel';
50
+ export type { AssetPanelProps } from './editor/AssetPanel';
51
+ export { ElementsPanel } from './editor/ElementsPanel';
52
+ export type { ElementsPanelProps } from './editor/ElementsPanel';
53
+ export { Preview } from './editor/Preview';
54
+ export type { PreviewProps, PreviewHandle } from './editor/Preview';
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ export { TimelineEngine } from '@elah/core';
2
+ export { PlaybackEngine } from '@elah/core';
3
+ export { resolveTimeline } from '@elah/core';
4
+ export { GpuRenderer } from '@elah/core';
5
+ export { GpuDebugCounters } from '@elah/core';
6
+ export { createMediabunnyBackend, isMediabunnyCompatible } from '@elah/core';
7
+ export { createVideoFrameProvider, MockVideoFrameProvider, SyntheticVideoFrameProvider } from '@elah/core';
8
+ export { AudioPlaybackController } from '@elah/core';
9
+ export { useMediaLibrary, useMediaLibraryStore, MEDIA_DRAG_MIME, importFiles } from '@elah/core';
10
+ export { useTracksStore } from '@elah/core';
11
+ export { usePlaybackStore } from '@elah/core';
12
+ export { useSelectionStore } from '@elah/core';
13
+ export { createVideoClip } from '@elah/core';
14
+ export { createAudioClip } from '@elah/core';
15
+ export { createTextClip } from '@elah/core';
16
+ export { createImageClip } from '@elah/core';
17
+ export { splitClipAtPlayhead } from '@elah/core';
18
+ export { framesToTimecode, secondsToFrames, framesToSeconds, getTotalFrames } from '@elah/core';
19
+ export { generateId } from '@elah/core';
20
+ export { exportVideo } from '@elah/core';
21
+ export { lazyExportVideo } from '@elah/core';
22
+ export { Timeline } from '@elah/timeline';
23
+ export { useTimeline } from '@elah/timeline';
24
+ export { useTracks } from '@elah/timeline';
25
+ export { usePlayback } from '@elah/timeline';
26
+ export { useSelection } from '@elah/timeline';
27
+ export { useTimelineDrop } from '@elah/timeline';
28
+ export { ELEMENT_DRAG_MIME } from '@elah/timeline';
29
+ export { EditorProvider } from './editor/EditorProvider';
30
+ export { useEditor, useTimelineEngine, usePlaybackEngine } from '@elah/core';
31
+ export { useResolvedScene } from './editor/useResolvedScene';
32
+ export { AssetPanel } from './editor/AssetPanel';
33
+ export { ElementsPanel } from './editor/ElementsPanel';
34
+ export { Preview } from './editor/Preview';
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@elah/editor",
3
+ "version": "0.1.0",
4
+ "description": "Engine-first video timeline SDK",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "typecheck": "tsc --noEmit",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "build": "tsc --noEmit && tsc -p tsconfig.build.json"
22
+ },
23
+ "peerDependencies": {
24
+ "react": ">=18.0.0",
25
+ "react-dom": ">=18.0.0"
26
+ },
27
+ "dependencies": {
28
+ "@elah/core": "*",
29
+ "@elah/timeline": "*",
30
+ "immer": "^10.1.1",
31
+ "zustand": "^5.0.3"
32
+ },
33
+ "devDependencies": {
34
+ "@types/react": "^18.3.18",
35
+ "@types/react-dom": "^18.3.5",
36
+ "fast-glob": "^3.3.3",
37
+ "typescript": "^5.7.3",
38
+ "vitest": "^3.0.6"
39
+ }
40
+ }