@omnimedia/omnitool 1.1.0-85 → 1.1.0-87

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 (45) hide show
  1. package/README.md +26 -26
  2. package/package.json +1 -1
  3. package/s/demo/routines/timeline-setup.ts +4 -5
  4. package/s/timeline/parts/animations/presets.ts +2 -2
  5. package/s/timeline/parts/animations/properties.ts +2 -6
  6. package/s/timeline/parts/animations/types.ts +15 -4
  7. package/s/timeline/parts/item.ts +1 -12
  8. package/s/timeline/renderers/parts/handy.ts +29 -7
  9. package/s/timeline/renderers/parts/samplers/visual/parts/sample.ts +2 -2
  10. package/s/timeline/sugar/helpers.ts +59 -48
  11. package/s/timeline/sugar/o.ts +79 -48
  12. package/s/timeline/types.ts +11 -3
  13. package/s/timeline/utils/anim.ts +0 -9
  14. package/x/demo/demo.bundle.min.js +100 -100
  15. package/x/demo/demo.bundle.min.js.map +3 -3
  16. package/x/demo/routines/timeline-setup.js +4 -3
  17. package/x/demo/routines/timeline-setup.js.map +1 -1
  18. package/x/index.html +2 -2
  19. package/x/tests.bundle.min.js +64 -64
  20. package/x/tests.bundle.min.js.map +4 -4
  21. package/x/tests.html +1 -1
  22. package/x/timeline/parts/animations/presets.d.ts +2 -2
  23. package/x/timeline/parts/animations/presets.js +2 -2
  24. package/x/timeline/parts/animations/presets.js.map +1 -1
  25. package/x/timeline/parts/animations/properties.d.ts +13 -15
  26. package/x/timeline/parts/animations/properties.js +2 -5
  27. package/x/timeline/parts/animations/properties.js.map +1 -1
  28. package/x/timeline/parts/animations/registry.d.ts +13 -13
  29. package/x/timeline/parts/animations/types.d.ts +13 -4
  30. package/x/timeline/parts/item.d.ts +6 -15
  31. package/x/timeline/parts/item.js +4 -5
  32. package/x/timeline/parts/item.js.map +1 -1
  33. package/x/timeline/renderers/parts/handy.js +22 -4
  34. package/x/timeline/renderers/parts/handy.js.map +1 -1
  35. package/x/timeline/renderers/parts/samplers/visual/parts/sample.js.map +1 -1
  36. package/x/timeline/sugar/helpers.d.ts +16 -9
  37. package/x/timeline/sugar/helpers.js +30 -27
  38. package/x/timeline/sugar/helpers.js.map +1 -1
  39. package/x/timeline/sugar/o.d.ts +7 -8
  40. package/x/timeline/sugar/o.js +52 -35
  41. package/x/timeline/sugar/o.js.map +1 -1
  42. package/x/timeline/types.d.ts +6 -3
  43. package/x/timeline/utils/anim.d.ts +0 -2
  44. package/x/timeline/utils/anim.js +0 -4
  45. package/x/timeline/utils/anim.js.map +1 -1
@@ -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 {Anim, AnimateAction, Interpolation, Keyframes, TrackTransform, Transform, TransformOptions, Vec2, VisualAnimations} from "../types.js"
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
- #transformAnimation = (terp: Interpolation, source: Keyframes<Transform>): Anim<TrackTransform> => {
91
- const track: TrackTransform = {
92
- position: {x: [], y: []},
93
- scale: {x: [], y: []},
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 {terp, track}
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: this.#transformAnimation,
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
- presets: makeAnimationPresets(
125
- (terp, track) => ({terp, track}),
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
- #makeAnimate = <TKey extends keyof VisualAnimations>(key: TKey): AnimateAction => {
167
- const make = (terp: Interpolation, track: Keyframes) =>
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.anim.scalar(terp, track)
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: Keyframes
182
+ track: VisualAnimationInput<TKey>
176
183
  ): T => {
177
184
  const animation = make(terp, track)
178
- const next = {
179
- ...item,
180
- animationIds: [...(item.animationIds ?? []), animation.id]
181
- }
182
- this.set<T>(item.id, next as Partial<T>)
183
- return next
184
- }) as AnimateAction
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
- animate = this.#makeAnimateActions()
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 = {
@@ -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
- export interface AnimateAction {
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: Keyframes
50
+ track: VisualAnimationInput<TKey>
43
51
  ): T
44
- make(terp: Interpolation, track: Keyframes): Item.Animation
52
+ make(terp: Interpolation, track: VisualAnimationInput<TKey>): Item.Animation
45
53
  }
46
54
 
47
55
  // export type Animations = Anim<TrackTransform>
@@ -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
-