36 lines
761 B
TypeScript
36 lines
761 B
TypeScript
import type { EditorCore } from "@/core";
|
|
|
|
type ElementRef = { trackId: string; elementId: string };
|
|
|
|
export class SelectionManager {
|
|
private selectedElements: ElementRef[] = [];
|
|
private listeners = new Set<() => void>();
|
|
|
|
constructor(editor: EditorCore) {
|
|
void editor;
|
|
}
|
|
|
|
getSelectedElements(): ElementRef[] {
|
|
return this.selectedElements;
|
|
}
|
|
|
|
setSelectedElements({ elements }: { elements: ElementRef[] }): void {
|
|
this.selectedElements = elements;
|
|
this.notify();
|
|
}
|
|
|
|
clearSelection(): void {
|
|
this.selectedElements = [];
|
|
this.notify();
|
|
}
|
|
|
|
subscribe(listener: () => void): () => void {
|
|
this.listeners.add(listener);
|
|
return () => this.listeners.delete(listener);
|
|
}
|
|
|
|
private notify(): void {
|
|
this.listeners.forEach((fn) => fn());
|
|
}
|
|
}
|