@omnimedia/omnitool 1.1.0-84 → 1.1.0-86
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/README.md +26 -26
- package/package.json +1 -1
- package/s/demo/routines/timeline-setup.ts +4 -5
- package/s/timeline/parts/animations/properties.ts +1 -5
- package/s/timeline/parts/animations/types.ts +14 -3
- package/s/timeline/parts/item.ts +3 -14
- package/s/timeline/renderers/parts/handy.ts +52 -11
- package/s/timeline/renderers/parts/samplers/visual/parts/sample.ts +2 -2
- package/s/timeline/sugar/helpers.ts +59 -48
- package/s/timeline/sugar/o.ts +79 -48
- package/s/timeline/types.ts +11 -3
- package/s/timeline/utils/anim.ts +0 -9
- package/x/demo/demo.bundle.min.js +100 -100
- package/x/demo/demo.bundle.min.js.map +3 -3
- package/x/demo/routines/timeline-setup.js +4 -3
- package/x/demo/routines/timeline-setup.js.map +1 -1
- package/x/index.html +2 -2
- package/x/tests.bundle.min.js +58 -58
- package/x/tests.bundle.min.js.map +4 -4
- package/x/tests.html +1 -1
- package/x/timeline/parts/animations/properties.d.ts +11 -13
- package/x/timeline/parts/animations/properties.js +1 -4
- package/x/timeline/parts/animations/properties.js.map +1 -1
- package/x/timeline/parts/animations/registry.d.ts +10 -10
- package/x/timeline/parts/animations/types.d.ts +12 -3
- package/x/timeline/parts/item.d.ts +8 -17
- package/x/timeline/parts/item.js +4 -5
- package/x/timeline/parts/item.js.map +1 -1
- package/x/timeline/renderers/parts/handy.js +42 -9
- package/x/timeline/renderers/parts/handy.js.map +1 -1
- package/x/timeline/renderers/parts/samplers/visual/parts/sample.js.map +1 -1
- package/x/timeline/sugar/helpers.d.ts +16 -9
- package/x/timeline/sugar/helpers.js +30 -27
- package/x/timeline/sugar/helpers.js.map +1 -1
- package/x/timeline/sugar/o.d.ts +7 -8
- package/x/timeline/sugar/o.js +52 -35
- package/x/timeline/sugar/o.js.map +1 -1
- package/x/timeline/types.d.ts +6 -3
- package/x/timeline/utils/anim.d.ts +0 -2
- package/x/timeline/utils/anim.js +0 -4
- package/x/timeline/utils/anim.js.map +1 -1
package/s/timeline/sugar/o.ts
CHANGED
|
@@ -5,12 +5,13 @@ import {Media} from "../parts/media.js"
|
|
|
5
5
|
import {Id, TimelineFile} from "../parts/basics.js"
|
|
6
6
|
import {FilterAction, FilterActions} from "../parts/filters.js"
|
|
7
7
|
import {filters, FilterParams, FilterType} from "../parts/filters.js"
|
|
8
|
-
import {makeAnimationPresets, visualAnimations} from "../parts/animations/registry.js"
|
|
9
8
|
import {Crop, Effect, FilterableItem, Item, Kind, VisualAnimatableItem} from "../parts/item.js"
|
|
10
|
-
import {
|
|
9
|
+
import {animationPresets, makeAnimationPresets, visualAnimations} from "../parts/animations/registry.js"
|
|
10
|
+
import {AnimationPreset, PresetAnimateAction, PresetAnimateActions, PresetAnimation, PresetOptions} from "../parts/animations/types.js"
|
|
11
|
+
import {Anim, AnimateAction, Interpolation, Keyframes, ScalarAnimation, TrackTransform, Transform, TransformAnimation, TransformOptions, Vec2, VisualAnimationInput, VisualAnimationValue, VisualAnimations} from "../types.js"
|
|
11
12
|
|
|
12
13
|
type VisualAnimateActions = {
|
|
13
|
-
[TKey in keyof VisualAnimations]-?: AnimateAction
|
|
14
|
+
[TKey in keyof VisualAnimations]-?: AnimateAction<TKey>
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export class O {
|
|
@@ -64,18 +65,6 @@ export class O {
|
|
|
64
65
|
return item
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
animatedSpatial = (anim: Anim<TrackTransform>, crop?: Crop): Item.AnimatedSpatial => {
|
|
68
|
-
const item: Item.AnimatedSpatial = {
|
|
69
|
-
id: this.getId(),
|
|
70
|
-
kind: Kind.AnimatedSpatial,
|
|
71
|
-
anim,
|
|
72
|
-
crop,
|
|
73
|
-
enabled: true
|
|
74
|
-
}
|
|
75
|
-
this.register(item)
|
|
76
|
-
return item
|
|
77
|
-
}
|
|
78
|
-
|
|
79
68
|
#registerAnimation = (anims: VisualAnimations): Item.Animation => {
|
|
80
69
|
const item: Item.Animation = {
|
|
81
70
|
id: this.getId(),
|
|
@@ -87,22 +76,13 @@ export class O {
|
|
|
87
76
|
return item
|
|
88
77
|
}
|
|
89
78
|
|
|
90
|
-
#
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
rotation: [],
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
for (const [time, [position, scale, rotation]] of source) {
|
|
98
|
-
track.position.x.push([time, position[0]])
|
|
99
|
-
track.position.y.push([time, position[1]])
|
|
100
|
-
track.scale.x.push([time, scale[0]])
|
|
101
|
-
track.scale.y.push([time, scale[1]])
|
|
102
|
-
track.rotation.push([time, rotation])
|
|
79
|
+
#attachAnimation = <T extends VisualAnimatableItem>(item: T, animation: Item.Animation): T => {
|
|
80
|
+
const next = {
|
|
81
|
+
...item,
|
|
82
|
+
animationIds: [...(item.animationIds ?? []), animation.id]
|
|
103
83
|
}
|
|
104
|
-
|
|
105
|
-
return
|
|
84
|
+
this.set<T>(item.id, next as Partial<T>)
|
|
85
|
+
return next
|
|
106
86
|
}
|
|
107
87
|
|
|
108
88
|
anim = {
|
|
@@ -119,15 +99,31 @@ export class O {
|
|
|
119
99
|
return {terp, track}
|
|
120
100
|
},
|
|
121
101
|
|
|
122
|
-
transform:
|
|
102
|
+
transform: (terp: Interpolation, source: Keyframes<Transform>): Anim<TrackTransform> => {
|
|
103
|
+
const track: TrackTransform = {
|
|
104
|
+
position: {x: [], y: []},
|
|
105
|
+
scale: {x: [], y: []},
|
|
106
|
+
rotation: [],
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
for (const [time, [position, scale, rotation]] of source) {
|
|
110
|
+
track.position.x.push([time, position[0]])
|
|
111
|
+
track.position.y.push([time, position[1]])
|
|
112
|
+
track.scale.x.push([time, scale[0]])
|
|
113
|
+
track.scale.y.push([time, scale[1]])
|
|
114
|
+
track.rotation.push([time, rotation])
|
|
115
|
+
}
|
|
123
116
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
this.#transformAnimation,
|
|
127
|
-
options => this.transform(options),
|
|
128
|
-
),
|
|
117
|
+
return {terp, track}
|
|
118
|
+
},
|
|
129
119
|
}
|
|
130
120
|
|
|
121
|
+
#animationPresets = makeAnimationPresets(
|
|
122
|
+
(terp, track) => ({terp, track}),
|
|
123
|
+
(terp, source) => this.anim.transform(terp, source),
|
|
124
|
+
options => this.transform(options),
|
|
125
|
+
)
|
|
126
|
+
|
|
131
127
|
#makeFilter = <TFilter extends FilterType>(type: TFilter) => {
|
|
132
128
|
const make = (params?: FilterParams<TFilter>) => {
|
|
133
129
|
const item: Item.Filter<TFilter> = {
|
|
@@ -163,25 +159,51 @@ export class O {
|
|
|
163
159
|
|
|
164
160
|
filter = this.#makeFilters()
|
|
165
161
|
|
|
166
|
-
#
|
|
167
|
-
|
|
162
|
+
#makeAnimationValue = <TKey extends keyof VisualAnimations>(
|
|
163
|
+
key: TKey,
|
|
164
|
+
terp: Interpolation,
|
|
165
|
+
track: VisualAnimationInput<TKey>
|
|
166
|
+
): VisualAnimationValue<TKey> =>
|
|
167
|
+
(
|
|
168
|
+
key === "transform"
|
|
169
|
+
? this.anim.transform(terp, track as Keyframes<Transform>)
|
|
170
|
+
: this.anim.scalar(terp, track as Keyframes)
|
|
171
|
+
) as VisualAnimationValue<TKey>
|
|
172
|
+
|
|
173
|
+
#makeAnimate = <TKey extends keyof VisualAnimations>(key: TKey): AnimateAction<TKey> => {
|
|
174
|
+
const make = (terp: Interpolation, track: VisualAnimationInput<TKey>) =>
|
|
168
175
|
this.#registerAnimation({
|
|
169
|
-
[key]: this
|
|
176
|
+
[key]: this.#makeAnimationValue(key, terp, track)
|
|
170
177
|
} as Pick<VisualAnimations, TKey>)
|
|
171
178
|
|
|
172
179
|
const action = (<T extends VisualAnimatableItem>(
|
|
173
180
|
item: T,
|
|
174
181
|
terp: Interpolation,
|
|
175
|
-
track:
|
|
182
|
+
track: VisualAnimationInput<TKey>
|
|
176
183
|
): T => {
|
|
177
184
|
const animation = make(terp, track)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
+
return this.#attachAnimation(item, animation)
|
|
186
|
+
}) as AnimateAction<TKey>
|
|
187
|
+
|
|
188
|
+
action.make = make
|
|
189
|
+
return action
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
#makePresetAnimate = <TKey extends AnimationPreset>(key: TKey): PresetAnimateAction => {
|
|
193
|
+
const make = (options?: PresetOptions) => {
|
|
194
|
+
const preset = animationPresets[key]
|
|
195
|
+
const anim = this.#animationPresets[key](options as never) as PresetAnimation
|
|
196
|
+
return this.#registerAnimation(
|
|
197
|
+
preset.type === "motion"
|
|
198
|
+
? {transform: anim as TransformAnimation}
|
|
199
|
+
: {opacity: anim as ScalarAnimation}
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const action = (<T extends VisualAnimatableItem>(item: T, options?: PresetOptions): T => {
|
|
204
|
+
const animation = make(options)
|
|
205
|
+
return this.#attachAnimation(item, animation)
|
|
206
|
+
}) as PresetAnimateAction
|
|
185
207
|
|
|
186
208
|
action.make = make
|
|
187
209
|
return action
|
|
@@ -193,7 +215,16 @@ export class O {
|
|
|
193
215
|
return Object.fromEntries(entries) as VisualAnimateActions
|
|
194
216
|
}
|
|
195
217
|
|
|
196
|
-
|
|
218
|
+
#makePresetAnimateActions = (): PresetAnimateActions => {
|
|
219
|
+
const entries = Object.keys(animationPresets)
|
|
220
|
+
.map(key => [key, this.#makePresetAnimate(key as AnimationPreset)])
|
|
221
|
+
return Object.fromEntries(entries) as PresetAnimateActions
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
animate = {
|
|
225
|
+
...this.#makeAnimateActions(),
|
|
226
|
+
presets: this.#makePresetAnimateActions(),
|
|
227
|
+
}
|
|
197
228
|
|
|
198
229
|
sequence = (...items: Item.Any[]): Item.Sequence => {
|
|
199
230
|
const item = {
|
package/s/timeline/types.ts
CHANGED
|
@@ -34,14 +34,22 @@ export type Vec2Animation = Anim<TrackVec2>
|
|
|
34
34
|
export type TransformAnimation = Anim<TrackTransform>
|
|
35
35
|
export type VisualAnimations = {
|
|
36
36
|
opacity?: ScalarAnimation
|
|
37
|
+
transform?: TransformAnimation
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
+
|
|
40
|
+
export type VisualAnimationInput<TKey extends keyof VisualAnimations> =
|
|
41
|
+
TKey extends "transform" ? Keyframes<Transform> : Keyframes
|
|
42
|
+
|
|
43
|
+
export type VisualAnimationValue<TKey extends keyof VisualAnimations> =
|
|
44
|
+
TKey extends "transform" ? TransformAnimation : ScalarAnimation
|
|
45
|
+
|
|
46
|
+
export interface AnimateAction<TKey extends keyof VisualAnimations = keyof VisualAnimations> {
|
|
39
47
|
<T extends VisualAnimatableItem>(
|
|
40
48
|
item: T,
|
|
41
49
|
terp: Interpolation,
|
|
42
|
-
track:
|
|
50
|
+
track: VisualAnimationInput<TKey>
|
|
43
51
|
): T
|
|
44
|
-
make(terp: Interpolation, track:
|
|
52
|
+
make(terp: Interpolation, track: VisualAnimationInput<TKey>): Item.Animation
|
|
45
53
|
}
|
|
46
54
|
|
|
47
55
|
// export type Animations = Anim<TrackTransform>
|
package/s/timeline/utils/anim.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
|
|
2
2
|
import {resolveTerp} from "./terps.js"
|
|
3
|
-
import {Item, Kind} from "../parts/item.js"
|
|
4
3
|
import {Anim, Keyframes, ScalarAnimation, Transform, TransformAnimation} from "../types.js"
|
|
5
4
|
|
|
6
5
|
const resolveScalar =(
|
|
@@ -62,11 +61,3 @@ export const resolveScalarAnimation =(
|
|
|
62
61
|
anim: ScalarAnimation,
|
|
63
62
|
): number => resolveScalar(time, anim.track, anim.terp)
|
|
64
63
|
|
|
65
|
-
export const resolveTransform =(
|
|
66
|
-
spatial: Item.Spatial | Item.AnimatedSpatial,
|
|
67
|
-
time: number,
|
|
68
|
-
): Transform =>
|
|
69
|
-
spatial.kind === Kind.AnimatedSpatial
|
|
70
|
-
? resolveTransformAnimation(time, spatial.anim)
|
|
71
|
-
: spatial.transform
|
|
72
|
-
|