@designcombo/video 0.1.16 → 0.1.18

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.
@@ -62,20 +62,30 @@ export interface ImageJSON extends BaseClipJSON {
62
62
  export interface TextStyleJSON {
63
63
  fontSize?: number;
64
64
  fontFamily?: string;
65
- fontWeight?: number;
65
+ fontWeight?: string | number;
66
66
  fontStyle?: string;
67
- color?: string;
67
+ color?: string | number | {
68
+ type: 'gradient';
69
+ x0: number;
70
+ y0: number;
71
+ x1: number;
72
+ y1: number;
73
+ colors: Array<{
74
+ ratio: number;
75
+ color: string | number;
76
+ }>;
77
+ };
68
78
  align?: 'left' | 'center' | 'right';
69
79
  fontUrl?: string;
70
80
  stroke?: {
71
- color: string;
81
+ color: string | number;
72
82
  width: number;
73
83
  join?: 'miter' | 'round' | 'bevel';
74
84
  cap?: 'butt' | 'round' | 'square';
75
85
  miterLimit?: number;
76
86
  };
77
87
  shadow?: {
78
- color: string;
88
+ color: string | number;
79
89
  alpha: number;
80
90
  blur: number;
81
91
  distance: number;
@@ -86,6 +96,8 @@ export interface TextStyleJSON {
86
96
  lineHeight?: number;
87
97
  letterSpacing?: number;
88
98
  textCase?: 'none' | 'uppercase' | 'lowercase' | 'title';
99
+ verticalAlign?: 'top' | 'center' | 'bottom';
100
+ wordsPerLine?: 'single' | 'multiple';
89
101
  }
90
102
  export interface TextJSON extends BaseClipJSON {
91
103
  type: 'Text';
@@ -139,6 +151,7 @@ export interface CaptionJSON extends BaseClipJSON {
139
151
  videoHeight?: number;
140
152
  fontUrl?: string;
141
153
  mediaId?: string;
154
+ wordsPerLine?: 'single' | 'multiple';
142
155
  }
143
156
  export interface EffectJSON extends BaseClipJSON {
144
157
  type: 'Effect';
@@ -29,7 +29,7 @@ export interface BaseSpriteEvents {
29
29
  *
30
30
  * @see {@link OffscreenSprite}
31
31
  */
32
- export declare abstract class BaseSprite extends EventEmitter<BaseSpriteEvents> {
32
+ export declare abstract class BaseSprite<T extends BaseSpriteEvents = BaseSpriteEvents> extends EventEmitter<T> {
33
33
  /**
34
34
  * Unique identifier for the sprite/clip
35
35
  */
@@ -65,25 +65,25 @@ export declare abstract class BaseSprite extends EventEmitter<BaseSpriteEvents>
65
65
  to: number;
66
66
  };
67
67
  constructor();
68
- private _left;
68
+ protected _left: number;
69
69
  /**
70
70
  * Left position (x coordinate)
71
71
  */
72
72
  get left(): number;
73
73
  set left(v: number);
74
- private _top;
74
+ protected _top: number;
75
75
  /**
76
76
  * Top position (y coordinate)
77
77
  */
78
78
  get top(): number;
79
79
  set top(v: number);
80
- private _width;
80
+ protected _width: number;
81
81
  /**
82
82
  * Width
83
83
  */
84
84
  get width(): number;
85
85
  set width(v: number);
86
- private _height;
86
+ protected _height: number;
87
87
  /**
88
88
  * Height
89
89
  */
@@ -17,11 +17,19 @@ export declare class TimelineModel {
17
17
  name: string;
18
18
  type: string;
19
19
  id?: string;
20
- }): StudioTrack;
20
+ }, index?: number): StudioTrack;
21
21
  /**
22
22
  * Remove a track and all its clips
23
23
  */
24
24
  removeTrack(trackId: string): Promise<void>;
25
+ /**
26
+ * Move a track to a new index
27
+ */
28
+ moveTrack(trackId: string, newIndex: number): Promise<void>;
29
+ /**
30
+ * Set the order of tracks by ID
31
+ */
32
+ setTrackOrder(trackIds: string[]): Promise<void>;
25
33
  /**
26
34
  * Add a Transition clip at the join where the selected clip starts.
27
35
  */
@@ -12,7 +12,7 @@ export declare class Transport {
12
12
  private playStartTime;
13
13
  private playStartTimestamp;
14
14
  private rafId;
15
- playbackElements: Map<IClip, PlaybackElementInfo>;
15
+ playbackElements: Map<IClip<import('../sprite/base-sprite').BaseSpriteEvents>, PlaybackElementInfo>;
16
16
  constructor(studio: Studio);
17
17
  setMaxDuration(duration: number): void;
18
18
  /**
package/dist/studio.d.ts CHANGED
@@ -43,6 +43,10 @@ export interface StudioEvents {
43
43
  };
44
44
  'track:added': {
45
45
  track: StudioTrack;
46
+ index?: number;
47
+ };
48
+ 'track:order-changed': {
49
+ tracks: StudioTrack[];
46
50
  };
47
51
  'track:removed': {
48
52
  trackId: string;
@@ -100,8 +104,8 @@ export declare class Studio extends EventEmitter<StudioEvents> {
100
104
  history: HistoryManager;
101
105
  pixiApp: Application | null;
102
106
  get tracks(): StudioTrack[];
103
- get clips(): IClip[];
104
- spriteRenderers: Map<IClip, PixiSpriteRenderer>;
107
+ get clips(): IClip<import('./sprite/base-sprite').BaseSpriteEvents>[];
108
+ spriteRenderers: Map<IClip<import('./sprite/base-sprite').BaseSpriteEvents>, PixiSpriteRenderer>;
105
109
  artboard: Container | null;
106
110
  clipContainer: Container | null;
107
111
  artboardMask: Graphics | null;
@@ -112,9 +116,9 @@ export declare class Studio extends EventEmitter<StudioEvents> {
112
116
  set selectedClips(val: Set<IClip>);
113
117
  get interactiveClips(): Set<IClip>;
114
118
  set interactiveClips(val: Set<IClip>);
115
- get playbackElements(): Map<IClip, import('./studio/transport').PlaybackElementInfo>;
116
- videoSprites: Map<IClip, Sprite>;
117
- clipListeners: Map<IClip, () => void>;
119
+ get playbackElements(): Map<IClip<import('./sprite/base-sprite').BaseSpriteEvents>, import('./studio/transport').PlaybackElementInfo>;
120
+ videoSprites: Map<IClip<import('./sprite/base-sprite').BaseSpriteEvents>, Sprite>;
121
+ clipListeners: Map<IClip<import('./sprite/base-sprite').BaseSpriteEvents>, () => void>;
118
122
  get isPlaying(): boolean;
119
123
  set isPlaying(val: boolean);
120
124
  get currentTime(): number;
@@ -204,8 +208,16 @@ export declare class Studio extends EventEmitter<StudioEvents> {
204
208
  name: string;
205
209
  type: string;
206
210
  id?: string;
207
- }): StudioTrack;
211
+ }, index?: number): StudioTrack;
208
212
  setTracks(tracks: StudioTrack[]): Promise<void>;
213
+ /**
214
+ * Move a track to a new index
215
+ */
216
+ moveTrack(trackId: string, newIndex: number): Promise<void>;
217
+ /**
218
+ * Set the order of tracks by ID
219
+ */
220
+ setTrackOrder(trackIds: string[]): Promise<void>;
209
221
  removeTrack(trackId: string): Promise<void>;
210
222
  /**
211
223
  * Get a clip by its ID
@@ -240,6 +252,7 @@ export declare class Studio extends EventEmitter<StudioEvents> {
240
252
  resumeRendering(): void;
241
253
  getTracks(): StudioTrack[];
242
254
  getClip(id: string): IClip | undefined;
255
+ findClip(id: string): IClip | undefined;
243
256
  /**
244
257
  * Setup sprite interactivity for click selection
245
258
  * Delegated to SelectionManager
@@ -251,7 +264,7 @@ export declare class Studio extends EventEmitter<StudioEvents> {
251
264
  /**
252
265
  * Remove a clip from the studio
253
266
  */
254
- removeClip(clip: IClip): Promise<void>;
267
+ removeClip(clipOrId: IClip | string): Promise<void>;
255
268
  removeClips(clips: IClip[]): Promise<void>;
256
269
  removeClipById(clipId: string): Promise<void>;
257
270
  removeClipsById(clipIds: string[]): Promise<void>;
@@ -0,0 +1,41 @@
1
+ import { Point, Rectangle } from 'pixi.js';
2
+ export interface SnapGuide {
3
+ type: 'vertical' | 'horizontal';
4
+ position: number;
5
+ start: number;
6
+ end: number;
7
+ }
8
+ export interface SnapResult {
9
+ x: number | null;
10
+ y: number | null;
11
+ guides: SnapGuide[];
12
+ }
13
+ export declare class SnappingManager {
14
+ private artboardWidth;
15
+ private artboardHeight;
16
+ private scale;
17
+ static SNAP_THRESHOLD: number;
18
+ constructor(artboardWidth: number, artboardHeight: number, scale?: number);
19
+ updateContext(width: number, height: number, scale: number): void;
20
+ /**
21
+ * Snap a rectangle (bounds of the object) to artboard edges and center.
22
+ * returns delta (adjustment) needed for x and y
23
+ */
24
+ snapMove(current: Rectangle): {
25
+ dx: number;
26
+ dy: number;
27
+ guides: SnapGuide[];
28
+ };
29
+ /**
30
+ * Snap during scaling
31
+ * For now, simplistic implementation: snap the edges being moved.
32
+ */
33
+ snapResize(proposed: Rectangle): {
34
+ corrected: Rectangle;
35
+ guides: SnapGuide[];
36
+ };
37
+ snapPoint(point: Point): {
38
+ p: Point;
39
+ guides: SnapGuide[];
40
+ };
41
+ }
@@ -13,11 +13,15 @@ export declare class Transformer extends Container {
13
13
  group: Container[];
14
14
  centeredScaling?: boolean;
15
15
  clip?: any;
16
+ artboardWidth?: number;
17
+ artboardHeight?: number;
16
18
  };
17
19
  constructor(opts: {
18
20
  group: Container[];
19
21
  centeredScaling?: boolean;
20
22
  clip?: any;
23
+ artboardWidth?: number;
24
+ artboardHeight?: number;
21
25
  });
22
26
  /**
23
27
  * Public method to update transformer bounds without recreating it