Skip to main content

Class: Track

Track class represents a timeline track that contains multiple elements. A track is a container for timeline elements (video, audio, text, etc.) that can be arranged sequentially or in parallel. Tracks provide validation, serialization, and element management capabilities.

Example

import { Track, VideoElement, TextElement } from '@twick/timeline';

// Create a new track
const videoTrack = new Track("Video Track");

// Add elements to the track
const videoElement = new VideoElement({
src: "video.mp4",
start: 0,
end: 10
});

videoTrack.createFriend().addElement(videoElement);

// Serialize the track
const trackData = videoTrack.serialize();

Table of contents

Constructors

Methods

Constructors

constructor

new Track(name, type?, id?): Track

Creates a new Track instance.

Parameters

NameTypeDefault valueDescription
namestringundefinedThe display name for the track
typestringTRACK_TYPES.ELEMENTThe type of the track
id?stringundefinedOptional unique identifier (auto-generated if not provided)

Returns

Track

Example

const track = new Track("My Video Track");
const trackWithId = new Track("Audio Track", "element", "video-track-1");

Defined in

core/track/track.ts:61

Methods

createFriend

createFriend(): TrackFriend

Creates a friend instance for explicit access to protected methods. This implements the Friend Class Pattern to allow controlled access to protected methods while maintaining encapsulation.

Returns

TrackFriend

TrackFriend instance that can access protected methods

Example

const track = new Track("My Track");
const friend = track.createFriend();

// Use friend to add elements
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });
friend.addElement(element);

Defined in

core/track/track.ts:87


addElementViaFriend

addElementViaFriend(element, skipValidation?): boolean

Friend method to add element (called by TrackFriend). Provides controlled access to the protected addElement method.

Parameters

NameTypeDefault valueDescription
elementTrackElementundefinedThe element to add to the track
skipValidationbooleanfalseIf true, skips validation (use with caution)

Returns

boolean

true if element was added successfully

Example

const track = new Track("My Track");
const friend = track.createFriend();
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });

const success = track.addElementViaFriend(element);
// success = true if element was added successfully

Defined in

core/track/track.ts:109


removeElementViaFriend

removeElementViaFriend(element): void

Friend method to remove element (called by TrackFriend). Provides controlled access to the protected removeElement method.

Parameters

NameTypeDescription
elementTrackElementThe element to remove from the track

Returns

void

Example

const track = new Track("My Track");
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });

track.removeElementViaFriend(element);
// Element is removed from the track

Defined in

core/track/track.ts:131


updateElementViaFriend

updateElementViaFriend(element): boolean

Friend method to update element (called by TrackFriend). Provides controlled access to the protected updateElement method.

Parameters

NameTypeDescription
elementTrackElementThe updated element to replace the existing one

Returns

boolean

true if element was updated successfully

Example

const track = new Track("My Track");
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });

// Update the element
element.setEnd(15);
const success = track.updateElementViaFriend(element);
// success = true if element was updated successfully

Defined in

core/track/track.ts:153


getId

getId(): string

Gets the unique identifier of the track.

Returns

string

The track's unique ID string

Example

const track = new Track("My Track", "element", "track-123");
const id = track.getId(); // "track-123"

Defined in

core/track/track.ts:168


getName

getName(): string

Gets the display name of the track.

Returns

string

The track's display name

Example

const track = new Track("Video Track");
const name = track.getName(); // "Video Track"

Defined in

core/track/track.ts:183


getType

getType(): string

Gets the type of the track.

Returns

string

The track's type string

Example

const track = new Track("My Track");
const type = track.getType(); // "element"

Defined in

core/track/track.ts:198


getLanguage

getLanguage(): undefined | string

Returns

undefined | string

Defined in

core/track/track.ts:202


setLanguage

setLanguage(language?): Track

Parameters

NameType
language?string

Returns

Track

Defined in

core/track/track.ts:206


getElements

getElements(): readonly TrackElement[]

Gets a read-only array of all elements in the track. Returns a copy of the elements array to prevent external modification.

Returns

readonly TrackElement[]

Read-only array of track elements

Example

const track = new Track("My Track");
const elements = track.getElements();
// elements is a read-only array of TrackElement instances

elements.forEach(element => {
console.log(`Element: ${element.getId()}, Duration: ${element.getEnd() - element.getStart()}`);
});

Defined in

core/track/track.ts:228


getProps

getProps(): Record<string, any>

Returns

Record<string, any>

Defined in

core/track/track.ts:232


setProps

setProps(props): Track

Parameters

NameType
propsRecord<string, any>

Returns

Track

Defined in

core/track/track.ts:236


validateElement

validateElement(element): boolean

Validates a single element using the track's validator. Checks if the element meets all validation requirements.

Parameters

NameTypeDescription
elementTrackElementThe element to validate

Returns

boolean

true if valid, throws ValidationError if invalid

Example

const track = new Track("My Track");
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });

try {
const isValid = track.validateElement(element);
console.log('Element is valid:', isValid);
} catch (error) {
if (error instanceof ValidationError) {
console.log('Validation failed:', error.errors);
}
}

Defined in

core/track/track.ts:263


getTrackDuration

getTrackDuration(): number

Gets the total duration of the track. Calculates the duration based on the end time of the last element.

Returns

number

The total duration of the track in seconds

Example

const track = new Track("My Track");
const duration = track.getTrackDuration(); // 0 if no elements

// After adding elements
const element = new VideoElement({ src: "video.mp4", start: 0, end: 30 });
track.createFriend().addElement(element);
const newDuration = track.getTrackDuration(); // 30

Defined in

core/track/track.ts:284


isElementColliding

isElementColliding(element): boolean

Parameters

NameType
elementTrackElement

Returns

boolean

Defined in

core/track/track.ts:334


getElementById

getElementById(id): undefined | Readonly<TrackElement>

Finds an element in the track by its ID.

Parameters

NameTypeDescription
idstringThe unique identifier of the element to find

Returns

undefined | Readonly<TrackElement>

The found element or undefined if not found

Example

const track = new Track("My Track");
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });
track.createFriend().addElement(element);

const foundElement = track.getElementById(element.getId());
// foundElement is the same element instance

Defined in

core/track/track.ts:417


validateAllElements

validateAllElements(): Object

Validates all elements in the track and returns combined result and per-element status. Provides detailed validation information for each element including errors and warnings.

Returns

Object

Object with overall isValid and array of per-element validation results

NameType
isValidboolean
results{ element: TrackElement ; isValid: boolean ; errors?: string[] ; warnings?: string[] }[]

Example

const track = new Track("My Track");
const element1 = new VideoElement({ src: "video.mp4", start: 0, end: 10 });
const element2 = new TextElement({ text: "Hello", start: 5, end: 15 });

track.createFriend().addElement(element1);
track.createFriend().addElement(element2);

const validation = track.validateAllElements();
console.log('Overall valid:', validation.isValid);

validation.results.forEach(result => {
console.log(`Element ${result.element.getId()}: ${result.isValid ? 'Valid' : 'Invalid'}`);
if (result.errors) {
console.log('Errors:', result.errors);
}
if (result.warnings) {
console.log('Warnings:', result.warnings);
}
});

Defined in

core/track/track.ts:452


serialize

serialize(): TrackJSON

Serializes the track and all its elements to JSON format. Converts the track structure to a format that can be stored or transmitted.

Returns

TrackJSON

TrackJSON object representing the track and its elements

Example

const track = new Track("My Track");
const element = new VideoElement({ src: "video.mp4", start: 0, end: 10 });
track.createFriend().addElement(element);

const trackData = track.serialize();
// trackData = {
// id: "t-abc123",
// name: "My Track",
// type: "element",
// elements: [{ ... }]
// }

// Save to localStorage
localStorage.setItem('track-data', JSON.stringify(trackData));

Defined in

core/track/track.ts:513


fromJSON

fromJSON(json): Track

Creates a Track instance from JSON data. Static factory method for deserializing track data.

Parameters

NameTypeDescription
jsonanyJSON object containing track data

Returns

Track

New Track instance with loaded data

Example

const trackData = {
id: "t-abc123",
name: "My Track",
type: "element",
elements: [
{
id: "e-def456",
type: "video",
src: "video.mp4",
start: 0,
end: 10
}
]
};

const track = Track.fromJSON(trackData);
console.log(track.getName()); // "My Track"
console.log(track.getElements().length); // 1

Defined in

core/track/track.ts:556