@omnimedia/omnitool 1.1.0-7 → 1.1.0-9
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/package.json +1 -1
- package/s/timeline/sugar/builders.ts +102 -102
- package/s/timeline/sugar/o.ts +69 -38
- package/s/timeline/sugar/omni.ts +13 -6
- package/x/index.html +1 -1
- package/x/timeline/sugar/builders.d.ts +0 -95
- package/x/timeline/sugar/builders.js +103 -107
- package/x/timeline/sugar/builders.js.map +1 -1
- package/x/timeline/sugar/o.d.ts +18 -13
- package/x/timeline/sugar/o.js +48 -31
- package/x/timeline/sugar/o.js.map +1 -1
- package/x/timeline/sugar/omni.d.ts +2 -3
- package/x/timeline/sugar/omni.js +11 -4
- package/x/timeline/sugar/omni.js.map +1 -1
- package/s/timeline/timeline.ts +0 -22
- package/x/timeline/timeline.d.ts +0 -9
- package/x/timeline/timeline.js +0 -22
- package/x/timeline/timeline.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import {O} from "./o.js"
|
|
2
|
-
import {Id} from "../parts/basics.js"
|
|
3
|
-
import {Item} from "../parts/item.js"
|
|
4
|
-
|
|
5
|
-
export class TimelineItem {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
abstract class VisualItem extends TimelineItem {
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class Stack extends VisualItem {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class Spatial extends TimelineItem {
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export class Gap extends TimelineItem {
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export class Audio extends TimelineItem {
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export class Video extends VisualItem {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export class Text extends VisualItem {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export class Sequence extends VisualItem {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export class Transition extends TimelineItem {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
1
|
+
// import {O} from "./o.js"
|
|
2
|
+
// import {Id} from "../parts/basics.js"
|
|
3
|
+
// import {Item} from "../parts/item.js"
|
|
4
|
+
//
|
|
5
|
+
// export class TimelineItem {
|
|
6
|
+
// public readonly id: Id
|
|
7
|
+
//
|
|
8
|
+
// constructor(public item: Item.Any) {
|
|
9
|
+
// this.id = item.id
|
|
10
|
+
// }
|
|
11
|
+
//
|
|
12
|
+
// toJSON() {
|
|
13
|
+
// return {
|
|
14
|
+
// ...this.item
|
|
15
|
+
// }
|
|
16
|
+
// }
|
|
17
|
+
// }
|
|
18
|
+
//
|
|
19
|
+
// abstract class VisualItem extends TimelineItem {
|
|
20
|
+
// abstract spatial(spatial: Spatial): TimelineItem
|
|
21
|
+
// }
|
|
22
|
+
//
|
|
23
|
+
// export class Stack extends VisualItem {
|
|
24
|
+
// constructor(private o: O, public item: Item.Stack) {
|
|
25
|
+
// super(item)
|
|
26
|
+
// }
|
|
27
|
+
//
|
|
28
|
+
// spatial(spatial: Spatial) {
|
|
29
|
+
// this.item.spatialId = spatial.item.id
|
|
30
|
+
// return this
|
|
31
|
+
// }
|
|
32
|
+
//
|
|
33
|
+
// addChildren(fn: (o: O) => TimelineItem | TimelineItem[]) {
|
|
34
|
+
// const result = fn(this.o)
|
|
35
|
+
// const items = Array.isArray(result) ? result : [result]
|
|
36
|
+
// this.item.childrenIds.push(...items.map(c => c.item.id))
|
|
37
|
+
// return this
|
|
38
|
+
// }
|
|
39
|
+
// }
|
|
40
|
+
//
|
|
41
|
+
// export class Spatial extends TimelineItem {
|
|
42
|
+
// constructor(public item: Item.Spatial) {super(item)}
|
|
43
|
+
// }
|
|
44
|
+
//
|
|
45
|
+
// export class Gap extends TimelineItem {
|
|
46
|
+
// constructor(public item: Item.Gap) {super(item)}
|
|
47
|
+
// }
|
|
48
|
+
//
|
|
49
|
+
// export class Audio extends TimelineItem {
|
|
50
|
+
// constructor(public item: Item.Audio) {super(item)}
|
|
51
|
+
// }
|
|
52
|
+
//
|
|
53
|
+
// export class Video extends VisualItem {
|
|
54
|
+
// constructor(public item: Item.Video) {
|
|
55
|
+
// super(item)
|
|
56
|
+
// }
|
|
57
|
+
//
|
|
58
|
+
// spatial(spatial: Spatial) {
|
|
59
|
+
// this.item.spatialId = spatial.item.id
|
|
60
|
+
// return this
|
|
61
|
+
// }
|
|
62
|
+
// }
|
|
63
|
+
//
|
|
64
|
+
// export class Text extends VisualItem {
|
|
65
|
+
// constructor(public item: Item.Text) {
|
|
66
|
+
// super(item)
|
|
67
|
+
// }
|
|
68
|
+
//
|
|
69
|
+
// color(color: string) {
|
|
70
|
+
// this.item.color = color
|
|
71
|
+
// return this
|
|
72
|
+
// }
|
|
73
|
+
//
|
|
74
|
+
// spatial(spatial: Spatial) {
|
|
75
|
+
// this.item.spatialId = spatial.item.id
|
|
76
|
+
// return this
|
|
77
|
+
// }
|
|
78
|
+
// }
|
|
79
|
+
//
|
|
80
|
+
// export class Sequence extends VisualItem {
|
|
81
|
+
// constructor(private o: O, public item: Item.Sequence) {
|
|
82
|
+
// super(item)
|
|
83
|
+
// }
|
|
84
|
+
//
|
|
85
|
+
// spatial(spatial: Spatial) {
|
|
86
|
+
// this.item.spatialId = spatial.item.id
|
|
87
|
+
// return this
|
|
88
|
+
// }
|
|
89
|
+
//
|
|
90
|
+
// addChildren(fn: (o: O) => TimelineItem | TimelineItem[]) {
|
|
91
|
+
// const result = fn(this.o)
|
|
92
|
+
// const items = Array.isArray(result) ? result : [result]
|
|
93
|
+
// this.item.childrenIds.push(...items.map(c => c.item.id))
|
|
94
|
+
// return this
|
|
95
|
+
// }
|
|
96
|
+
// }
|
|
97
|
+
//
|
|
98
|
+
// export class Transition extends TimelineItem {
|
|
99
|
+
// constructor(public item: Item.Transition) {
|
|
100
|
+
// super(item)
|
|
101
|
+
// }
|
|
102
|
+
// }
|
package/s/timeline/sugar/o.ts
CHANGED
|
@@ -1,57 +1,73 @@
|
|
|
1
1
|
|
|
2
|
-
import {MapG} from "@e280/stz"
|
|
3
|
-
import {Id} from "../parts/basics.js"
|
|
4
2
|
import {Media} from "../parts/media.js"
|
|
3
|
+
import {Id, TimelineFile} from "../parts/basics.js"
|
|
5
4
|
import {Effect, Item, Kind} from "../parts/item.js"
|
|
6
5
|
import {Transform, TransformOptions, Vec2} from "../types.js"
|
|
7
|
-
import {Video, Gap, Sequence, Stack, Text, TimelineItem, Spatial, Audio, Transition} from "./builders.js"
|
|
8
6
|
|
|
9
7
|
export class O {
|
|
10
8
|
#nextId = 0
|
|
11
|
-
#items = new MapG<Id, TimelineItem>()
|
|
12
9
|
|
|
13
|
-
|
|
14
|
-
return this.#nextId++
|
|
15
|
-
}
|
|
10
|
+
constructor(public state: {project: TimelineFile}) {}
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
12
|
+
require<T extends Item.Any>(id: Id): T {
|
|
13
|
+
const item = this.state.project.items.find(item => item.id === id)
|
|
14
|
+
return item as T
|
|
15
|
+
}
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
return
|
|
17
|
+
#getId() {
|
|
18
|
+
return this.#nextId++
|
|
25
19
|
}
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
#mutate(fn: (project: TimelineFile) => TimelineFile) {
|
|
22
|
+
this.state.project = fn(this.state.project)
|
|
23
|
+
}
|
|
30
24
|
|
|
31
|
-
spatial = (transform: Transform) => {
|
|
25
|
+
spatial = (transform: Transform): Item.Spatial => {
|
|
32
26
|
const item: Item.Spatial = {
|
|
33
27
|
id: this.#getId(),
|
|
34
28
|
kind: Kind.Spatial,
|
|
35
29
|
transform
|
|
36
30
|
}
|
|
37
|
-
|
|
38
|
-
this.register(spatial)
|
|
39
|
-
return spatial
|
|
31
|
+
return item
|
|
40
32
|
}
|
|
41
33
|
|
|
42
|
-
sequence = (...items:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
sequence = (...items: Item.Any[]): Item.Any => {
|
|
35
|
+
const item = {
|
|
36
|
+
id: this.#getId(),
|
|
37
|
+
kind: Kind.Sequence,
|
|
38
|
+
childrenIds: items.map(item => item.id)
|
|
39
|
+
} as Item.Sequence
|
|
47
40
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
41
|
+
this.#mutate(state => {
|
|
42
|
+
state.items.push(item, ...items)
|
|
43
|
+
return state
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
return item
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
stack = (...items: Item.Any[]): Item.Any => {
|
|
50
|
+
const item = {
|
|
51
|
+
kind: Kind.Stack,
|
|
52
|
+
id: this.#getId(),
|
|
53
|
+
childrenIds: items.map(item => item.id)
|
|
54
|
+
} as Item.Stack
|
|
55
|
+
|
|
56
|
+
this.#mutate(state => {
|
|
57
|
+
state.items.push(item, ...items)
|
|
58
|
+
return state
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
return item
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
video = (
|
|
65
|
+
media: Media,
|
|
66
|
+
options?: {
|
|
67
|
+
start?: number,
|
|
68
|
+
duration?: number
|
|
69
|
+
}): Item.Video => {
|
|
53
70
|
|
|
54
|
-
video = (media: Media, options?: {start?: number, duration?: number}) => {
|
|
55
71
|
if(!media.hasVideo)
|
|
56
72
|
throw new Error(`Video clip error: media "${media.datafile.filename}" has no video track.`)
|
|
57
73
|
|
|
@@ -63,10 +79,16 @@ export class O {
|
|
|
63
79
|
duration: options?.duration ?? media.duration
|
|
64
80
|
}
|
|
65
81
|
|
|
66
|
-
return
|
|
82
|
+
return item
|
|
67
83
|
}
|
|
68
84
|
|
|
69
|
-
audio = (
|
|
85
|
+
audio = (
|
|
86
|
+
media: Media,
|
|
87
|
+
options?: {
|
|
88
|
+
start?: number,
|
|
89
|
+
duration?: number
|
|
90
|
+
}): Item.Audio => {
|
|
91
|
+
|
|
70
92
|
if(!media.hasAudio)
|
|
71
93
|
throw new Error(`Audio clip error: media "${media.datafile.filename}" has no audio track.`)
|
|
72
94
|
|
|
@@ -78,24 +100,24 @@ export class O {
|
|
|
78
100
|
duration: options?.duration ?? media.duration
|
|
79
101
|
}
|
|
80
102
|
|
|
81
|
-
return
|
|
103
|
+
return item
|
|
82
104
|
}
|
|
83
105
|
|
|
84
|
-
text = (content: string) =>
|
|
106
|
+
text = (content: string): Item.Text => ({
|
|
85
107
|
id: this.#getId(),
|
|
86
108
|
content,
|
|
87
109
|
kind: Kind.Text,
|
|
88
110
|
color: "#FFFFF"
|
|
89
111
|
})
|
|
90
112
|
|
|
91
|
-
gap = (duration: number) =>
|
|
113
|
+
gap = (duration: number): Item.Gap => ({
|
|
92
114
|
id: this.#getId(),
|
|
93
115
|
kind: Kind.Gap,
|
|
94
116
|
duration
|
|
95
117
|
})
|
|
96
118
|
|
|
97
119
|
transition = {
|
|
98
|
-
crossfade: (duration: number) =>
|
|
120
|
+
crossfade: (duration: number): Item.Transition => ({
|
|
99
121
|
id: this.#getId(),
|
|
100
122
|
kind: Kind.Transition,
|
|
101
123
|
effect: Effect.Crossfade,
|
|
@@ -115,5 +137,14 @@ export class O {
|
|
|
115
137
|
const rotation = options?.rotation ?? 0
|
|
116
138
|
return [position, scale, rotation]
|
|
117
139
|
}
|
|
140
|
+
|
|
141
|
+
addChildren(parent: Item.Stack | Item.Sequence, ...items: Item.Any[]) {
|
|
142
|
+
this.#mutate(state => {
|
|
143
|
+
const parentItem = state.items.find(({id}) => id === parent.id) as Item.Stack
|
|
144
|
+
parentItem.childrenIds.push(...items.map(item => item.id))
|
|
145
|
+
state.items.push(...items)
|
|
146
|
+
return state
|
|
147
|
+
})
|
|
148
|
+
}
|
|
118
149
|
}
|
|
119
150
|
|
package/s/timeline/sugar/omni.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import {O} from "./o.js"
|
|
3
|
-
import {
|
|
3
|
+
import {Item} from "../parts/item.js"
|
|
4
4
|
import {Media} from "../parts/media.js"
|
|
5
|
-
import {TimelineItem} from "./builders.js"
|
|
6
5
|
import {Datafile} from "../utils/datafile.js"
|
|
7
6
|
import {TimelineFile} from "../parts/basics.js"
|
|
8
7
|
import {Export} from "../parts/compositor/export.js"
|
|
@@ -19,11 +18,19 @@ export class Omni {
|
|
|
19
18
|
))) as {[K in keyof S]: Media}
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
timeline = (fn: (o: O) =>
|
|
23
|
-
const o = new O(
|
|
21
|
+
timeline = (fn: (o: O) => Item.Any): TimelineFile => {
|
|
22
|
+
const o = new O({
|
|
23
|
+
project: {
|
|
24
|
+
format: "timeline",
|
|
25
|
+
info: "https://omniclip.app/",
|
|
26
|
+
version: 0,
|
|
27
|
+
items: [],
|
|
28
|
+
rootId: 0
|
|
29
|
+
}
|
|
30
|
+
})
|
|
24
31
|
const root = fn(o)
|
|
25
|
-
o.
|
|
26
|
-
return
|
|
32
|
+
o.state.project.rootId = root.id
|
|
33
|
+
return o.state.project
|
|
27
34
|
}
|
|
28
35
|
|
|
29
36
|
render = async (timeline: TimelineFile, config: RenderConfig) => {
|
package/x/index.html
CHANGED
|
@@ -1,96 +1 @@
|
|
|
1
|
-
import { O } from "./o.js";
|
|
2
|
-
import { Id } from "../parts/basics.js";
|
|
3
|
-
import { Item } from "../parts/item.js";
|
|
4
|
-
export declare class TimelineItem {
|
|
5
|
-
item: Item.Any;
|
|
6
|
-
readonly id: Id;
|
|
7
|
-
constructor(item: Item.Any);
|
|
8
|
-
toJSON(): {
|
|
9
|
-
id: Id;
|
|
10
|
-
kind: import("../parts/item.js").Kind.Spatial;
|
|
11
|
-
transform: import("../types.js").Transform;
|
|
12
|
-
} | {
|
|
13
|
-
id: Id;
|
|
14
|
-
kind: import("../parts/item.js").Kind.Gap;
|
|
15
|
-
duration: number;
|
|
16
|
-
} | {
|
|
17
|
-
id: Id;
|
|
18
|
-
kind: import("../parts/item.js").Kind.Sequence;
|
|
19
|
-
childrenIds: Id[];
|
|
20
|
-
spatialId?: Id;
|
|
21
|
-
} | {
|
|
22
|
-
id: Id;
|
|
23
|
-
kind: import("../parts/item.js").Kind.Stack;
|
|
24
|
-
childrenIds: Id[];
|
|
25
|
-
spatialId?: Id;
|
|
26
|
-
} | {
|
|
27
|
-
id: Id;
|
|
28
|
-
kind: import("../parts/item.js").Kind.Video;
|
|
29
|
-
mediaHash: import("../parts/basics.js").Hash;
|
|
30
|
-
start: number;
|
|
31
|
-
duration: number;
|
|
32
|
-
spatialId?: Id;
|
|
33
|
-
} | {
|
|
34
|
-
id: Id;
|
|
35
|
-
kind: import("../parts/item.js").Kind.Audio;
|
|
36
|
-
mediaHash: import("../parts/basics.js").Hash;
|
|
37
|
-
start: number;
|
|
38
|
-
duration: number;
|
|
39
|
-
} | {
|
|
40
|
-
id: Id;
|
|
41
|
-
kind: import("../parts/item.js").Kind.Text;
|
|
42
|
-
content: string;
|
|
43
|
-
spatialId?: Id;
|
|
44
|
-
color: string;
|
|
45
|
-
} | {
|
|
46
|
-
id: Id;
|
|
47
|
-
kind: import("../parts/item.js").Kind.Transition;
|
|
48
|
-
effect: import("../parts/item.js").Effect.Crossfade;
|
|
49
|
-
duration: number;
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
declare abstract class VisualItem extends TimelineItem {
|
|
53
|
-
abstract spatial(spatial: Spatial): TimelineItem;
|
|
54
|
-
}
|
|
55
|
-
export declare class Stack extends VisualItem {
|
|
56
|
-
private o;
|
|
57
|
-
item: Item.Stack;
|
|
58
|
-
constructor(o: O, item: Item.Stack);
|
|
59
|
-
spatial(spatial: Spatial): this;
|
|
60
|
-
addChildren(fn: (o: O) => TimelineItem | TimelineItem[]): this;
|
|
61
|
-
}
|
|
62
|
-
export declare class Spatial extends TimelineItem {
|
|
63
|
-
item: Item.Spatial;
|
|
64
|
-
constructor(item: Item.Spatial);
|
|
65
|
-
}
|
|
66
|
-
export declare class Gap extends TimelineItem {
|
|
67
|
-
item: Item.Gap;
|
|
68
|
-
constructor(item: Item.Gap);
|
|
69
|
-
}
|
|
70
|
-
export declare class Audio extends TimelineItem {
|
|
71
|
-
item: Item.Audio;
|
|
72
|
-
constructor(item: Item.Audio);
|
|
73
|
-
}
|
|
74
|
-
export declare class Video extends VisualItem {
|
|
75
|
-
item: Item.Video;
|
|
76
|
-
constructor(item: Item.Video);
|
|
77
|
-
spatial(spatial: Spatial): this;
|
|
78
|
-
}
|
|
79
|
-
export declare class Text extends VisualItem {
|
|
80
|
-
item: Item.Text;
|
|
81
|
-
constructor(item: Item.Text);
|
|
82
|
-
color(color: string): this;
|
|
83
|
-
spatial(spatial: Spatial): this;
|
|
84
|
-
}
|
|
85
|
-
export declare class Sequence extends VisualItem {
|
|
86
|
-
private o;
|
|
87
|
-
item: Item.Sequence;
|
|
88
|
-
constructor(o: O, item: Item.Sequence);
|
|
89
|
-
spatial(spatial: Spatial): this;
|
|
90
|
-
addChildren(fn: (o: O) => TimelineItem | TimelineItem[]): this;
|
|
91
|
-
}
|
|
92
|
-
export declare class Transition extends TimelineItem {
|
|
93
|
-
item: Item.Transition;
|
|
94
|
-
constructor(item: Item.Transition);
|
|
95
|
-
}
|
|
96
1
|
export {};
|
|
@@ -1,108 +1,104 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
export class
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
super(item);
|
|
105
|
-
this.item = item;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
1
|
+
export {};
|
|
2
|
+
// import {O} from "./o.js"
|
|
3
|
+
// import {Id} from "../parts/basics.js"
|
|
4
|
+
// import {Item} from "../parts/item.js"
|
|
5
|
+
//
|
|
6
|
+
// export class TimelineItem {
|
|
7
|
+
// public readonly id: Id
|
|
8
|
+
//
|
|
9
|
+
// constructor(public item: Item.Any) {
|
|
10
|
+
// this.id = item.id
|
|
11
|
+
// }
|
|
12
|
+
//
|
|
13
|
+
// toJSON() {
|
|
14
|
+
// return {
|
|
15
|
+
// ...this.item
|
|
16
|
+
// }
|
|
17
|
+
// }
|
|
18
|
+
// }
|
|
19
|
+
//
|
|
20
|
+
// abstract class VisualItem extends TimelineItem {
|
|
21
|
+
// abstract spatial(spatial: Spatial): TimelineItem
|
|
22
|
+
// }
|
|
23
|
+
//
|
|
24
|
+
// export class Stack extends VisualItem {
|
|
25
|
+
// constructor(private o: O, public item: Item.Stack) {
|
|
26
|
+
// super(item)
|
|
27
|
+
// }
|
|
28
|
+
//
|
|
29
|
+
// spatial(spatial: Spatial) {
|
|
30
|
+
// this.item.spatialId = spatial.item.id
|
|
31
|
+
// return this
|
|
32
|
+
// }
|
|
33
|
+
//
|
|
34
|
+
// addChildren(fn: (o: O) => TimelineItem | TimelineItem[]) {
|
|
35
|
+
// const result = fn(this.o)
|
|
36
|
+
// const items = Array.isArray(result) ? result : [result]
|
|
37
|
+
// this.item.childrenIds.push(...items.map(c => c.item.id))
|
|
38
|
+
// return this
|
|
39
|
+
// }
|
|
40
|
+
// }
|
|
41
|
+
//
|
|
42
|
+
// export class Spatial extends TimelineItem {
|
|
43
|
+
// constructor(public item: Item.Spatial) {super(item)}
|
|
44
|
+
// }
|
|
45
|
+
//
|
|
46
|
+
// export class Gap extends TimelineItem {
|
|
47
|
+
// constructor(public item: Item.Gap) {super(item)}
|
|
48
|
+
// }
|
|
49
|
+
//
|
|
50
|
+
// export class Audio extends TimelineItem {
|
|
51
|
+
// constructor(public item: Item.Audio) {super(item)}
|
|
52
|
+
// }
|
|
53
|
+
//
|
|
54
|
+
// export class Video extends VisualItem {
|
|
55
|
+
// constructor(public item: Item.Video) {
|
|
56
|
+
// super(item)
|
|
57
|
+
// }
|
|
58
|
+
//
|
|
59
|
+
// spatial(spatial: Spatial) {
|
|
60
|
+
// this.item.spatialId = spatial.item.id
|
|
61
|
+
// return this
|
|
62
|
+
// }
|
|
63
|
+
// }
|
|
64
|
+
//
|
|
65
|
+
// export class Text extends VisualItem {
|
|
66
|
+
// constructor(public item: Item.Text) {
|
|
67
|
+
// super(item)
|
|
68
|
+
// }
|
|
69
|
+
//
|
|
70
|
+
// color(color: string) {
|
|
71
|
+
// this.item.color = color
|
|
72
|
+
// return this
|
|
73
|
+
// }
|
|
74
|
+
//
|
|
75
|
+
// spatial(spatial: Spatial) {
|
|
76
|
+
// this.item.spatialId = spatial.item.id
|
|
77
|
+
// return this
|
|
78
|
+
// }
|
|
79
|
+
// }
|
|
80
|
+
//
|
|
81
|
+
// export class Sequence extends VisualItem {
|
|
82
|
+
// constructor(private o: O, public item: Item.Sequence) {
|
|
83
|
+
// super(item)
|
|
84
|
+
// }
|
|
85
|
+
//
|
|
86
|
+
// spatial(spatial: Spatial) {
|
|
87
|
+
// this.item.spatialId = spatial.item.id
|
|
88
|
+
// return this
|
|
89
|
+
// }
|
|
90
|
+
//
|
|
91
|
+
// addChildren(fn: (o: O) => TimelineItem | TimelineItem[]) {
|
|
92
|
+
// const result = fn(this.o)
|
|
93
|
+
// const items = Array.isArray(result) ? result : [result]
|
|
94
|
+
// this.item.childrenIds.push(...items.map(c => c.item.id))
|
|
95
|
+
// return this
|
|
96
|
+
// }
|
|
97
|
+
// }
|
|
98
|
+
//
|
|
99
|
+
// export class Transition extends TimelineItem {
|
|
100
|
+
// constructor(public item: Item.Transition) {
|
|
101
|
+
// super(item)
|
|
102
|
+
// }
|
|
103
|
+
// }
|
|
108
104
|
//# sourceMappingURL=builders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../s/timeline/sugar/builders.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../s/timeline/sugar/builders.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,wCAAwC;AACxC,wCAAwC;AACxC,EAAE;AACF,8BAA8B;AAC9B,0BAA0B;AAC1B,EAAE;AACF,wCAAwC;AACxC,sBAAsB;AACtB,KAAK;AACL,EAAE;AACF,cAAc;AACd,aAAa;AACb,kBAAkB;AAClB,MAAM;AACN,KAAK;AACL,IAAI;AACJ,EAAE;AACF,mDAAmD;AACnD,qDAAqD;AACrD,IAAI;AACJ,EAAE;AACF,0CAA0C;AAC1C,yDAAyD;AACzD,iBAAiB;AACjB,MAAM;AACN,EAAE;AACF,gCAAgC;AAChC,2CAA2C;AAC3C,kBAAkB;AAClB,MAAM;AACN,EAAE;AACF,+DAA+D;AAC/D,+BAA+B;AAC/B,6DAA6D;AAC7D,+DAA+D;AAC/D,kBAAkB;AAClB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,8CAA8C;AAC9C,wDAAwD;AACxD,IAAI;AACJ,EAAE;AACF,0CAA0C;AAC1C,oDAAoD;AACpD,IAAI;AACJ,EAAE;AACF,4CAA4C;AAC5C,sDAAsD;AACtD,IAAI;AACJ,EAAE;AACF,0CAA0C;AAC1C,2CAA2C;AAC3C,iBAAiB;AACjB,MAAM;AACN,EAAE;AACF,gCAAgC;AAChC,2CAA2C;AAC3C,kBAAkB;AAClB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,yCAAyC;AACzC,0CAA0C;AAC1C,iBAAiB;AACjB,MAAM;AACN,EAAE;AACF,2BAA2B;AAC3B,6BAA6B;AAC7B,gBAAgB;AAChB,MAAM;AACN,EAAE;AACF,gCAAgC;AAChC,2CAA2C;AAC3C,kBAAkB;AAClB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,6CAA6C;AAC7C,2DAA2D;AAC3D,gBAAgB;AAChB,KAAK;AACL,EAAE;AACF,gCAAgC;AAChC,2CAA2C;AAC3C,kBAAkB;AAClB,MAAM;AACN,EAAE;AACF,+DAA+D;AAC/D,+BAA+B;AAC/B,6DAA6D;AAC7D,+DAA+D;AAC/D,kBAAkB;AAClB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,iDAAiD;AACjD,+CAA+C;AAC/C,gBAAgB;AAChB,KAAK;AACL,IAAI"}
|
package/x/timeline/sugar/o.d.ts
CHANGED
|
@@ -1,27 +1,32 @@
|
|
|
1
|
-
import { MapG } from "@e280/stz";
|
|
2
1
|
import { Media } from "../parts/media.js";
|
|
2
|
+
import { Id, TimelineFile } from "../parts/basics.js";
|
|
3
|
+
import { Item } from "../parts/item.js";
|
|
3
4
|
import { Transform, TransformOptions } from "../types.js";
|
|
4
|
-
import { Video, Gap, Sequence, Stack, Text, TimelineItem, Spatial, Audio, Transition } from "./builders.js";
|
|
5
5
|
export declare class O {
|
|
6
6
|
#private;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
state: {
|
|
8
|
+
project: TimelineFile;
|
|
9
|
+
};
|
|
10
|
+
constructor(state: {
|
|
11
|
+
project: TimelineFile;
|
|
12
|
+
});
|
|
13
|
+
require<T extends Item.Any>(id: Id): T;
|
|
14
|
+
spatial: (transform: Transform) => Item.Spatial;
|
|
15
|
+
sequence: (...items: Item.Any[]) => Item.Any;
|
|
16
|
+
stack: (...items: Item.Any[]) => Item.Any;
|
|
13
17
|
video: (media: Media, options?: {
|
|
14
18
|
start?: number;
|
|
15
19
|
duration?: number;
|
|
16
|
-
}) => Video;
|
|
20
|
+
}) => Item.Video;
|
|
17
21
|
audio: (media: Media, options?: {
|
|
18
22
|
start?: number;
|
|
19
23
|
duration?: number;
|
|
20
|
-
}) => Audio;
|
|
21
|
-
text: (content: string) => Text;
|
|
22
|
-
gap: (duration: number) => Gap;
|
|
24
|
+
}) => Item.Audio;
|
|
25
|
+
text: (content: string) => Item.Text;
|
|
26
|
+
gap: (duration: number) => Item.Gap;
|
|
23
27
|
transition: {
|
|
24
|
-
crossfade: (duration: number) => Transition;
|
|
28
|
+
crossfade: (duration: number) => Item.Transition;
|
|
25
29
|
};
|
|
26
30
|
transform: (options?: TransformOptions) => Transform;
|
|
31
|
+
addChildren(parent: Item.Stack | Item.Sequence, ...items: Item.Any[]): void;
|
|
27
32
|
}
|
package/x/timeline/sugar/o.js
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
|
-
import { MapG } from "@e280/stz";
|
|
2
1
|
import { Effect, Kind } from "../parts/item.js";
|
|
3
|
-
import { Video, Gap, Sequence, Stack, Text, Spatial, Audio, Transition } from "./builders.js";
|
|
4
2
|
export class O {
|
|
3
|
+
state;
|
|
5
4
|
#nextId = 0;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return this.#nextId++;
|
|
5
|
+
constructor(state) {
|
|
6
|
+
this.state = state;
|
|
9
7
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return item.id;
|
|
8
|
+
require(id) {
|
|
9
|
+
const item = this.state.project.items.find(item => item.id === id);
|
|
10
|
+
return item;
|
|
14
11
|
}
|
|
15
|
-
|
|
16
|
-
return
|
|
12
|
+
#getId() {
|
|
13
|
+
return this.#nextId++;
|
|
17
14
|
}
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
#mutate(fn) {
|
|
16
|
+
this.state.project = fn(this.state.project);
|
|
20
17
|
}
|
|
21
18
|
spatial = (transform) => {
|
|
22
19
|
const item = {
|
|
@@ -24,20 +21,32 @@ export class O {
|
|
|
24
21
|
kind: Kind.Spatial,
|
|
25
22
|
transform
|
|
26
23
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
return item;
|
|
25
|
+
};
|
|
26
|
+
sequence = (...items) => {
|
|
27
|
+
const item = {
|
|
28
|
+
id: this.#getId(),
|
|
29
|
+
kind: Kind.Sequence,
|
|
30
|
+
childrenIds: items.map(item => item.id)
|
|
31
|
+
};
|
|
32
|
+
this.#mutate(state => {
|
|
33
|
+
state.items.push(item, ...items);
|
|
34
|
+
return state;
|
|
35
|
+
});
|
|
36
|
+
return item;
|
|
37
|
+
};
|
|
38
|
+
stack = (...items) => {
|
|
39
|
+
const item = {
|
|
40
|
+
kind: Kind.Stack,
|
|
41
|
+
id: this.#getId(),
|
|
42
|
+
childrenIds: items.map(item => item.id)
|
|
43
|
+
};
|
|
44
|
+
this.#mutate(state => {
|
|
45
|
+
state.items.push(item, ...items);
|
|
46
|
+
return state;
|
|
47
|
+
});
|
|
48
|
+
return item;
|
|
30
49
|
};
|
|
31
|
-
sequence = (...items) => new Sequence(this, {
|
|
32
|
-
id: this.#getId(),
|
|
33
|
-
kind: Kind.Sequence,
|
|
34
|
-
childrenIds: items.map((item) => this.register(item))
|
|
35
|
-
});
|
|
36
|
-
stack = (...items) => new Stack(this, {
|
|
37
|
-
kind: Kind.Stack,
|
|
38
|
-
id: this.#getId(),
|
|
39
|
-
childrenIds: items.map(item => this.register(item))
|
|
40
|
-
});
|
|
41
50
|
video = (media, options) => {
|
|
42
51
|
if (!media.hasVideo)
|
|
43
52
|
throw new Error(`Video clip error: media "${media.datafile.filename}" has no video track.`);
|
|
@@ -48,7 +57,7 @@ export class O {
|
|
|
48
57
|
start: options?.start ?? 0,
|
|
49
58
|
duration: options?.duration ?? media.duration
|
|
50
59
|
};
|
|
51
|
-
return
|
|
60
|
+
return item;
|
|
52
61
|
};
|
|
53
62
|
audio = (media, options) => {
|
|
54
63
|
if (!media.hasAudio)
|
|
@@ -60,21 +69,21 @@ export class O {
|
|
|
60
69
|
start: options?.start ?? 0,
|
|
61
70
|
duration: options?.duration ?? media.duration
|
|
62
71
|
};
|
|
63
|
-
return
|
|
72
|
+
return item;
|
|
64
73
|
};
|
|
65
|
-
text = (content) =>
|
|
74
|
+
text = (content) => ({
|
|
66
75
|
id: this.#getId(),
|
|
67
76
|
content,
|
|
68
77
|
kind: Kind.Text,
|
|
69
78
|
color: "#FFFFF"
|
|
70
79
|
});
|
|
71
|
-
gap = (duration) =>
|
|
80
|
+
gap = (duration) => ({
|
|
72
81
|
id: this.#getId(),
|
|
73
82
|
kind: Kind.Gap,
|
|
74
83
|
duration
|
|
75
84
|
});
|
|
76
85
|
transition = {
|
|
77
|
-
crossfade: (duration) =>
|
|
86
|
+
crossfade: (duration) => ({
|
|
78
87
|
id: this.#getId(),
|
|
79
88
|
kind: Kind.Transition,
|
|
80
89
|
effect: Effect.Crossfade,
|
|
@@ -93,5 +102,13 @@ export class O {
|
|
|
93
102
|
const rotation = options?.rotation ?? 0;
|
|
94
103
|
return [position, scale, rotation];
|
|
95
104
|
};
|
|
105
|
+
addChildren(parent, ...items) {
|
|
106
|
+
this.#mutate(state => {
|
|
107
|
+
const parentItem = state.items.find(({ id }) => id === parent.id);
|
|
108
|
+
parentItem.childrenIds.push(...items.map(item => item.id));
|
|
109
|
+
state.items.push(...items);
|
|
110
|
+
return state;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
96
113
|
}
|
|
97
114
|
//# sourceMappingURL=o.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o.js","sourceRoot":"","sources":["../../../s/timeline/sugar/o.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"o.js","sourceRoot":"","sources":["../../../s/timeline/sugar/o.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { O } from "./o.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Item } from "../parts/item.js";
|
|
3
3
|
import { Media } from "../parts/media.js";
|
|
4
|
-
import { TimelineItem } from "./builders.js";
|
|
5
4
|
import { Datafile } from "../utils/datafile.js";
|
|
6
5
|
import { TimelineFile } from "../parts/basics.js";
|
|
7
6
|
import { ResourcePool } from "../parts/resource-pool.js";
|
|
@@ -10,6 +9,6 @@ export declare class Omni {
|
|
|
10
9
|
#private;
|
|
11
10
|
resources: ResourcePool;
|
|
12
11
|
load: <S extends Record<string, Promise<Datafile>>>(spec: S) => Promise<{ [K in keyof S]: Media; }>;
|
|
13
|
-
timeline: (fn: (o: O) =>
|
|
12
|
+
timeline: (fn: (o: O) => Item.Any) => TimelineFile;
|
|
14
13
|
render: (timeline: TimelineFile, config: RenderConfig) => Promise<void>;
|
|
15
14
|
}
|
package/x/timeline/sugar/omni.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { O } from "./o.js";
|
|
2
|
-
import { Timeline } from "../timeline.js";
|
|
3
2
|
import { Export } from "../parts/compositor/export.js";
|
|
4
3
|
import { ResourcePool } from "../parts/resource-pool.js";
|
|
5
4
|
export class Omni {
|
|
@@ -9,10 +8,18 @@ export class Omni {
|
|
|
9
8
|
return Object.fromEntries(await Promise.all(Object.entries(spec).map(async ([key, value]) => [key, await this.resources.store(await value)])));
|
|
10
9
|
};
|
|
11
10
|
timeline = (fn) => {
|
|
12
|
-
const o = new O(
|
|
11
|
+
const o = new O({
|
|
12
|
+
project: {
|
|
13
|
+
format: "timeline",
|
|
14
|
+
info: "https://omniclip.app/",
|
|
15
|
+
version: 0,
|
|
16
|
+
items: [],
|
|
17
|
+
rootId: 0
|
|
18
|
+
}
|
|
19
|
+
});
|
|
13
20
|
const root = fn(o);
|
|
14
|
-
o.
|
|
15
|
-
return
|
|
21
|
+
o.state.project.rootId = root.id;
|
|
22
|
+
return o.state.project;
|
|
16
23
|
};
|
|
17
24
|
render = async (timeline, config) => {
|
|
18
25
|
await this.#export.render(timeline);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omni.js","sourceRoot":"","sources":["../../../s/timeline/sugar/omni.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"omni.js","sourceRoot":"","sources":["../../../s/timeline/sugar/omni.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,QAAQ,CAAA;AAKxB,OAAO,EAAC,MAAM,EAAC,MAAM,+BAA+B,CAAA;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AAGtD,MAAM,OAAO,IAAI;IAChB,SAAS,GAAG,IAAI,YAAY,EAAE,CAAA;IAC9B,OAAO,GAAG,IAAI,MAAM,EAAE,CAAA;IAEtB,IAAI,GAAG,KAAK,EAA8C,IAAO,EAAE,EAAE;QACpE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CACnE,KAAK,EAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CACrE,CAAC,CAA4B,CAAA;IAC/B,CAAC,CAAA;IAED,QAAQ,GAAG,CAAC,EAAsB,EAAgB,EAAE;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACf,OAAO,EAAE;gBACR,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,CAAC;aACT;SACD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;QAChC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;IACvB,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,EAAE,QAAsB,EAAE,MAAoB,EAAE,EAAE;QAC/D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC,CAAA;CACD"}
|
package/s/timeline/timeline.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {TimelineItem} from "./sugar/builders.js"
|
|
2
|
-
import {Id, TimelineFile} from "./parts/basics.js"
|
|
3
|
-
|
|
4
|
-
export class Timeline {
|
|
5
|
-
constructor(public root: TimelineItem, private items: Map<Id, TimelineItem>) {}
|
|
6
|
-
|
|
7
|
-
require<T extends TimelineItem>(id: Id): T {
|
|
8
|
-
const item = this.items.get(id)
|
|
9
|
-
return item as T
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
toJSON(): TimelineFile {
|
|
13
|
-
return {
|
|
14
|
-
format: "timeline",
|
|
15
|
-
info: "https://omniclip.app/",
|
|
16
|
-
version: 0,
|
|
17
|
-
rootId: this.root.item.id,
|
|
18
|
-
items: Array.from(this.items.values()).map(item => item.toJSON())
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
package/x/timeline/timeline.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { TimelineItem } from "./sugar/builders.js";
|
|
2
|
-
import { Id, TimelineFile } from "./parts/basics.js";
|
|
3
|
-
export declare class Timeline {
|
|
4
|
-
root: TimelineItem;
|
|
5
|
-
private items;
|
|
6
|
-
constructor(root: TimelineItem, items: Map<Id, TimelineItem>);
|
|
7
|
-
require<T extends TimelineItem>(id: Id): T;
|
|
8
|
-
toJSON(): TimelineFile;
|
|
9
|
-
}
|
package/x/timeline/timeline.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export class Timeline {
|
|
2
|
-
root;
|
|
3
|
-
items;
|
|
4
|
-
constructor(root, items) {
|
|
5
|
-
this.root = root;
|
|
6
|
-
this.items = items;
|
|
7
|
-
}
|
|
8
|
-
require(id) {
|
|
9
|
-
const item = this.items.get(id);
|
|
10
|
-
return item;
|
|
11
|
-
}
|
|
12
|
-
toJSON() {
|
|
13
|
-
return {
|
|
14
|
-
format: "timeline",
|
|
15
|
-
info: "https://omniclip.app/",
|
|
16
|
-
version: 0,
|
|
17
|
-
rootId: this.root.item.id,
|
|
18
|
-
items: Array.from(this.items.values()).map(item => item.toJSON())
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=timeline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../s/timeline/timeline.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,QAAQ;IACA;IAA4B;IAA/C,YAAmB,IAAkB,EAAU,KAA4B;QAAxD,SAAI,GAAJ,IAAI,CAAc;QAAU,UAAK,GAAL,KAAK,CAAuB;IAAG,CAAC;IAE/E,OAAO,CAAyB,EAAM;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,OAAO,IAAS,CAAA;IAClB,CAAC;IAED,MAAM;QACJ,OAAO;YACR,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SAC/D,CAAA;IACH,CAAC;CACF"}
|