web-player: extract menu, paged list and play-all components from pages

This commit is contained in:
2026-09-24 11:51:14 +02:00
parent 8cb9386447
commit 1cad36b929
14 changed files with 306 additions and 297 deletions
+22
View File
@@ -0,0 +1,22 @@
import { contextMenuPosition, type MenuPosition } from '$lib/utils/menuPosition';
export type MenuState<T> = { target: T } & MenuPosition;
export function createMenu<T>() {
let state = $state<MenuState<T> | null>(null);
return {
get state() {
return state;
},
open(event: MouseEvent, target: T) {
event.preventDefault();
state = { target, ...contextMenuPosition(event) };
},
close() {
state = null;
}
};
}
export type Menu<T> = ReturnType<typeof createMenu<T>>;